05Bread Multi-Agent · 第 4 章
总进度 31 / 33

把问题交给合适的助手

计算需要算术工具,写代码需要代码说明,普通问候则可以直接回应。本章先让 Router 做分类,再由对应助手处理。

2026-09-28约 45 分钟290 行代码难度 ★★

如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。

1. 先分清用户在问什么

假设一个助手同时处理计算、写代码和闲聊,可以先把任务按职责分开:

计算需要算术工具,写代码需要代码说明,普通问候则可以直接回应。本章先让 Router 做分类,再由对应助手处理。

这种分法也可以用来讨论不同业务的交接,例如:

  • 客服系统:售后 / 物流 / 退款 / 投诉 / 闲聊 / ...
  • 内部助手:HR / 财务 / IT / 行政 / 技术 / ...

分组后,每位助手可以只接收自己需要的说明和工具。不过 Router 也可能分错,因此分类结果同样要留下来检查。

先用三个类别做一个小例子:

用户:"1+2+3=?"   ──→ Router 看一眼 ──→ MathAgent
用户:"写 Python" ──→ Router 看一眼 ──→ CodeAgent
用户:"你好"      ──→ Router 看一眼 ──→ GeneralAgent

各助手的配置如下:

  • MathAgent:1 个工具 calc,prompt 强制"必须调"
  • CodeAgent:0 工具,专攻 Python
  • GeneralAgent:兜底闲聊

拆开后,可以分别检查这些部分:

  • Router 是否把问题分到了正确类别。
  • 专家是否拿到了所需工具和上下文。
  • 增加新业务时,类别说明、校验和工具注册是否一起更新。

分类会多一次模型调用,是否改善效果和耗时,要通过实际问题比较。

<!-- bread-visual:start -->

像服务台分诊,把问题交给专家

图解: Router 先分类,专家只处理自己的领域。 一次问题通常分配给一个专家;各专家拥有自己的提示词和工具集。

<!-- bread-visual:end -->

2. 跑起来

cd ch03_router
python main.py

试 3 类输入:

你 > 1+2+3 等于几?
  [Router → math]  原因:包含算术运算
🧮 math: 这是简单加法:1+2+3 = 6。
        (调了 calc("1+2+3") = 6)

你 > 写一个 Python 函数反转字符串
  [Router → code]  原因:Python 编程问题
🐍 code: ```python
        def reverse(s: str) -> str:
            return s[::-1]
        ```
        切片 [::-1] 是反转字符串最 pythonic 的方式。

你 > 今天天气真不错
  [Router → general]  原因:闲聊
💬 general: 是啊,希望你今天心情也不错!☀️

<!-- bread-practice:start -->

实操画面对照

算术交给 math,代码交给 code

实操运行记录: 实际执行课程副本的 main.py;展示原始输出第 7–18 行。算术交给 math,代码交给 code。这是实测日志的排版图,并非 Windows 原生终端截图;模型回复可能随运行变化。

问候交给 general 专家

实操运行记录: 实际执行课程副本的 main.py;展示原始输出第 25–29 行。问候交给 general 专家。这是实测日志的排版图,并非 Windows 原生终端截图;模型回复可能随运行变化。

<!-- bread-practice:end -->

3. 对照代码看实现

SpecialistAgent 基类

class SpecialistAgent:
    SYSTEM = "..."
    TOOLS: list[dict] = []

试读到这里 · 后续内容已封存

关注公众号,继续把这章学完

在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。