概述
在前面的章节中,我们讨论了如何通过To-do list帮助AI智能体更好地规划任务。现在我们要关注另一个实际生产中的问题:当AI智能体有很多工具(比如20个、50个甚至更多)时,每次查询都要把所有工具都传给模型,这样会消耗大量token,增加成本,而且可能让模型选择困难。
想象一下,如果AI智能体有50个工具,但用户只是问"今天天气怎么样",实际上只需要一个天气工具就够了。如果把所有50个工具都传给模型,不仅浪费token,还可能让模型因为选择太多而做出错误决策。
LLM tool selector中间件思路是:在主模型调用前,先用一个轻量级的模型(比如GPT-4o-mini)分析当前查询,智能选择相关的工具,过滤掉无关的工具。这样,主模型只需要关注相关的工具,既能降低token消耗,又能提升选择的准确性。
使用场景
工具数量较多的场景
当AI智能体拥有大量工具(10+)时,每次查询通常只需要其中少数几个。通过工具选择器,可以过滤无关工具,减少上下文复杂度。
成本敏感场景
工具描述会占用大量token,通过筛选只保留相关工具,可以显著降低token消耗,节省成本。特别是在工具数量很多的情况下,节省的效果更明显。
提升选择准确性
工具数量过多时,模型可能因为选择困难而做出错误决策。通过筛选只保留相关工具,可以提升模型的选择准确性。
核心功能需求
预筛选机制
在主模型调用前,使用轻量级模型进行预筛选,只选择相关的工具传递给主模型。
选择模型选择
- 轻量模型优先:建议使用轻量级模型(如GPT-4o-mini、Claude 3 Haiku)进行工具选择,降低成本
- 模型能力要求:选择模型需要支持结构化输出(Structured Output),确保输出格式规范
- 成本对比:工具选择的成本应该低于主模型处理所有工具的成本
产品建议:在PRD中明确使用轻量模型进行工具选择,并评估成本节省效果。
选择逻辑
选择模型会分析:
- 用户查询意图:理解用户想要做什么
- 工具功能匹配:从所有工具中找出能够满足用户需求的相关工具
- 结构化输出:返回相关工具列表,格式规范
工具过滤与限制
选择出相关工具后,还需要根据配置进行过滤和限制。
最大工具数量限制
- max_tools参数:可以设置最多选择多少个工具
- 数量建议:简单工具建议5-10个,复杂工具建议3-5个
- 动态调整:可以根据查询复杂度动态调整数量
始终包含的工具
- always_include参数:可以设置始终包含的工具列表
- 常用工具:建议将常用工具(如搜索工具)加入列表,确保这些工具始终可用
- 不受限制:这些工具不受max_tools限制,始终会被包含
产品建议:在PRD中明确哪些工具应该始终包含,以及工具数量的限制策略。
PRD需求描述
功能需求
FR-1: 工具预筛选
- 描述:在主模型调用前,使用轻量模型分析查询,选择相关工具
- 选择模型:支持配置选择模型,默认使用轻量模型
- 结构化输出:选择模型返回相关工具列表,格式规范
- 优先级:P0(核心功能)
FR-2: 工具过滤
- 描述:根据配置过滤和限制选择的工具数量
- 最大数量限制:支持设置最多选择多少个工具
- 始终包含工具:支持设置始终包含的工具列表
- 优先级:P0(核心功能)
FR-3: 自定义系统提示
- 描述:支持自定义系统提示,指导选择模型如何选择工具
- 提示优化:可以根据实际效果优化提示词
- 优先级:P1
FR-4: 选择结果记录
- 描述:记录工具选择结果,便于分析和优化
- 记录内容:查询内容、选择的工具、未选择的工具等
- 优先级:P1
非功能需求
NFR-1: 性能要求
- 选择延迟:工具选择需要额外的模型调用,会增加延迟(通常100-500ms)
- 延迟容忍度:需要在PRD中明确延迟容忍度
- 成本要求:工具选择的成本应该低于主模型处理所有工具的成本
NFR-2: 选择准确性
- 准确性监控:监控工具选择的准确性(选择的相关工具是否被主模型实际调用)
- 准确性阈值:如果准确性低,需要优化系统提示或工具描述
- 工具描述质量:工具描述应清晰、准确,便于选择模型理解
NFR-3: 成本监控
- 成本统计:统计工具选择功能的成本
- 成本节省评估:评估工具选择节省的token成本是否大于选择模型的调用成本
- 成本优化:如果成本节省不明显,需要优化策略
产品设计要点
模型选择策略
轻量模型优先:
- 建议使用GPT-4o-mini、Claude 3 Haiku等轻量模型
- 工具选择任务相对简单,不需要太强的模型能力
成本对比:
- 工具选择的成本应该低于主模型处理所有工具的成本
- 需要在PRD中明确成本阈值
产品建议:默认使用轻量模型,如果选择准确性不足,可以考虑使用中等模型,但需要评估成本。
工具选择数量策略
max_tools设置:
- 简单工具建议5-10个
- 复杂工具建议3-5个
- 避免选择过多工具导致主模型选择困难
动态调整:
- 可以根据查询复杂度动态调整max_tools
- 简单查询3个,复杂查询5个
always_include策略:
- 建议将常用工具(如搜索工具)加入always_include
- 确保这些工具始终可用
产品建议:在PRD中明确工具数量限制策略,根据实际效果调整。
选择准确性优化
系统提示优化:
- 可以自定义system_prompt,明确工具选择的指导原则
- 比如"优先选择能够直接回答问题的工具"
工具描述质量:
- 工具描述应该清晰、准确
- 便于选择模型理解工具用途
准确性监控:
- 监控工具选择的准确性
- 如果准确性低,需要优化系统提示或工具描述
产品建议:建议在PRD中明确工具描述的质量要求,并定期评估选择准确性。
使用建议
什么时候应该使用
- 工具数量较多:AI智能体拥有10+个工具
- 成本敏感:需要降低token消耗,控制成本
- 选择准确性需要提升:工具数量过多导致选择困难
配置建议
- 选择模型:默认使用轻量模型,降低成本
- 工具数量限制:根据工具复杂度设置合理的限制
- 始终包含工具:将常用工具加入always_include列表
注意事项
- 额外延迟:工具选择会增加延迟,需要评估是否可接受
- 成本评估:需要评估成本节省效果,确保整体成本降低
- 准确性监控:需要监控选择准确性,及时优化
与其他中间件的配合
工具选择器可以与其他中间件配合使用:
- 与ToolCallLimitMiddleware配合:工具选择不影响工具调用限制,选择后的工具调用仍受限制
- 与ModelFallbackMiddleware配合:如果选择模型失败,可以回退到主模型处理所有工具
- 执行顺序:工具选择应在主模型调用前执行,确保主模型只看到筛选后的工具
后续优化方向
- 智能选择:基于历史数据,智能预测哪些工具更可能被使用
- 工具分组:将相关工具分组,按组选择,提高效率
- 上下文感知:结合对话上下文,更准确地选择工具
- 学习优化:基于实际使用情况,持续优化选择策略