DeepSeek API 的功能调用功能通过兼容 OpenAI 格式的 `tools` 参数实现,核心配置包含函数名称、描述及 JSON Schema 格式的参数定义。开发者需在请求体中声明可用函数列表,模型会根据意图自动返回函数调用请求而非直接文本。
先说结论:DeepSeek API 通过 `tools` 参数配置函数调用,要求函数定义严格遵循 JSON Schema 规范。
- 适合:需要模型连接外部系统或查询实时数据的场景
- 先准备:符合 JSON Schema 规范的函数定义文件
- 验收:检查返回消息中是否包含 `tool_calls` 字段
快速处理思路
配置函数调用无需特殊 SDK,直接在 Chat Completions 请求中增加 `tools` 数组即可。以下为核心配置片段,直接替换请求体中的对应部分:
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名称"}
},
"required": ["location"]
}
}
}
]为什么会这样
DeepSeek API 设计为完全兼容 OpenAI 接口格式,因此复用了对方的函数调用协议。
这种兼容性意味着开发者无需修改原有基于 OpenAI 编写的代码即可迁移,模型内部通过意图识别引擎解析用户输入,匹配预注册的函数名和参数结构。当模型判断需要外部数据时,不会直接生成文本答案,而是返回结构化的函数调用请求,由开发者执行后再将结果回传给模型。
分步处理
按以下步骤完成函数调用配置,确保每一步都有明确的检查点:
- 定义函数 Schema:编写 JSON Schema 描述函数名、参数类型及必填项,确保描述清晰以便模型理解。
- 构建请求体:在 `/chat/completions` 接口的 `messages` 之外,添加 `tools` 字段填入定义好的函数列表。
- 设置调用策略:可选配置 `tool_choice` 参数,设为 `auto` 让模型决定,或指定具体函数名强制调用。
- 处理响应:解析返回数据,若存在 `tool_calls` 则执行对应代码,并将执行结果以 `tool` 角色回传。
怎么验证是否生效
验证的核心是检查 API 响应对象中是否包含工具调用指令,而非普通文本内容。
查看响应 JSON 中的 `choices[0].message.tool_calls` 字段,若该字段存在且包含函数名和参数,说明配置生效。若返回的是 `content` 文本且无 `tool_calls`,则模型未触发函数调用,需检查函数描述是否足够清晰或用户意图是否明确。
常见坑
- Schema 格式错误:参数定义不符合 JSON Schema 规范会导致模型无法识别,建议先用在线工具验证 Schema 合法性。
- 敏感信息泄露:不要在函数描述或参数中硬编码 API 密钥,密钥应存储在服务器环境变量中。
- 无限循环风险:若模型反复调用同一函数且未获得有效结果,需设置最大重试次数防止死循环。
常见问题
函数调用失败返回空内容怎么办
检查函数描述的清晰度,模型可能无法理解何时该调用函数。
支持同时定义多个函数吗
支持,在 `tools` 数组中依次添加多个函数定义即可,模型会自动选择最合适的一个。
需要额外付费开启此功能吗
不需要,函数调用是模型原生能力,按正常 Token 用量计费,无额外功能费。
参考来源
- DeepSeek API 调用完整教程 (保姆级)Python/JS/cURL 全示例 + 流式输出 + 函数调用_deep seek-CSDN 博客
- DeepSeek 调用 API 实时查天气:FunctionCalling 技术全解析与实战指南
- DeepSeek-V2 的 API 文档详解:参数与返回值说明-CSDN 博客
- DeepSeek 官方控制台:https://platform.deepseek.com/