System prompt 中的关键词规则(“用户提到退款就用 process_refund”)会覆盖基于描述的工具选择。去掉它们、只依赖工具描述后,路由准确率提升了 16 个百分点。关键词规则是工具描述本身写得好的 agent 中系统性误路由最常见的原因。
数据:关键词规则有害
| 配置 | 路由准确率 | 错误模式 |
|---|---|---|
| 有关键词规则 | 78% | 模糊查询上关键词误触发 |
| 无(只用描述) | 94% | 只有真正模糊的查询出错 |
同样的工具,同样的描述。16 个百分点的提升完全来自去掉类似”客户提到退款 → process_refund”的规则。模型对意图的语义理解比表面的关键词匹配更准确。
三种关键词规则失败
关键词触发覆盖:“客户提到退款时,永远用 process_refund。“客户问”我的退款到哪了?”→ 路由到 process_refund(发起新退款)而不是 check_refund_status(查现有退款)。关键词”退款”在模型评估描述之前就触发了硬编码规则。
全面的工具偏好:“对任何提取任务,先用 extract_table。“纯文本文档被强制走表格提取 → 乱码输出。规则覆盖了模型根据描述把文本文档匹配到 extract_text 的能力。
关键词关联到熟悉工具:“搜索代码时,使用可用的搜索工具。“这在”搜索”和内置 Grep 工具(从训练数据中更熟悉)之间建立了关联。一个有语义搜索能力的 MCP 工具 code_search 被绕过——85% 的代码搜索用了 Grep,尽管 code_search 更合适。
累积的规则产生冲突
8 个月间,一个 CI agent 的 system prompt 累积了 12 条关键词路由规则(每条是为修一个特定事故加的)。有些现在互相冲突:“deploy” → deploy_tool 且 “deploy” → verify_deployment。包含”deploy”的新查询路由不可预测。
修复:去规则,改描述
- 审计 system prompt 中的关键词到工具映射规则
- 去掉所有关键词路由规则
- 扩展工具描述,加入模型能语义匹配的”什么时候用”引导
- 替换全面偏好为基于意图的引导:不说”对所有提取任务先用 extract_table”,在每个工具的描述层面加引导
加更多规则只会更糟
“加更多关键词规则来修误路由”是常见但适得其反的反应。每条新规则创造新的失败模式:查询包含多个触发关键词、规则没覆盖的自然语言变体、规则之间的冲突。维护负担增长的同时准确率下降。
关键词规则什么时候合适
几乎永远不适合做工具路由。模型的基于描述的选择比关键词匹配更善于处理细微差别。关键词规则只适用于绝对的安全覆盖——不是日常的工具选择。
一句话总结: 从 system prompt 去掉关键词路由规则后准确率从 78% 升到 94%——关键词规则覆盖基于描述的选择、累积后产生冲突、处理细微差别不如模型的语义理解。