deepseek 的 api 调用

接入与开发

给接入 DeepSeek 接口的开发者一份工程落地清单:请求参数怎么设、超时并发降级日志怎么配、上线前用哪些用例验一遍。

写第一版调用代码通常不难,难的是它进了生产以后:偶发超时、并发一压就报错、换模型后返回格式变了、出了问题日志里查不出是哪次请求。这篇不讲协议长什么样,只讲把 DeepSeek 接口接进项目后,参数、超时、并发、降级、日志、评测这几件事该怎么定,给你一份能照着勾的清单。

写第一版调用代码通常不难,难的是它进了生产以后:偶发超时、并发一压就报错、换模型后返回格式变了、出了问题日志里查不出是哪次请求。这篇不讲协议长什么样,只把参数、超时、并发、降级、日志、评测这几件事该怎么定讲清楚,给你一份能照着勾的清单。

适用范围先说清楚:下面这套做法适合把接口接进后台服务、批处理任务、客服或内容类工具的场景。如果你只是本地写个脚本跑几十条数据,超时和降级可以先跳过;如果你的调用量极小、失败重跑一次就完事,微服务级别的熔断也不用上,别把简单事做复杂。

请求参数:先用最小集跑通,再逐项加

第一版代码只留四样:模型名、消息数组、流式开关、输出长度上限。其余参数先不写。原因很实在——一次引入多个变量,出了问题你不知道是哪一项导致的,只能挨个注释掉重跑,时间全浪费在试错上。跑通之后每加一项,单独验证它对输出和耗时的影响。

参数类别什么时候必须显式设定不设会怎样
模型名永远要写死,不要依赖默认值默认值随平台调整,行为会悄悄变
消息数组每条消息带角色,系统提示单独放指令和用户输入混在一起,效果不稳
流式开关长文生成、要边出边显示的场景必须开整段生成时间把读超时撑爆
输出长度上限永远要显式给给太大推高成本和延迟,给太小回答被截断
温度等随机性参数按任务分档后固定每轮现调,结果没法复现,回归没法做
  • 随机性参数按任务分档:抽取、分类、格式转换往低调,写文案、头脑风暴往高调,同一个任务固定一个值。
  • 输出长度上限不要凭感觉给一个很大的数,按你能接受的最长回答来定,超了就让业务层截断。
  • 把参数集中写进一个配置文件或常量模块,换模型、调参只改一个地方,方便回滚。
  • 参数改动要能追溯到人:配置里写注释说明为什么是这个值,半年后回看不用猜。

超时、重试与流式:三个桶分开设

超时至少分两层:连接建立超时设短一点,说明网络或域名解析有问题,快速失败;读取超时按任务给,长文生成必须配合流式,否则读取超时会被整段生成时间撑爆。这两层混成一个值,短任务会觉得设置太长、长任务又不够用。

  1. 先量基线到 接口测速(/tools/speed-test) 在你的部署网络下实际跑一遍,记下正常情况的耗时区间,超时数值以这个区间为参照往上留余量。
  2. 再分错误重试只对连接被拒、网关类错误、限流这三类做重试;鉴权失败和参数错误重试多少次都没用,直接抛出来看。
  3. 加退避和总上限重试用指数退避加随机抖动,同时给整条链路设总时长上限,避免用户早就关了页面后台还在重试。
  4. 最后验流式兜底流式接进业务时处理三种半截数据:客户端断开、上游中断、最后一段 JSON 不完整,都不能直接把拼接结果入库。

流式还有一个容易忽略的点:边收边渲染时,前端要能显示「正在生成」的状态,并且允许用户中断。中断之后服务端要能感知并停止后续处理,否则你已经不看了,后台还在消耗额度和并发位。

并发、限流与降级:别等挂了再想

并发数从 1 开始往上压,观察报错出现的临界点,而不是先写一个看起来很爽的大数字。批量任务用队列加固定大小的 worker 池,池子大小写进配置,别写在循环里动态算。判据很简单:压到某个数错误开始成片出现,那个数就是你的当前上限,实际配置比它低一档留余量。

账号级限流
靠排队、降并发、错峰解决,是你能自己控制的
平台级限流
得换时间段或换通道,硬扛只会一直失败
降级第一档
换同一家的备用模型或备用接入点,功能不变质量降一点
降级第二档
关掉非核心功能,让主流程先跑通
  • 降级触发条件写清楚:连续失败多少次、错误率超过什么比例,别用「感觉不太行」当条件。
  • 降级开关要能手动关掉,自动触发可能误判,留一个人工回滚的口子。
  • 上线前给每个关键调用点定义「失败时用户体验是什么」,答不上来就说明还没设计完。
  • 并发和超时是联动的:超时调短会让并发压力上升,改一个要连带看另一个。
  • 如果打算换接入通道来绕开限流,先去 中转站与接入点导航(/sites) 看当时的可用情况和可信度标注,别随便找个地址就换。

日志与评测:让每次调用可复盘

日志的核心不是记全,而是能复盘。每条调用固定记这几项:请求时间、模型名、输入输出字符量、耗时、状态码、是否命中重试、trace id。不记完整原文,只记长度和摘要,既省存储也避免把用户内容散落到日志系统里。

日志字段用途注意
trace id从用户反馈一路查到那次请求必须透传到业务日志
耗时判断是网络慢还是生成慢和超时阈值对照看
是否重试识别重试是否在掩盖问题重试率高说明某个环节不稳
输入输出字符量估算用量和排查截断不记原文,只记长度

改提示词、换参数、换模型之前,先攒一组固定用例做回归,十几条就够,覆盖你实际遇到的典型输入。对比新旧版本的通过率,别凭感觉说「好像更好了」。上线后按周看一次失败分布:是集中在某个错误码、某个时段还是某类输入,这决定了下一步是调超时还是调并发。

团队里对用量的口径要先对齐,不然几个人算的不是一回事,回归对比也就没意义。基础口径可以到 基础概念词典:Token、上下文、温度(/ai-dict/category/basics) 核对。至于各家当前的单价和计费方式,本站不在这里写死,去 价格追踪(/price-watch) 看当时的数字。

能复盘的系统不一定快,但出问题时它至少告诉你去哪找答案。
下一步把上面的清单过一遍,再对着你现在的调用代码勾:参数是否集中、超时是否分层、降级是否有开关、日志是否带 trace id。想顺带核对接入点和当前价格,从导航页进去看当时的情况。

常见问题

第一次调 DeepSeek 接口,请求体最少要写什么?

至少要有模型名和消息数组,再加上流式开关和输出长度上限。其他可选参数先全部不写,跑通之后再一项一项加,这样出问题时能立刻定位是哪个参数引起的。消息数组里系统提示和用户输入的位置不要搞混。

调用频繁超时,是接口慢还是我的代码有问题?

先用测速工具量一遍你在当前网络下的基线延迟,再对比线上日志里的耗时分布。如果连接阶段就慢,多半是网络或代理问题;如果是读阶段慢,通常是输出太长没开流式,或者超时给得太短。两种情况处理方式完全不同。

换了接入通道之后返回格式变了,该怎么处理?

不要假设字段完全一致,解析时对关键字段做存在性判断,缺字段就走默认值或报明确错误,而不是直接抛异常。上线前把同一段请求分别打到新旧通道,对比返回结构差异,把差异项写进适配层,别散在业务代码里。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。