LAYER 03 · 追踪 Agent 主干
Agent 的创建、所有权与取消
Agent 不是一个 while 循环,而是带身份、Session、Inbox、Context 和停稳协议的活对象
create/resume → setup transaction → publish → dispose谁有权销毁一个 Agent?创建失败一半时又如何回滚?
先建立直觉
AgentHandle 像租赁车辆的钥匙与合同:注册表可以查询车辆,但只有持有合同的所有者能结束租赁并触发完整验收。
MECHANISM
机制拆解
ctx.agents.create/resume 返回 AgentHandle;setup 在 Agent 与 Session 尚未发布时构建 agent.ctx,可返回同步 commit。任何失败都会回滚两个身份。
cancel 只请求当前活动收敛;whenIdle 跟随替代工作直到真正静止;dispose 停止循环、注销、移除内存 Session,再拆除局部 Context。
第 1 步 / 共 5 步
分配共享身份
AgentId 与 SessionId 使用同一品牌身份。
INVARIANTS
无论怎么扩展,都不能破坏
- Agent 与 Session 身份要么同时发布,要么都不发布
- 取消原因 first-wins 且不武装未来工作
- dispose holder 是一种 capability
FAILURE MODES
最容易踩中的坑
- ×拿 ctx.agents.get() 的裸 Agent 假装拥有销毁权
- ×把 whenIdle 当成某条消息的回执
- ×取消后立即删除 provider service
VERIFY IN SOURCE
不要相信结论,去源码里复核
以下链接固定到官方 deepseek-harness@47f9438;查看当前上游时请留意后续 breaking changes。
KNOWLEDGE CHECK
先停十秒,再揭晓答案
Agent.cancel() 与 AgentHandle.dispose() 有什么不同?
为什么下一章紧接在这里
Agent 的耐久身份依赖 Session。下一章把 SessionEvent 日志作为整个系统的事实真源来拆解。