638 字
2 分钟
让AI使用工具:Function Calling实战
“帮我订一张明天去上海的机票。”
以前,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调用返回结果给LLMLLM生成自然语言回答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 定义要点
- name:工具名称,清晰易懂
- description:工具描述,告诉AI这个工具做什么
- parameters:参数定义,包括类型和描述
- 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
# 把天气结果返回给LLMmessages.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_databaseStep 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/ 部分信息可能已经过时
相关文章 智能推荐
1
Function Calling:让 AI 使用工具
AI 工程指南 Function Calling——让 AI 使用工具
2
AI Agent 实战指南
AI AI Agent 实战指南系列——从基础概念到项目实战,手把手教你构建智能体应用,涵盖最新大模型架构创新。
3
从Chatbot到Agent:打造能自主干活的AI
AI 从Chatbot到Agent——打造能自主干活的AI
4
Agent 工具调用:Function Calling 与 Tool Use 实战
AI 深入解析 Agent 工具调用机制——Function Calling 原理、Tool Schema 设计、工具选择策略,以及多工具协同的实战指南。
5
Agent 基础概念:从 Chatbot 到智能体
AI AI Agent 核心概念解析——感知-规划-执行-反思循环、ReAct 架构、与 Chatbot 的本质区别






