AI Agent 如何动态选择工具:Skill 匹配与三种筛选模式

16 阅读2分钟

起因

读了一篇AI制药Agent的论文www.biorxiv.org/content/10.… 它在工具选择的设计上,我觉得很值得借鉴。

解读

Agent的工具选择机制

流程示意图

用户问题
   ↓
Skill 匹配
   ↓
提取 Skill 中要求使用的工具
   ↓
根据模式选择额外工具
   ├─ llm:让 LLM 判断
   ├─ embedding:计算语义相似度
   └─ all:直接全部使用
   ↓
将工具说明和参数注入上下文
   ↓
规划 LLM 生成 <act> Python/Bash 代码
   ↓
执行代码

它有个tool的动态选择机制,每次新用户问题进来,先匹配 skill 模板,再选择工具,工具选择支持三种模式(llm、embedding、all)。 具体来说,它先使用一个skill template匹配用户问题,然后根据匹配到的skill(某个标准流程,会指定这个流程固定要使用的工具),并从模版中提取必需的工具,然后再根据模式选择额外的工具。始终保留的核心工具"execute_python","execute_bash","inspect_tool_code","query_pubmed","web_search",也就是不管用户提出什么问题,tool_selection是什么模型,这几个工具都会保留。

工具选择的三种模式:

  1. llm:简单来说就是把问题和现有工具描述交给大模型,让大模型决定使用哪些工具。它这块有个细节就是它只把工具描述的第一句交给大模型以节省token的消耗,这对工具的第一句描述提出了挺高的要求,并且也增加的选不准工具的风险,个人觉得这种对准确性和严谨性很高的任务,token费点就费点吧。
  2. embedding:参考的RAG那块的思想,根据问题和工具描述的相似度返回要使用的工具。
  3. all:把所有工具都塞进上下文窗口。all 并不一定最准确。工具越多,模型的“选择注意力”越容易被稀释。

与普通Agent的区别

没有单独的工具检索模块时,典型做法就是:

用户问题
+ 所有工具的名称
+ 所有工具的描述
+ 所有工具的参数 Schema
        ↓
交给主 LLM
        ↓
LLM 决定调用哪个工具

但是论文中的Agent增加了预筛选步骤