使用 LLM 进行函数调用与工具使用
将工具定义为 JSON 模式、处理响应中的 tool_calls,以及执行并返回结果。
使用 LLM 进行函数调用与工具使用 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
什么是函数调用
函数调用(也称为工具使用)允许 LLM 请求您的代码运行某个函数。模型不会自行执行任何操作,而是返回一个结构化请求,说明“使用这些参数调用这个函数”。您的程序执行该函数,再将结果传回模型。
LLM 正是通过这种方式获取实时数据、进行数学运算或触发实际操作的。
描述工具
您需要向模型提供一个工具列表。每个工具都有 name、description 和以 JSON Schema 定义的 parameters。描述非常关键,模型会依据它判断何时适合使用该工具。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name"}
},
"required": ["city"]
}
}
}]用于参数的 JSON Schema
parameters 字段采用标准的 JSON Schema。您需要声明一个对象,并为其定义 properties;每个属性都有 type 和描述,此外还要提供一个 required 数组。这样模型就能准确知道应生成哪些参数。
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"units": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}将工具传递给模型
将 tools 列表发送给 chat.completions.create()。现在,模型可以根据用户请求返回文本 OR 工具调用。
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Weather in Tokyo?"}],
tools=tools
)检测工具调用
当模型想要使用工具时,回复中会包含 message.tool_calls,而不是普通文本。在假定得到纯文本答案之前,请先检查这个列表是否存在。
msg = response.choices[0].message
if msg.tool_calls:
print("Model wants to call a tool")
else:
print(msg.content)解析参数
每个工具调用都有 function.name 和 function.arguments。参数以JSON 字符串的形式传入,因此请先使用 json.loads() 解析,再进行使用。
import json
call = msg.tool_calls[0]
name = call.function.name
args = json.loads(call.function.arguments)
print(name, args) # get_weather {"city": "Tokyo"}执行函数
现在,使用解析后的参数运行 YOUR 实际 Python 函数。LLM 只决定要调用什么,真正执行工作的是您的代码。
def get_weather(city):
return {"city": city, "temp_c": 18, "condition": "Cloudy"}
result = get_weather(**args)将结果返回给模型
将结果传回模型,使其能够生成自然语言答案。先追加原始助手消息,然后添加一条携带结果和匹配的 tool_call_id 的 tool 角色消息。
messages.append(msg) # the assistant tool-call message
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps(result)
})生成最终答案
使用更新后的 messages 再次调用模型。现在模型已经获得工具结果,可以为用户生成友好的最终回复。
final = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
print(final.choices[0].message.content)完整的工具使用循环
完整流程如下:(1) 发送工具;(2) 模型返回工具调用;(3) 解析参数;(4) 运行函数;(5) 将结果作为工具消息返回;(6) 模型生成答案。模型可能会在结束前请求多个工具调用,因此请循环执行,直到 tool_calls 为空。
控制工具选择
使用 tool_choice 参数来引导行为。"auto"(默认值)允许模型自行决定;"none" 禁止使用工具;传入特定工具名称则会强制调用该函数。当您必须保证结构化输出时,这非常有用。
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice={"type": "function", "function": {"name": "get_weather"}}
)快速检查
测试您对工具使用的理解。
回顾:函数调用
您定义了包含名称、描述和 JSON Schema 参数的工具,然后将它们传递给模型。您检测 tool_calls,使用 json.loads() 解析 function.arguments,执行实际函数,并将结果作为带有匹配 tool_call_id 的 tool 角色消息返回。
最后一次模型调用会将原始结果转换为自然语言答案,从而完成工具使用循环。
常见问题解答
「使用 LLM 进行函数调用与工具使用」课时是免费的吗?
是的 — 「使用 LLM 进行函数调用与工具使用」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「使用 LLM 进行函数调用与工具使用」这节课中我会学到什么?
将工具定义为 JSON 模式、处理响应中的 tool_calls,以及执行并返回结果。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 LLM 进行函数调用与工具使用」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- OpenAI API:chat.completions 与流式传输
- 在 Python 中使用 Anthropic Claude API
- 使用 LLM 进行函数调用与工具使用
- 面向生产环境 LLM 应用的提示词工程