ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Claude Code 详细设计:从需求到可运行代码的完整链路拆解

Claude Code 详细设计:从需求到可运行代码的完整链路拆解 1. 从需求到代码Claude Code 详细设计到底解决什么问题Claude Code 详细设计这个词最近在不少技术群里被反复提起。很多人第一次听到会以为它只是一个帮你写代码的聊天窗口但真正用起来才发现它更像一个能读懂你项目结构、能按你定义的规范去拆需求、定接口、写测试的工程搭档。问题在于大部分人卡在第一步不知道怎么把脑子里的需求变成 Claude Code 能稳定执行的详细设计链路。我试过直接丢一句帮我写个用户积分服务结果它给出来的东西接口命名随意、数据模型缺字段、测试用例只覆盖了 happy path。后来才明白Claude Code 的详细设计能力取决于你给它的上下文约束有多清晰。换句话说它不是不会做详细设计而是需要你把设计规范提前写进项目里让它每次都能按同一套标准输出。这篇文章聚焦一个小型服务模块——用户积分账户服务把从需求拆解、接口定义、数据模型到测试用例生成的完整路径拆开讲。你会看到可复制的 CLAUDE.md 配置片段、分步验证动作以及如何通过 TaoToken 统一 Key 和 API 通道接入模型能力让整条链路在本地可复现。适合谁适合已经会用命令行、写过至少一个后端服务、想让 AI 真正参与工程设计的开发者。如果你还在纠结AI 写的代码能不能用这篇会给你一个可验证的答案。核心检索词先明确Claude Code 详细设计指的是利用 Claude Code 的项目上下文能力把模糊需求转化为结构化设计文档并落地为可运行代码的过程。它不是一个独立工具而是一套工作流。2. TaoToken 前置统一 Key 与 API 通道怎么配在开始写 CLAUDE.md 之前得先把模型通道打通。Claude Code 本身是一个 CLI 工具它需要调用模型 API 才能工作。如果你直接用官方通道会面临几个现实问题Key 管理分散、不同模型切换麻烦、团队协作时配置不统一。TaoToken 在这里的作用是提供一个统一的 API 入口让你用一套 Key 就能访问多种模型能力。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数配置时直接用这个。具体怎么接Claude Code 支持通过环境变量指定 Base URL 和 API Key。你需要在项目根目录或者 shell 配置里设置两个变量。我实测下来最稳妥的方式是写进项目的.env文件然后在启动脚本里加载。# .env 文件内容 ANTHROPIC_BASE_URLhttps://taotoken.net/api ANTHROPIC_API_KEY你的TaoToken密钥这里有个坑要注意Claude Code 默认读的是ANTHROPIC_API_KEY和ANTHROPIC_BASE_URL这两个变量名。如果你用的是其他变量名它不会自动识别。设置完之后可以用一个简单命令验证通道是否通curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer $ANTHROPIC_API_KEY | head -c 500如果返回模型列表的 JSON说明 Key 和通道都正常。如果返回 401说明 Key 有问题如果返回连接错误检查 Base URL 是否写成了带路径的完整地址。为什么强调这一步因为 Claude Code 的详细设计能力依赖模型持续对话如果通道不稳定生成到一半断了前面的设计上下文就丢了。TaoToken 的统一通道在这里的价值是你可以在同一个项目里切换不同模型做对比比如用强模型做架构设计用快模型做测试用例补全而不用改代码。另外如果你打算长期用 Claude Code 做编码和 Agent 任务可以关注 Coding Plan 相关的接入方式它更适合高频调用场景。模型对话入口可以用来快速验证某个模型对设计文档的理解能力接入文档则提供了更细的配置说明。3. 可复制配置CLAUDE.md 与 settings 片段这一节是整篇文章的核心。Claude Code 详细设计能不能稳定输出取决于你在CLAUDE.md里定义了多少约束。这个文件相当于给模型的项目级系统提示它会在每次对话时被加载。先看目录结构。假设你的项目叫points-service结构如下points-service/ ├── .claude/ │ └── CLAUDE.md ├── src/ │ ├── domain/ │ ├── application/ │ └── infrastructure/ ├── tests/ └── package.json.claude/CLAUDE.md是项目级配置优先级高于用户级。下面是我实际用的一套配置片段你可以直接复制修改# 项目设计规范 ## 技术栈 - 语言TypeScript 5.x - 运行时Node.js 20 - 测试框架Vitest - 数据库PostgreSQL Prisma ## 详细设计输出要求 当被要求做详细设计时必须按以下顺序输出 1. 需求拆解用表格列出功能点、输入、输出、边界条件 2. 接口定义给出 HTTP 方法、路径、请求体、响应体、错误码 3. 数据模型给出 Prisma schema 片段包含字段类型和索引 4. 测试用例至少覆盖正常流程、参数校验、并发冲突三类 ## 命名规范 - 接口路径kebab-case如 /points/accounts - 数据库表snake_case如 points_accounts - TypeScript 类型PascalCase如 PointsAccount - 函数camelCase如 createAccount ## 禁止事项 - 不要生成任何真实数据库连接字符串 - 不要假设存在未定义的中间件 - 不要省略错误处理分支这个文件写完之后Claude Code 在生成设计时就会按这个结构走。但光有 CLAUDE.md 还不够你还需要一个settings.json来固定模型和权限。放在.claude/settings.json{ model: claude-sonnet-4-20250514, permissions: { allow: [ Read, Write, Bash(npm run test:*), Bash(npx prisma generate) ], deny: [ Bash(rm -rf:*), Bash(curl:*) ] }, env: { ANTHROPIC_BASE_URL: https://taotoken.net/api } }注意env里只写了 Base URLKey 建议通过系统环境变量注入不要硬编码在文件里。如果你用的是 CC Switch 这类配置切换工具需要确保三件套完整Base URL 指向https://taotoken.net/apiKey 用 TaoToken 生成的密钥Model ID 填你实际要用的模型标识。这三者缺一不可否则会出现认证失败或者模型找不到的错误。配置完成后进入项目目录运行claude启动。第一次启动时它会读取.claude/CLAUDE.md和settings.json。你可以用/config命令确认当前加载的配置是否正确。4. 分步验证从设计文档到可运行代码配置就绪后开始走完整链路。我以用户积分账户服务为例分四步验证。第一步需求拆解。在 Claude Code 里输入请按 CLAUDE.md 的详细设计输出要求拆解用户积分账户服务的需求。 功能包括创建账户、查询余额、增加积分、扣减积分。它应该输出一个表格列出每个功能点的输入输出和边界条件。比如扣减积分要处理余额不足、并发扣减、账户不存在三种情况。如果它漏了并发场景你可以直接追问并发扣减怎么处理它会补充乐观锁或悲观锁的方案。第二步接口定义。接着输入基于上面的需求定义 REST 接口。给出方法、路径、请求体、响应体、错误码。预期输出类似方法路径请求体响应体错误码POST/points/accounts{userId}{accountId, balance}400, 409GET/points/accounts/:id-{accountId, balance}404POST/points/accounts/:id/credit{amount, reason}{balance}400, 404POST/points/accounts/:id/debit{amount, reason}{balance}400, 404, 422第三步数据模型。输入生成 Prisma schema 片段包含账户表和流水表加必要索引。它会输出类似model PointsAccount { id String id default(uuid()) userId String unique balance Int default(0) version Int default(0) createdAt DateTime default(now()) updatedAt DateTime updatedAt entries PointsEntry[] index([userId]) map(points_accounts) } model PointsEntry { id String id default(uuid()) accountId String amount Int reason String createdAt DateTime default(now()) account PointsAccount relation(fields: [accountId], references: [id]) index([accountId, createdAt]) map(points_entries) }第四步测试用例。输入为 debit 接口生成 Vitest 测试用例覆盖正常扣减、余额不足、并发扣减。它会生成可运行的测试文件。你把它保存到tests/debit.test.ts然后运行npm run test。如果测试通过说明整条链路从设计到代码是通的。这里的关键验证点是生成的代码能不能直接跑。我踩过的坑是早期没写 CLAUDE.md 时它生成的 Prisma schema 字段名和接口里的不一致导致编译报错。加上命名规范约束后这个问题就消失了。5. 常见报错排查401、local proxy failed 与 OAuth即使配置正确实际使用中还是会遇到几类典型报错。这一节按真实错误信息来对照排查。401 Unauthorized。这是最常见的。原因通常有三个Key 没设置、Key 过期、Base URL 写错。排查顺序是先用 curl 验证 Key 是否有效再检查settings.json里的env是否覆盖了系统变量。注意 Claude Code 读取环境变量的优先级项目 settings 用户 settings 系统环境变量。如果你在 settings 里写了空的 Base URL它会覆盖系统变量导致请求发到错误地址。local proxy failed。这个报错通常出现在你配置了本地代理但代理没启动时。Claude Code 会尝试连接你指定的代理端口如果端口不通就报这个错。解决方法是检查HTTP_PROXY或HTTPS_PROXY环境变量是否指向了一个不存在的服务。如果你不需要代理直接 unset 这两个变量。reading choices 相关错误。这类错误一般出现在模型返回格式不符合预期时。比如你用的模型 ID 在 TaoToken 通道上不存在返回体里没有choices字段Claude Code 解析时就报错。解决方法是确认 Model ID 拼写正确并且该模型在你的 TaoToken 账户权限范围内。可以在模型对话入口里先手动测试一次确认模型能正常返回。OAuth 相关报错。如果你用的是需要 OAuth 认证的 MCP 服务器可能会遇到 token 过期或 scope 不足的问题。排查时先检查 MCP 配置里的oauth字段确认 client ID 和 scope 是否正确。如果是 Codex 的auth.json配置问题需要确保文件里的base_url指向https://taotoken.net/apiapi_key字段填 TaoToken 密钥model字段填正确的 Model ID。这三件套任何一项缺失都会导致认证失败。还有一个隐蔽的坑并发扣减测试时如果数据库隔离级别设置不对测试会随机失败。这不是 Claude Code 的问题而是生成的设计里没考虑事务隔离。你可以在 CLAUDE.md 里加一条涉及余额变更的操作必须使用事务它就会在生成代码时加上prisma.$transaction。6. 把这条链路变成日常习惯走到这里你已经有了一个可复现的流程配置 CLAUDE.md 定义设计规范通过 TaoToken 统一通道接入模型用四步验证法从需求走到可运行代码再用报错对照表快速排障。剩下的就是把它变成日常习惯。我的建议是每接一个新模块先花十分钟写 CLAUDE.md 里的设计约束比后面反复改代码省时间。另外测试用例生成后不要直接信跑一遍再提交。如果你想让这条链路更稳定可以把常用的设计模板沉淀到.claude/CLAUDE.md里下次直接复用。需要快速验证模型能力时用模型对话入口手动测一轮需要长期跑编码和 Agent 任务时走 Coding Plan 的通道更合适配置细节拿不准就翻接入文档。Key 的生成和管理在 API Keys 页面建议按项目分 Key方便排查问题。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进