ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 的 /status 还指向 DeepSeek Base URL?TaoToken 通道该改哪一处

Claude Code 的 /status 还指向 DeepSeek Base URL?TaoToken 通道该改哪一处 敲完/statusClaude Code 明确回你一行 Base URLhttps://api.deepseek.com/anthropic。想把这行换成 TaoToken 通道先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建一把 Key再回到配置文件改一处就行。问题就在「改哪一处」。这个地址不是 Claude Code 拍脑袋写死的它来自环境变量、用户级settings.json、项目级 settings或者某个还在生效的 shell 别名。你只改了其中一处另一处还在往 DeepSeek 指/status当然不认账。更烦的是Base URL 没换对后面让 Claude Code 生成src/index.js、src/routes/todos.js、跑npm start、用 curl 打接口全都会跟着抖——不是代码写错是模型通道根本没接上。这篇就顺着「先定位来源、再改一处、再回/status复核」这条线走把 Todo REST API 那套实战流程重新跑通一遍。1. /status 里那行 DeepSeek 地址是从哪冒出来的Claude Code 自己不会存「上次用的是哪家模型」。它每次启动都重新读一遍环境所以只要机器上还有任何一个地方写着旧地址/status就会把那行老配置原样吐出来。你要做的不是反复改而是把可能的来源列全一个个排掉。1.1 四个常见的配置来源按经验优先级和隐蔽程度大概是这样的shell 启动文件~/.zshrc、~/.bashrc、~/.bash_profile里的export ANTHROPIC_BASE_URL...。这是最常见的一处也是你最可能忘了的一处。用户级~/.claude/settings.json里面的env段是 Claude Code 启动时注入会话的环境切模型、换通道一般写在这里。项目级.claude/settings.json和.claude/settings.local.json跟着仓库走换项目就换配置。.local.json通常不进 Git容易被忽略。包装脚本或别名有人习惯写alias claudeANTHROPIC_BASE_URL... claude或者做了个claude.sh。/status看到的地址就来自这种地方。先做三件事把它们照出来echo $ANTHROPIC_BASE_URL env | grep -i anthropic type claude第一条看当前 shell 里有没有残留第二条把所有相关变量一次列全ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL一起看第三条确认你敲的claude到底是可执行文件、别名还是函数。如果type claude输出claude is an alias for ...那基本就是它在捣乱。1.2 用 /status 和文件内容对账把 shell 变量看完再打开配置文件对一遍cat ~/.claude/settings.json cat .claude/settings.json 2/dev/null cat .claude/settings.local.json 2/dev/null然后回到 Claude Code 会话里敲/status把三样东西记下来当前模型名、Base URL、会话统计。这三项就是你的「基准线」。改配置之前先记一份改完再对一次才知道到底哪一项动了。一个容易忽略的细节shell 环境变量和settings.json里的env段不是互斥的两者都可能生效。所以别只改一处就收工要么统一收敛到settings.json要么在 shell 里把旧的export注释掉。我的习惯是——shell 里一个ANTHROPIC_*都不留全部交给settings.json出问题时只需要看一个文件。2. 改 ANTHROPIC_BASE_URLsettings.json 与 shell 变量两条路定位清楚之后改动本身只有三行。但「三行写在哪」决定了它是一次性的还是长期生效的。下面两条路都给你选一条就行别混着用。2.1 先拿 Key 和模型 ID打开 TaoToken 注册登录进控制台创建一把 API Key复制出来先放好。接下来两个值你会反复用到Base URLhttps://taotoken.net/api末尾不要加/v1也不要带任何查询参数。模型 ID以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 上的模型广场当时列表为准别凭记忆写。列表里叫什么配置里就写什么。Key 在正文里我一律写成YOUR_API_KEY你自己替换成真实值。不要把真实 Key 提交进 Git包括.claude/settings.local.json如果被追踪了也要加进.gitignore。2.2 写进 ~/.claude/settings.json 的 env 段这是长期方案改一次之后每次启动claude都生效{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID } }三点提醒ANTHROPIC_BASE_URL的值就是https://taotoken.net/api不要自作主张补/v1ANTHROPIC_AUTH_TOKEN放的才是 Key不要写成别的变量名ANTHROPIC_MODEL必须和模型广场里的 ID 完全一致大小写和连字符都算数。写完之后把 shell 里遗留的export ANTHROPIC_BASE_URL...注释掉或者删掉然后重开一个终端。理由很简单两个来源同时存在时你没法从/status一眼判断哪个赢了。2.3 临时用环境变量覆盖一次只想在这次会话里试一下不想动配置文件就在启动前 exportexport ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELYOUR_MODEL_ID claudeWindows 的 PowerShell 写法不一样注意变量名前面的$env:$env:ANTHROPIC_BASE_URL https://taotoken.net/api $env:ANTHROPIC_AUTH_TOKEN YOUR_API_KEY $env:ANTHROPIC_MODEL YOUR_MODEL_ID claude临时方案的代价是关掉终端就没了下次启动又回到旧地址。所以验证阶段可以用它快速试错但确认没问题后记得落到settings.json里。另外还有个更省事的办法适合不想手动写 JSON 的人npm install -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m YOUR_MODEL_ID注意-u后面跟的还是https://taotoken.net/api不要加/v1也不要往这个参数上挂任何 UTM 参数——那是给网页链接用的不是给工具配置用的。3. 改完回到 /status模型名、Base URL、会话统计逐项对配置改完不等于配通。这一步是排障的关键/status是唯一的现场证据别看文件、看它。3.1 三个字段分别该长什么样重开终端进任意目录敲claude然后输入/status。逐项核对Base URL应该是https://taotoken.net/api。如果你还看到https://api.deepseek.com/anthropic说明旧配置的某一处没清掉回到第 1 节重新照一遍。模型应该等于你填进ANTHROPIC_MODEL的那个 ID和模型广场里的写法完全一致。名字长得像但差一个后缀也说明填错了。会话统计token 计数、消息轮次这些是辅助项。刚启动时数字很小是正常的发一条消息后再看它有没有涨能涨说明请求真的走通了。最直接的验证方式用同一把 Key 去 TaoToken 模型对话 发一条测试消息。那边通了说明 Key 和模型 ID 没问题那边不通就先解决 Key 的问题别在 Claude Code 里瞎改。3.2 三种典型报错对照着看现象大概率原因怎么处理401 未授权Key 没填、填错、或者带了多余空格和引号重新从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 复制一次注意别把换行符带进去404 找不到路径Base URL 末尾多写了/v1或者路径被重复拼接把值改回https://taotoken.net/api末尾不加任何东西/status仍显示旧地址shell 里的export还在、或者存在项目级 settings 覆盖注释掉 export检查.claude/settings.local.json重开终端还有一种不像报错的「报错」模型能回答但答得又慢又怪。这通常是模型 ID 填错了落到了列表里另一个同系列的模型上。回模型广场对一遍名字比看日志快。3.3 改完还不对按这个顺序再排一遍先unset ANTHROPIC_BASE_URL ANTHROPIC_AUTH_TOKEN ANTHROPIC_MODEL把当前 shell 清干净再cat ~/.claude/settings.json确认文件内容就是你想的那样再type claude确认没有别名插手最后重开终端。这一套下来基本没有排查不到的情况——它一共就四个来源你全看过了。顺带说一句Claude Code 文档里对这几个环境变量的说明更细接入文档 里有完整对照遇到变量名拿不准的时候直接翻那边比在会话里反复试快得多。4. 通道通了再生成 my-todo-apisrc/index.js 与 src/routes/todos.js/status正常之后后面就是原汁原味的 Claude Code 实战了。这里要分清一件事模型通道负责「把话送到模型、把结果拿回来」它不参与生成业务代码。src/index.js里的 Express 配置、src/routes/todos.js里的 CRUD 逻辑都是模型根据你的描述写出来的通道只保证这些内容能正常往返。4.1 用三要素提示词描述需求新建一个空目录进去启动会话mkdir my-todo-api cd my-todo-api claude然后在对话框里描述需求。写提示词把握三个要素上下文技术栈、项目背景、约束不要什么、期望输出文件结构长什么样。照着这个骨架写请帮我创建一个 Node.js Express 的 Todo REST API 项目。 要求 - 提供 GET /todos、POST /todos、PUT /todos/:id、DELETE /todos/:id - 数据存在内存数组里不接数据库 - 每个 todo 有 id、title、completed、createdAt 四个字段 - 请求和响应都用 JSON错误统一返回 { error: ... } - 生成 README.md写明启动和 curl 测试步骤 项目结构 my-todo-api/ src/index.js src/routes/todos.js package.json README.md描述完Claude Code 会先列出「准备创建哪些文件」等你在权限提示里按y确认。这一步别嫌烦它就是这个工具的安全边界——在你点头之前它不会写盘、不会执行命令。4.2 生成出来的两个核心文件长什么样package.json大致是这样{ name: my-todo-api, version: 1.0.0, main: src/index.js, scripts: { start: node src/index.js, dev: nodemon src/index.js }, dependencies: { express: ^4.19.2 }, devDependencies: { nodemon: ^3.1.0 } }入口文件src/index.js只做应用装配和监听const express require(express); const todoRouter require(./routes/todos); const app express(); app.use(express.json()); app.use(/todos, todoRouter); app.get(/, (req, res) { res.json({ service: my-todo-api, status: ok }); }); const port process.env.PORT || 3000; app.listen(port, () console.log(listening on http://localhost:${port}));路由文件src/routes/todos.js业务逻辑集中在这里const express require(express); const router express.Router(); let items []; let seq 1; router.get(/, (req, res) { const { completed, sort, order } req.query; let list items.slice(); if (completed true || completed false) { list list.filter((t) String(t.completed) completed); } if (sort createdAt) { list.sort((a, b) order desc ? b.createdAt.localeCompare(a.createdAt) : a.createdAt.localeCompare(b.createdAt) ); } res.json(list); }); router.post(/, (req, res) { const title typeof req.body.title string ? req.body.title.trim() : ; if (!title) return res.status(400).json({ error: title is required }); const todo { id: seq, title, completed: false, createdAt: new Date().toISOString() }; items.push(todo); res.status(201).json(todo); }); router.put(/:id, (req, res) { const id Number(req.params.id); if (!Number.isInteger(id)) return res.status(400).json({ error: id must be an integer }); const todo items.find((t) t.id id); if (!todo) return res.status(404).json({ error: todo ${id} not found }); if (typeof req.body.title string) todo.title req.body.title.trim(); if (typeof req.body.completed boolean) todo.completed req.body.completed; res.json(todo); }); router.delete(/:id, (req, res) { const id Number(req.params.id); const idx items.findIndex((t) t.id id); if (idx -1) return res.status(404).json({ error: todo ${id} not found }); items.splice(idx, 1); res.status(204).end(); }); module.exports router;生成完别急着跑。继续追问几句POST /todos传数字类型的 title 会怎样PUT能不能同时改 title 和 completedid不是数字时返回什么让它把边界情况讲清楚再决定要不要改。「生成 → 质疑 → 修正」这个循环比一次生成然后跑挂强太多。4.3 本地安装、启动与 curl 验证依赖安装和启动由你在本地终端执行Claude Code 也可以代跑但每一步都会弹权限确认npm install npm start看到listening on http://localhost:3000之后另开一个终端打接口。注意这些命令是在你自己机器上跑的Claude Code 只是帮你把命令拼出来curl -X POST http://localhost:3000/todos -H Content-Type: application/json -d {title:first task} curl -X POST http://localhost:3000/todos -H Content-Type: application/json -d {title:second task} curl http://localhost:3000/todos curl -X PUT http://localhost:3000/todos/1 -H Content-Type: application/json -d {completed:true} curl -X DELETE http://localhost:3000/todos/2 curl http://localhost:3000/todos最后一条应该只剩 id 为 1 的记录且completed是true。如果POST返回 400、PUT返回 404先把报错原样贴回会话让 Claude Code 对着src/routes/todos.js解释是哪一段判断拦住了——这比你自己盯着代码猜快。5. CLAUDE.md 里补一节「模型通道」别让下一个会话又踩回去Todo API 跑起来只是这一轮的事。真正省时间的是把「这个项目怎么配、用什么通道、代码怎么写」写进项目根目录的CLAUDE.md。Claude Code 每次启动都是白纸一张它不会记得上一轮会话说过什么但会自动读取根目录的CLAUDE.md。5.1 模板里加一节环境约定# 项目说明 ## 项目概述 Node.js Express 的 Todo REST API。数据暂存在内存数组后续迁移 SQLite。 ## 技术栈 - 运行时Node.js 18 - 框架Express 4.x - 代码风格ESLint Prettier ## 目录结构 src/ index.js # 应用装配与监听 routes/ todos.js # Todo 全部业务逻辑 ## 模型通道 - Base URLhttps://taotoken.net/api末尾不加 /v1 - Key从控制台创建写进 ~/.claude/settings.json 的 env 段不提交进仓库 - 模型 ID以模型广场当时列表为准 - 排障第一步进入会话先敲 /status核对 Base URL 与模型名 ## 命名规范 - 文件名 kebab-case变量与函数 camelCase常量 UPPER_SNAKE_CASE - 路由文件按资源名命名一个文件只管一种资源 ## 重要约定 - 所有响应为 JSON错误统一 { error: ... } - 状态码要准创建成功 201删除成功 204 - 路由文件里不直接操作持久化层 ## 禁止事项 - 不用 var只用 const / let - 不用回调风格统一 async / await - 不引入 lodash原生方法够用 ## 启动方式 npm start npm run dev把「模型通道」单独列一节的好处很直接新人 clone 下来AI 一启动就知道该往哪指不会再把 Base URL 写成别的地址也不用在群里问「你的/status显示的是什么」。5.2 什么时候更新它时机改哪一节换了模型或通道「模型通道」引入新依赖「技术栈」目录结构调整「目录结构」定了新规范「重要约定」AI 反复犯同一个错「禁止事项」懒得手写就让它自己整理把当前文件结构和这几轮对话丢过去让它生成一份CLAUDE.md你再逐条改成项目真实情况。写完提交进 Git团队里所有人看到的规范就是同一份。6. 去控制台核一下这次 Claude Code 的调用/status正常、接口能跑说明这一轮从「地址指错」到「模型通道可用」的闭环已经走完了。最后回到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 看一眼调用记录刚才那几次生成src/routes/todos.js、解释 404 的请求是不是都记在账上了。如果一条都没有说明请求其实没走到通道/status显示正常也可能是缓存值得再排一遍。想长期用它写代码可以打开 Coding Plan 看看套餐是否够用需要补一把新 Key 就去 控制台 API Keys 创建换机器或者换工具时照着 Claude Code 接入文档 把环境变量再对一遍。用同一把 Key 先在 模型对话 里发一条消息确认模型 ID 没写错再去改settings.json能省掉大半来回折腾。
返回列表