Skip to content

第七课:多 Agent 协作

目标

理解调度者如何选择专家,以及专家为什么可以表现成上级 Agent 的普通工具。

源码:07-multi-agent.ts

运行:

bash
npm run lesson:07

结构

正在绘制流程图…

专家包装函数返回一个 Tool

typescript
function specialistTool(
  name: string,
  description: string,
  tools: Tool[],
): Tool {
  return {
    name,
    description,
    async execute(arguments_) {
      const result = await runAgent(
        new DemoModel(),
        [{ role: "user", content: String(arguments_.question) }],
        tools,
      );
      return result.finalOutput;
    },
  };
}

从上级看,它是一个工具;进入 execute() 后,它运行的是完整 Agent 循环。

专家隔离

typescript
const mathAgent = specialistTool(
  "math_agent",
  "处理数学问题",
  [calculatorTool],
);

const weatherAgent = specialistTool(
  "weather_agent",
  "处理天气问题",
  [weatherTool],
);

数学专家看不到天气工具,天气专家也看不到计算器。

这样可以减少选错工具、缩小权限范围,并让每个专家独立测试。

当前调度方式

typescript
const chosenAgent =
  question.includes("计算") ? mathAgent : weatherAgent;

当前调度者是普通规则,不是 LLM。以后可以换成模型选择专家,但协作结构不变。

两种常见模式

  • 专家作为工具:主管保持控制,调用专家完成子任务,再统一回答。
  • Handoff:接待者把整个对话移交给专家,之后由专家直接服务用户。

本课结论

多 Agent 是职责拆分。专家内部仍是普通 Agent;对上级而言,专家可以被包装成一个工具。

内容仅供学习参考 · 隐私说明与免责声明见“关于”页面