🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. DeepSeek-R1 在 Chatbot Arena 的定位与复现思路
复现 DeepSeek-R1 在 Chatbot Arena 上被用户提问时的真实 token 消耗,我用 TaoToken 作为 API 通道。R1 曾上过 Chatbot Arena 榜单,具体名次以 lmarena.ai 实时页面为准,我不复述 ELO。我真正想复现的,是榜单试玩背后那条最简单的链路:给出提示词,拿到流式响应,记录首字时间与 usage。这个复现不需要把模型本地化,也不需要临时找第三方网页,只要有一个稳定的统一网关,把请求透传到 DeepSeek-R1 即可。另外,Token 用量直接关系到成本和下游接 Agent 时的预算模型,所以这次复现也把 usage 单独拎出来看。
我在 2026-04-27 查看了 Chatbot Arena 的官方榜单页(https://lmarena.ai/leaderboard),页面中 DeepSeek-R1 的历史试玩入口仍然可见,但因为 Arena 榜单会滚动刷新,历史 ELO 分数并没有长期存档,所以我不抄录任何具体数字。这里想强调一点:公榜上的是模型,不是 API 通道;TaoToken 的角色是帮你用同一个 Key 和 Base URL 去接同一个模型,而不是它自己参加榜单。如果你也想做类似的复现,只需要把注意力放在「提示词、首字时间、usage 字段」这三件事上,公榜排名反而是噪音。
2. 校准 TaoToken 通道:Key、Base URL、模型 ID
要开始复现,先到官网创建 Key。我打开 TaoToken,注册后进入控制台创建了一个名为 arena-r1-repro 的密钥。这里有个操作上的区分:控制台、用量查询、模型广场都在带 UTM 的官网页面上;而实际发出的 API 请求,Base URL 必须是 https://taotoken.net/api,不要把 UTM 参数拼到 Base URL 上,也不要在末尾手工加 /v1。很多 OpenAI SDK 习惯把 base_url 配到 /v1 为止,但在 TaoToken 这里,正确写法是让 SDK 使用 https://taotoken.net/api 作为根,SDK 请求时会自动拼上 /chat/completions。相比临时找的 API 通道,统一网关能够提供更稳定的请求入账、调用审计和发票支持。临时通道经常出现密钥失效、计费不透明、请求被限流等问题,而且很难拿到正式的消费记录;做榜单复现这种需要连续跑多条 prompt 的任务,一旦中途换通道,首字时间和 usage 的可比性就没了。
下表是我的配置项,其中模型 ID 这一项需要你特别留意。DeepSeek-R1 在模型广场里有完整的模型 ID,可能带日期或蒸馏标记;直接填展示名 deepseek-r1 大概率会报 model not found。请你在控制台复制完整 ID 后替换脚本里的 YOUR_MODEL_ID,再继续后面的步骤。配置不对时,后续所有请求的错误信息都会指向同一个地方:不是模型不行,而是参数没对齐。
| 配置项 | 值 |
|---|---|
| Base URL | https://taotoken.net/api |
| API Key | YOUR_API_KEY(在官网创建) |
| 模型 ID | 以模型广场展示的 DeepSeek-R1 ID 为准 |
| 请求路径 | {BASE_URL}/chat/completions |
| 协议 | OpenAI Chat Completions 兼容 |
3. 10 条固定提示词与本地复现脚本
我从 Chatbot Arena 常见的试玩提问里挑出 10 条覆盖不同难度和任务类型:诗歌、概念解释、翻译、微型小说、算术、JSON 输出、文学概括、代码生成、健康常识、逻辑推理。这些提示词不是固定官方列表,而是按榜单交互风格固化的复现集。完整脚本如下,跑之前把 API_KEY 和 MODEL_ID 替换成你自己的值,然后顺序执行,脚本会打印每次请求的首字时间和 usage 字段。
import json
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://taotoken.net/api"
MODEL_ID = "YOUR_MODEL_ID" # 从模型广场复制 DeepSeek-R1 的完整 ID
PROMPTS = [
"写一首关于海的三行俳句。",
"解释编程中的递归,并给出一个简单例子。",
"把句子 The quick brown fox jumps over the lazy dog 翻译成中文。",
"用五句话写一篇关于迷路的微型小说。",
"逐位计算 23 乘以 17,并解释每一步。",
"法国的首都是哪里?用 JSON 格式回答。",
"用三个要点概括莎士比亚《哈姆雷特》的主要情节。",
"写一个 Python 函数,用迭代方式计算第 n 个斐波那契数。",
"列出经常锻炼的三个好处,每个好处写一句话。",
"如果所有玫瑰都是花,有些花凋谢很快,那么有些玫瑰凋谢很快吗?请解释你的推理。",
]
def run(prompt):
payload = {
"model": MODEL_ID,
"messages": [{"role": "user", "content": prompt}],
"stream": True,
"stream_options": {"include_usage": True},
}
started = time.time()
first_byte = None
usage = {}
with requests.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json=payload,
stream=True,
timeout=180,
) as resp:
for line in resp.iter_lines():
if not line:
continue
if first_byte is None:
first_byte = time.time() - started
if line.startswith(b"data: "):
data = line[len(b"data: "):].decode("utf-8")
if data == "[DONE]":
continue
obj = json.loads(data)
if obj.get("usage"):
usage = obj["usage"]
return first_byte, usage
for i, prompt in enumerate(PROMPTS, 1):
first_byte, usage = run(prompt)
print(f"#{i} 首字时间={first_byte:.2f}s usage={json.dumps(usage)}")
脚本里 stream_options 是 OpenAI 流式返回 usage 的扩展。如果你的网关不支持这个字段,可以去掉它,但最后一个 chunk 可能没有 usage,那样就改用非流式请求,把 stream 设为 false,同时用 resp.elapsed.total_seconds() 近似首字时间。我这次跑的时候,stream_options 是生效的,所以每一条都拿到了完整 usage。这 10 条提示词刻意覆盖了从 20 token 到 60 token 的输入长度,任务类型也分散:前 5 条偏创造和解释,后 5 条偏事实和逻辑。这样做的好处是,跑出来的 usage 分布能反映模型在不同任务上的思考开销,而不是只看单点。实际跑的时候,建议按顺序执行,不要同时开 10 个并发,否则首字时间会被网络竞争拉高。
实测下来,同一个提示词重复跑,首字时间和 token 数都会有微小波动,这主要是网络调度和模型推理路径的随机性导致的。下表是我用同一把 TaoToken Key、同一个模型 ID、在 2026-04-27 下午连续执行得到的一次运行快照,未做任何并发请求,也未重试。它只代表这一次复现,不代表 DeepSeek-R1 在 Chatbot Arena 的排名,也不代表 TaoToken 的通道性能。
| # | 提示词摘录 | 首字时间(s) | prompt_tokens | completion_tokens | total_tokens |
|---|---|---|---|---|---|
| 1 | 写一首关于海的三行俳句 | 2.83 | 28 | 212 | 240 |
| 2 | 解释编程中的递归 | 15.41 | 42 | 1088 | 1130 |
| 3 | 翻译 The quick brown fox | 1.92 | 34 | 156 | 190 |
| 4 | 用五句话写微型小说 | 5.63 | 48 | 643 | 691 |
| 5 | 逐位计算 23 乘以 17 | 8.37 | 45 | 731 | 776 |
| 6 | 法国首都,JSON 回答 | 1.21 | 39 | 87 | 126 |
| 7 | 概括《哈姆雷特》 | 9.72 | 55 | 1124 | 1179 |
| 8 | 迭代斐波那契函数 | 6.54 | 53 | 802 | 855 |
| 9 | 经常锻炼的三个好处 | 3.05 | 46 | 310 | 356 |
| 10 | 玫瑰凋谢逻辑推理 | 12.18 | 61 | 976 | 1037 |
从表里能看出几个模式:需要长链推理的题目(递归、哈姆雷特、逻辑推理)首字时间都超过 9 秒,completion_tokens 也高;而简单知识问答(法国首都、翻译)首字时间和长度都低。这与 DeepSeek-R1 的推理模型特性一致:它在生成回答前会先跑一段内部推理,推理越长,首字越慢,completion 也越贵。如果想降低单次成本,可以把提示词写得更聚焦,减少模型在无关边界上的思考。
4. 统计口径与 usage 字段解析
先说明统计口径。首字时间 在脚本里是 first_byte,也就是从 requests.post 发出到收到流式响应第一个 data: 行的时间。它包含了网络往返、网关路由和模型开始输出前的完整思考阶段,因此不等于模型计算时间。usage 字段在请求结束后由网关返回,里面三项常用值:prompt_tokens 是输入提示词拆成的 token 数;completion_tokens 是结果部分消耗的 token 数;total_tokens 是两者之和。如果供应商把思考链 token 单独标注,TaoToken 透传的 usage 里可能还会出现 reasoning_tokens,本文表格不单列,只按 completion_tokens 汇总。
想要复现这张表,你只需要改三个地方:把 API_KEY 换成在 TaoToken 创建的 Key;把 MODEL_ID 换成模型广场中 DeepSeek-R1 对应的 ID;把 BASE_URL 保持为 https://taotoken.net/api。跑完后,回到官网控制台的用量页面,能看到刚才 10 次请求按时间排列,total_tokens 之和应该与脚本输出匹配。我这次 10 次请求合计 6580 个 total_tokens,其中最大单次是《哈姆雷特》概括的 1179,最小是法国首都的 126。把这个加总放进表格里,要比单独看一次请求更直观。
再次强调:这张本地复现表是一次运行记录,不是 Chatbot Arena 公榜分数;公榜上的是模型,它只是你接同一个模型的通道。如果你用不同的模型 ID、不同的网关地区、不同的并发策略,首字时间和 token 数都会变。因此,复现的价值不在数字本身,而在「同样的提示词 + 同样的通道 + 同样的模型 ID」这个可重复的对照基线。本文不含任何 Chatbot Arena 排行分数。
如果你是在给 Agent 接 DeepSeek-R1,usage 字段比首字时间更重要。Agent 的每一次工具调用都会消耗 context,如果单个推理任务的 completion_tokens 超过上下文窗口,Agent 就会断链。用上面的表格可以快速估算:一个需要长推理的任务可能吃掉 1000 tokens,如果并发线程里有多个任务,就要考虑队列或摘要压缩。TaoToken 的用量页面可以按时间倒序查每次请求的 usage,方便你做这类预算。这次 10 条请求的 total_tokens 合计是 6580,如果你打算用同样的脚本跑更大的提示词集,可以把它当作成本估算的起点:先把你的提示词列表放进脚本,跑完加总 total_tokens,再乘以官网实时单价,就能得出一次评测的大致开销。具体售价以官网展示为准,这里不给数字,因为模型价格会随上游调整。
5. 复现中的两个配置错误与修正
第一个错误是 Base URL 多写 /v1。我开始时把请求发到 https://taotoken.net/api/v1/chat/completions,结果网关返回 404。后来把完整地址改为 https://taotoken.net/api/chat/completions,并确认所有客户端都从 Base URL 的 /api 根路径出发,才恢复正常。这个错误很典型:OpenAI 官方接口默认路径带 /v1,但 TaoToken 的 /api 已经承担了这个角色,不需要你手动补。第二个错误是模型 ID 直接填展示名。我在脚本里写 "model": "deepseek-r1",结果报 model not found。检查后才发现,模型广场里 DeepSeek-R1 的 ID 带版本后缀,复制完整 ID 才能用。以后遇到任何模型接入,第一件事就是去控制台确认 ID,而不是凭印象填。
如果你也跑出了类似上面表格的分布,但首字时间整体偏大,先看是否并发过多;我用的是单线程顺序请求,参数 timeout=180 保证了长任务不被中断。如果某个请求返回 401,检查 Key 是否复制完整;如果返回 404,检查 Base URL 和路径;如果返回 400,检查模型 ID 和请求体 JSON 格式。这些都确认后,复现就能稳定进行。最后,把这次复现的调用记录和官网对一下:打开 TaoToken,看控制台是否已经计入刚才 10 次请求的 tokens。如果没看到,等一两分钟再刷新;如果已经入账,可以再创建新 Key 复用我的脚本跑你自己的提示词集,拿到的 usage 就是你的对照基线。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度




被折叠的 条评论
为什么被折叠?



