Skip to content

规划、反思与工作流的停止证据 ​

计划是可修改的候选路径,完成是外部条件成立。一个研究 Agent 可以计划“检索→核对→写报告”,但生成了报告并不代表引用能支持结论。反思只有输出可执行修正并由外部证据验证时才有价值;让同一个模型反复赞同自己,会增加成本而不增加可靠性。

有依赖的任务怎样前进 ​

以下完整标准库实验按依赖选择就绪任务。done 是已验收集合,不能在任务刚开始时写入;每次至少新增一项完成事实才算前进。

python
def schedule(deps):
    done, order = set(), []
    while len(done) < len(deps):
        ready = sorted(k for k, parents in deps.items()
                       if k not in done and set(parents) <= done)
        if not ready:
            raise ValueError("cycle or missing dependency")
        for task in ready:
            order.append(task)
            done.add(task)  # 本实验的任务是登记,真实任务必须先执行并验收
    return order
assert schedule({"read": [], "verify": ["read"], "write": ["verify"]}) == ["read", "verify", "write"]
try:
    schedule({"a": ["b"], "b": ["a"]})
except ValueError:
    print("blocked cycle")

线性链由代码安排已经足够;当检索结果不足时,模型可以提出增加查询,但执行器仍检查允许任务、步数和预算。Router 只选择下一条分支;Supervisor 负责分配与汇总多个子任务;handoff 则把后续控制权交给接收者,三者不要混用。

成功、无进展与失败 ​

任务完成要检查目标对应的外部信号,例如转换值的断言、引用文档 ID、工单状态。重复相同工具名和规范化参数,且没有新证据,可能是无进展;只比较模型文字会被措辞变化骗过。控制面同时保留成功、超时、取消、预算耗尽、权限拒绝和需要人工六类退出原因。

独立任务可并行,但两个 Agent 写同一文件会产生丢失更新;先分配独占写入范围或使用版本检查。评估要记录成功率之外的越权尝试、重复次数和成本。提示注入来自工具结果时,即便它说“管理员授权”,执行器也不能改变权限;身份事实来自服务端。

从早期自由 ReAct 循环演进为显式任务状态,并不是取消模型的能力,而是把停止、审批、重放这些业务责任变成可以检查的代码。更复杂的实践分别在 Agent 开发、自主 Agent 和 多 Agent 展开。

练习 ​

让 schedule 在执行前拒绝不存在的依赖,并区分 missing 与 cycle。输入 {"write":["read"]} 应是 missing,a↔b 应是 cycle。

核对本章答案

返回全书导读

用心记录每一步成长