DeepSeek Function Calling 怎么用?定义工具、执行函数并回传结果

用 DeepSeek Tool Calls 声明函数、读取 tool_calls、校验并执行参数,再按 tool_call_id 回传结果;说明权限、幂等和失败边界。

DeepSeek 的 Function Calling(当前官方文档称 Tool Calls)不是让模型直接执行你的函数,而是让模型返回“想调用哪个工具、参数是什么”。你的程序必须校验参数、真正执行函数,再把结果作为 tool 消息回传,模型才会生成最终回答。

先理解完整闭环

  1. 程序在 tools 中声明函数名称、用途和 JSON 参数结构。
  2. 用户提问后,模型在 message.tool_calls 中提出调用请求。
  3. 程序解析并验证 function.arguments,执行本地函数或受控 API。
  4. 程序把原 assistant 消息和带 tool_call_id 的工具结果追加到消息历史。
  5. 再次请求模型,得到面向用户的自然语言回答。

这与 DeepSeek 官方Tool Calls 指南中的流程一致;具体请求字段可继续对照Chat Completion 接口。

DeepSeek Function Calling 怎么用?定义工具、执行函数并回传结果

可运行的最小 Python 结构

先安装当前版 OpenAI Python SDK,并把 DEEPSEEK_API_KEY 放入环境变量。示例用固定字典模拟天气查询,不访问真实天气服务,因此结果只是演示数据。

import json, 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"}},
            "required": ["city"],
            "additionalProperties": False
        }
    }
}]
messages = [{"role": "user", "content": "杭州天气怎样?"}]

first = client.chat.completions.create(
    model="deepseek-flash", messages=messages, tools=tools
)
assistant_msg = first.choices[0].message
messages.append(assistant_msg)

for call in assistant_msg.tool_calls or []:
    if call.function.name != "get_weather":
        raise ValueError("未允许的工具")
    args = json.loads(call.function.arguments)
    if args.get("city") != "杭州":
        raise ValueError("城市参数未通过校验")
    result = {"city": "杭州", "temperature": "24℃", "source": "demo"}
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps(result, ensure_ascii=False)
    })

final = client.chat.completions.create(
    model="deepseek-flash", messages=messages, tools=tools
)
print(final.choices[0].message.content)

模型名称以账号当前可用列表和官方文档为准。示例中的 deepseek-flash、温度和来源均不代表真实天气或你的实际调用结果。

怎样验证工具确实被调用

  • 第一轮应出现非空 tool_calls,其中名称恰好为允许的 get_weather。
  • arguments 必须能解析为 JSON,且只包含 schema 允许的字段。
  • 工具执行日志应有调用 ID、工具名、脱敏参数和成功/失败状态,不能只看模型最后一句话。
  • 最终回答中的城市、温度和来源应与工具返回一致;故意让工具返回错误时,程序应明确失败或把错误回传,不能编造成功结果。

生产环境必须补上的安全检查

函数名要用白名单映射,不能把模型返回的名称拼进 shell 命令或数据库语句。参数需做类型、长度、枚举、权限和资源归属校验;涉及付款、发信、删数据等写操作,还需要用户确认、幂等键和审计记录。模型提出调用不等于获准执行。

工具超时或外部系统返回未知结果时,把状态写成失败或待核实,再把可读错误交给模型。不要把异常吞掉后返回一个“执行成功”的字符串。

常见失败边界

模型可能不调用工具、一次提出多个调用、给出缺字段或格式错误的参数;程序都要有分支处理。并非所有模型、模式和参数组合都支持相同工具能力。本文根据 2026-10-01 官方文档整理,未用你的 Key 实际请求,也未连接真实天气 API;请先用无副作用的模拟函数通过全流程,再接业务系统。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32919.html

赞 (0)
AI小管家的头像AI小管家
DeepSeek API 余额怎么查?调用余额接口并区分现金与赠送额度
上一篇 1小时前
DeepSeek 代码补全 API 怎么用?设置前缀与后缀并验证插入结果
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部