英伟达发布开源大模型Nemotron 3 Super

Function Calling 实战:让模型调用你的函数查实时数据

Function Calling · Tool Use · Agent阅读时间:9 分钟发表时间:2026.07.06
Function Calling 实战:让模型调用你的函数查实时数据

Function Calling 实战:让模型调用你的函数查实时数据

本站为独立第三方技术服务平台,提供多模型 API 聚合接入服务,与 Anthropic、OpenAI、Google 等模型提供商无任何关联、授权或合作关系。

大模型的知识是"截止到某个时间"的,你问它"现在库存多少""这个订单啥状态",它答不上来——因为这些数据在你的系统里,不在模型脑子里。Function Calling(工具调用)就是解决这个的:模型判断需要外部数据时,主动"请求"调用你写好的函数,你执行后把结果回传,它再据此作答。这篇带你在 Code0 上用 OpenAI SDK 跑通这个完整闭环。

TL;DR

  • Function Calling 让模型"知道自己不知道",主动调用你的函数补数据。
  • 闭环四步:定义工具 → 模型请求调用 → 你执行函数 → 结果回传给模型作答。
  • 用 OpenAI SDK 标准 tools 参数,换模型只改 model 字段。
  • 适用查库存、查订单、查天气、算价格等一切"实时/私有数据"场景。

前置准备

  1. 注册 Code0 账号:https://console.code0.ai/console/dashboard
  2. 获取 API Key(控制台 → API Keys → 创建)
  3. 安装 SDK:pip install openai
from openai import OpenAI
client = OpenAI(base_url="https://hk.code0.ai/v1", api_key="sk-你的Key")

步骤拆解

步骤 1:写你的真实函数

这里用一个查天气的假函数示意,实际换成你查数据库、调内部 API 的代码即可。

def get_weather(city: str) -> str:
    # 真实场景:这里去查你的接口/数据库
    fake = {"北京": "晴,26℃", "上海": "多云,28℃"}
    return fake.get(city, "暂无数据")

步骤 2:把函数描述成"工具"给模型

模型不看你的代码,它看的是一段 JSON 描述——函数叫什么、干什么、要什么参数。

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "查询指定城市的实时天气",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名,如 北京"},
            },
            "required": ["city"],
        },
    },
}]

步骤 3:第一次请求,看模型要不要调工具

带上 tools 发起请求。如果模型认为需要查数据,它不会直接回答,而是返回一个"工具调用请求"。

messages = [{"role": "user", "content": "北京现在天气怎么样?"}]

resp = client.chat.completions.create(
    model="claude-opus-4-8",  # 换 gpt-5.4 / gemini-3-pro 只改这行
    messages=messages,
    tools=tools,
)
msg = resp.choices[0].message

步骤 4:执行函数,把结果回传,拿最终答案

如果模型请求了工具调用,你就执行对应函数,把返回值作为一条 tool 消息塞回去,再请求一次,模型据此给出自然语言答案。

import json

if msg.tool_calls:
    messages.append(msg)  # 把模型的工具调用请求加入历史
    for call in msg.tool_calls:
        args = json.loads(call.function.arguments)
        result = get_weather(**args)  # 真正执行你的函数
        messages.append({
            "role": "tool",
            "tool_call_id": call.id,
            "content": result,
        })
    # 带着函数结果再问一次
    final = client.chat.completions.create(
        model="claude-opus-4-8", messages=messages, tools=tools,
    )
    print(final.choices[0].message.content)
else:
    print(msg.content)  # 模型觉得不用查,直接答

完整代码示例

可直接复制运行:

import json
from openai import OpenAI

client = OpenAI(base_url="https://hk.code0.ai/v1", api_key="sk-你的Key")

def get_weather(city: str) -> str:
    fake = {"北京": "晴,26℃", "上海": "多云,28℃"}
    return fake.get(city, "暂无数据")

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "查询指定城市的实时天气",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string", "description": "城市名"}},
            "required": ["city"],
        },
    },
}]

def ask(question: str, model: str = "claude-opus-4-8") -> str:
    messages = [{"role": "user", "content": question}]
    resp = client.chat.completions.create(model=model, messages=messages, tools=tools)
    msg = resp.choices[0].message
    if not msg.tool_calls:
        return msg.content
    messages.append(msg)
    for call in msg.tool_calls:
        args = json.loads(call.function.arguments)
        result = get_weather(**args)
        messages.append({"role": "tool", "tool_call_id": call.id, "content": result})
    final = client.chat.completions.create(model=model, messages=messages, tools=tools)
    return final.choices[0].message.content

if __name__ == "__main__":
    print(ask("北京现在天气怎么样?"))   # 会触发工具调用
    print(ask("你好,介绍下你自己"))     # 不需要工具,直接答

换个模型跑同一套工具

工具定义和闭环逻辑对所有支持工具调用的模型通用,换模型只改 model

print(ask("上海天气如何?", model="gpt-5.4"))
print(ask("上海天气如何?", model="gemini-3-pro"))

同一套 tools、同一个 Key,挑对你场景工具调用最靠谱的模型即可。

常见问题

  • Q:模型每次都会调工具吗? → 不会,它自己判断。问题不需要外部数据时会直接回答。想强制调用可用 tool_choice 参数指定。
  • Q:能定义多个工具吗? → 能,tools 列表里放多个,模型会按需选择甚至连续调用多个。
  • Q:哪些模型支持工具调用? → 支持 Function Calling 的模型都行,可用列表以控制台为准,切换只改 model
  • Q:函数报错怎么办? → 在执行函数处做好异常捕获,把错误信息作为 tool 结果回传,让模型据此给出兜底回复。
  • Q:这算 Agent 吗? → 这是 Agent 最核心的一块。把"多工具 + 多轮循环调用"组合起来,就是一个能自己查、自己算的智能体雏形。

小结

Function Calling 的本质,是给模型装上"手"——让它能主动调你的系统去拿实时和私有数据。闭环不复杂,四步就能跑通。用 Code0 的好处是一套 tools、一个 Key,就能在 Claude、GPT、Gemini 间挑工具调用最稳的模型。想把多个模型按任务难度组合起来,可以接着看 一套代码切换所有模型:Code0 多模型路由实战