跳到主内容

DeepSeek 工具调用怎么写:定义、回传与 strict 模式

2026-11-03 发布 来源:我告诉你AI导航 阅读

DeepSeek API 的工具调用(Tool Calls)走 OpenAI 兼容格式:你在请求里声明工具,模型返回「要调哪个函数、参数是什么」,执行由你的代码完成,再把结果回传(官方指南,核对时间 2026 年 11 月 3 日)...

DeepSeek API 的工具调用(Tool Calls)走 OpenAI 兼容格式:你在请求里声明工具,模型返回「要调哪个函数、参数是什么」,执行由你的代码完成,再把结果回传(官方指南,核对时间 2026 年 11 月 3 日)。这篇把定义结构、四步回传、strict 模式的 schema 清单讲全——三条边界先划出来:思考模式下工具可用、Chat Completion 不能中途插工具调用、strict 是 Beta 功能。

工具怎么定义:四个字段

tools 数组里每个工具的骨架是 type 为 function,function 内四个字段:name(函数名)、description(给模型看的功能说明,写清「用户要先提供什么」)、parameters(JSON Schema,type 为 object,properties 里逐个字段给类型与说明)、required(必填项清单)。以查天气为例:name 用 get_weather,description 写「获取某地天气,用户应先给出地点」,parameters 里放 location 字符串字段并列入 required。description 的写法直接决定模型会不会在合适的时机调用,函数调用的提示词设计见函数调用场景的提示词。

四步回传流程:模型不执行函数

一轮完整调用的固定节奏,官方示例就是这四步:① 用户发问(普通 user 消息);② 模型返回 tool_calls——不是答案,而是一个结构化的函数调用请求(函数名+参数对象),response 里 message.tool_calls[0] 带着调用 id;③ 你的代码执行函数,把结果拼成一条 role 为 tool 的消息(带 tool_call_id 对应关系)追加进对话;④ 再次请求,模型拿到结果后用自然语言回答。容易忽略的一点:模型自己不执行任何函数,get_weather 里「查天气」这件事要你的代码对接真实数据源。与 MCP 工具的区别(托管调用还是自建函数)见MCP 和函数调用差在哪。

思考模式下工具可直接用

从 DeepSeek-V3.2 起,API 支持在思考模式下使用工具——当前版本默认开思考,不必为了调用工具而关掉思考。官方的非思考示例里用了 thinking type 设为 disabled 的写法,那只是演示非思考路径;日常 Agent 任务建议保持思考开启、配合档位选择(档位与任务对照见DeepSeek 三档思考强度怎么选),让模型先想清楚再决定调不调、调哪个。

strict 模式:让参数格式卡死

strict(Beta)解决「模型输出的参数不完全符合 schema」的问题:开启后模型严格按你定义的 JSON Schema 输出工具调用参数,思考与非思考模式都支持。开启三步:① base_url 换成 https://api.deepseek.com/beta(Beta 功能走这个入口);② tools 里所有 function 加 strict 设为 true;③ 服务端会校验你的 schema,写法不规范或用了不支持的类型会直接报错。schema 类型支持有边界,写之前对一遍清单:

类型支持不支持(写了会报错)
object嵌套结构;每个属性必须列入 required,且 additionalProperties 设为 false——
stringpattern 正则、format(email/hostname/ipv4/ipv6/uuid)minLength、maxLength
number/integerconst、default、minimum、maximum、exclusive 系列、multipleOf——
arrayitems 定义元素结构minItems、maxItems
enum / anyOf固定选项集;多 schema 择一——
$ref/$def复用模块与递归结构(按官方拼写 $def)——

两个高频坑:一是 object 里「全属性 required+additionalProperties false」是硬要求,漏一个就被服务端打回;二是限长需求没有 minLength/maxLength,长度约束要挪到 pattern 正则里表达。

对话中途插工具调用:分 API 看

Agent 场景里常需要把「不是模型发起的工具调用」连同结果插进历史(比如业务侧主动查了一次数据)。这条能力按 API 格式分家:Anthropic 兼容 API(/messages)与 Responses API 支持中途插入工具调用消息,也支持中途插 system 消息;Chat Completion API 只支持中途插 system 消息,不支持插工具调用——要用这条能力,架构上就得选 Anthropic 格式或 Responses API 接入(两者入口见DeepSeek 模型名怎么填的 base_url 说明)。选型时把这条列进 checklist,能省掉后期迁移。

常见问题

  • 模型为什么不调我定义的工具?先查三处:description 是否说清了「什么时候该用」(没说清模型就自己回答了);required 与参数说明是否完整;以及用户问题是否真的需要工具——模型有权不调。排查时把返回的 tool_calls 原文打出来看,别只看最终回答。
  • strict 报错「schema 校验不通过」怎么修?对照上面清单逐项查:大概率是 object 漏了全属性 required 或 additionalProperties false,或是用了 minLength、minItems 这类未支持参数——换成 pattern 正则表达。
  • 工具调用和联网搜索什么关系?Search 与 Fetch 是平台方提供的服务端工具(调用即计费,规则见DeepSeek 联网搜索 API),tools 里声明的是你自建的函数——两者可以共存,Agent 流程里按需分工。报错排查统一看DeepSeek API 报错对照。

信息来源

  • DeepSeek 官方「Tool Calls」指南(api-docs.deepseek.com/guides/tool_calls,核对时间 2026-11-03):工具定义四字段、四步回传流程、DeepSeek-V3.2 起思考模式支持工具、对话中途插入的分 API 边界、strict 模式三步开启与 schema 类型支持清单($def 拼写、object 全 required 要求、string/array 不支持参数);
  • 站内条目:DeepSeek(工具页)、模型名怎么填、Codex 接入。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]