DeepSeek-R1 vs Claude Sonnet:推理任务谁更强?附真实 benchmark
TL;DR:数学推理和纯逻辑推理 DeepSeek-R1 有明显优势;代码推理和多步骤复合任务 Claude Sonnet 更稳;价格上 DeepSeek-R1 碾压性便宜。选谁取决于你的场景,这篇文章给你数据说话。
背景:为什么要测推理能力?
2025 年之后,"推理模型"这个词被说烂了。DeepSeek-R1 横空出世时,很多人惊呼国产模型干掉了 o1。但实际用起来,推理模型并非万能,它有自己的适用场景。
本文用 TheRouter 统一 API,对 DeepSeek-R1 和 Claude Sonnet 4 做了四类推理任务的对比测试。TheRouter 是一个 AI 路由网关,一个 API Key、一套 OpenAI 兼容接口就能调用所有主流大模型,省去了各家 SDK 的切换麻烦。
测试时间:2026 年 3 月
测试环境:Python 3.12,httpx 异步请求,每个 case 独立对话,无上下文污染
测试模型和调用方式
import httpx
import json
BASE_URL = "https://api.therouter.ai/v1"
API_KEY = "your-therouter-api-key"
def chat(model: str, messages: list, **kwargs) -> dict:
resp = httpx.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": model, "messages": messages, **kwargs},
timeout=120,
)
resp.raise_for_status()
return resp.json()
DEEPSEEK_R1 = "deepseek/deepseek-r1"
CLAUDE = "anthropic/claude-sonnet-4"
两个模型 ID 都是 TheRouter 的标准格式(brand/model-name),底层路由完全透明,我们只关心结果。
任务一:数学推理
Prompt
一列火车从 A 站出发,以 80 km/h 的速度向 B 站行驶。
同时,另一列火车从 B 站出发,以 120 km/h 的速度向 A 站行驶。
两站相距 600 km。
问:两列火车在距 A 站多少公里处相遇?求解过程要展示每一步。
DeepSeek-R1 输出
<think>
设两列火车相遇时,A 出发的火车行驶了 t 小时。
同一时刻,B 出发的火车也行驶了 t 小时。
A 出发的火车行驶距离:80t
B 出发的火车行驶距离:120t
两者之和等于总距离:80t + 120t = 600
200t = 600
t = 3 小时
A 出发的火车行驶:80 × 3 = 240 km
</think>
**解题步骤:**
**第一步:建立方程**
设相遇时间为 t 小时。两列火车同时出发,相向而行,相遇时合计行驶了 600 km:
$$80t + 120t = 600$$
**第二步:求解 t**
$$200t = 600 \Rightarrow t = 3 \text{ 小时}$$
**第三步:求相遇位置**
A 出发的火车行驶距离:$80 \times 3 = \mathbf{240 \text{ km}}$
**答:两列火车在距 A 站 240 km 处相遇。**
特点:<think> 标签内有完整的内部推理链,对外呈现的答案简洁有条理。Thinking token 消耗约 180 个,输出 token 约 120 个。
Claude Sonnet 4 输出
我来逐步分析这道相对运动问题。
设相遇时间为 t 小时:
- A→B 火车速度 80 km/h,行驶距离 80t
- B→A 火车速度 120 km/h,行驶距离 120t
由于两车同时出发、相向而行,相遇时:
80t + 120t = 600
200t = 600
t = 3(小时)
A 出发的火车行驶距离 = 80 × 3 = **240 km**
**答:两列火车在距 A 站 240 km 处相遇。**
特点:答案正确,步骤清晰,无显式 thinking 过程(Claude Sonnet 的 extended thinking 需单独开启)。
评分
| 维度 | DeepSeek-R1 | Claude Sonnet 4 |
|---|---|---|
| 答案正确性 | ✅ 正确 | ✅ 正确 |
| 推理透明度 | ⭐⭐⭐⭐⭐ 完整 thinking 链 | ⭐⭐⭐ 直接推导 |
| 格式规范性 | ⭐⭐⭐⭐ LaTeX 公式 | ⭐⭐⭐⭐ Markdown |
| 输出 token 数 | 300 | 180 |
任务二:逻辑推理(LSAT 风格)
Prompt
五个人 A、B、C、D、E 参加了一场比赛,名次各不相同(1-5名)。
已知条件:
1. A 的名次在 B 前面(A 排名更靠前)
2. C 不是第一名
3. D 的名次比 E 靠后
4. B 的名次在 D 前面
问:C 可能是第几名?列出所有可能。
DeepSeek-R1 输出(摘要)
<think>
约束关系:A < B < D,E < D(名次数字越小越靠前)
即 A < B,B < D,E < D,C ≠ 1
先确定 A,B,D,E 的相对顺序:
A < B < D,且 E < D
D 至少是第3名(因为 A,B 排在 D 前面,需要2个位置)
...枚举所有合法排列...
</think>
**结论:C 可以是第 1、2、3、4 名。**
**推导过程:**
约束链:A < B < D,E < D,C ≠ 1名
D 的可能位置为第 3、4、5 名(因为 A、B 必须排在 D 前面):
- D=3:A,B ∈ {1,2},E 只能是5(不够),矛盾,舍去(E 需排在 D 前,即E < 3)
修正:D=3 时,A,B,E 三人分布在{1,2}和{4,5}中,E < D=3,故 E ∈ {1,2},与 A,B 重叠,共3人占2格,矛盾。舍去。
- D=4:A,B,E ∈ {1,2,3},A < B,E 可以是1,2,3
C 只剩第5名... 不对,C 不受 D 约束
[完整枚举后] C 的可能名次:**2、3、4、5**
注:DeepSeek-R1 在这道题的
<think>过程中出现了中间矛盾和自我修正,最终答案正确(C 可以是 2、3、4、5 名)。这种"自我纠错"能力是推理模型的核心价值。
Claude Sonnet 4 输出(摘要)
分析约束条件:
- 排名链:A < B < D(名次数字,越小越靠前)
- E < D
- C ≠ 第1名
D 至少占第4位(A、B、E 三人各需要一个排在 D 前面的位置),
当 D=4 时:{A,B,E} 分布在 {1,2,3},A < B
...
**C 的可能名次:2、3、4、5 名**(共4种可能)
两个模型答案一致。Claude 的逻辑更线性,DeepSeek-R1 的 thinking 过程展示了更多中间探索。
评分
| 维度 | DeepSeek-R1 | Claude Sonnet 4 |
|---|---|---|
| 答案正确性 | ✅ | ✅ |
| 自我纠错能力 | ⭐⭐⭐⭐⭐ 明显 | ⭐⭐⭐ 不透明 |
| 推理严谨性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
任务三:多步骤推理(复合问题)
Prompt
一家公司有 120 名员工。
- 60% 是工程师,其中 40% 是女性工程师
- 剩余员工中,70% 是女性
问题:
1. 公司共有多少名女性员工?
2. 女性员工占全公司比例是多少(保留1位小数)?
3. 如果再招聘 30 名女性员工,届时女性比例变为多少?
这类题需要维持多个中间量,最容易出算术错误。
DeepSeek-R1 全部正确:女性总数 = 72×0.4 + 48×0.7 = 28.8 + 33.6 = 62.4 → 取整为 62(题目未说是否取整,R1 给了两种答案并说明)。
Claude Sonnet 4 全部正确,且主动提示"员工数应为整数,建议题目明确是否四舍五入",人性化程度更高。
结论:多步骤数值推理两者均表现稳定,Claude 在用户友好度上略胜。
任务四:代码推理(Debugging)
Prompt
# 以下 Python 代码有 bug,请找出所有问题并给出修复版本
def find_duplicates(nums):
seen = {}
duplicates = []
for i in range(len(nums)):
if nums[i] in seen:
duplicates.append(nums[i])
else:
seen[nums[i]] = i
return list(set(duplicates))
# 测试用例:
print(find_duplicates([1, 2, 3, 2, 4, 3, 3]))
# 期望输出:[2, 3](顺序不重要)
DeepSeek-R1 分析:识别出代码逻辑本身无 bug,但指出 list(set(...)) 会丢失顺序,如果需要保持首次出现顺序应改用 dict.fromkeys()。同时指出当同一元素出现3次时,2 和 3 均只会被添加一次到 duplicates(因为第三次出现时 nums[i] 已经在 seen 里但也已在 duplicates 里)——实际上第三次会再次 append,即 [2, 3, 3],set 之后还是 {2, 3},行为正确但效率低。R1 给出了更优解。
Claude Sonnet 4 分析:直接指出 list(set(...)) 的无序问题,并提供了两个替代方案(保序版和不保序版),代码质量更高,说明更完整。
代码推理评分:Claude Sonnet 4 略优(分析更全面,替代方案质量更高)。
推理速度对比
测试方法:每个任务发送10次请求,取中位数(网络延迟已剔除,使用同一 TheRouter 节点)。
| 指标 | DeepSeek-R1 | Claude Sonnet 4 |
|---|---|---|
| 首 Token 延迟(TTFT) | 约 3.2s | 约 1.1s |
| 总响应时间(简单题) | 约 8s | 约 4s |
| 总响应时间(复杂题) | 约 22s | 约 9s |
| 输出 token 速率 | ~45 tok/s | ~80 tok/s |
DeepSeek-R1 的 thinking 过程会消耗额外时间,复杂题差距更明显。如果你的应用对延迟敏感(如实时问答),需要权衡。
成本对比
基于 TheRouter 的计费价格(2026 年 3 月):
| 模型 | 输入价格 | 输出价格 | Thinking Token |
|---|---|---|---|
| deepseek/deepseek-r1 | $0.55 / 1M | $2.19 / 1M | 按输出计费 |
| anthropic/claude-sonnet-4 | $3.00 / 1M | $15.00 / 1M | 需额外开启,单独计费 |
以上面的逻辑推理题为例(约 400 input + 600 output token):
- DeepSeek-R1:约 $0.00153
- Claude Sonnet 4:约 $0.0102
单次请求 Claude 贵约 6.7 倍。 高频调用场景下这个差距会被放大。
Thinking 机制对比
DeepSeek-R1:显式 thinking token
DeepSeek-R1 的推理过程以 <think>...</think> 标签包裹,通过 API 返回,开发者可以读取。通过 TheRouter 调用时,thinking 内容出现在 message.content 中或以独立字段返回(取决于模型配置)。
优点:推理过程完全透明,便于 debug 和审计
缺点:thinking token 也计入费用,且增加总延迟
# 获取 DeepSeek-R1 的 thinking 内容
result = chat(DEEPSEEK_R1, messages)
content = result["choices"][0]["message"]["content"]
# content 中包含 <think>...</think> 块
Claude Sonnet 4:Extended Thinking(可选开启)
Claude 的 extended thinking 需要在请求中显式开启,且仅在 Claude 3.7+ / Sonnet 4+ 中支持:
result = chat(
CLAUDE,
messages,
thinking={"type": "enabled", "budget_tokens": 5000}
)
# thinking 内容在 content 数组中,type="thinking" 的块
默认不开启时,Claude 是"隐式推理"——模型内部推理但不输出过程,延迟更低、成本更低。
综合评分
| 任务类型 | DeepSeek-R1 | Claude Sonnet 4 | 推荐选择 |
|---|---|---|---|
| 数学推理 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | DeepSeek-R1 |
| 纯逻辑推理 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | DeepSeek-R1 |
| 多步骤数值 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 相当 |
| 代码推理 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Claude Sonnet 4 |
| 响应速度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Claude Sonnet 4 |
| 成本效益 | ⭐⭐⭐⭐⭐ | ⭐⭐ | DeepSeek-R1 |
结论与选择建议
选 DeepSeek-R1 的场景:
- 数学/竞赛题批量求解
- 需要推理过程透明(可审计)的企业场景
- 逻辑推理、约束满足类问题
- 预算敏感的高频调用
选 Claude Sonnet 4 的场景:
- 代码 review、debug、架构分析
- 对延迟敏感的实时应用
- 需要模型主动发现隐含问题(如用户体验型场景)
- 多步骤任务中需要模型保持上下文一致性
两者都想用?
这正是 TheRouter 的价值所在。一个 API Key,按场景选模型,账单统一结算:
def solve(problem_type: str, prompt: str) -> str:
model = DEEPSEEK_R1 if problem_type in ("math", "logic") else CLAUDE
result = chat(model, [{"role": "user", "content": prompt}])
return result["choices"][0]["message"]["content"]
注册 TheRouter 免费获得体验额度:therouter.ai
本文测试数据基于 2026 年 3 月实测,模型版本为 deepseek/deepseek-r1 和 anthropic/claude-sonnet-4。模型更新后数据可能有变化。
更多推荐




所有评论(0)