HiDeepSeekDev
空闲特惠
Agent 工程DeepSeekAgent工具调用重试幂等

DeepSeek Agent 工具重试与幂等:避免重复写入、发布和发送

从工具调用闭环出发,说明查询与写操作的不同重试策略、业务操作记录、超时后核对及结果回传。示例为应用层设计,不声称 DeepSeek API 提供自动去重或“恰好一次”执行保证。

快速结论

模型生成工具调用,应用负责执行。写操作超时后先查询真实状态;业务操作键与执行记录应由应用管理,不能只靠 tool_call_id 或模型记忆防止重复副作用。

  • DeepSeek 官方文档说明,模型返回工具调用,具体函数由应用执行。
  • 查询重试与有副作用的写操作需要采用不同处理策略。
  • 本文中的 operation_key 是应用层示例字段,不是 DeepSeek API 参数。
  • 教程提供工程方法,没有执行真实发布、转账或消息发送测试。

本次更新:10 月 13 日核验后新增,标明公告日期、适用范围与文档指导性质。

DeepSeek Tool Calls 文档将工具执行交给应用。模型提出调用之后,是否重试、如何确认结果与避免重复写入,也需要由执行层设计。本篇给出方法示例,没有操作真实业务系统。

1. 先区分查询与写操作

读取统计、查看状态和检索资料,通常没有业务写入;创建文章、修改记录或发送消息则可能产生副作用。即使工具都叫“调用”,重试策略也不能统一处理。

有副作用的请求超时,并不证明目标系统没有执行。先用目标对象 ID、业务操作记录或可查询状态确认,再决定是否重试。

2. 应用维护业务操作记录

下面是应用层示例,不是模型 API 的额外字段:

字段 用途
operation_key 标识一次明确授权的业务操作
target_id 查询目标对象或执行结果
state 待执行、执行中、成功或结果未知
result 返回值或核对后的真实状态

操作键应按业务语义生成,区分两次合法操作。对同一操作的并发请求,需要执行层的原子状态处理;仅在提示词里说“不要重复”不足以约束真实系统。

3. 超时后的恢复顺序

先保留原请求、操作键和已知目标 ID;随后查询目标系统。若已成功,回传实际结果;若明确失败,再按业务策略重试;无法判断时保留“结果未知”,等待核对,不把它伪装成成功或立即再次写入。

tool_call_id 用于关联模型对话中的调用与结果,不能直接代替跨重启、跨会话的业务去重记录。即便同一个业务操作被模型再次提出,应用仍需根据已有执行状态处理。

4. 回传错误也要真实

把失败类型、可恢复条件和已发生的动作反馈给模型。设置总轮数和超时边界,避免在反复调用中扩大副作用。服务商错误码可对照官方说明,但模型请求可重试,不代表对应业务写操作也可以盲目重试。

验收时用测试对象检查重复调用、网络中断和进程重启。目标是可核对和可恢复的执行记录;实际保证取决于目标系统与应用实现。

参考资料

本文依据以下资料整理,版本与接口信息请以来源页面的现行说明为准。

  1. 01DeepSeek 官方工具调用:应用执行与消息关联api-docs.deepseek.com
  2. 02DeepSeek 官方 API 错误码说明api-docs.deepseek.com
阅读至此返回学习中心