Buck Blog · 博客正文

返回技术分享首页
claude配置deepseek_effort=ultracode

Claude Code + DeepSeek 配置经验总结

> 踩坑无数后终于配通,记录如下,避免后人重蹈覆辙。

最终配置

三层文件

1. ~/.local/bin/claude-ds — 启动脚本(核心)


#!/usr/bin/env bash
exec env \
  ANTHROPIC_API_KEY=sk-xxx \
  ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic \
  ANTHROPIC_MODEL=deepseek-v4-pro \
  ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-v4-pro \
  ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro \
  ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-flash \
  ANTHROPIC_DEFAULT_FABLE_MODEL=deepseek-v4-pro \
  CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-pro \
  CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 \
  CLAUDE_CODE_MAX_OUTPUT_TOKENS=32000 \
  ENABLE_TOOL_SEARCH=false \
  claude --settings '{"ultracode":true}' "$@"

2. ~/.config/claude-deepseek.env — 环境变量默认值


export ANTHROPIC_API_KEY=sk-xxx
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_MODEL=deepseek-v4-pro
export ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-v4-pro
export ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-flash
export ANTHROPIC_DEFAULT_FABLE_MODEL=deepseek-v4-pro
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-pro
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=32000

3. ~/.claude/settings.json — 持久化设置


{
  "env": {
    "ANTHROPIC_MODEL": "deepseek-v4-pro",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
    "ANTHROPIC_DEFAULT_FABLE_MODEL": "deepseek-v4-pro",
    "CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-v4-pro",
    "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000",
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "32000"
  },
  "model": "deepseek-v4-pro",
  "theme": "dark",
  "statusLine": {
    "type": "command",
    "command": "bash /home/haitaoz/.claude/statusline-context.sh"
  }
}


核心踩坑记录

坑1:[1M] 后缀对第三方模型无效

错误认知:模型名加 [1M] 后缀就能获得 1M 上下文。 真相:Claude Code 源码中 [1m] 路径有 firstParty 门控:

if (t?.includes("context-1m-2025-08-07") && MV(e)) return 1e6; // firstParty 门控

第三方 API(DeepSeek、GLM 等)走这条路径直接返回 null,后缀是摆设。 正确做法:设置环境变量 CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000,源码逻辑:

let n = CLAUDE_CODE_MAX_CONTEXT_TOKENS;
if (n > 0 && !modelName.startsWith("claude-")) return n; // 非 claude 模型用它

效果对比
维度 [1M] 后缀(无效) CLAUDE_CODE_MAX_CONTEXT_TOKENS(有效)
上下文窗口 200,000(默认回退) 1,000,000
压缩阈值 ~167K ~967K

坑2:ultracode ≠ effort level

错误认知ultracode 是最高的 effort level,和 low/medium/high/xhigh/max 一样可以在任何配置文件中设置。 真相ultracode会话级多 Agent 编排模式,不是普通的 effort level。两者的机制完全不同:
配置方式 low/medium/high/xhigh/max ultracode
effortLevel in settings.json ❌ 静默忽略
CLAUDE_CODE_EFFORT_LEVEL env var ❌ 不支持
--effort CLI 参数 ❌ 不报错但无效
/effort 交互命令 ✅ 会话级
--settings '{"ultracode":true}' 唯一持久化方式

坑3:--effort ultracode 不报错但不生效

测试过程:


$ claude --effort ultracode --print "OK" # 无警告,正常运行
$ claude --effort invalid_value --print "OK" # 警告: Unknown value

第一条命令不报错,容易让人以为 ultracode 已通过 CLI 生效。但实际上静默回退到默认值。第二条才暴露真相——它只校验是否在已知列表中,ultracode 恰好被接受但不做任何事。

坑4:CLAUDE_EFFORT vs CLAUDE_CODE_EFFORT_LEVEL

  • CLAUDE_CODE_EFFORT_LEVEL:官方环境变量,用户可设置
  • CLAUDE_EFFORT:Claude Code 内部变量,启动后由程序自动生成
不要手动设置 CLAUDE_EFFORT,它会在启动时被 Claude Code 覆盖。只设置 CLAUDE_CODE_EFFORT_LEVEL

坑5:settings.json 的 effortLevel: "max" 有已知 bug

文档记录的 bug(issue #65651):"effortLevel": "max" 在 settings.json 中会被静默降级为 high

正确做法:不设 effortLevel 字段,改用 env 块:

{
  "env": {
    "CLAUDE_CODE_EFFORT_LEVEL": "max"
  }
}


坑6:多个 effort 设置会互相覆盖

优先级链(高→低):


CLAUDE_CODE_EFFORT_LEVEL env var > settings.json effortLevel > 默认值

如果 env var 设了 max,即使 --settings '{"ultracode":true}' 也可能被覆盖。需要 ultracode 时,必须把所有其他地方(env、settings.json)的 effort 设置全部删干净,只留 --settings '{"ultracode":true}'


配置清单(复制即用)

文件 路径 关键内容
启动脚本 ~/.local/bin/claude-ds exec env + --settings '{"ultracode":true}'
环境变量 ~/.config/claude-deepseek.env 不设任何 EFFORT 变量
持久化设置 ~/.claude/settings.json 不设 effortLevel,不设 EFFORT env

# 确保可执行
chmod +x ~/.local/bin/claude-ds

# 确保 ~/.local/bin 在 PATH 中
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

# 启动
claude-ds


参考来源