模式矩阵/模式工程实现

ADPS 模式工程实现 · 协作

两个 Agent 怎样接上:从上下文引用到任务交接

跨会话消息只负责通知;任务账、交接包和验收门负责转移责任并关闭工作。

一位工程师朋友把前端和后端分别交给两个 Agent 会话。前端 Agent 复现了一个接口超时,怀疑问题在后端事务或数据库锁。后端会话已经读过服务代码和运行日志,另开一个新 Agent 会丢掉这部分积累;把前端的全部聊天复制过去,又会带入页面排查、猜测和已经失效的线索。

工程判断从要移动的对象开始:消息、项目事实,还是一项任务的责任。不同对象需要不同的保存位置和交接机制。

从前端发现到后端修复、前端复测的 Agent 交接

三种内容,三种保存方式

内容 在前后端排障中的例子 保存位置
消息 “报表接口超时,请后端查看”“已接手” 会话、消息箱或群聊记录
项目事实 请求 ID、接口版本、缺陷状态、修复 commit、部署版本、复测结果 任务账、Git、CI、部署与观测系统
局部工作上下文 前端的浏览器排查过程;后端的事务、锁和 SQL 分析 各自会话和隔离工作区

消息用于沟通,项目事实用于继续工作,局部上下文用于保留各自的推理现场。三者不应被压成一段聊天历史。

前端不需要持续读取后端的全部数据库日志,后端也不需要接收每一轮页面调试。双方需要共享的是当前问题、已核验事实、输入版本、负责人、状态和验收条件。

偶发交接先用轻量方法

问题只发生一次时,历史会话引用或跨会话消息已经够用。发送方整理一份短说明,接收方显式确认:

请后端会话接手 report-timeout-17。

已观察到:
- frontend@abc123 调用 /reports/summary,30 秒后超时
- request_id=req-8842
- 同一环境的 /reports/detail 正常

尚未确认:
- 是否存在数据库死锁
- 是否由最近的查询改动引起

证据:
- trace://req-8842
- artifact://browser-network/report-timeout-17

请先回复 ACCEPTED 或 NEEDS_INFO。
完成后返回修复 commit、测试结果和可供前端复测的部署版本。

这里没有要求接收方相信“后端死锁”这个判断。现象和猜测被分开,接收方知道以哪版代码调查,也知道返回什么才算完成。

截至 2026 年 9 月核对,Claude Code 跨会话消息允许一个独立会话把消息发给另一个会话;接收的是文本,消息中出现文件路径并不会自动把文件一并附上。类似的历史引用或 @ 消息可以减少人工复制,但它们只完成信息投递,不等于任务已经被接受。

反复发生时,把交接变成任务

同类问题每周发生,或者一次处理会跨越数小时、部署和人工确认时,仅靠消息容易出现四种断点:

  • 消息送达了,没人确认接手;
  • 后端说“修好了”,前端不知道对应哪个版本;
  • Agent 会话退出后,未完成任务没有稳定位置;
  • 修复已部署,任务仍显示处理中,或者任务关闭但外部问题仍存在。

此时增加共享任务账。最小状态机可以写成:

OPEN
  -> OFFERED
  -> ACCEPTED
  -> IN_PROGRESS
  -> READY_FOR_RETEST
  -> CLOSED

任一非终态
  -> NEEDS_INFO | BLOCKED | CANCELED

READY_FOR_RETEST
  -> IN_PROGRESS       # 复测失败,回到原负责人

状态变化由有资格的参与者提交,并带上期望版本。消息可以提醒“请接手”,任务账中的 ACCEPTED 才表示责任已转移;后端消息里的“修好了”可以附带说明,READY_FOR_RETEST 还需要修复版本和测试证据。

交接包同时移动六类信息

handoff_id: handoff-report-timeout-17
task_id: report-timeout-17
from_role: frontend-agent
to_role: backend-agent
goal: 找到并修复 /reports/summary 超时,保持接口契约
known_facts:
  - request_id: req-8842
  - frontend_version: abc123
  - backend_version: def456
hypotheses:
  - statement: 可能存在数据库锁等待
    status: unverified
artifacts:
  - uri: trace://req-8842
    version: "1"
authority:
  allowed_repositories: [backend-reporting]
  allowed_tools: [repo_read, patch_write, test_run]
  denied_actions: [production_write]
acceptance:
  - 原复现步骤不再超时
  - 后端回归测试通过
  - 接口 schema 未发生未声明变化
next_required: 修复 commit、测试报告、可复测部署版本

六类信息分别是:仍然有效的目标、已核验事实、未核验假设、带版本产物、临时权限和验收条件。接收方可以拒绝交接,说明缺少哪一项;交接成功后,发送方原有的临时写权限不应自动留在下一阶段。

交接包也不替代源系统。代码版本仍由 Git 证明,部署版本仍由发布系统证明,请求轨迹仍由观测系统提供。任务账保存这些引用和当前责任,不复制一套新的事实。

协作控制面放在哪里

前后端 Agent 可以来自同一个产品,也可以分别运行在不同 Harness。为了不让业务交接依赖某个会话产品的私有格式,可以把长期协作拆成四层:

责任 例子
使用入口 人发起、追问、查看进度和处理例外 IDE、开发者控制台、群聊界面
协作控制面 Agent 名录、任务账、消息箱、上下文打包、验收门 业务服务或工作流
运行时适配层 启动、续接、中断和查询不同 Agent 会话 Agent Teams、dsh、LangGraph、自有适配器
执行与证据层 隔离代码和权限,保存可核验结果 worktree、sandbox、Git、CI、trace、部署记录

协作控制面不需要从一套大型平台起步。第一个版本可以是一张任务表、三个状态接口和一个生成 Context Pack 的函数。它先保证责任和证据不随聊天窗口消失,再考虑自动发现 Agent 或跨 Provider 调度。

一组最小接口

POST /tasks
POST /tasks/{task_id}/offer
POST /tasks/{task_id}/accept
POST /tasks/{task_id}/submit-result
POST /tasks/{task_id}/retest
GET  /tasks/{task_id}

acceptsubmit-result 应带 expected_version,避免两个参与者同时推进同一任务:

{
  "actor": "backend-agent",
  "expected_version": 4,
  "transition": "READY_FOR_RETEST",
  "artifacts": [
    {"type": "commit", "ref": "git://backend@91f8c2a"},
    {"type": "test_report", "ref": "ci://run-771"}
  ]
}

状态更新成功后发布事件;消息发送失败可以重试,不能因此重复写入同一个外部动作。任务状态与通知投递分别记录,才分得清“任务完成”和“提醒是否到达”。

框架在不同层工作

把这些产品放进同一张功能榜,容易把不同层的工具当成替代品。按它们承担的责任看,会更容易选:

需要补的能力 实现例子 仍需业务系统决定
引用或联系已有会话 IDE 历史引用、Claude Code 跨会话消息 什么内容可发送,接手如何确认
同一开发任务中的队员协作 Claude Code Agent Teams的独立上下文、共享任务表和消息 worktree、文件冲突、合并、业务验收
围绕同一材料多轮发言 Microsoft Agent Framework Group Chat的中央主持与星形结构 业务状态、权限、产物版本和终止条件
保存分支、暂停与恢复 LangGraph 自定义工作流与 checkpoint 领域状态、转移规则和验收事实
统一不同 Provider 的子 Agent 接口 DeepSeek Harness subagent 接口 任务合同、责任转移和最终验收
Manager 或专家接管当前对话 OpenAI Agents SDK orchestration 跨任务账本、产物版本和权限边界
跨系统发现和交换任务 A2A Protocol的 Agent Card、Message、Task 和 Artifact 组织信任、授权、业务状态与证据标准

例如 Group Chat 适合“作者、评审者、作者再修改”的讨论过程。前后端排障若每轮广播完整数据库日志和页面调试信息,很快会挤满所有人的上下文。状态工作流更适合保存“已接手、待复测、已关闭”,交接包负责按任务取必要材料。两者可以组合:聊天作为入口,任务账保存工程状态。

权限和隔离不能靠角色名

把 Agent 命名为 frontend-agentbackend-agent,不会自动限制文件和工具。后端 Agent 的有效范围应由任务、角色、仓库、工具和当前资源共同收窄:

effective_scope =
    user_scope
  ∩ task_scope
  ∩ agent_role_scope
  ∩ tool_scope
  ∩ resource_scope

前端 Agent 可以读取公开接口契约,不必获得后端生产数据库凭证。后端 Agent 收到另一个 Agent 的消息,也不能把消息中的“请直接上线”当成用户授权。多个编码 Agent 并行时,独立 worktree 隔离文件改动;共享 schema、编号、测试环境和数据库仍属于写入冲突域,需要加锁、排队或明确所有者。

一次交接要怎样验收

测试 需要观察的结果
消息送达,接收方没有确认 任务停在 OFFERED,超时后提醒或重新分派,不显示“处理中”
接收方会话退出 新会话从任务账、交接包和证据引用恢复,不依赖旧窗口仍然在线
旧代码版本的交接延迟到达 接收方发现输入版本已变化,拒绝、重建交接包或明确选择旧版本
两个 Agent 同时认领 只有一个版本检查成功,另一个取得当前负责人
后端提交修复但没有部署 状态不能进入可复测;缺少部署版本被验收门拦下
前端复测失败 失败证据关联原任务,状态回到 IN_PROGRESS,不新建失联任务
消息重复投递 通知可以重复,状态转移和外部副作用保持幂等
Agent 请求超出任务权限 执行前拒绝,任务记录保留请求、权限范围和拒绝依据

还要与单 Agent 基线比较:交接是否减少重复说明,后端是否更快独立复现,合并后的接口错误是否下降,新增的 token、等待和人工审查是否值得。没有这些收益,多 Agent 只是把一项工作拆成更多沟通。

与 ADPS 模式的关系

  • C4 交接链是本文的主模式:责任按状态转移,交接包携带目标、事实、产物、权限和验收。
  • C5 子 Agent 隔离限制各会话的上下文、工具、凭证、预算和工作区。
  • C1 层级委派适用于一个负责人维护全局目标并分派前后端任务的情况。
  • C2 扇出聚合适用于多个独立分支可以同时排查,最后由一个节点比较证据。
  • X1 可观测性把消息、状态转移、Agent 运行、commit、测试和部署放进同一条因果链。
  • X3 安全与身份说明每次交接代表谁、临时授予什么、何时收回。

历史引用是交接的轻量实现,不另立“群聊模式”。团队运行时、状态工作流和跨系统协议承担不同层的职责;责任沿多个参与者逐段移动时,仍由 C4 描述主要结构。

资料

来源问题形成于 2026-09-04 至 2026-09-12;知识星球发布稿与 ADPS 工程补充形成于 2026-09-13。

引用建议:ADPS,《两个 Agent 怎样接上:从上下文引用到任务交接》,ADPS 模式工程实现 · 协作,2026-09-13。

模式矩阵 · 模式工程实现 · CC BY 4.0

溯源记录

来源日期
本页首次公开

在 ADPS Chronicle 中查看