《AI Agent 开发入门》13.3 协作模式对照
pipeline、debate、voting 用固定脚本展示信息怎么流动,不比较真实模型质量。LatencyModel 延时也是人工模拟,不能当真实性能测量。AGREEMENT 是人工演示标签,不是计算出的真实一致率;多数票也可能同错。选择拓扑应基于任务、独立质量样本、总调用与真实延时,而不是这组固定结果。
category
pipeline、debate、voting 用固定脚本展示信息怎么流动,不比较真实模型质量。LatencyModel 延时也是人工模拟,不能当真实性能测量。AGREEMENT 是人工演示标签,不是计算出的真实一致率;多数票也可能同错。选择拓扑应基于任务、独立质量样本、总调用与真实延时,而不是这组固定结果。
MessageBus 是进程内顺序 pub/sub,按发布序号记录历史。它不是持久化消息队列,也不提供重试、确认或跨进程投递。同一 handler 失败会中断当前发布链;递归发布循环需调用方自行限制。worker 的同步调用移到线程不等于线程会被取消,同一个 worker 并发使用仍可能共享模型状态。
把单个 Agent 拆成 supervisor 与 worker:Worker 是一个带专用 system 提示与工具子集的 Agent(检索员、计算员),Supervisor 负责把目标拆成子任务、派给合适的 worker 并汇总结果。用假模型脚本化一次路由决策,真跑「拆成子任务、各自执行、汇总」的完整流程并打印派发与回收,给出单 Agent 与 supervisor-worker 的取舍表。
打开本机 claude-agent-sdk 0.2.165 源码读 subagent 与 hook 调度:subagent 是 asdict 后的 AgentDefinition 随 initialize 送到 CLI,hook 注册成 callback_id,由 CLI 反向发 control_request 回调 Python。附 inspect 核对与 TS SDK 对照。
打开本机 pydantic-ai 2.55.0 源码读 run 循环:Agent 不是 while,而是 GraphBuilder 拼出的状态机(UserPromptNode→ModelRequestNode→CallToolsNode)。结构化输出校验失败抛 ModelRetry,_build_retry_node 造一个带 RetryPromptPart 的新请求节点。附真实重试调用链。
打开本机 langgraph 1.2.14 的源码读图执行器:StateGraph.compile 产出 CompiledStateGraph,PregelLoop 的 tick/after_tick 一轮就是一次超步,超步之间只做通道合并;每个超步结束调用 _put_checkpoint,检查点按 thread_id 落进 Checkpointer。
评测跑完只打印一张表,不会拦住任何东西。本节把评测变成质量门:与基线比对,总体指标掉超阈值、或某条样本由 PASS 变 FAIL,就让流水线 exit 1。真跑先验证「与基线持平」退出码 0,再注入「关掉引用产出」的退化使质量门失败退出码 1,打印逐样本差异,最后给出 GitHub Actions 接入形态(注明未在本机执行)。
CI 里调真模型不确定、要钱、要网络、会限流。本节把一次模型交互的请求与响应存成夹具,回放时按请求指纹匹配取响应:本机按 Anthropic Messages API 结构手工构造三条夹具真跑一遍完整 run,连跑两次逐字一致;再改问题制造夹具失配,验证回放器报错而非静默给错响应,最后给出夹具的存放与更新流程。
本节给 ResearchCopilot 建一个可版本化的评测集:JSON 存问题、期望要点与必须引用的来源,配套「加样本写理由、改期望留痕」的维护纪律;实现成功率、引用准确率、成本三个评分器,对 10 条样本真跑并打印逐条得分与汇总,最后给出自动打分与人工评审的分界表。
HumanGraph 用于本节单后继人工流程,与 WaveGraph 分开。暂停发生在敏感节点前;演示只记录模拟邮件参数,不向外部发送消息。状态与 token 只保存在本进程,示例调用方可信。真实审批需要验证身份、绑定不可篡改的操作参数、持久化一次性批准及恢复记录,不能把普通 dict/token 直接暴露到公网。
本节保留单后继 Graph,另写 WaveGraph 表达 fan-out。波内节点顺序执行,因此共享状态更新有顺序,不是线程并行。条件路径必须与 join 的要求一致;某前驱被条件跳过而永不到达时,本例会报缺失前驱。动态分支取消、跨轮关联、部分成功合并需要更完整调度协议。
循环式 Agent 适合开放式任务,但固定流程需要显式结构。本节手写 minagent 的最小图引擎:Node(名字加一个函数)、Edge(源到目标、可带条件)、Graph(add_node/add_edge/set_entry/run),节点间用 dict 状态传递数据。用假模型真跑一条分类→检索→综合的三节点线性链,打印每个节点的进出 state,并给出图编排与循环式 Agent 的取舍表。
用实际 minagent 交付、PydanticAI FunctionModel 与 smolagents CodeAgent 对照同一个离线检索任务,提供完整文件及重复运行断言;调用次数不替代质量、成本或性能实测。
smolagents 的 CodeAgent 让模型直接写 Python 代码来行动,而不是吐结构化工具调用。本节现场核对 1.26.0 的 API,用本地假模型驱动 CodeAgent 离线真跑,并实测 CodeAgent 与 ToolCallingAgent 在工具可见性上的差别。
OpenAI Agents SDK 用三个原语组织 Agent:handoff 委派、guardrails 护栏、tracing 追踪。本节现场核对 0.23.1 的 API 表面,离线跑通护栏函数与 span 捕获,并和卷一 minagent 的 supervisor/worker 模式逐一对照。
记忆是用户数据,写进来容易,管起来难。本节讲三件治理:用 TTL 让该过期的记忆自动清掉,用隐私分级和写入侧拒绝清单把密钥、卡号、证件号、健康信息挡在库外,用按用户级联删除让「删除我的数据」真的删干净并留下审计。真连本机 Postgres 跑一次完整的删除流程。
记忆写进来不等于用得上。本节把长期记忆接进一次 run:检索、排序、按 token 预算截断、再注入,并讲清 system、首条 user、工具返回三种注入位置对模型注意力的影响。最后用一个 10 题的评测小集真跑对照,量化「不注入」与「注入」的得分差。
卷一讲了记忆「怎么读」,本节讲记忆「怎么存」做成一条服务:从对话里抽取候选记忆,用文本归一化和向量相似度两档去重,再用时间戳加保留历史加标记取代来消解冲突。我们真连本机 Postgres 把 5 条候选走完整条流水线,验证同一条对话重放两次不产生重复记忆。
修订计划与原计划共用严格结构校验。允许 max_replans 次修订,预算耗尽后不再额外调用模型。任务 id 是引用坐标,不是业务语义指纹。副作用任务不能仅靠计划复用去重,仍需要业务操作键;模型生成的补救步骤也必须通过权限与工具约束。
每层只执行依赖已完成的任务,失败的下游标记 skipped。PlanExecutor 在启动前拒绝非法 DAG,并限制线程数。线程等待不是取消或安全隔离,外部副作用没有回滚。任务描述或上游语义变化时不能只凭同 id 复用;第 11.3 节按任务与依赖闭包确认可复用范围。