为何需要外部工具
一、大模型的天生缺陷
1.1 一个看似简单的问题
想象一下,你问 AI:“今天北京的天气怎么样?”
AI 会怎么回答?
如果它老实,会说:“我无法获取实时天气数据,请查询天气网站。”
如果它不老实,可能会根据训练数据(可能是几个月前的)胡编一个答案,比如:“北京今天晴,25℃。” —— 但今天可能是下雨天。
这就是大语言模型天生的缺陷:它只有“知识”,没有“感知”。
大语言模型本质是一个“超级记忆体”,它记住了海量的文本知识,但它无法主动获取任何实时信息,也无法执行任何操作。
1.2 人类是怎么解决这个问题的?
如果一个人被问到“今天北京的天气怎么样”,他会怎么做?
1、打开手机上的天气 App
2、查看北京今天的天气
3、把看到的结果告诉你
这个人“调用”了天气 App 这个“工具”。
AI 也是一样 —— 只要它能“调用”外部工具,它就不再是“瞎子”和“聋子”了。
1.3 工具调用的核心思想
工具调用(Function Calling)的本质是:让 AI 能够“请求”执行一个外部函数,而不是自己“猜测”答案。
这个“请求”的过程,就是工具调用。
常规的API调用只需发送用户问题,现在需要同时发送用户问题和工具定义,这样大模型才能根据用户问题生成合适的工具调用请求。
二、工具调用的“六步舞曲”
2.1 完整流程
假定我们定义了一个工具get_weather,用于获取指定城市的天气。
如果要通过DeepSeek使用这个工具查询北京的天气,完整的交互流程如下:
| 步骤 | 环节说明 | 具体内容 |
|---|---|---|
| 第 1 步 | 用户提问 | 用户输入:今天北京的天气怎么样? |
| 第 2 步 | 第一次 HTTP 请求 |
将用户问题和get_weather工具定义发给
DeepSeek API |
| 第 3 步 | AI 返回调用计划 |
AI 返回工具调用指令:get_weather(city="北京") |
| 第 4 步 | 代码执行工具函数 |
你的代码执行 get_weather("北京"),拿到结果:"晴,25℃" |
| 第 5 步 | 第二次 HTTP 请求 |
将工具执行结果("晴,25℃")发回给
DeepSeek API |
| 第 6 步 | AI 生成最终回答 | AI 根据工具结果生成自然语言回复:“今天北京天气晴朗,气温 25℃。” |
2.2 关键认知:AI 不执行任何代码!
这是最重要的一点:AI 本身不执行任何函数。
AI 只做两件事:
| AI 做的事 | 说明 |
|---|---|
| 决定调用哪个工具 | 根据用户问题从你提供的工具列表中选择合适的工具 |
| 生成调用参数 | 根据用户问题生成 JSON 格式的参数 |
执行工具的人是你(你的代码)。 AI 只是告诉你“我想用这个工具,参数是这个”,然后你据此执行相应的代码,并将执行结果告诉它。
记住一句话:AI 负责“想”,你负责“做”。