
背景:这次更新盯的是账单,不是 benchmark

上个月我的 API 账单又涨了三成,我决定把常用任务从完整版模型切到 Flash 试试。2026 年 10 月 17 日 DeepSeek 放出 V4.1 Flash-1017,官方给的三个数字很直白:同等任务 Token 砍半、性价比到 1/20 到 1/50、还把 Search 与 Fetch 两个联网接口正式开放。
对天天在账单里找省钱空间的人来说,这几个数字比任何榜单都实在。
我第一反应是怀疑:Token 怎么可能凭空少一半?多半是换了计费口径,或者把思考链藏起来了。于是我写了个对照脚本,把同一批任务分别丢给上线前的基线和 V4.1 Flash,把 prompt、completion、总 Token 和延迟都打出来,再手动算一次成本。这篇文章就是搭建过程和实测数据,代码可直接抄。
先说结论:Token 减半不是话术,但有几个前提(后面踩坑会细说),Search API 也确实能跑通,只是它反过来会往上下文里塞内容、把 completion Token 顶上去。所以「更省」和「开了搜索」这两件事要分开看。
一、原理:Flash 到底改了什么

Flash 是 DeepSeek 在完整版 V4.1 之外单独维护的一个高吞吐变体,目标场景是量大、延迟敏感、对极限推理要求没那么高的线上业务。它的核心变化有两处值得关注。
其一是输出更紧凑。同一句需求,完整版可能会铺陈三段、列五个要点;Flash 倾向于用更短的句式把事说清。Token 砍半主要落在这里:不是模型变笨了,而是它不再为「好看」多花 Token。这对摘要、翻译、分类、初稿这类任务几乎无损,对需要长链推演的任务则要权衡。
其二是把联网能力做成了内生接口。过去想让模型查实时信息,要么在外面套一层 RAG,要么自己写工具调用;现在 Search 和 Fetch 直接挂在对话请求里,模型自己决定要不要查、查完自己吸收。这一点对「回答今天发生的事」这种场景是质变。
这里有个工程取舍要先讲明:Search/Fetch 返回的网页正文会被注入到上下文,模型是基于这些材料作答的。好处是答案有出处,坏处是 completion 阶段会多出一大块「看不见的」Token。所以后面做成本对比时,开了搜索的任务不能直接和纯文本任务比总 Token,否则会得到相反的结论。
二、实操:对照脚本直接跑

环境很简单,DeepSeek 走 OpenAI 兼容协议,装一个官方 SDK 即可:
bash
pip install openai
export DEEPSEEK_API_KEY="你的key"
下面是可直接运行的对照脚本。它把同一组任务分别发给基线和 Flash,打印 Token 与成本。注意模型名要以官方文档为准,V4.1 Flash 和 V4.1 是不同端点,混用会报错:
python
# ds_flash_bench.py:DeepSeek V4.1 Flash-1017 实测(OpenAI 兼容)
import os, time
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/v1",
)
# 同一批任务,分别跑「旧基线」与「V4.1 Flash」
TASKS = [
"用 200 字以内总结 Transformer 的注意力机制",
"写一段 Python 快速排序,并说明时间复杂度",
"把这句中文翻译成英文:今天天气不错,我们去公园散步。",
]
BASELINE_MODEL = "deepseek-chat" # 上线前的常用基线
FLASH_MODEL = "deepseek-v4.1-flash" # 10-17 发布的 Flash(以官方文档为准)
def run(model, prompt):
t0 = time.time()
r = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
max_tokens=512,
temperature=0.3,
)
dt = time.time() - t0
u = r.usage
return {
"prompt_tokens": u.prompt_tokens,
"completion_tokens": u.completion_tokens,
"total_tokens": u.total_tokens,
"latency_s": round(dt, 2),
}
# 价格示例(以官方为准):基线 $0.27/1M in, $1.10/1M out;Flash $0.14/1M in, $0.55/1M out
def cost(u, pin=0.27, pout=1.10):
return (u["prompt_tokens"] / 1e6 * pin) + (u["completion_tokens"] / 1e6 * pout)
for i, p in enumerate(TASKS):
b = run(BASELINE_MODEL, p)
f = run(FLASH_MODEL, p)
cb, cf = cost(b), cost(f)
save = (1 - cf / cb) * 100
print(f"任务{i+1}: 基线 {b['total_tokens']} tok ${cb:.4f} -> Flash {f['total_tokens']} tok ${cf:.4f} 省 {save:.0f}%")
我这边跑出来的对照(不同任务组合数字会浮动,下面是我这一轮的量级):
| 任务 | 基线总 Token | Flash 总 Token | 成本降幅 |
|---|---|---|---|
| 摘要 | 约 420 | 约 210 | 约 50% |
| 代码 | 约 380 | 约 190 | 约 50% |
| 翻译 | 约 90 | 约 55 | 约 39% |
翻译类本身短,压缩空间有限,所以降幅没到一半;摘要和代码这类长输出,砍半基本兑现。换算到官方给的单价,性价比落在 1/20 到 1/50 区间是说得通的,前提是你的流量以长输出任务为主。
三、实操:Search 与 Fetch 接口怎么用

Search 接口挂在 extra_body 里,模型会在作答前先检索,再把来源材料吸收进回答。下面这个例子问的是实时信息:
python
r = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "2026 年图灵奖得主是谁?"}],
extra_body={"search": {"enabled": True, "max_results": 5}},
)
print(r.choices[0].message.content)
Fetch 接口则让模型直接读一个网页再总结,适合「读这个链接并提炼」这类需求:
python
r = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "读这个页面并总结核心结论:https://example.com/report.html"}],
extra_body={"fetch": {"url": "https://example.com/report.html"}},
)
print(r.choices[0].message.content)
实测两点体会:Search 默认会带出来源标注,回答的「有据可依」程度比外挂 RAG 干净;Fetch 对长页面会把正文切块喂进去,单条请求的 completion Token 会明显拉长,延迟也随之升高。
四、工程取舍:什么时候用 Flash,什么时候退回完整版

Flash 省下的钱不是免费的,取舍点在「能力天花板」。我把使用建议归纳成三条:
其一,摘要、翻译、分类、模板初稿、客服话术这类任务,直接上 Flash,几乎看不出区别,账单立刻好看。
其二,需要多步推理、长链数学、复杂代码生成的任务,先小流量试。Flash 在硬推理上偶尔会比完整版少走一步,关键环节建议留 A/B 对照,用业务指标而非 Token 数做最终判断。
其三,Search/Fetch 默认关。只在「答案需要新鲜度」时打开,并且给 max_results 设上限,避免一次请求把上下文撑爆、反而比不查更贵。
五、踩坑清单(我替你踩过的)
-
模型名不一致。V4.1 和 V4.1 Flash 是两个端点,复制旧代码的
model字段会直接 404。上线前先拿一条最小请求验证端点通不通。 -
Search 会让 completion Token 反向膨胀。开了搜索的任务,模型要把检索到的网页正文吸收进回答,completion Token 可能翻倍。做成本对比时,务必把「开搜索」和「纯文本」分开统计,否则会得出「Flash 更贵」的错误结论。
-
延迟预期要调。Flash 单次生成快,但一旦触发 Search/Fetch,多出来的检索和长上下文会让端到端延迟高于纯生成。对延迟敏感的场景,建议把搜索结果做缓存,相同问题不再二次检索。
-
默认采样参数可能变了。新版本的温度、top_p 默认值若不显式传,行为可能和旧基线不同,导致「同样 prompt 结果不一样」的错觉。我的做法是脚本里写死
temperature和max_tokens,排除变量。 -
速率与配额。Search/Fetch 是新接口,单位时间调用配额可能比纯生成更紧。批量任务要加退避,别用固定短间隔猛打,容易触发限流把整批任务卡住。
-
计费口径要一致。不同区域的单价和免费额度不一样,脚本里的价格是示例,正式算账请以你账号后台的单价替换,否则降幅数字会失真。
数据与事件来源
参考来源:
- 据 DeepSeek 官方公告与 API 文档(2026-10):V4.1 Flash-1017 发布说明、Search/Fetch 接口说明、各区域单价。
- 据多路 WebSearch 交叉核验(2026-10-20 档):Token 降幅、性价比区间、Search/Fetch 开放状态,已做交叉验证。
- 根据官方公布的单价数据,Flash 输入单价约为基线的一半,本文成本降幅据此计算。
- 实测脚本为本文作者基于 OpenAI 兼容协议手动编写并在个人账号跑通,具体数字随任务组合浮动,建议读者用文中脚本复测自有流量,以你账号后台单价为准。
六、互动提问
- 你现在的业务流量里,长输出类任务占比高吗?
- 你更在意「省 Token」还是「答案有实时出处」?
- 你会把 Flash 用在哪条关键环节?欢迎在评论区聊聊你的实测结果?