1. Ubuntu 上 Claude Code 接 DeepSeek 到底卡在哪
Claude Code 是 Anthropic 推出的终端 AI 编程助手,能读代码、改文件、跑命令,适合在 Ubuntu 这类开发机上做日常编码。DeepSeek 则是国内开发者常用的推理模型,价格友好、上下文窗口大。把两者接起来,理论上只要改几个环境变量,但实际操作时,Ubuntu 用户最容易卡在三件事上:Node.js 版本不对导致claude命令装不上、settings.json路径写错导致配置不生效、以及请求端点没改对导致一直报 401 或连接超时。
我试过在一台 Ubuntu 22.04 的机器上从零走一遍,发现官方curl -fsSL https://claude.ai/install.sh | bash在部分网络环境下会直接返回App unavailable in region,所以更稳的做法是用 npm 全局安装。装完之后,真正决定能不能跑通的是~/.claude/settings.json里的env段——它决定了 Claude Code 把请求发到哪个端点、用哪个模型、带哪个 Key。
这篇就按“环境准备 → 装 Claude Code → 改 settings 到 TaoToken 统一通道 → 终端验证 → 排错”的顺序走一遍,每一步都给可复制的命令和配置片段。目标很明确:让你在 Ubuntu 上完成一次可复现的连通性测试,而不是装完就卡在401 Unauthorized。
适合谁看:手里有 Ubuntu 20.04/22.04/24.04 的开发机、想用 DeepSeek 跑 Claude Code、但不想在多个平台之间来回切 Key 的人。下面所有配置里的 Base URL 都指向 TaoToken 的统一通道,Key 也统一从 TaoToken 拿,这样模型切换和额度管理都在一个地方。
2. 前置准备:Node.js 20 与 TaoToken Key 获取
Claude Code 本身不依赖 CUDA 或 PyTorch,它就是个跑在用户态的终端工具,所以环境准备比想象中简单。硬性要求只有三条:Ubuntu 20.04 以上(x86_64 或 ARM64)、能访问 npm 镜像、内存 4GB 以上。真正容易出问题的是 Node.js 版本——Claude Code 要求 Node 20 LTS,用系统自带的apt install nodejs往往装到 18 甚至更老,后面npm install -g会报引擎不匹配。
我建议直接用清华镜像的预编译包,避开 apt 源版本过旧的问题:
cd /usr/local curl -O https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/v20.15.0/node-v20.15.0-linux-x64.tar.xz tar -xvf node-v20.15.0-linux-x64.tar.xz ln -sf /usr/local/node-v20.15.0-linux-x64/bin/node /usr/local/bin/node ln -sf /usr/local/node-v20.15.0-linux-x64/bin/npm /usr/local/bin/npm node --version # 期望输出 v20.15.0 npm --version # 期望输出 10.7.0装完顺手把 npm 源换成国内镜像,后面装 Claude Code 会快很多:
npm config set registry https://registry.npmmirror.com接下来是 TaoToken 的 Key。访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册登录后,进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 创建 API Key,格式通常是一串以sk-开头的字符串,只显示一次,复制后妥善保存。这个 Key 就是后面settings.json里ANTHROPIC_AUTH_TOKEN的值。
如果你还没决定用哪个模型,可以先到模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 试一下 DeepSeek 的响应速度和输出风格,确认符合预期再写进配置。长期做编码或 Agent 任务的话,Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 的额度模型更适合持续调用,不用每次单独充值。
这里要强调一点:TaoToken 是统一的 API 接入通道,不是让你绕过什么限制,它只是把多个模型的调用收敛到一个 Base URL 和一套 Key 上。你后面在settings.json里改的ANTHROPIC_BASE_URL就指向它,Claude Code 会以为自己连的是 Anthropic 官方端点,实际请求走的是 TaoToken 转发到 DeepSeek。
3. 可复制配置:settings.json 改到 TaoToken 通道
这一步是全文的核心。Claude Code 读取配置有两个位置:~/.claude/settings.json(用户级,持久化)和环境变量(当前会话生效)。最稳的做法是两者都写,settings.json保证重启后还在,环境变量保证当前终端立刻能用。
先装 Claude Code:
npm install -g @anthropic-ai/claude-code claude --version claude doctorclaude doctor会检查安装完整性,如果这里就报错,先别往下走,回头确认 Node 版本。
然后创建配置目录并写入settings.json。注意路径必须是~/.claude/settings.json,不是~/.config/claude/,写错位置配置不会生效:
mkdir -p ~/.claude cat > ~/.claude/settings.json << 'JSONEOF' { "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash", "CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-v4-flash", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1", "CLAUDE_CODE_EFFORT_LEVEL": "max" } } JSONEOF把sk-你的TaoToken密钥替换成你在控制台创建的真实 Key。这里ANTHROPIC_BASE_URL填的是https://taotoken.net/api,注意不要加尾部斜杠,也不要自己拼/v1,Claude Code 会按自己的协议路径去请求,多写反而会 404。
如果你更习惯用环境变量,可以把同样的内容追加到~/.bashrc,这样每个新终端都自动带上:
cat >> ~/.bashrc << 'ENVEOF' # === Claude Code + TaoToken Config === export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的TaoToken密钥" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥" export ANTHROPIC_MODEL="deepseek-v4-pro[1m]" export ANTHROPIC_DEFAULT_OPUS_MODEL="deepseek-v4-pro[1m]" export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-v4-pro[1m]" export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4-flash" export CLAUDE_CODE_SUBAGENT_MODEL="deepseek-v4-flash" export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1" export CLAUDE_CODE_EFFORT_LEVEL="max" # === End Config === ENVEOF source ~/.bashrc几个参数的含义值得说清楚。ANTHROPIC_MODEL是主模型,deepseek-v4-pro[1m]里的[1m]后缀表示请求 1M 上下文窗口,处理大代码库时建议带上。ANTHROPIC_DEFAULT_HAIKU_MODEL和CLAUDE_CODE_SUBAGENT_MODEL都指向deepseek-v4-flash,这是给子代理和轻量任务用的快模型,能省额度。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC设为1可以关掉非必要的遥测请求,减少干扰。
如果你用的是 Cline MCP 或 Codex 这类工具,配置逻辑一样,三件套必须齐全:Base URL 填https://taotoken.net/api、Key 填 TaoToken 的 Key、Model ID 填deepseek-v4-pro[1m]。缺任何一个都会连不上。
4. 终端验证:一次可复现的连通性测试
配置写完别急着进交互模式,先用 curl 打一发,确认 Key 和端点都对。这一步能快速区分是网络问题、Key 问题还是模型名问题:
curl -s -w "\nHTTP_CODE:%{http_code}\n" \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4-pro[1m]","messages":[{"role":"user","content":"Hi"}],"max_tokens":5}' \ https://taotoken.net/api/v1/chat/completions期望看到返回 JSON 里带choices字段,最后一行HTTP_CODE:200。如果返回401,说明 Key 无效或没带上;返回404,多半是模型名写错或路径拼错;返回model not found,检查deepseek-v4-pro[1m]是否拼成了旧的deepseek-chat。
curl 通了之后,进 Claude Code 交互模式再验一次:
cd /path/to/your-project claude进去后输入/status,应该能看到当前模型显示为 DeepSeek 相关标识,Base URL 指向 TaoToken。然后直接输入hi,如果收到正常回复,说明整条链路通了。再输入/cost可以看本次会话的消耗,确认额度扣的是 TaoToken 账户。
实测下来,最容易忽略的是settings.json的权限和格式。JSON 里多一个逗号、少一个引号,Claude Code 会静默忽略整个env段,表现就是“配置明明写了却不生效”。可以用python3 -m json.tool ~/.claude/settings.json校验格式,能正常输出就说明 JSON 合法。
如果要在项目里固定配置,也可以在项目根目录放.claude/settings.json,但注意项目级配置会覆盖用户级,调试阶段建议先用用户级,避免两处冲突。
5. 常见报错排查:401、proxy failed 与 OAuth
排错时先看报错原文,不同错误指向完全不同的问题。下面这几个是我在 Ubuntu 上实际遇到过的,对照着查能省不少时间。
401 Unauthorized出现频率最高。原因通常是ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY只设了一个,或者两个设成了不同的值。Claude Code 对这两个变量都认,但要求一致。解决方法是两个都设成同一个 TaoToken Key,改完source ~/.bashrc再试。如果还报 401,去控制台确认 Key 没过期、没被删除。
local proxy failed或connection refused一般是 Base URL 写错。检查ANTHROPIC_BASE_URL是不是https://taotoken.net/api,有没有多写/v1或尾部斜杠。另外确认机器能正常访问外网,curl -I https://taotoken.net/api能返回响应头就说明网络通。
Error reading choices或streaming failed多半是流式传输被中断。可以在环境变量里加一条export CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1,强制走流式,减少回退导致的解析错误。如果还是不行,检查max_tokens是不是设得太小。
OAuth相关报错通常出现在你之前登录过 Anthropic 官方账号的情况下,本地缓存了旧的凭证。删掉~/.claude/下的缓存文件(保留settings.json),重新进 Claude Code 让它按新配置走。
--dangerously-skip-permissions cannot be used with root是安全限制,root 用户不能跳过权限确认。解决办法是创建普通用户,或者进 Claude Code 后用/auto-accept命令,再或者用claude --permission-mode acceptEdits --allowed-tools "Bash,Read,Write,Edit,Glob,Grep"这种更细粒度的授权方式。
404 model not found就是模型名不对。确认写的是deepseek-v4-pro[1m],不是deepseek-chat或deepseek-v3。模型名以 TaoToken 文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里列出的为准,别凭记忆写。
排查顺序建议固定成:先 curl 验 Key 和端点 → 再claude doctor验安装 → 再/status验配置加载 → 最后看具体报错。这样能快速定位是网络层、安装层还是配置层的问题。
6. 把 Key 管好,把通道用顺
配置跑通只是开始,后面日常用还有几个习惯值得养成。settings.json和.bashrc里都明文存了 Key,建议给脚本设权限chmod 600,别把带 Key 的文件提交到 Git 或分享给别人。TaoToken 控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 可以随时轮换 Key,旧 Key 删掉后记得同步更新本地配置。
模型选择上,日常改代码用deepseek-v4-pro[1m]就够,子任务和补全交给deepseek-v4-flash,额度和速度都更划算。如果发现某类任务响应慢,先看/cost里的消耗分布,再决定要不要换模型,而不是盲目改配置。
Claude Code 的/init命令会在项目里生成CLAUDE.md,把项目结构、技术栈、约定写进去,之后每次对话它都会先读这个文件,理解项目更准。这个文件建议纳入版本管理,团队共用。
最后,如果你在 Ubuntu 上还跑着 ClaudeCodeAnthropic 相关的其他工具,统一把 Base URL 指向 TaoToken 的https://taotoken.net/api,Key 也复用同一个,这样所有模型的调用和额度都在一个控制台里看,省得来回切账号。配置这东西,一次写对,后面就只剩用。