Skip to content

角色边界、消息契约与拓扑选择 ​

“研究员、作者、审核员”三个名字不会自动产生三种能力。只有工具、上下文、验收或权限确实不同,拆分才减少复杂度。一个查库存并返回数量的任务用函数即可;跨资料独立研究和受限写入则适合拆开。

把交接变成可校验消息 ​

完整标准库实验:子任务消息只传目标 ID、局部材料与允许能力;协调者在接受结果时按任务、版本、角色检查身份。

python
tasks = {"a": {"version":1, "owner":"research", "allowed_sources":{"doc:1"}}}
def accept(message):
    task = tasks.get(message["task"])
    if task is None or message["version"] != task["version"]:
        return "stale"
    if message["sender"] != task["owner"]:
        return "wrong_owner"
    if not set(message["sources"]) <= task["allowed_sources"]:
        return "invalid_source"
    if message["status"] not in {"success","partial","failed"}:
        return "invalid_status"
    return message["status"]
m = {"task":"a", "version":1, "sender":"research", "sources":["doc:1"], "status":"partial"}
assert accept(m) == "partial"
assert accept({**m,"sender":"writer"}) == "wrong_owner"
assert accept({**m,"version":0}) == "stale"
print("partial remains partial")

部分成功不应被协调者改为 success。来源白名单只能证明它允许访问,不证明结论得到来源支持;汇总还要保留命题到证据的映射。真正通信需认证 sender,本例只展示接收侧业务协议。

谁掌握后续控制权 ​

Pipeline 的顺序固定;router 选择一个分支;supervisor 反复调用子 Agent 并收尾;handoff 则转移控制权。层级结构减少上层上下文,但可能丢失细节。黑板让多个角色共享状态,必须处理冲突;peer-to-peer 减少中心节点却增加终止与责任判断难度;debate 可能共享同一模型偏差,投票不等于独立证据。

Agent-as-a-tool 适合返回有限结果给调用者,handoff 适合接收者继续与用户交互。每次交接传任务约束、证据、未解决问题和剩余预算,而不是复制完整历史。凭据只保留在工具执行器,不能随消息转发。跨进程协议还需消息 ID、相关 ID、超时和重放策略。

练习 ​

增加 status=failed 且 sources=[] 的合法消息测试;向 sources 注入 doc:secret 必须 invalid_source;解释为什么错误消息也要验证任务身份。

核对本章答案

下一章

用心记录每一步成长