mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
638 字
2 分钟
让AI使用工具:Function Calling实战
2025-12-13

“帮我订一张明天去上海的机票。”

以前,AI只能回复:“我无法帮你订票,我只是个聊天程序。”

现在,AI可以真的帮你订票——通过Function Calling。

这是AI从”聊天”到”干活”的。

本文要点#

  • Function Calling的工作原理
  • 如何定义工具给AI用
  • 多工具协作的实战
  • 常见问题与解决方案

一、Function Calling是什么?#

1.1 AI不会执行代码,但会”决策”#

这是一个关键认知:LLM本身不会执行代码,它做的是决策。

用户:"北京今天天气怎么样?"
LLM的思考:
1. 用户想查天气
2. 我有个天气查询工具
3. 需要的参数是城市名
4. 用户说的是"北京"
5. 决定:调用天气工具,参数city="北京"
返回:
{
"function": "get_weather",
"arguments": {"city": "北京"}
}
你的代码执行真正的天气API调用
返回结果给LLM
LLM生成自然语言回答

1.2 工作流程#

flowchart TD N0["用户问题"] N1["LLM决策"] N0 --> N1 N1["LLM决策"] N2["返回工具调用"] N1 --> N2 N2["返回工具调用"] N3["你的代码执行"] N2 --> N3 N3["你的代码执行"] N4["结果返回LLM"] N3 --> N4 N4["结果返回LLM"] N5["最终回答"] N4 --> N5

二、如何定义工具#

2.1 工具定义示例#

tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如:北京、上海"
}
},
"required": ["city"]
}
}
}
]

2.2 定义要点#

  1. name:工具名称,清晰易懂
  2. description:工具描述,告诉AI这个工具做什么
  3. parameters:参数定义,包括类型和描述
  4. required:必填参数

描述很重要:AI根据描述决定是否调用这个工具。


三、完整示例:天气查询#

3.1 步骤1:定义工具#

tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名"}
},
"required": ["city"]
}
}
}
]

3.2 步骤2:调用LLM#

response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "北京今天天气怎么样?"}
],
tools=tools
)

3.3 步骤3:处理工具调用#

# LLM返回工具调用决策
tool_call = response.choices[0].message.tool_calls[0]
if tool_call.function.name == "get_weather":
args = json.loads(tool_call.function.arguments)
# args = {"city": "北京"}
# 执行真正的天气查询
weather = get_weather(args["city"])
# weather = {"temp": 25, "condition": "晴"}

3.4 步骤4:返回结果给LLM#

# 把天气结果返回给LLM
messages.append({
"role": "tool",
"content": json.dumps(weather)
})
# LLM生成最终回答
final_response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
# "北京今天天气晴朗,气温25度。"

四、多工具协作#

4.1 定义多个工具#

tools = [
{
"type": "function",
"function": {
"name": "search_web",
"description": "搜索互联网获取信息"
}
},
{
"type": "function",
"function": {
"name": "query_database",
"description": "查询公司内部数据库"
}
},
{
"type": "function",
"function": {
"name": "send_email",
"description": "发送邮件"
}
}
]

4.2 AI自动规划#

用户:"帮我查一下最近销售数据,然后发邮件给销售总监"
AI的决策:
Step 1: 调用 query_database
Step 2: 调用 send_email
AI会自动规划工具调用顺序

五、最佳实践#

5.1 描述要清晰#

"查询天气"
"获取指定城市的当前天气信息,包括温度、湿度、天气状况"

5.2 参数要有约束#

"parameters": {
"properties": {
"city": {"type": "string"},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"] # 限制可选值
}
}
}

5.3 错误处理#

try:
result = execute_tool(tool_name, args)
except Exception as e:
# 把错误返回给LLM,让它调整策略
return f"工具执行失败:{str(e)}"

5.4 粒度适中#

太粗:一个工具做太多事
太细:工具太多,AI难以选择
原则:一个工具做一件事

常见问题 FAQ#

Q1: AI怎么知道该调用哪个工具?

A: AI根据工具的description和你提供的上下文来判断。描述越清晰,AI判断越准确。

Q2: 工具调用失败怎么办?

A: 把错误信息返回给AI,它会尝试其他方式或告诉用户无法完成。

Q3: 可以同时调用多个工具吗?

A: 可以。现代LLM支持并行调用多个工具,提高效率。

Q4: Function Calling和RAG有什么区别?

A:

  • RAG:让AI查知识
  • Function Calling:让AI执行操作

两者可以结合使用。


小结#

Function Calling的核心:AI决策,你的代码执行。

定义好工具,让AI知道有什么可用。AI会自动决定调用哪个工具、传什么参数。

这是AI从”聊天”到”干活”的关键能力。


下篇预告#

工具调用让AI能执行单个操作,但如果任务需要多步骤规划呢?


参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

让AI使用工具:Function Calling实战
https://blog.souloss.com/posts/machine-learning/llm/function-calling-tools/
作者
Souloss
发布于
2025-12-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时