起因
读了一篇AI制药Agent的论文www.biorxiv.org/content/10.... 它在工具选择的设计上,我觉得很值得借鉴。
解读
Agent的工具选择机制
流程示意图
css
用户问题
↓
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是什么模型,这几个工具都会保留。
工具选择的三种模式:
- llm:简单来说就是把问题和现有工具描述交给大模型,让大模型决定使用哪些工具。它这块有个细节就是它只把工具描述的第一句交给大模型以节省token的消耗,这对工具的第一句描述提出了挺高的要求,并且也增加的选不准工具的风险,个人觉得这种对准确性和严谨性很高的任务,token费点就费点吧。
- embedding:参考的RAG那块的思想,根据问题和工具描述的相似度返回要使用的工具。
- all:把所有工具都塞进上下文窗口。all 并不一定最准确。工具越多,模型的"选择注意力"越容易被稀释。
与普通Agent的区别
没有单独的工具检索模块时,典型做法就是:
markdown
用户问题
+ 所有工具的名称
+ 所有工具的描述
+ 所有工具的参数 Schema
↓
交给主 LLM
↓
LLM 决定调用哪个工具
但是论文中的Agent增加了预筛选步骤