"为什么我的AI只会说话,不会帮我查数据?"
"大模型怎么才能像人一样,自动调用工具查信息?"
如果你也有这些疑惑,这篇文章一定能帮你打开新世界的大门!
一、什么是 FunctionCall?为什么它很重要?
随着大语言模型(LLM)越来越强大,很多人发现:AI 虽然能聊天、写代码,但遇到需要查实时数据、调用外部服务时,往往只能"胡说八道"------这就是所谓的"幻觉"问题。
FunctionCall 机制,就是让大模型不仅能"说",还能"做"!它能让 AI 自动调用你预设的函数,查数据、调接口、甚至操作硬件,真正成为你的"超级助手"。
现实场景举例
比如你问 AI:"青岛啤酒的收盘价是多少?"
传统 LLM 只能"猜"一个答案,但有了 FunctionCall,AI 会自动调用你写好的查股价函数,返回真实数据!
二、FunctionCall 的原理是什么?
FunctionCall 的核心思想是:
你把一组函数(工具)告诉大模型,AI 在理解用户问题后,自动决定是否调用这些函数,并把结果返回给用户。
整个流程大致如下:
- 用户提问(如"青岛啤酒的收盘价是多少?")
- LLM 判断需要查数据,自动选择合适的函数
- LLM 生成函数调用请求(如 get_closing_price("青岛啤酒"))
- 你的后端代码实际执行这个函数,拿到结果
- LLM 根据结果生成最终回复
三、实战:用 Python 玩转 FunctionCall
下面我们用 Deepseek 的大模型 API,手把手实现一个"查股票收盘价"的 FunctionCall 小项目。
1. 环境准备
首先,安装 openai 包(Deepseek 兼容 openai 标准):
bash
pip install openai
准备好 API Key,并写入 .env.local
文件:
ini
Deepseek_API_Key=你的key
2. 定义工具函数
我们要让 AI 能查股票价格,先定义一个查价函数:
python
def get_closing_price(name):
if name == '青岛啤酒':
return '67.92'
elif name == '贵州茅台':
return '1488.21'
else:
return '未找到该股票'
3. 向大模型"注册"工具
通过 tools
参数,把函数的描述、参数等信息告诉 LLM:
python
tools = [
{
"type": "function",
"function": {
"name": "get_closing_price",
"description": "获取指定股票的收盘价",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "股票名称",
},
},
"required": ["name"],
}
}
}
]
4. 让 LLM 自动选择并调用函数
核心代码如下:
python
response = client.chat.completions.create(
model='deepseek-reasoner',
messages=messages,
tools=tools,
tool_choice='auto'
)
当用户提问时,LLM 会自动判断是否需要用工具,并生成调用请求。
5. 执行函数并返回结果
拿到 LLM 的 tool_calls 后,实际执行对应的 Python 函数,把结果再发给 LLM,最后由 LLM 生成最终回复。
完整流程代码片段:
python
if response.choices[0].message.tool_calls != None:
tool_Call = response.choices[0].message.tool_calls[0]
if tool_Call.function.name == "get_closing_price":
arguments_dict = json.loads(tool_Call.function.arguments)
price = get_closing_price(arguments_dict['name'])
messages.append({
"role": "tool",
"content": price,
"tool_call_id": tool_Call.id
})
response = send_message(messages)
print("回复:")
print(response.choices[0].message.content)
四、FunctionCall 的更多玩法
FunctionCall 不止能查股票价!你可以注册任意函数,比如查天气、查快递、甚至操作数据库。
只要你能用 Python 实现的功能,都能让 LLM 自动调用。
比如:
- 查天气:get_weather(city)
- 查快递:get_express_info(tracking_number)
- 控制硬件:turn_on_light(room)
五、FunctionCall 的优势与注意事项
优势
- 极大提升 LLM 实用性:AI 不再只会"胡说八道",而是能查实情、做实事。
- 可扩展性强:你可以随时添加新工具,AI 能力无限扩展。
- 自动化体验好:用户无需学习命令,直接用自然语言提问即可。
注意事项
- 工具函数要写得健壮,避免异常和安全问题
- 工具描述要清晰,方便 LLM 理解
- 注意接口调用频率和数据隐私
六、进阶:多轮对话与角色设定
FunctionCall 还能结合多轮对话和角色设定,打造更智能的 AI 助手。例如:
python
messages=[
{'role': 'system', 'content': '你是一个资深龙族粉丝...'},
{'role': 'user', 'content': '请你告诉我楚子航的言灵是什么'},
...
]
LLM 会根据上下文和角色设定,自动选择合适的工具和回复风格。
七、总结
FunctionCall 让大模型从"会说话"进化到"会做事",极大拓展了 AI 的应用边界。只要你掌握了工具注册、调用流程,就能让 AI 成为你的万能助手。赶快动手试试吧!