注册并分享邀请链接,可获得视频播放与邀请奖励。

剑的 AI 实验室 (@swordBluesy) “建议收藏,用到时照着做。做完你能让 DeepSeek 自己决定“要不要调用你写的函数”,并把” — TopicDigg

剑的 AI 实验室 的个人资料封面
剑的 AI 实验室 的头像
剑的 AI 实验室
@swordBluesy
加入 June 2026
0 正在关注    0 粉丝
建议收藏,用到时照着做。做完你能让 DeepSeek 自己决定“要不要调用你写的函数”,并把结果用人话讲回来。 AI 能查天气、查订单,是它自己去查的吗?DeepSeek 官方一句话拆台:模型本身不执行任何函数 这是 DeepSeek 官方 API 文档里 Tool Calls(工具调用)一页。先说结论: 官方原话是,函数要由你自己提供,模型本身不执行具体函数。它只负责说“我想调这个函数、参数是这些”,真正去跑的是你的代码。 先说清词。 工具调用(Tool Calls),是让模型能用外部工具的功能,比如查天气、查数据库。 函数(function),是你自己写好的一段代码,模型只会“点名”它。 tool_call_id(工具调用编号),是模型每次点名时附带的一个号码,你回传结果时要带上它,模型才知道你在回答哪一次。 strict 模式(严格模式,Beta 测试版),是让模型点名时严格按你定义的格式填参数。 一个真实例子:官方示例问“杭州天气怎么样”,模型返回的是 get_weather 这个函数和参数 location 等于杭州,你的代码去查到“24℃”,再交给模型,模型才说“杭州现在 24 度”。 先把话说全: 官方示例用的是非思考模式,请求里加 extra_body 把 thinking 的 type 设成 disabled。 官方写明:从 DeepSeek-V3.2 开始,思考模式下也能用工具调用,细节看官方 Thinking Mode 一页。 官方写明:Chat Completion 接口不支持在对话中间插入不是模型生成的工具调用,要插的话请改用 Anthropic API 或 Responses API。 strict 模式目前是 Beta,要用测试版地址。 一、先看懂整个流程 官方给的执行流程是四步:用户问杭州天气;模型返回要调用 get_weather,参数是杭州;你的代码真的去调用 get_weather,把结果交给模型;模型用自然语言回答“杭州现在 24 度”。 二、照官方示例做一遍 第一步:去 DeepSeek 开放平台拿一个 API key,电脑装好 Python 和 openai 库。 第二步:创建客户端,base_url 写 DeepSeek 官方接口地址(官方文档第一屏就有),api_key 填你的。 第三步:写 tools 清单。每个工具包含 type 等于 function,再写 name(函数名)、description(描述,告诉模型什么时候用)、parameters(参数)。官方示例的函数叫 get_weather,描述是“获取某地天气,用户须先提供地点”,参数 location 是字符串,并且在 required 里。 第四步:发第一次请求,model 官方示例写 deepseek-flash,把 messages 和 tools 一起传,并加上 thinking 关闭的设置。 第五步:从返回里取 tool_calls 的第一项,先把模型这条消息原样追加进 messages。 第六步:你的代码去执行函数,再追加一条 role 是 tool 的消息,带上刚才的 tool_call_id,content 写结果,官方示例写的是 24℃。 第七步:再发一次请求,这次模型就会用自然语言回答。 三、想要更稳:strict 严格模式 第八步:base_url 改成官方文档里写明的 beta 版接口地址(就是原地址后面加 /beta)。 第九步:每个 function 都加上 strict 等于 true。 第十步:服务器会检查你的 JSON Schema(结构说明),格式不合规或用了不支持的类型,会直接返回错误信息。 官方支持的类型是:object、string、number、integer、boolean、array、enum、anyOf,另外 $ref 和 $def 可以复用和做递归。 四、strict 的硬规矩 对象里所有属性都必须写进 required,并且 additionalProperties 必须设成 false。 字符串可以用 pattern(正则)和 format,官方列出的格式有 email、hostname、ipv4、ipv6、uuid,但不支持 minLength 和 maxLength。 数字支持 const、default、minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf。 数组不支持 minItems 和 maxItems。 五、看到什么算成功 第一次返回的是函数点名,不是答案;第二次返回的才是自然语言答案,内容里有你的函数结果。 六、卡住怎么办 strict 报错:先检查是不是漏写 required 或忘了 additionalProperties 设 false,再检查有没有用到 minLength、maxItems 这类官方不支持的写法。 结论:工具调用不是模型替你干活,而是模型“点名”、你的代码“动手”。想让点名更准,就用 strict。把这条复制链接发给他,下次他说 AI 查不到东西,先让他确认函数是不是自己写了。 你卡在第几步?评论区告诉我。同系列前几篇在我主页。 收藏版:5 步速查 一、tools 里写清函数名、描述、参数 二、第一次请求拿到 tool_calls 三、自己执行函数,回传 role 为 tool 的消息并带 tool_call_id 四、第二次请求拿到自然语言答案 五、想更稳就用 beta 地址加 strict 等于 true 常见坑 3 条 一、以为模型会自己执行函数,其实要你的代码去跑。 二、回传结果忘了带 tool_call_id。 三、strict 里漏了 required 或 additionalProperties 设成 false。 复制即用提示词:我想让模型调用一个叫 你的函数名 的函数,它需要这些参数:写参数。请帮我写出符合 DeepSeek Tool Calls 格式的 tools 清单,每个参数都写 description,并改成 strict 模式需要的写法。 S1哥观点:这篇最狠的地方,是官方把话挑明了:模型不执行函数,只负责点名。很多人以为 AI 在后台自己动手,其实动手的永远是你的代码。 真正的信号是:工具调用的难点不在模型,在你把函数描述写得多清楚。就像派活给新人,说明写得含糊,他再聪明也会点错人。 你现在想让 DeepSeek 调用的是什么,查数据还是发消息?评论区告诉我。 今天送:DeepSeek 工具调用速查卡,评论区第一条直接拿。 参考:DeepSeek 官方 API 文档 Tool Calls(S1哥 整理)
显示更多