大模型网摘deepseek.wang
EN

教程 · 2026-10-25

DeepSeek API Function Calling 实战:让 V4-Pro 学会调用你的函数

Function Calling(函数调用)是把大模型从"聊天框"变成"能干活的智能体"的关键一环:模型负责决定何时调用、传什么参数,你的代码负责真正执行。本篇用 DeepSeek 官方 API(OpenAI 兼容格式)以 deepseek-v4-pro 为例,从零跑通一个最小可用的函数调用流程。API 定价与选型见V4-Pro-0813 接入与比价,首次配置 API Key 可先过一遍Python 快速入门。

准备工作

安装 OpenAI 官方 SDK 并配置密钥(DeepSeek API 兼容 OpenAI 接口格式):

pip install openai
export DEEPSEEK_API_KEY="你的密钥"

第一步:定义工具并声明给模型

工具用 JSON Schema 描述名称、用途与参数。示例定义一个查天气函数:

import json
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com",
)

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

def get_weather(city: str) -> str:
    # 这里换成你的真实数据源;示例返回固定值
    return json.dumps({"city": city, "temp_c": 22, "cond": "多云"}, ensure_ascii=False)

第二步:处理 tool_calls 循环

模型返回 tool_calls 时,执行函数并把结果以 role=tool 消息回传,直到模型给出自然语言回答:

messages = [{"role": "user", "content": "北京现在多少度?穿什么合适?"}]

while True:
    resp = client.chat.completions.create(
        model="deepseek-v4-pro",
        messages=messages,
        tools=tools,
        temperature=0,
    )
    msg = resp.choices[0].message
    messages.append(msg)
    if not msg.tool_calls:
        print(msg.content)
        break
    for tc in msg.tool_calls:
        args = json.loads(tc.function.arguments)
        result = get_weather(args["city"])
        messages.append({
            "role": "tool",
            "tool_call_id": tc.id,
            "content": result,
        })

三个常见的坑

一是参数是字符串不是对象——function.arguments 返回 JSON 字符串,务必 json.loads;二是工具结果要回传——拿到 tool_calls 后不回传结果就再次请求,模型会重复发起调用;三是描述决定准确率——description 写得越具体,模型选错工具或乱填参数的概率越低,必要时在描述里给出取值示例。

进阶方向

跑通单工具后,可以尝试多工具并行(一次返回多个 tool_calls)、把工具接到真实数据源(数据库、内部检索),或结合联网能力做一个实时问答智能体——我们此前用 Search 与 Fetch API 搭过轻量联网问答,两者组合即是完整的 RAG 加工具链。若要处理图片输入,参考视觉能力教程。