0Pricing
Learn AI with Python · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. OpenAI API:chat.completions 与流式传输
  2. 在 Python 中使用 Anthropic Claude API
  3. 使用 LLM 进行函数调用与工具使用
  4. 面向生产环境 LLM 应用的提示词工程
← 返回 Learn AI with Python