最近 DeepSeek API 调价的讨论热度很高。网上有“涨价 30 倍”的说法,也有不少开发者晒出自己的账单,表示新价格下成本压力明显变大。但在同一波讨论里,也出现了另一个看似矛盾的观点:涨价之后的 DeepSeek,仍然是当前大模型 API 里绝对价格最便宜的一档。这两个真相同时成立,才是这次调价事件最有意思的地方。
这篇文章不打算复述新闻,而是把“涨价 30 倍”这个数字是怎么来的、DeepSeek 的计费结构到底怎么算、涨价之后项目还值不值得继续接入这些事从头到尾讲清楚。我会给出完整的 API 调用示例、VSCode/Codex/企业微信等工具链的接入思路,并把最近社区里高频出现的reasoning_content报错单独拆出来分析。不管你是个人开发者还是团队负责人,读完后应该能自己算明白:涨价之后,你的项目用 DeepSeek 到底贵了多少。
1. 背景:涨价 30 倍是怎么回事
1.1 优惠期结束,价格回到正常区间
DeepSeek API 早期为了快速积累开发者生态,推出过力度非常大的限时优惠活动。优惠期内,输入、输出 token 的单价都被压到了极低水平,很多开发者习惯性地把“白菜价”当成了 DeepSeek 的常驻价格。优惠活动结束后,API 价格恢复至常态价格,部分计费梯度在活动前后对比之下,出现了非常悬殊的倍率差。
“涨价 30 倍”这个数字,正是社区根据活动价和恢复价之间的倍率对比得出的。需要注意的是,这不是所有模型、所有计费维度都涨了 30 倍。DeepSeek 的计费维度包含输入价格、输出价格、缓存命中价格、缓存未命中价格,不同维度在活动前后的优惠力度不同,恢复后的最终定价也不同。所以“30 倍”更像是一个最极端的对比口径,真实成本影响取决于你的请求模式。如果项目里大部分请求都能命中上下文缓存,实际支出的涨幅会远远小于标题里的数字。
1.2 为什么涨价之后仍然是最便宜的一档
价格回调之后,DeepSeek 的绝对单价放在全球大模型 API 市场里依然处于低价侧,这不是营销话术,背后有几个实实在在的技术原因。
第一,DeepSeek 采用 MoE(混合专家)架构,单次推理只激活全部参数的一小部分,单位 token 的推理成本被明显压缩。成本低,定价空间就大。第二,DeepSeek 开放了模型权重,企业如果对成本极度敏感,完全可以自己部署一套,API 价格如果定得太高,反而会把用户推向自部署方案。第三,DeepSeek 在上下文缓存、KV Cache 复用、推理引擎优化上持续投入,缓存命中价格远低于未命中价格,高频业务的实际成本被进一步摊薄。
所以准确的说法是:DeepSeek 的“标价”涨了,但它的“成本结构”没有变,涨价只是把促销期的补贴收回了。考虑到它仍能提供长上下文、开源权重、OpenAI 兼容协议这些条件,涨价后它依然是大模型 API 里性价比很高的一档。
1.3 这次调价对开发者的实际影响
调价对不同类型的项目影响差异很大。偶尔调用、个人练手场景,几乎感受不到变化;但批量离线任务、Agent 多轮对话、代码补全这类高频调用场景,月度账单会有明显波动。其中受影响最大的是思考型模型(reasoner)的长时间推理任务,因为这类任务输出 token 多、单次耗时长,输出单价在计费结构里本身就是最高的。
企业侧更常见的应对思路是混合方案:简单分类、抽取、格式化任务放到开源小模型或本地模型上,复杂推理、数学、代码生成任务继续走 DeepSeek API。这样既控制成本,又不牺牲关键场景的模型能力。
2. 看懂 DeepSeek 的计费模型
2.1 四个核心计费维度
DeepSeek 开放平台的计费并不是简单的“输入多少钱、输出多少钱”,而是分成四个维度:
| 计费项 | 含义 | 价格档位 |
|---|---|---|
| 输入(缓存未命中) | 首次请求或上下文前缀无法命中缓存时,输入 token 的单价 | 较高 |
| 输入(缓存命中) | 相同上下文前缀命中系统缓存时,输入 token 的单价 | 最低 |
| 输出 | 模型生成内容的 token 单价 | 最高 |
| 上下文缓存 | 系统自动为相同前缀建立缓存,无需手动开启 | 命中与否决定成本 |
需要说明的是,具体价格会随着官方策略调整而变化,任何网上的截图都可能过期。最准确的做法是登录 DeepSeek 开放平台控制台,查看“价格计算器”或最新价目表。本文重点讲计算思路,示例中的价格数字只用于演示,不要直接当成真实报价。
2.2 单次请求成本计算公式
一次 API 调用的费用可以拆成三部分:
单次请求费用 = 输入未命中 token × 未命中单价 + 输入命中 token × 命中单价 + 输出 token × 输出单价这里的关键点在于“输入 token”并不是一个固定数字。DeepSeek 支持自动上下文缓存,如果多轮对话的前缀没有变化,第二次请求的相同部分就能按缓存命中价格计费,价格可能只有未命中价的四分之一甚至更低。所以同一个功能,不同写法的成本差异可以非常大。
2.3 用 Python 脚本估算成本
为了不让“涨价 30 倍”停留在口头上,我写了一个简单的成本估算函数,你可以把官方最新的单价填进去,折算自己项目的 token 分布:
# 文件路径:estimate_cost.py def estimate_cost( input_tokens: int, output_tokens: int, cache_hit_tokens: int = 0, price_input_miss: float = 2.0, # 示例价:元/百万 token price_input_hit: float = 0.5, # 示例价:元/百万 token price_output: float = 8.0, # 示例价:元/百万 token ) -> float: """估算单次请求费用,最终结果以元为单位。""" input_miss_tokens = max(0, input_tokens - cache_hit_tokens) cost = ( input_miss_tokens * price_input_miss + cache_hit_tokens * price_input_hit + output_tokens * price_output ) return cost / 1_000_000 # 场景:一次 4000 输入 + 800 输出的请求 # 假设 3000 个输入 token 命中了缓存 cost = estimate_cost( input_tokens=4000, output_tokens=800, cache_hit_tokens=3000, ) print(f"单次请求估算成本:{cost:.4f} 元")函数里的价格参数是示例值,实际使用时替换为控制台的最新单价即可。你只需要把自己的请求日志里的 token 统计导出来,套用这个函数,就能得到比较接近真实账单的月度成本。
2.4 一个典型 Agent 场景的账
以 Agent 多轮工具调用为例。每轮对话都需要把系统提示词、历史消息、工具定义重新发给模型,输入 token 会随轮数线性增长。假设单轮输入 5000 token、输出 800 token,连续对话 20 轮,如果每一轮都完整携带历史,累计输入高达 10 万 token。这种情况下,缓存命中与否对最终账单影响巨大。
把系统提示词固定、保持消息前缀稳定,让后续轮次命中缓存,输入成本可能下降 50% 以上。这也是为什么很多 Agent 框架都会强调“system prompt 保持稳定”的原因。它不只是为了效果一致,更是为了省钱。
3. DeepSeek API 快速接入
3.1 创建 API Key 的前置步骤
接入 DeepSeek API 之前,需要先在开放平台完成三件事:注册账号、创建 API Key、为账户充值。创建 API Key 时注意,Key 通常只在创建页面完整展示一次,关闭后无法再次查看,务必复制保存到本地密码管理器。
生产环境强烈建议把 Key 放在环境变量或密钥管理服务中,而不是写死在代码里。后续所有代码示例都会读取DEEPSEEK_API_KEY环境变量。
export DEEPSEEK_API_KEY="sk-你的密钥"3.2 用 curl 发起第一个请求
DeepSeek API 兼容 OpenAI 协议,所以请求结构和 OpenAI 基本一致。下面是最简单的非流式调用:
curl https://api.deepseek.com/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \ -d '{ "model": "deepseek-chat", "messages": [ {"role": "user", "content": "用一句话介绍 DeepSeek API"} ], "stream": false }'这里有两个细节。model字段决定使用哪个模型,deepseek-chat是通用对话模型,适合大部分日常任务;如果要做数学、逻辑推理,可以换成deepseek-reasoner,它的思考能力更强,但延迟和成本也更高。base_url可以写https://api.deepseek.com,也可以写https://api.deepseek.com/v1,两者对兼容层都做了支持。
3.3 用 OpenAI SDK 调用 DeepSeek
因为协议兼容,Python 项目里可以直接使用官方openai库,只需要修改base_url。先安装依赖:
pip install openai然后编写调用代码:
# 文件路径:deepseek_demo.py from openai import OpenAI client = OpenAI( api_key="sk-你的密钥", base_url="https://api.deepseek.com", ) resp = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "user", "content": "请用一段话说明项目周报该怎么写"} ], stream=False, ) print(resp.choices[0].message.content)这段代码就是完整的可运行示例。相比直接拼 HTTP 请求,用 SDK 的好处是自动处理重试、超时和错误解析,后续接流式输出也只需要把stream设为True。
3.4 思考模式与 reasoning_content
使用deepseek-reasoner这类思考型模型时,响应里除了常规的content字段,还会多出一个reasoning_content字段,表示模型的内部思考过程。在 OpenAI 官方协议里没有这个字段,这是 DeepSeek 的扩展。代码里可以这样访问:
resp = client.chat.completions.create( model="deepseek-reasoner", messages=[ {"role": "user", "content": "8 个人 6 天完成的工作量,4 个人需要几天?"} ], ) # 模型内部思考过程 print(resp.choices[0].message.reasoning_content) # 最终回答 print(resp.choices[0].message.content)这个reasoning_content字段是后文报错分析的核心,很多第三方工具在转换协议时就是栽在它身上,先记住它的存在。
4. 开发工具链接入 DeepSeek
4.1 VSCode 插件接入 DeepSeek
VSCode 接入 DeepSeek 最常用的方式是安装 Continue 或 Cline 这类 AI 编程插件,然后把模型 Provider 指向 DeepSeek。以 Continue 为例,编辑它的配置文件config.json:
{ "models": [ { "title": "DeepSeek Chat", "provider": "openai", "model": "deepseek-chat", "apiBase": "https://api.deepseek.com/v1", "apiKey": "sk-你的密钥" } ] }不同插件的配置字段名可能略有差异,但核心就是三样:API Key、Base URL、模型名。配置完成后,就可以在侧边栏直接提问,也能对选中代码做解释、补全或单测生成。这类插件本质上都是把编辑器里的对话请求转发到 API,所以计费方式和你自己写代码调用完全一致,插件本身不会额外产生模型费用。
4.2 Codex 接入 DeepSeek 的协议问题
Codex CLI 默认走的是 OpenAI 的 Responses 协议,而 DeepSeek 官方主要提供 Chat Completions 协议,两者不能直接互通。要在 Codex 里用 DeepSeek,通常有两种做法。
第一种是修改 Codex 的config.toml,自定义一个 Provider 指向 DeepSeek,让 Codex 直接走 Chat Completions。社区常见写法如下,但不同版本字段差异较大,请以你安装版本的官方文档为准:
model = "deepseek-chat" [model_providers.deepseek] name = "DeepSeek" base_url = "https://api.deepseek.com/v1" env_key = "DEEPSEEK_API_KEY" wire_api = "chat"第二种做法是在中间加一个本地代理工具,例如 CC Switch。Codex 请求发到本地代理,代理把 Responses 协议转换成 Chat Completions 再转发给 DeepSeek。这样做的好处是 Codex 配置不用大改,但代价是多了一层协议转换,容易引入新的兼容问题,第 5 节要讲的报错就是这么来的。
4.3 Harness、Hermes 等桌面工具怎么用
最近社区里出现了不少围绕 DeepSeek 生态的桌面客户端和插件,Harness、Hermes 等名字频繁出现在讨论中。这些工具大多是社区开发者或第三方团队做的客户端壳,并不是 DeepSeek 官方统一发布的家族产品,它们的使用方式大同小异:下载安装后,填入自己的 API Key,选择模型名,有些还会要求填 Base URL。
在使用这类工具时,有三条建议。第一,尽量从开源仓库或作者官网下载,警惕来路不明的打包安装包。第二,安装后先看一下版本号,兼容问题往往在新版本中修复得很快。第三,桌面工具本质上还是调用官方 API,官方模型能力和价格不会因为换了客户端而改变,别被工具宣传里的“免费”“无限”误导。
4.4 企业微信群机器人接入 DeepSeek
企业微信接入 DeepSeek 最常见的场景是群机器人通知。企业微信群机器人提供 Webhook 地址,往这个地址 POST 一段 JSON,就能把内容推送到群里。结合 DeepSeek 生成内容,可以实现“定时生成周报推送到群”“自动总结并通知”这类小工具。
# 文件路径:wechat_robot.py import requests from openai import OpenAI def notify_wechat(webhook_url: str, text: str): payload = { "msgtype": "text", "text": {"content": text} } resp = requests.post(webhook_url, json=payload, timeout=10) resp.raise_for_status() return resp.json() # 1. 调用 DeepSeek 生成内容 client = OpenAI(api_key="sk-你的密钥", base_url="https://api.deepseek.com") answer = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": "写一条 50 字以内的项目周报"}] ).choices[0].message.content # 2. 推送到企业微信群 webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key" notify_wechat(webhook_url, answer)注意,这种 Webhook 方式适合“单向通知”场景。如果要做“群内 @ 机器人提问、机器人自动回答”的交互,需要额外部署一个接收回调的服务,并且处理企业微信的签名校验和消息加解密,复杂度要高出不少,建议先从小通知场景起步。
5. 高频报错:reasoning_content 必须回传
5.1 报错现象
最近很多人在 CC Switch 这类本地代理工具中接入 DeepSeek 时,遇到如下报错:
cc switch local proxy failed while handling codex endpoint /responses. provider: deepseek; model: deepseek-v4-flash; upstream_status: http 400; cause: the `reasoning_content` in the thinking mode must be passed back to the api.从日志可以看出,请求先经过 Code