前言

上一篇文章,我梳理了 Function Call 的完整流程:

用户提问 → 工具说明输入给 LLM → LLM 判断是否调用工具 → 系统执行工具 → 结果回填给 LLM → 生成最终回答。

但写完之后,我发现还有一个更关键的问题:

  • 大模型到底是怎么知道有哪些工具可以调用的?
  • 如果系统同时给了它很多工具,它又是怎么选中正确工具的?

这篇文章,我就想专门把这个问题讲清楚。


在这里插入图片描述

先说结论:

  • 系统先把可用工具清单告诉大模型
  • 模型再根据用户问题和工具描述之间的语义匹配,决定要不要调工具、该调哪个工具。

第一步:系统先把工具告诉模型

这份工具清单通常会包含:

  • 工具名
  • 功能描述
  • 参数说明

比如图里就举了一个很典型的例子:get_weather(city, date)

这相当于系统先递给模型一份“工具说明书”,告诉它:现在你可以使用天气工具,而且它需要城市和日期两个参数。

关键词是:不是模型自己发现工具,而是系统先提供工具

第二步:模型先理解用户到底要什么

工具清单给到模型之后,模型不会立刻选工具。它先要理解用户问题的真实意图。比如图里的案例是:

帮我查一下今天成都天气

这句话表面上只是一个自然语言问题,但模型需要先把它理解成一个任务类型:

  • 这是一个“天气查询任务”
  • 而且是一个“实时信息查询”
  • 不能只靠模型记忆直接回答

这一步很关键,因为工具选择不是从工具开始的,而是从“需求理解”开始的。

如果用户问的是:

  • 查天气
  • 查订单
  • 发邮件

那模型就要先分清楚,这到底属于哪一类任务。

关键词:先识别需求,再谈选工具

第三步:模型再理解每个工具能做什么

理解完用户意图之后,模型还要回头看一眼:当前这些工具分别能干什么?

这里很多人会忽略一个点:模型并不知道工具背后的真实代码逻辑,它主要依赖的是工具描述文本。

比如图里这几个工具就分别对应不同能力:

  • 天气工具查天气
  • 订单工具查订单
  • 邮件工具发邮件

也就是说,模型对工具的理解,本质上来自“工具说明”。所以,工具描述写得清不清楚,会直接影响模型能不能理解这个工具适合什么场景。

接下来,模型会把两类信息放在一起比较:

  • 用户现在想做什么
  • 每个工具分别能做什么

然后进行匹配,即:工具选择的本质,不是认名字,而是做语义匹配。

图里写的 semantic links,其实就可以理解成:用户需求工具描述 之间的语义连接。

比如“查今天成都天气”这个需求,和“查询指定城市天气”这个工具描述,语义高度一致,所以模型更容易选中天气工具。

第四步:模型生成调用意图,系统真正执行

当模型完成工具匹配之后,它并不会自己直接去调用 API,它先做的是生成一段结构化的“工具调用意图”。

比如图里的例子就是:

  • 调用 get_weather
  • 参数 city = 成都
  • 参数 date = 今天

这一步很重要,因为这里体现的是:模型负责决策,系统负责执行。

也就是说,模型只是在说:“我建议调用这个工具,并且参数这样填。”

真正去请求天气 API、访问外部服务的,是后面的系统,而不是 LLM 本身。

系统执行完成后,会得到一份结果,比如:

- 阴天
- 18℃~24℃
- 空气质量良

这份结果先回到系统,再准备交给模型继续处理。

第五步:结果回到模型,模型再组织最终回答

很多人会以为工具执行完就结束了,其实还没有。因为工具返回的结果,通常更像结构化数据,还不是用户最终看到的自然语言

所以系统还会把这份结果再回填给 LLM,让模型继续生成最后的回答。

比如天气工具返回:

- 18℃~24℃
- 阴天
- 空气质量良

模型拿到这些真实结果之后,才会进一步组织成用户更容易读懂的话,比如:

今天成都阴天,18℃~24℃,空气质量良,适合外出。

这也是为什么完整的 Function Call 流程里,LLM 通常会参与两次:

  • 第一次负责理解需求和选择工具
  • 第二次负责基于工具结果组织最终回答

总结

写到这里,我现在对“大模型怎么选工具”的理解是:系统先把工具清单交给模型,模型先理解用户需求,再理解每个工具的能力,最后通过语义匹配选出最合适的工具。

所以,工具选择这件事,本质上讲的是:需求理解 + 工具理解 + 语义匹配 + 调用决策。


提问

继续往下追问,请各位同学思考以下两个问题:

如果工具描述写得不清楚,大模型是不是就更容易选错工具?
Tool Schema 到底应该怎么写,模型才更容易理解?

见我下篇的分享吧

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐