智能体 · 编排
- 模型
- Qwen3-1.7B 每个智能体
- 工作者
- 5
- 处理的词元数
- 4,189 vs 单个智能体 887
全部步骤
一个智能体,一个上下文
首先,一个带查询工具的智能体独自处理请求。它一次查了两个模型,把两份资料卡都留在同一个上下文里(到最后 609 个词元),然后作答。
1 个智能体 · 2 次调用 · 2 次查询分派工作
编排者拿到同样的请求和一个工具 ask_worker。它交出去 5 份,每份是一个模型加一个问题。交接只是一次工具调用,其结果是另一个智能体的工作。
5 次交接,每次一个工具调用每个工作者都从空白开始
工作者从一个空的上下文开始:它自己简短的说明和一个任务。它从看不到用户的请求、其他工作者或计划。它的第一个回复必须是工具调用(tool_choice “required”),所以它先查询模型,再作答。
每个工作者一个全新的上下文只有报告回来
资料卡留在工作者的上下文里。编排者只读 5 份简短的报告(作为工具结果),并据此写出回答。
输入 5 份报告 · 输出 1 个回答谁在何时运行
工作者之间互不依赖,所以服务器可以同时运行它们;编排者等所有工作者完成。在这么小的任务上,额外的调用抵消了并行的好处:单个智能体仍然先完成。
分发、并行运行、汇总代价是什么
每个工作者都要重读自己的说明和资料卡,所以拆分后处理了 4,189 个词元,而单个智能体只有 887 个,而且这里单个智能体的回答还更完整。当各部分很大、相互独立、会挤满一个上下文时,拆分才划算。
处理 4,189 vs 887 个词元
代码
def ask_worker(model, question): # the orchestrator's one tool
worker = Agent(instructions=WORKER, tools=[lookup]) # a fresh, empty context
return worker.run(f'Model: {model}\nQuestion: {question}') # only the report comes back
orchestrator = Agent(instructions=ORCHESTRATOR, tools=[ask_worker])
answer = orchestrator.run(request) # calls ask_worker once per piece, then answers from the reports