DeepSeek V3 与 R1:能力、成本与延迟的取舍

场景与需求

我维护的小工具站和脚本集要接的活五花八门:客服问答、文章摘要、分类打标是日常大头;隔三差五有硬骨头——日志里找根因、代码评审、数据口径核算。之前一律用同一个模型,结果是简单任务在为用不到的推理能力买单,难任务又嫌它想得不深。

需求拆开是三条:

  1. 简单任务要快、要便宜,延迟敏感;
  2. 复杂任务要推理质量,愿意多花钱多等;
  3. 接入成本要低——最好还是同一个接口,靠参数切换,不要维护两套客户端。

DeepSeek 官方 API 恰好把这两类能力分成两个模型名挂在同一个接口下,接入方式见DeepSeek API 接入教程

候选方案

方案接口模型名特点适合
V3 系(非推理)deepseek-chat直接给答案,速度快、单价低对话、写作、摘要、分类、格式转换
R1 系(推理)deepseek-reasoner先输出思考过程再给答案,数学/代码/复杂推理强难题求解、代码评审、Agent 规划
本地蒸馏版Ollama 里的 deepseek-r1 各档零 token 成本、数据不出门隐私草稿、离线兜底,能力弱于满血版

两个模型名是稳定入口:deepseek-chat 对应 V3 系非推理模型,deepseek-reasoner 对应 R1 系推理模型,背后版本会升级、入口名不变【待补:当前映射的具体版本号】。本地蒸馏档位的选择单独成篇,见本地跑 DeepSeek 要什么配置

关键差异有三点。其一,输出结构不同:reasoner 会先吐思考过程(流式下在扩展字段 reasoning_content 里),再给最终答案,这段思考本身也占输出量。其二,计费不同:思考 tokens 也按输出计费【待补:官方计费口径原文】,所以同一个问题 reasoner 的实际成本可能是 chat 的数倍。其三,延迟不同:reasoner 要想完才答,首字延迟和总时长都显著更高,交互场景体感明显。

还有一条工程层面的限制:reasoner 的思考内容是给人看的中间产物,官方文档提示不要把 reasoning_content 拼回下一轮请求当上下文用【待补:官方文档原文位置】,多轮对话只需要携带最终答案,把思考链也带上只会白白放大输入成本。

测算模型与假设

先定费用与耗时的估算式(单价【待补:官网价格页】):

单次成本 = 输入 tokens × 输入单价 + 输出 tokens × 输出单价
reasoner 输出 tokens ≈ 思考 tokens + 最终答案 tokens
单次耗时 ≈ 首 token 延迟 + 输出 tokens ÷ 生成速度

用量假设(示例数字,发布前替换为真实统计【待补:近一个月调用日志】):

假设项取值
日均请求200 次
任务构成摘要/分类/问答 80%,推理类 20%
chat 单次输出约 300 tokens
reasoner 单次输出思考约 800 + 答案约 400 tokens
月请求量约 6000 次

路由错误是双向亏钱的:该走推理的活塞给 chat,答错了要返工,一次返工等于两次调用还搭上一次坏体验;不该走推理的活塞给 reasoner,多出来的思考 tokens 全是白花的钱,延迟还翻倍。所以”怎么路由”和”选哪个模型”是同级别的问题,后面的决策框架主要就是在解前者。

测算结果表

按上面的假设推一版(单价与速度实测【待补】,发布前用真实数据重算全表):

维度deepseek-chatdeepseek-reasoner
单次输出 tokens约 300约 1200(含思考)
单次成本(相对)1 倍基准约 3~5 倍
首 token 延迟秒级明显更长【待补:实测数据】
月成本占比(按 20% 用量)约 55%约 45%
数学/代码题表现够用但非强项强项【待补:同题实测正确率】

结论在算之前就浮出来了:20% 的推理请求,花掉接近一半的预算。如果推理请求里再混进本不需要推理的活,浪费还会放大;反过来,把该推理的活塞给 chat 返工重试,省的钱也都会赔进去。

决策框架

三个问题依次问,答案决定路由:

  1. 任务有没有可验证的正确答案? 有(数学、代码逻辑、根因分析)→ 倾向 reasoner;没有(文风改写、摘要、闲聊)→ chat。
  2. 要不要看推理链? 需要审计”为什么这么判”的场景(风控解释、评分依据)→ reasoner 的思考过程本身就是交付物的一部分。
  3. 延迟与成本预算内吗? 在线交互对延迟敏感,reasoner 慎用;离线跑批不敏感,可以放宽。

补一条产品细节:切到 reasoner 后,界面和日志要给思考内容留展示位,并配”思考中”的状态提示,否则用户看到首字迟迟不来会以为卡死了——首字延迟变长是它区别于 chat 最直观的体感。

落到代码里就是一行路由函数,接在业务分发层:

REASONING_TASKS = {"math", "code_review", "root_cause", "planning"}

def pick_model(task_type: str) -> str:
    return "deepseek-reasoner" if task_type in REASONING_TASKS else "deepseek-chat"

同一个问题两个模型的直观差异,curl 就能对比:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{"model": "deepseek-reasoner", "messages": [{"role": "user", "content": "9.11 和 9.9 哪个大"}]}'

reasoner 的返回里会先看到一段思考内容,再是最终答案;换成 deepseek-chat 则直接给答案。两个模型的调用方式和参数完全一致,切换成本就是一个字符串——这正是同一家 API 内部做分层的优势。若还在纠结 API 与本地部署的取舍,先看DeepSeek 怎么用:网页版/App/API/本地部署怎么选

我的最终选择

  • 默认 deepseek-chat:占八成的日常任务全部走它,快和便宜是硬道理;
  • reasoner 进白名单:只有数学核算、代码评审、根因分析三类任务路由过去,并限制触发频率,避免被滥用成默认选项;
  • 本地蒸馏版做隐私层:涉敏文本先在本地用小模型脱敏和打草稿,结果再上 API 精加工,部署配置见本地跑 DeepSeek 要什么配置
  • 每月对账一次:按上面的测算表回填真实数据,推理请求占比若超过 30% 就重新评估白名单。

这套结构的要点不是”哪个模型更好”,而是让任务类型决定模型,而不是让习惯决定

相关阅读