为什么只用一个 Agent,不用多 Agent?
单环三数:440 / 60 / 0
数据显示子 Agent 基本没被用上,所以删掉了;并行改成同一轮发多条工具调用。
我们最后只保留了一个 Agent,这个决定是看数据做的。交易子 Agent 在 440 个会话里一次都没被调用。检索子 Agent 被调用了 60 次,但每次只做一次搜索就返回,等于多了一层没有价值的转发。所以我把子 Agent 删掉了。现在跨平台检索由这一个 Agent 在同一轮里发 3 到 5 条搜索,框架并发执行。
展开:原理、对比、代码出处
三个数字分别是什么
- 440:交易子 Agent 经历的会话数,期间被调用 0 次。
- 60:检索子 Agent 被调用的次数,每次都只调一次
item_search就返回。 - 0:删掉之后用真模型验收了 4 遍,
task_dispatch出现 0 次。
单环 vs 多 Agent
| 单环 + 同轮多发 | 主从多 Agent | |
|---|---|---|
| 并行方式 | 一轮发多条工具调用 | 派发给子 Agent |
| 额外模型调用 | 没有 | 每次派发至少多 1 次 |
| 上下文 | 一份,全程可见 | 要打包传给子 Agent |
| 什么时候值得 | 子任务一步就完 | 子任务要跑多步、上下文需要隔离 |
写安全靠什么
不靠拆角色,靠三个写在代码里的机制:每个工具标好是不是只读(is_read_only);PermissionEngine 只给点了名的写工具开门;下单工具只弹一张确认卡,用户自己点按钮、走 HTTP 接口才真下单。
出处:app/agent/agents.py:100(build_main_agent)、app/agent/limits.py:23(MAIN_MAX_ITERS 默认 30)、CLAUDE.md §2.2
追问链:面试官接着会问什么
- 那什么时候你会用多 Agent?
- 两种情况:子任务自己要跑很多步,或者中间结果很大、不适合放进主上下文。我们的子任务一步就结束,两条都不满足。
- 一个 Agent 挂十几个工具,模型不会选错吗?
- 有这个风险。所以提示词里专门有一段
<tool_policy>,讲同类工具该选谁。模型外面还套了一层检查代码(Harness),会查调用顺序、查是不是在重复调。 - 同轮多发,怎么保证不互相踩?
- 只有标了
is_concurrency_safe=True的只读工具才会并发执行。写工具不直接写数据,只返回一张确认卡。 - 删之前的方案白做了吗?
- 没有白做。当时的数据都保留在
docs/milestones/,这次能下决心删,依据就是那些数据。