Skip to content

第 10 章:LLM Routing,让模型当分诊台

顺序、并行、循环解决的是“任务怎么执行”。Routing 解决的是“任务该交给谁”。当用户一句话可能涉及多个专家 Agent,就需要一个路由器先分诊。

本章边界

本章讲 LLM 根据语义选择子 Agent。它很有用,但不是万能分诊台;能用稳定规则解决的分支,优先用代码或 Graph 条件边。

1. 生活类比:医院分诊台

你去医院说“胸口疼,还咳嗽”。分诊台不会直接治疗,它先判断该挂急诊、呼吸科还是心内科。路由 Agent 也是这样:它不一定直接完成任务,而是判断哪些子 Agent 应该参与。

医院LLM Routing
分诊台LlmRoutingAgent
科室ReactAgent
科室牌description(...)
会诊总结合并节点 / 结果综合

子 Agent 的 description(...) 很重要。描述写得模糊,路由器就像看不懂科室牌。

2. 最小路由示例

java
ReactAgent githubAgent = ReactAgent.builder()
        .name("github")
        .description("处理代码、issue、pull request 相关问题")
        .model(chatModel)
        .methodTools(githubTools)
        .outputKey("github_key")
        .inputType(String.class)
        .build();

ReactAgent slackAgent = ReactAgent.builder()
        .name("slack")
        .description("处理团队讨论和消息搜索")
        .model(chatModel)
        .methodTools(slackTools)
        .outputKey("slack_key")
        .inputType(String.class)
        .build();

LlmRoutingAgent router = LlmRoutingAgent.builder()
        .name("router")
        .model(chatModel)
        .subAgents(List.of(githubAgent, slackAgent))
        .build();

这段代码最关键的是两个 description(...)。它们不是注释,而是给路由模型看的能力说明。

3. 路由流程

Routing 和 Parallel 的区别在这里:

模式做法适合场景
Parallel所有专家都做,再合并每个专家都应该参与
Routing先判断谁相关,再派发只有部分专家相关

如果你的规则是“金额大于 10000 走人工审核”,别用 LLM Routing。这个分支确定、稳定、可解释,用普通代码更好。

4. 决策表

场景推荐
“一定要先 A 再 B”Sequential
“A/B/C 都要做,最后合并”Parallel
“做完要评分,不合格继续做”Loop
“先判断交给哪个专家”Routing
“规则非常确定”普通代码或 Graph 条件边

Routing 的价值在语义判断,不在替代所有 if-else。

5. 新手容易误解什么

误解一:Routing 可以替代所有分支逻辑。

不可以。确定规则交给代码,语义判断才交给模型。

误解二:子 Agent 名字写清楚就够。

名字只是短标签,description(...) 才是能力说明。路由模型主要靠它理解谁能做什么。

误解三:Routing 等于多 Agent 都执行。

不等于。Routing 是先分诊;Parallel 才是都执行。

6. 本章小结

Routing 的核心:

text
描述能力 -> 判断相关性 -> 分派子任务 -> 合并结果

下一章我们从算法和源码回到工程:Studio、Starters、A2A、Nacos、Observation。

7. 练习题

  1. 给“技术支持 Agent、售前 Agent、财务 Agent”各写一句清晰的 description(...)
  2. 判断下面场景该用 Routing 还是 if-else:金额审批、用户意图分流、文件类型判断、复杂问题分诊。
  3. 设计一个路由结果日志,记录用户问题、命中的 Agent、置信理由和最终输出。
课后源码索引:想验证实现时再打开
你想验证的结论源码锚点
官方 Routing 示例examples/multiagent-patterns/routing/src/main/java/com/alibaba/cloud/ai/examples/multiagents/routing/simple/RoutingConfig.java,类 RoutingConfig,方法 githubAgent(...)notionAgent(...)slackAgent(...)routerAgent(...)
LLM Routing Agent 如何构建spring-ai-alibaba-agent-framework/src/main/java/com/alibaba/cloud/ai/graph/agent/flow/agent/LlmRoutingAgent.java,类 LlmRoutingAgent,方法 builder()buildSpecificGraph(...)
路由图如何生成spring-ai-alibaba-agent-framework/src/main/java/com/alibaba/cloud/ai/graph/agent/flow/strategy/RoutingGraphBuildingStrategy.java,类 RoutingGraphBuildingStrategy
子 Agent 输出如何合并spring-ai-alibaba-agent-framework/src/main/java/com/alibaba/cloud/ai/graph/agent/flow/node/RoutingMergeNode.java,类 RoutingMergeNode
示例服务如何收集分类和输出examples/multiagent-patterns/routing/src/main/java/com/alibaba/cloud/ai/examples/multiagents/routing/simple/RouterService.java,类 RouterService,方法 run(...)collectClassifications(...)collectAgentOutputs(...)synthesize(...)

Built with VitePress. Deployed on Cloudflare Pages.