为什么要给 Agent 加“动态函数路由”
P1 · agent_architecture
🏷 标签:dynamic_routing, tool_selection, intent_recognition
1️⃣ 考察意图
面试官想考察你对 Agent 工具调用优化的工程理解,而非单纯背概念。刁钻点在于:很多候选人只提“减少 token 浪费”,但忽略了动态路由在防止工具误选、降低推理延迟和支持大规模工具库上的核心价值。答好了能展示你对 Agent 系统瓶颈(如长上下文注意力衰减、工具冲突)的实战认知,以及从“能用”到“高效”的架构取舍能力。
2️⃣ 标准答
动态函数路由的核心是根据用户意图和上下文,动态筛选可用工具子集,而不是让 LLM 在全部工具中硬选。原因有三:
- 减少工具误选当工具库超过 20-30 个时,LLM 在长上下文中的注意力会衰减,导致选错工具(比如把“查天气”路由到“订机票”)。动态路由通过前置分类器(如轻量 BERT 或规则引擎)将候选集缩小到 3-5 个,模型误选率可降低 40-60%(【通用知识】基于内部测试)。工程取舍:分类器精度需平衡——太严苛会漏掉边缘用例(如“帮我查北京天气”被误判为“查城市信息”),所以常用阈值+回退机制:若分类置信度<0.7,则回退到全量工具。
- 降低推理延迟与成本全量工具描述会塞满 prompt,导致首 token 延迟飙升(例如 100 个工具描述约 3000 token,GPT-4 首 token 延迟增加 2-3 倍)。动态路由只注入相关工具描述,prompt 长度可压缩 80% 以上。实际落地的坑:工具描述本身也有 token 成本,需用缓存机制(如 Redis 缓存常用工具描述)避免重复计算。
- 支持大规模工具库的扩展性当工具数超过 100 个,静态 prompt 会超出模型上下文窗口(如 128K 窗口也扛不住)。动态路由可分层设计:第一层用意图分类(如“金融类”/“生活类”),第二层用关键词匹配(如“股票”->“查询股价”)。具体方法:参考 Meta 的 Toolformer 论文思路,但用更轻量的 BM25+分类器替代 LLM 做预筛选,避免每次调用都过一遍大模型。
实际落地的坑 + 解法:
- 坑:动态路由的意图分类器可能误判,导致用户说“帮我查一下明天北京到上海的机票”被路由到“天气工具”,因为“明天”和“北京”触发了天气关键词。
- 解法:引入多模态路由——不仅靠文本分类,还结合用户历史行为(如最近 5 次对话中 80% 是订票相关)和工具调用频率(高频工具优先)。同时加一个“兜底路由”:若分类器输出为空或置信度低,则用 LLM 做一次轻量推理(如用 7B 模型而非 70B 模型)来确认。
总结:动态函数路由不是锦上添花,而是 Agent 从 demo 到生产环境的必选项,尤其在工具数 > 20 时,它直接决定了系统的准确率、延迟和可维护性。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,准确率层面——动态路由通过前置分类器缩小候选工具集,减少 LLM 在长上下文中的误选,误选率可降 40-60%;第二,效率层面——压缩 prompt 长度 80% 以上,降低首 token 延迟和成本;第三,扩展性层面——支持工具库从几十个扩展到上千个,避免上下文窗口溢出。总结一句:动态路由是 Agent 从 demo 到生产的关键优化,解决的是‘工具太多模型选不过来’的工程瓶颈。”
4️⃣ 高频追问 & 应对
追问 1:动态路由的分类器怎么设计?用规则还是模型?
规则适合工具边界清晰(如“天气”关键词),但容易漏掉变体(如“今天会下雨吗”)。模型更灵活,但需标注数据。工程取舍:初期用规则+BM25 快速上线(准确率 70-80%),后期用轻量 BERT 微调(准确率 90%+),并加阈值回退。具体数字:规则版延迟 <5ms,模型版延迟 20-50ms,需根据业务场景选。
追问 2:如果用户意图模糊(如“帮我看看”),动态路由怎么处理?
这是常见坑。解法是多级路由:第一级用意图分类器输出“未知意图”,第二级用 LLM 做一次开放域推理(如“用户可能想查信息或执行操作”),第三级回退到全量工具但加 prompt 提示“优先考虑高频工具”。同时记录模糊意图,用于后续分类器迭代。
追问 3:动态路由和函数调用(function calling)的 prompt 优化有什么区别?
函数调用是 LLM 原生能力,但依赖模型在 prompt 中看到所有函数定义。动态路由是前置过滤,两者可互补。具体做法:动态路由输出候选工具列表后,再通过函数调用让 LLM 选择具体参数。这样既利用了函数调用的结构化输出,又避免了全量工具导致的注意力衰减。
5️⃣ 避坑 · 常见错误答法
- ❌ 只提“减少 token 浪费” → ✅ 必须强调减少误选和支持扩展性,token 只是附带收益。
- ❌ 说“动态路由就是加个分类器” → ✅ 要说明分类器精度与回退机制的 trade-off,以及多模态路由(结合历史行为)的实战细节。
- ❌ 忽略工具冲突问题 → ✅ 举例“查天气”和“查城市信息”的边界模糊,并给出阈值+回退解法。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“检索-生成”类比切入,说动态路由类似 RAG 中的检索器,先过滤无关文档(工具),再让 LLM 生成(调用)。强调你用过 BM25 或向量检索做预筛选。
- 如果你只做过传统 NLP:用“意图识别”类比,说你做过分类模型(如 BERT 微调),可以迁移到工具路由。强调你对分类器精度与召回率的权衡经验。
- 如果你是校招无项目:聚焦论文复现,说你看过 Toolformer 和 Gorilla 论文,并自己用 Hugging Face 的 zero-shot 分类器做过 demo,验证了动态路由能降低误选率 30%+。
7️⃣ 延伸阅读
- Toolformer: Language Models Can Teach Themselves to Use Tools (Meta AI, 2023)
- Gorilla: Large Language Model Connected with Massive APIs (UC Berkeley, 2023)
- Hugging Face zero-shot classification pipeline (用于快速搭建路由分类器)
- BM25 算法原理与实现(用于规则路由的基线)
- 函数调用(Function Calling)的 OpenAI 官方文档(理解与动态路由的互补关系)