幂等性(Idempotency)
同一个操作执行一次与执行多次,对外部状态产生相同结果的性质。是安全重试的前提。
生产方式:人写签发:晓黎学习复核:2026年9月21日被 2 个词条引用
一句话定义
幂等操作 = 执行一次和执行多次,对系统状态产生相同的结果。
为什么 Agent 系统特别需要它
Agent 的重试比传统系统更频繁,原因有三:
- 工具调用可能超时,但实际已经执行
- 模型可能重复发起同一个调用
- 失败恢复需要重放之前的操作
如果重试一个非幂等操作,就会产生副作用叠加。
// 非幂等:重试会创建两条记录
async function createRecord(data) {
return await db.insert('records', data)
}
// 幂等:重试不会产生重复
async function createRecord(data, idempotencyKey) {
const existing = await db.findByKey('records', idempotencyKey)
if (existing) return existing
return await db.insert('records', { ...data, idempotencyKey })
}
天然幂等 vs 需要设计
| 类型 | 例子 | 说明 |
|---|---|---|
| 天然幂等 | 读文件、查询、HTTP GET | 重复执行无副作用 |
| 需要设计 | 创建记录、发送消息、扣款 | 必须有去重机制 |
| 无法幂等 | 追加日志、累加计数 | 需改用「设置值」而非「增加量」 |
第三类常被忽略:「把计数加 1」不是幂等的,「把计数设为 5」才是。
实现的三层
| 层 | 做法 |
|---|---|
| 接口层 | 接受 idempotency key 参数 |
| 存储层 | 对 key 建唯一索引,重复插入自动失败 |
| 执行层 | 先查后写,或使用原子 upsert |
在 Agent Harness 中的位置
| 关注点 | 归属 |
|---|---|
| 工具是否幂等 | 工具声明(第 06 讲) |
| 能否重试 | 重试策略依据幂等性判断(第 16 讲) |
| 副作用回滚 | 补偿逻辑(第 16 讲) |
DeepSeek Harness 的工具定义中,idempotent 是一个显式属性,重试策略据此决定是否允许重试。
相关
- Fail-closed(失败即拒绝) — 与幂等配合构成安全的重试基础
- 第 16 讲 错误恢复
- 第 6 讲 Tool Calling
互链
链接来自概念卡正文里的双链,编译时能解到本期词条集的才成为站内链接。
反链(2)
出现在哪些课时里(2)
判据与「课时正文里能不能点出来」是同一个:那一节确实提到了它。点课时走当前页跳转, 它是导航,不是词条链接。
- 从 401、404、429 到 5xx 的排错树AI API 与国内接入基础
- Tool:给模型一个有边界的动作Agent 系统:Harness、MCP、Skill 与 Memory
关联图
只画这一条与它直接相连的词条,边与上面两区同源。可拖拽、可缩放,点节点是新标签。
以列表方式看这 3 个节点
出处
路径是本地知识库(Obsidian 库)里的位置,正文与概念卡逐字对应。
- 概念卡原文幂等性(Idempotency)
03_RESOURCES/概念/幂等性.md - 所属知识地图栏目概念页索引 · 可观测性与可靠性
03_RESOURCES/概念/Index.md - 正文引用的知识库笔记第 16 讲 错误恢复
02_AREAS/AI开发/Harness Engineering/Agent Harness 课程/16-错误恢复:失败是常态.md - 正文引用的知识库笔记第 6 讲 Tool Calling
02_AREAS/AI开发/Harness Engineering/Agent Harness 课程/06-Tool Calling:模型如何安全地影响世界.md
编译入库:2026年11月2日。词条由知识库编译而来, 修正要回到概念卡改,再重新编译。