1. 为什么 ChatGPT 的 “Great!” 让我越练越虚用 ChatGPT 刷 C 面试题最典型的场景是这样的你写了一段关于虚函数表的解释其实漏掉了 vptr 在构造顺序里的初始化时机它回你一句 “Great answer! 你理解得很到位”然后直接跳到下一题。你关掉窗口脑子里什么都没留下。第二天开新对话它连你昨天练过什么都不知道你得重新自我介绍一遍“我在准备 C 后端实习”。问题不在于模型笨而在于它的默认目标是“让对话舒服”不是“让你学会”。它没有跨会话记忆没有错题追踪也没有强制的讲解—验证闭环。你答错了它不敢较真你答对了它也不确认你到底懂没懂。我想要的其实是一个严格的面试老师答错必须讲透、出验证题、通过了才放行隔几天还得按遗忘曲线把旧知识点翻出来重问。这套流程用 Claude Code 的 CLI 加上CLAUDE.md规则文件能搭出来因为它的规则文件每次会话都会自动加载等于给 AI 写死了行为约束。下面我把这套 C 面试训练流程拆成可复制的配置顺带说明怎么用 TaoToken 统一 Key 和 API 通道接进去。2. TaoToken 前置把 Key 和 API 通道先理清Claude Code 本身是个 CLI 工具它需要模型服务来驱动。我这边习惯用 TaoToken 做统一的 Key 和 API 通道管理好处是模型对话、编码计划、控制台这些入口的凭证不用到处散落。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。你需要先拿到一个可用的 Key。进控制台创建https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 然后在 API Keys 页面生成https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。生成后复制那串sk-开头的字符串后面写进环境变量。注意Key 只显示一次生成后立刻存到本地密码管理器或环境变量里别直接写进会提交到 Git 的配置文件。如果你只是想先验证模型通不通可以用模型对话页面直接试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。确认能正常返回后再往下配 Claude Code。接入细节可以对照文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。3. 可复制配置CLAUDE.md 骨架 settings.json3.1 目录结构先定好我在项目根目录建了这么一套结构规则和知识库分离方便你换成 Java 或 Goai-interview-engine/ ├── CLAUDE.md ├── .claude/ │ └── settings.json ├── rules/ │ └── interview.md └── knowledge/ ├── interview_tracker.md └── TEMPLATE.mdCLAUDE.md是入口规则rules/interview.md放详细流程knowledge/interview_tracker.md存知识点和复习状态。3.2 CLAUDE.md 骨架这个文件每次会话自动加载所以写的是“总纲”告诉 Claude 这是个面试训练场景# 面试训练引擎 你是一个严格的 C 面试官不是陪聊。你的目标是让用户真正学会而不是让对话舒服。 ## 加载规则 每次会话开始先读取 rules/interview.md 和 knowledge/interview_tracker.md。 ## 核心原则 1. 禁止只说 Great 就跳题。答对要简要确认并关联知识点答错必须走讲解流程。 2. 每次会话开始检查 interview_tracker.md 里哪些知识点到了复习时间D1/D2/D4/D7/D15优先出复习题。 3. 出题要混合 3-4 个模块不要只问一个方向。 4. 用户说今天就到这时触发收尾流程给大纲 → 用户复述 → 你判断是否真懂 → 更新 tracker。 ## 出题来源 优先从用户项目代码出发追问而不是空背八股。3.3 rules/interview.md 详细流程这是真正约束行为的地方把“答错→讲解→验证”写死# 面试流程规则 ## 单题流程 1. 出题混合模块标注知识点标签 2. 用户回答 3. 判断 - 答对 → 简要确认 关联 1 个延伸知识点 → 下一题 - 答错 → 必须讲解含参考资料 URL→ 出验证题 → 通过才出新题 4. 禁止跳步骤。不能答完直接出下一题。 ## 复习调度 - 知识点首次学习记为 D0 - 复习节点D1, D2, D4, D7, D15 - 每次会话开始扫描 tracker到期的优先出题 - 连续两次答对标记已掌握答错标记薄弱 ## 收尾流程 用户说今天就到这 1. 给出今日学习大纲 2. 用户根据大纲复述理解 3. 判断是真懂还是背答案 4. 更新 interview_tracker.md3.4 knowledge/interview_tracker.md 知识点表用表格记状态Claude 每次会话读它# 知识点追踪 | 知识点 | 首次学习 | D1 | D2 | D4 | D7 | D15 | 状态 | |--------|---------|-----|-----|-----|-----|------|------| | 智能指针 | 05-29 | | | | | | 已掌握 | | 虚函数表 | 05-29 | | | | | | 薄弱 | | condition_variable | 05-29 | | | | | | 待复习 |3.5 settings.json 配置片段.claude/settings.json里配环境变量和权限把 API 通道指向 TaoToken{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key }, permissions: { allow: [ Read, Write, Bash(git:*) ] } }注意ANTHROPIC_BASE_URL填 https://taotoken.net/api 不要带 UTM 参数那是给网页链接用的API 调用不需要。4. 验证请求跑一次模拟面试配置写完进项目目录启动cd ai-interview-engine claude第一句话直接说需求我要准备 C 后端开发面试目标是大厂实习。开始复习。正常的话Claude 会先读rules/interview.md和knowledge/interview_tracker.md然后检查哪些知识点到期。因为 tracker 里虚函数表标了薄弱、condition_variable待复习它应该优先出这两块的题而不是随便问一个。我实测下来它会问类似这样的问题你的 BoundedQueue 用了两个 condition_variablenot_full_ 和 not_empty_ 用一个行不行说说为什么。这就是从项目代码出发的追问比“请解释 condition_variable”有用得多。你答错时它必须走讲解流程给参考资料再出验证题通过了才放行。想单独验证模型通道通不通可以先在模型对话页面发一条测试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果那边正常、CLI 报错问题多半在settings.json的 Key 或 base URL。5. 本篇常见错排查5.1 Claude 还是只说 “Great” 就跳题大概率是CLAUDE.md没被加载。检查两点文件是否在项目根目录、文件名是否严格是CLAUDE.md大小写敏感。另外确认rules/interview.md路径写对了Claude 读不到规则就会退回默认的“陪聊”行为。5.2 会话开始不检查复习调度knowledge/interview_tracker.md里的日期格式要统一我用的是MM-DD。如果格式混乱Claude 算不出 D1、D2 这些节点就不会触发复习。表格列名也别改规则文件里是按列名读的。5.3 API 报 401 或连接失败先看settings.json里ANTHROPIC_API_KEY是不是完整的sk-字符串有没有多余空格。再看ANTHROPIC_BASE_URL是不是 https://taotoken.net/api 末尾不要加斜杠。如果还不行去 API Keys 页面重新生成一个https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。5.4 出题只问一个模块规则里写了“混合 3-4 个模块”但如果interview_tracker.md里知识点太少Claude 没得混。至少填 8-10 个知识点覆盖内存管理、并发、STL、网络几个方向它才有得选。5.5 收尾流程不触发触发词是“今天就到这”规则文件里写死的。如果你说的是“结束吧”“不练了”它可能不认。要么按触发词说要么在rules/interview.md里把触发词补全。6. 长期编码和 Agent 场景怎么接这套引擎跑通后如果你打算长期用它练 C、甚至扩展到 Java/Go 面试或者把它当成日常编码的 Agent 底座可以走 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。它适合需要持续调用、多轮会话的场景比单次对话更省心。Claude Code 的 CLI 接入细节包括环境变量和权限配置文档里写得更全https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你用的是 Claude Code 的 Anthropic 兼容通道参考这个页面https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。我自己的用法是平时练面试走模型对话快速验证正式训练开 Claude Code 跑规则文件长期挂着就用 Coding Plan。三条通道共用一个 Key管理起来不乱。
