TauriTavern/docs/Agent/SubAgent.md
Darkatse 40879e7894 refactor(agent): share Session history grouping and prompt assembly
Let Rust select and group Session history while PromptManager retains preset layout, depth injection, and attached prompts. Keep full-session macro inputs separate, remove frontend history truncation, and attach the existing assembly bridge to Session runs.

Validation: 3 host Session tests; 2 focused history tests; browser Session and 29 API contract tests; frontend types and guardrails; Rust crate boundaries.
2026-10-21 17:57:37 -04:00

4.8 KiB
Raw Permalink Blame History

多 Agent 协作

多个 Agent 在同一个 Run 中工作。每个 Agent 的一次执行是一个 Invocation,有自己的 Profile、上下文和工具循环;文件保存在共享工作区中。

协作通过任务包传递目标和材料,通过结果包传回结论。它类似管道中的输入与输出,runtime 用任务记录连接两端,文件路径承载较大的材料。

委派与交接

两种协作方式共用 AgentTaskRecord,区别在于任务之后由谁继续:

方式 工具 continuation 后续工作
委派 agent.delegate return_to_parent 子 Agent 返回结果,调用方继续
交接 agent.handoff transfer_control 当前 Agent 退出,下一个 Agent 接手

任务记录保存调用方、接收方、目标 Profile、任务内容和状态。模型只需选择 Agent、描述任务并引用文件;Invocation ID 和任务文件路径由 runtime 管理。

委派一个任务

系统提示词提供可调用 Agent 的 ID、用途和支持操作,按本次工具权限及目标资格筛选。模型从目录选择 ID,再交付任务:

{
  "agentId": "reviewer",
  "task": {
    "objective": "检查人物动机是否前后一致,并将修改建议写入 summaries/review.md。",
    "draft": "output/main.md"
  }
}

task.objective 必填,title 可选,其他字段可以携带这项工作需要的材料。agent.delegate 返回任务 ID 后,调用方可以继续做其他事。需要结果时调用 agent.await;它支持等待一个完成、等待全部完成或只读状态。

子 Agent 使用 task.return 结束:

{
  "summary": "发现两处动机衔接问题,修改建议已写入 summaries/review.md。",
  "artifacts": [{ "path": "summaries/review.md", "kind": "markdown", "role": "review" }]
}

runtime 保存结构化结果,并生成 summaries/<workspace-key>-result.md 供其他 Agent 读取。调用方收到摘要、文件引用及结果中的其他字段,随后决定如何使用。已完成结果也会在后续轮次送入调用方上下文。

委派任务使用后台执行和 task.return 结束方式,聊天提交由前台 Agent 负责。当前 return-mode 子 Agent 没有委派和交接工具,因此也没有可调用 Agent 目录。

交给下一个 Agent

适合把资料整理、起草、润色等阶段交给不同 Profile:

{
  "agentId": "editor",
  "handoff": {
    "objective": "完成最后一轮润色并提交正文。",
    "contextSummary": "事实核对已完成,保留原有叙述视角。",
    "workspaceRefs": ["output/main.md", "summaries/review.md"]
  }
}

handoff.objective 必填,其余内容按任务需要填写。交接前先收齐当前 Agent 的委派任务。交接成功后,当前 Invocation 标记为 transferred,executor 在同一 Run 中启动接收方;接收方沿用已有文件和提交记录,通过 workspace.commit、workspace.finish 完成工作。

接收方看到什么

runtime 用目标 Profile 准备新的提示词和工具集合。初始聊天材料来自 Run 启动时冻结的输入,预设、模型与上下文范围取自目标 Profile,不继承上一棒,见 Prompt assembly。接收方先按 Profile 生成组装请求,再通过与 Session 共用的宿主组装桥调用 PromptManager。任务包通过 agentTask 进入提示词。调用方应在任务中写明目标、必要背景和文件路径。

双方共享工作文件,各自按 Profile 获得读写范围;skills/ 使用各自的有效绑定。不同任务可约定输出文件,再由调用方汇总;文件与并发语义见 Workspace。

Profile 的 delegation 配置控制是否可被调用、是否可委派或交接、调用来源与并发数量。返回式子任务由 scheduler 运行;Run 收尾或取消时,runtime 结束尚未完成的子任务。

目录随已准备请求保留,调用时仍检查当前目标权限和预算。目标选择错误时,工具返回原因与该操作当前可用的候选。

查看与修改实现

Timeline 使用 Invocation 和 Task 记录展示关系,用日志显示每个 Agent 的过程。readTaskDetail({ runId, taskId, includeResult }) 按 ID 读取任务及按需结果。