会话漂移、CLAUDE.md 没被读到?TaoToken 这样查 Claude Code 的 Base URL
如果你正在用 Claude Code 推进一个 MVP 代码库,最近却感觉它"越写越飘"——明明在CLAUDE.md里写清楚了架构约定、依赖边界和取舍理由,可每次新开会话,模型还是像第一次见到这个项目一样,重新推导目录结构、重新选依赖、重新发明命名规范,那你遇到的大概率不是模型变笨了,而是会话漂移。
会话漂移的典型表现是:单个会话内看起来正常,跨会话就开始结构不一致。今天生成的模块用 A 方案,明天生成的模块用 B 方案,两周后代码库变成一堆"各自能跑、但从未被设计成能放在一起"的碎片。原文第 4 章把CLAUDE.md称为 Claude Code 的项目级持久记忆,没有它,每次会话都从零推导,MVP 代码库会结构漂移。本篇就把这种漂移当成一个排障现象来处理:先确认模型通道配置,再检查CLAUDE.md是否真的被持续读取。
在开始之前,先把模型请求通道固定下来。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册并创建一个 Key,TaoToken 在这里只提供 Key 和 Base URL,用来把 Claude Code 的模型请求通道固定住。通道不稳,后面所有关于上下文的排查都不可信。
一、原问题与场景:漂移不是"模型忘了",而是通道和配置没对齐
很多人把会话漂移归因于"上下文窗口不够"或"模型记性差",但在 Claude Code 的实际排障里,更常见的原因是两类:
第一类是模型通道配置错误。Claude Code 通过ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY决定请求发往哪里。如果 Base URL 被写成带/v1的地址,或者指向一个已经失效的旧地址,请求可能仍然"能通",但会话行为会变得不稳定——表现为上下文读取时好时坏、CLAUDE.md有时生效有时不生效。这种"半通不通"最容易被误判成模型问题。
第二类是项目级记忆没有被真正加载。CLAUDE.md是项目级指令,会被 Agent SDK 在该目录运行时自动读取。但如果你的工作目录不对、文件命名不对、或者会话启动方式绕过了项目根目录,它就不会被读进来。此时模型只能靠当前会话里的只言片语推断项目结构,漂移几乎是必然的。
所以排障顺序应该是:先确认通道,再确认记忆加载。通道是地基,记忆是钢筋,两者缺一,MVP 代码库都会在迭代中坍塌。
二、TaoToken 前置:把 Claude Code 的请求通道固定下来
TaoToken 在这个排障场景里的角色很明确:提供 Key 和 Base URL,让 Claude Code 的模型请求走一条稳定、可预期的通道。它不替代编辑器,也不替你写代码,只负责把"请求发到哪里"这件事固定住。
你需要准备两样东西:
- 一个 API Key:在 TaoToken 控制台创建,形如
YOUR_API_KEY。 - 一个 Base URL:
https://taotoken.net/api。
这里有一个高频坑:Base URL 不要带/v1,也不要加 UTM 参数。Claude Code 会自己在 Base URL 后面拼接路径,如果你手动加了/v1,最终请求路径就会重复,导致部分请求失败或行为异常。UTM 参数是给网页统计用的,写进 API 地址只会污染请求。
创建 Key 的入口在控制台的 API Keys 页面,接入细节可以对照接入文档。如果你后续要做长期编码或 Agent 工作流,可以再了解 Coding Plan;如果只是想先验证模型通道是否通,用模型对话页面做一次最小请求即可。
三、可复制配置:Claude Code 的 settings.json 与 ANTHROPIC_*
Claude Code 的配置核心是环境变量ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY,它们通常写在settings.json里。下面是一份可直接复制的配置示例:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "YOUR_API_KEY" } }几个必须注意的点:
ANTHROPIC_BASE_URL的值就是https://taotoken.net/api,结尾不要加/v1,也不要加任何查询参数。ANTHROPIC_API_KEY填你在 TaoToken 创建的 Key,不要留占位符。- 如果你之前配置过旧的 Base URL,务必先删掉旧值,避免多个配置源冲突。
- 配置改完后,完全退出并重启 Claude Code,让新的环境变量生效。热重载不一定能刷新通道配置。
如果你使用 CLI 方式启动,也可以直接带参数:
npm i -g @taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m MODEL_ID其中-u对应 Base URL,-m对应你要使用的模型 ID。这样启动的会话会直接使用指定通道,避免继承到系统里残留的旧配置。
配置完成后,先别急着跑 MVP 会话。先做一次最小验证,确认通道是通的。
四、验证请求与成功结果:确认 CLAUDE.md 被持续读取
验证分两步:先验证通道,再验证记忆加载。
第一步,验证模型通道。在 Claude Code 里发起一个最简单的请求,比如让它复述当前工作目录。如果请求能正常返回,说明 Base URL 和 Key 配置正确。如果报 401,检查 Key;如果报 404 或路径异常,检查 Base URL 是否误加了/v1。
第二步,验证CLAUDE.md是否被读取。在项目根目录放一个CLAUDE.md,里面写一条只有它才知道的约定,例如:
## 项目约定 - 所有模块必须使用 named export,禁止 default export。 - 依赖注入统一走 src/container.ts,禁止在业务代码里直接 new。然后新开一个会话,问模型:"这个项目的 export 规范是什么?依赖注入入口在哪?"如果模型能准确回答,说明CLAUDE.md被读到了。如果它答不上来,或者给出通用建议,说明记忆没有被加载。
成功结果长这样:
- 模型能复述
CLAUDE.md里的具体约定,而不是泛泛而谈。 - 连续开三个新会话,问同一个问题,答案保持一致。
- 让它生成一个新模块时,它会主动遵循 named export 和依赖注入约定,而不是每次重新选方案。
如果这三点都满足,说明通道和记忆都对齐了,会话漂移的根因已经被消除。接下来重新跑一次 MVP 会话日志,观察跨会话的结构一致性。
五、本篇常见错排查
错误 1:Base URL 带了/v1。这是最高频的坑。表现是部分请求能通、部分异常,上下文读取时好时坏。解决方法是把ANTHROPIC_BASE_URL改回https://taotoken.net/api,不带任何后缀。
错误 2:Base URL 指向旧地址。如果你之前用过别的通道,环境变量里可能残留旧地址。表现是请求超时或返回非预期内容。解决方法是全局搜索ANTHROPIC_BASE_URL,确保只有一个生效值。
错误 3:CLAUDE.md放错目录。它必须放在项目根目录,也就是你启动 Claude Code 的工作目录。放在子目录里不会被自动读取。解决方法是确认当前工作目录,并把CLAUDE.md移到根目录。
错误 4:文件名大小写不对。必须是CLAUDE.md,全大写。写成claude.md或Claude.md在部分系统上不会被识别。
错误 5:改了配置没重启。环境变量在进程启动时读取,改完settings.json后必须完全退出并重启 Claude Code。
错误 6:会话日志没有回写。原文建议每次会话结束把新决策追加回CLAUDE.md。如果你只读不写,CLAUDE.md会逐渐过时,模型读到的还是旧约定,漂移依然会发生。把"每会话 5 分钟的文档化"当成防止架构漂移的最便宜保险。
错误 7:把通道问题和记忆问题混在一起排查。先确认通道通,再确认记忆加载。顺序反了,你会在一堆变量里打转。
六、语义一致 CTA
会话漂移的排障,本质是两件事:把模型请求通道固定住,把项目级记忆加载对。TaoToken 负责前者,CLAUDE.md负责后者。
如果你还在配置阶段,先去 API Keys 页面创建 Key,再对照接入文档把settings.json写对。如果你已经配通,想验证模型通道是否稳定,可以用模型对话做一次最小请求。如果你准备把 Claude Code 长期用于 MVP 迭代和 Agent 工作流,Coding Plan 会更适合你的使用节奏。
通道稳了,记忆对了,MVP 代码库才不会在迭代中漂移。