摘要
DeepSeek 提供的 Anthropic 兼容端点 (api.deepseek.com/anthropic) 在协议转换层面存在若干字段级缺陷,导致在使用 Claude Code 等重度依赖 Anthropic 协议的客户端时,跨文件推理能力、工具调用可靠性、以及多轮会话成本显著劣于官方端点。本文通过三阶段递进分析------受控 A/B 对照实验、模型自诊断、官方文档逐字段审查------定位了关键缺陷并给出使用建议。
1. 分析方法
三阶段递进:
- 受控 A/B 对照:同一任务(Linux kernel 网络子系统 selftest 补丁审查),分别在 claude-opus-4-6(Anthropic 官方端点)和 deepseek-v4-pro(Anthropic 兼容端点)上执行,记录行为差异。
- 模型自诊断:将对照实验结果反馈给 DeepSeek,要求其分析自身表现下降的原因。
- 官方文档逐字段审查:对照 https://api-docs.deepseek.com/zh-cn/guides/anthropic_api ,逐一核验每个 Anthropic 协议字段的支持状态及其对 Claude Code 行为的影响。
2. 受控 A/B 对照实验结果
任务:审查 Linux kernel 网络子系统 OVS selftest 补丁。
| 评估维度 | Opus 4.6 (官方端点) | DeepSeek V4 Pro (兼容端点) |
|---|---|---|
| 跨文件因果链追踪 | 从 Python formatter diff 出发,主动跨文件追踪至 C 内核源码 net/openvswitch/flow_netlink.c:1033 验证 VLAN CFI 约束 |
不发起跨文件查询,仅在被 diff 的文件范围内分析 |
| 判断校准 | 10 个 finding 中:2 个自主判定为误判并撤回,3 个判定为理论边界但已有上游保证无需修复。最终零阻塞 | 机械标记所有 spec 偏离为需修复项,不做实际风险评估,不区分严重级别 |
| 主动探索半径 | 自主读取 7 个 sibling test 函数实现以对比 convention 一致性 | 不扩展搜索半径 |
该实验结果已提交至 GitHub Issue deepseek-ai/DeepSeek-V3#1269。社区维护者确认接收并关联至历史相关报告 #967、#960、#1240、#1262。
3. 模型自诊断结果
将对照实验的行为差异反馈给 DeepSeek,要求解释根因。模型列举以下自认缺陷:
| 缺陷 | 自述影响 |
|---|---|
| cache_control 不支持 | 每次请求全量重传 system prompt、tools 定义及对话历史。Claude Code system prompt 约数百 KB,在 1M context 窗口场景下传输开销显著 |
| thinking.budget_tokens 被忽略 | Claude Code --effort 参数映射至 budget_tokens 的机制无效,推理深度不可控 |
| tool_use 协议转换不稳定 | 嵌套 agent 调用及多轮 tool_use 交替场景间歇失败。根因不明 |
| /compact 间歇中断 | socket 直接断开。推测与 prompt caching 不兼容相关(compact 底层依赖 cache_control 做增量压缩) |
| 模型名静默降级 | 未识别的模型名不返回 4xx 错误,静默路由至 deepseek-v4-flash。无告警机制 |
此阶段确认了现象,但未定位 tool_use 不稳定的机制性根因。
4. 官方文档逐字段审查
对照官方文档,逐字段核验支持状态。以下按严重度降序排列。
4.1 is_error 字段被忽略(致命)
发现位置 :tool_result 内容类型定义。文档注明 is_error 状态为 Ignored。
机制分析 :Anthropic 协议中,tool_result 的 is_error: true 字段向模型传递工具调用失败的信号------文件不存在、权限拒绝、命令非零退出、网络超时等。模型依赖此标记区分成功输出与错误输出,决定是否重试或切换策略。DeepSeek 端点丢弃此字段后,模型将错误输出与正常输出等同对待,基于错误数据继续推理链。
与前序发现的关联:此缺陷解释了阶段 1 中观察到的判断校准差异(DeepSeek 不自主撤回误判)和阶段 2 中报告的 tool_use 不稳定。这不是随机 bug,而是每次工具调用失败必然触发的机制性缺陷。
缓解可行性:客户端无法绕过。此为服务端协议转换缺陷。
4.2 cache_control 全位置忽略(严重)
影响范围 :文档确认以下全部位置的 cache_control 均为 Ignored:
- system 消息
- tools 定义
- user/assistant 消息
- tool_use 和 tool_result 块
机制分析:Claude Code 对话模型中 system prompt 可占数百 KB,tools schema 亦有可观体积。Anthropic 官方端点通过 prompt caching 将静态前缀缓存至服务端,后续请求仅传输增量部分。DeepSeek 端点因全位置忽略 cache_control,每轮请求均需从零构建完整 context,成本与延迟随会话长度线性增长。
与 A/B 测试的关联:此缺陷解释了阶段 1 中 DeepSeek 不主动跨文件扩展搜索半径的现象------每打开一个新文件即触发全量 context 重编码,缓存缺失将"多读文件确认"从低开销操作变为高开销操作,可能影响模型对探索行为的策略选择。
缓解可行性:客户端不可绕过。保持短会话、频繁 /clear 等措施可有限缓解成本累积,但不修复行为差异。
4.3 thinking.budget_tokens 被忽略(中等)
文档状态 :thinking 对象本身被支持,但其内部的 budget_tokens 字段为 Ignored。
影响 :Claude Code --effort 参数(low/medium/high/max)底层映射为 budget_tokens 值,旨在控制推理深度。此字段被忽略后,effort 设置实际失效。DeepSeek 至少保留了 thinking 开关本身,推理机制仍被激活,仅深度不可控。
4.4 disable_parallel_tool_use 被忽略(中等)
文档状态:在 tool_choice 为 auto、any、tool 三种模式下均 Ignored。
影响:需要顺序执行的场景(如先读后写的文件操作)存在竞态风险。实测中 DeepSeek 默认并行策略偏保守,实际影响较前两项小。
4.5 模型名静默降级(中等)
文档状态 :文档警告未识别的模型名将被自动映射至 deepseek-v4-flash,无任何告警。
配置陷阱 :Claude Code 内部有多个模型 tier------主模型、opus tier、sonnet tier、haiku tier、子 agent 模型。每个 tier 需通过独立的环境变量显式指定(ANTHROPIC_MODEL、ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL、CLAUDE_CODE_SUBAGENT_MODEL)。若仅设置主模型而遗漏其他 tier 变量,未设置的 tier 将使用 Claude Code 默认模型名,这些名称不被 DeepSeek 识别,全部静默降级至 flash。表现为:主对话使用 v4-pro,但子 agent 和 tier 切换后的请求全部路由至 flash,用户完全不知情。
修复:将所有 model tier 环境变量全部显式设为同一目标模型名。
4.6 其他被忽略字段与不支持的内容类型(轻微)
top_k--- Ignored。采样策略不完整metadata/service_tier/container--- Ignored。无功能影响
不支持的内容类型(明确标记为 NOT supported):
- image, document --- 无视觉/文档输入
- search_result, web_search_tool_result --- 无搜索集成
- server_tool_use, mcp_tool_use, mcp_tool_result --- MCP 工具链全部不可用
- code_execution_tool_result --- 无代码执行能力
- container_upload --- 无容器上传
- redacted_thinking --- streaming thinking 修订不支持
5. 结论与使用建议
5.1 根因总结
DeepSeek Anthropic 端点存在两个客户端不可绕过的协议转换缺陷:is_error 忽略 (工具调用失败不可感知)和 cache_control 全位置忽略(上下文缓存完全失效)。两者共同导致 Claude Code 场景下跨文件推理能力下降、工具调用不稳定、长会话成本线性增长。补充因素包括 budget_tokens 忽略(推理深度不可控)和模型名静默降级(配置错误无告警)。
5.2 使用场景矩阵
| 场景 | 推荐方案 | 依据 |
|---|---|---|
| Claude Code 主力执行 | Claude Opus/Sonnet 官方端点 | 需完整的 is_error + cache_control + thinking 支持 |
| 短期独立任务 | DeepSeek V4 Pro 可用 | 短会话避开缓存成本累积;独立任务不涉及多轮工具调用 |
| 代码审阅 | DeepSeek V4 Pro 推荐 | 几乎无工具调用;发挥 pattern/perf 审阅优势;与 Opus/Sonnet 审阅角度互补 |
| 子 agent 执行 | 不推荐 DeepSeek | 子 agent 重度依赖 tool_use;is_error 忽略风险不可接受 |
5.3 展望
DeepSeek 在 Anthropic 端点上的开发活跃,cache_control 和 thinking 的完整支持应会陆续发布。GitHub Issue #1269 已进入官方反馈队列。
分析日期:2026-05-03
数据来源:DeepSeek 官方 Anthropic API 文档
实验材料:Linux kernel OVS POP_VLAN selftest 补丁审查
外部引用:GitHub Issue #1269