Skip to content

18. 多个工具如何选择?如何防止选错工具或循环调用? ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min

本题阅读地图 ​

  1. 💡 简要回答
  2. 📝 详细解析
  3. 🎯 面试总结

👔面试官:多个工具如何选择?如何防止选错工具或循环调用?

🙋‍♂️我:模型根据描述自动选择,写清楚描述就行。

👔面试官:描述清晰是基础,但还有:工具分类、参数校验、历史调用记录防重、调用次数上限。你能系统讲吗?

🙋‍♂️我:那就加个调用次数限制?

👔面试官:对,但还要:相似工具要区分清楚、参数 schema 要严格校验、历史调用结果要回传避免重复调用。这些都是生产环境必须的治理能力。

💡 简要回答 ​

工具选择优化:

  1. 描述清晰:功能边界明确,区分相似工具
  2. 分类组织:工具多时分组,先选类别再选工具
  3. Few-shot 示例:给模型看正确调用示例

防错机制:

  1. 参数校验:schema 校验,拒绝无效调用
  2. 调用记录:历史结果回传,避免重复调用
  3. 次数上限:单工具调用次数限制,防无限循环
  4. 兜底策略:选错工具或循环时人工介入

📝 详细解析 ​

工具选择优化 ​

描述区分相似工具:

json
// 不好
{"name": "search", "description": "搜索"}
{"name": "query", "description": "查询"}

// 好
{"name": "search_web", "description": "搜索互联网公开信息,适用于通用知识、新闻、百科类问题"}
{"name": "query_database", "description": "查询企业内部数据库,适用于订单、用户、库存等私有数据"}

分类组织:

  • 工具多的时候,先做意图分类
  • 然后只在相关类别中选择

Few-shot 示例:

示例1:
用户:"北京今天天气怎样?"
思考:需要查天气
调用:get_weather(city="北京")

示例2:
用户:"帮我订个去上海的机票"
思考:需要调用预订系统
调用:book_flight(destination="上海", ...)

防错机制 ​

参数 Schema 校验:

  • 类型检查(string/int/boolean)
  • 必填字段检查
  • 格式校验(日期、邮箱、枚举值)

调用记录去重:

  • 记录本次对话已调用的工具
  • 同样参数重复调用时,返回缓存结果
  • 或提示"已经查询过,结果是..."

调用次数上限:

  • 单工具最多调用 N 次
  • 总工具调用次数上限
  • 防止无限循环或疯狂重试

循环检测:

  • 检测到 A→B→A 的循环模式
  • 触发人工介入或终止

兜底策略 ​

  • 工具选择置信度低时,询问用户确认
  • 多次选错后,降级为 Prompt 回答
  • 关键操作强制人工审核

🎯 面试总结 ​

优化选择:清晰描述、分类组织、示例引导。防错:参数校验、调用记录、次数上限、循环检测。


章节首页 · ← Q17 · Q19 →

最后更新2026-05-01
难度P1
频率medium
阅读5 min
主题llm
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题