参数校验与工具路由
Q:工具描述写得再好,模型也瞎传参数怎么办?
来源:腾讯 Agent 岗终面
新手答:“加强 Prompt,让模型输出 JSON。”
高手答:
三层防线:
- Schema 里写“负面描述”:比如“城市名参数,请直接使用用户输入文本,切勿从地址中自行解析提取”。告诉模型不该做什么,比告诉它该做什么更有效。
- 输出后做硬校验:用 Pydantic 模型校验,类型不对、枚举值不匹配的直接拒掉,让模型重试。
- 关键参数业务兜底:比如查询订单的工具,模型传回的
order_id,必须先调用一次“订单是否存在”的校验接口。绝不让未经核实的 ID 直接下发给数据库。
差距在哪:新手的答案停留在 Prompt 层面——这是最弱的防线,模型不一定听。高手的三层防线是递进的:Prompt 引导 → 格式硬校验 → 业务逻辑兜底。即使模型完全不听话,后两层也能拦住。面试官考的是“你有没有做过需要防御性编程的系统”。
追问:模型调用工具出现参数幻觉或语法错误时,有哪些自动化修正手段?
来源:蚂蚁 AI应用开发 二面
参数幻觉(模型编造不存在的参数值)和语法错误(JSON 格式错误、类型不匹配)是工具调用最常见的两类失败。自动化修正手段分三个层次:
1. 格式层自动修复:JSON 语法错误可以用规则修复——缺少引号、多余逗号、未闭合括号等常见错误有明确的修复规则。不需要模型参与,纯代码处理。
2. 语义层重试:参数值不合法时(如枚举值不在范围内、日期格式错误),将错误信息拼接到 Prompt 中让模型重新生成参数。关键是错误信息要具体——不是“参数错误”,而是“city 参数值‘北京市’不在合法列表中,合法值为:beijing, shanghai, ...”。
3. 降级策略:重试 1-2 次仍失败时,不继续重试(避免 token 浪费),而是降级处理——用默认参数、跳过该工具、或转人工。降级比无限重试更符合生产需求。
Q:你们工具库有上百个工具,怎么让模型快速选对?
来源:腾讯 Agent 岗终面【百度大模型研发二面追问:Agent 如何选择合适工具】
新手答:“把所有工具描述发给模型让它选。”
高手答:
不可能全发,上下文不够,且会干扰。我们做了个轻量级工具路由层:
- 用户请求来时,先用 FastText 之类的小模型快速提取意图关键词
- 用关键词去工具向量库做语义检索,召回 top 5
- 最关键的一步:用一个精调过的 7B 小模型,给这 5 个工具的相关性做精排序,只把 top 2 工具的完整 schema 交给大模型做最终调用
这个流程让工具选择准确率从 ~70% 提到了 95%+。
候选工具超过 100 个时的召回偏差问题:
当工具规模达到百级以上,纯语义检索会出现召回偏差——高频工具的描述被模型见过更多次,embedding 和 query 的匹配度天然更高,导致低频但正确的工具被排挤。
| 偏差类型 | 表现 | 解决方案 |
|---|---|---|
| 高频偏差 | 常用工具总是排在前面,冷门工具几乎不被召回 | 对工具 embedding 做频率逆加权,降低高频工具的匹配分 |
| 描述偏差 | 描述写得好的工具比描述差的更容易被选中 | 统一工具描述模板,确保描述质量一致 |
| 语义模糊偏差 | 多个工具描述相似,模型分不清选哪个 | 在描述中加“反面说明”——“本工具不用于XX场景” |
更根本的解法是分层路由——不让模型在 100 个工具中直接选,而是先分类再选:
第一层:意图分类器 → 5-8 个工具大类(检索/操作/分析/通信...)
第二层:大类内语义检索 → 每类 10-15 个工具中选 top-3
第三层:最终选择 → 模型从 3 个候选中选每层缩小 5-10 倍,三层下来从 100+ 缩到 3,大幅降低选错概率。
差距在哪:新手的方案在工具超过 20 个时就会崩——上下文被工具描述占满,模型反而选不好。高手的回答展示了一个完整的召回-排序管线(和搜索引擎的架构一样),每一层都有明确的职责。面试官考的是“你能不能把 Agent 的子问题抽象成一个工程问题来解决”。
Q:多工具场景下的调度策略?
来源:阿里 AI Agent 开发一面
新手答:“模型自己选。”
高手答:
多工具场景的核心问题是选哪个、按什么顺序、并行还是串行。
- 意图路由前置:用户请求先经过轻量分类器或规则,判断需要哪类工具,不让大模型在全量工具里大海捞针
- 依赖分析决定编排:分析工具之间的输入输出依赖关系——无依赖的并行执行,有依赖的串行编排,减少总耗时
- 优先级与降级:多个工具都能用时,按可靠性、延迟、成本排优先级;主工具超时自动降级到备选
- 结果合并与冲突处理:多工具返回结果可能矛盾,需要合并策略——取最新的、取置信度最高的、或让模型做最终判断
调度策略不是模型能力问题,是工程编排问题——模型负责决策“做什么”,编排层负责“怎么执行”。
差距在哪:新手把调度交给模型“自己想办法”。高手的回答把多工具调度拆成四个环节:路由、编排、降级、合并——每个环节都有明确策略。面试官考的是你能不能把多工具协作从“模型自己选”变成一个可控的工程流程。