用 Claude 写所有代码:从问答式到 Agent 模式的实战指南
回答这个问题之前我想先纠正一个隐含前提如果你理解的“用 Claude 写代码”是把需求敲进对话框、复制答案、再贴回编辑器那你确实很难做到“所有代码都交给它”。我自己用过很长一段时间这种问答方式最后得出的结论是它只适合解决零散问题离“日常主力编码工具”还差着一个量级。真正让我的编码方式发生质变的是换成了 Agent 模式——Claude Code 直接在我的代码仓库里干活读文件、查调用关系、改代码、跑测试、出 diff。我在旁边做的是定义需求边界、审查每一处改动、把控质量底线。这篇文章想把这几件事讲透为什么 Agent 模式和问答模式是两种完全不同的用法Claude Code 从安装到在 VSCode 里跑通需要避开哪些坑我日常驱动它的完整工作流长什么样一个真实的重构案例是怎么被 AI 和我共同完成的以及那些能踩的坑我都踩过之后总结出的排错手册。最后会聊一下把 Claude Code 接到 DeepSeek 这类模型的玩法。适合正在观望、想在团队里真正把 Claude 用起来的人参考。1. 从“问答式辅助”到“结对式协作”我的用法发生了质变1.1 大多数人对“AI 写代码”的理解还停留在复制粘贴先说最典型的问答式用法。我在早期用 Claude 干活的时候模式基本固定遇到一个报错把报错信息复制进去需要一个函数把需求写进去要改一段逻辑先把代码贴进去再问。这种用法不能说没用尤其在解决一次性问题时效率很高。但它有两个绕不开的硬伤。第一上下文完全靠手动维护。你贴给它的代码只是它看到的一切它并不知道这个项目里其他模块怎么调用它也不知道你的编码规范。第二AI 给出的建议经常是基于“通用正确”而不是“项目正确”拿回来自己改的时间有时候比直接写还长。用了一段时间后我统计过问答式产出里能直接用或者小改后能用的代码大概只有四成左右剩下的与其说是“代码”不如说是“思路参考”。1.2 Agent 模式带来的关键转变从“给建议”到“动手改”真正让我改变的是 Claude Code 这个 Agent 工具。它是 Anthropic 官方的命令行工具安装后可以直接在你指定的项目目录里运行。它会根据你的指令去读取项目文件、查看目录结构、执行 shell 命令、编辑文件甚至帮你运行测试。这意味着它不再是一个只输出代码的对话框而是一个能在仓库里操作的工作单元。我打过一个比方问答式 AI 像是在网上找人做工具你把需求发过去对方甩回来一段代码剩下的集成、适配、配环境全是你的活沟通成本反而更高。Agent 模式则像身边坐了一个实习生他读得懂项目上下文遇到问题自己翻代码改完还知道跑测试给你看。你只需要讲清楚需求、说清楚验收标准、最后认真审查他的产出。这个转变不是工具形态的变化而是工作角色的重构写代码这个动作被外包了剩下的是定义问题、控制边界、保证质量。这才是“用 Claude 写所有代码”真正可行的原因——因为你不再在“让 AI 写”和“自己写”之间二选一而是进入了一种“结对编程”的新节奏。1.3 真正用 Claude 写所有代码之前我先给自己定了三条原则在进入具体工作流之前先讲讲我在大量使用之前给自己定的三条原则。第一条任何项目开始用 Claude 之前先把关键约束写进CLAUDE.md文件。它相当于这个项目的“家规”Claude 每次会话都会读取。没有这个文件它就会按通用最佳实践自由发挥很容易把项目的技术栈或风格带偏。第二条每次任务的范围尽可能小宁可拆成多个会话也不要在一个请求里塞进“帮我重构整个模块并加测试并写文档”这种巨型需求。范围越小AI 的完成度越高出问题时也越容易定位。第三条所有 AI 生成的代码必须经过我的审查和验证才算完成。测试通过不等于验收通过我要亲眼看过 diff 才放心。这三条原则看上去很简单但它们正是“用 Claude 写代码”和“被 Claude 带偏”之间的分水岭。2. 先把环境搭对Claude Code 从安装到能用的完整链路2.1 安装前先检查这三件事比盲目敲命令管用很多人装上之后才发现有一堆前置条件没满足所以我把安装前要确认的事放在前面。Claude Code 基于 Node.js 运行我建议先确认本机有 Node.js 18 或更高版本以及对应的 npm。检查方式很简单node -v和npm -v没有就先去官网装 LTS 版本这一步不过后面全部白搭。其次是账号。Claude Code 需要你有可用的 Claude 账号或 Anthropic API Key。如果你当前所在区域或账号状态暂时无法使用会看到类似unfortunately, claude is not available to new users right now的提示这个属于官方渠道的开放节奏和供应限制个人能做的事不多只能等待官方放开或者通过企业的商务渠道申请商用账号。第三点是 Windows 用户特别要注意的部分系统环境会要求开启虚拟化相关功能报错信息是Claudes workspace requires the virtual machine platform on Windows。这个不是 Claude 的问题而是它的 workspace 沙箱机制依赖 Windows 的 Virtual Machine Platform 功能。你需要在“启用或关闭 Windows 功能”里勾选虚拟机平台和适用于 Linux 的 Windows 子系统然后重启电脑。这一步不确认好装完大概率仍然跑不起来。2.2 从安装到最小验证二十分钟走一遍环境确认没问题安装就快了。最直接的方式是全局安装 npm 包npm install -g anthropic-ai/claude-code安装完成后先验证版本claude --version有版本号输出就说明装上了。接着配置 Key。如果你用的是 Anthropic API把 Key 写入环境变量。macOS 或 Linux 在~/.zshrc或~/.bashrc里加一行export ANTHROPIC_API_KEYsk-ant-...Windows PowerShell 里用临时变量$env:ANTHROPIC_API_KEYsk-ant-...想持久化就用setx ANTHROPIC_API_KEY sk-ant-...或者去系统设置里改用户环境变量。配置完之后在任意项目目录里敲claude就进入交互式会话。我的最小验证方式很简单让它“先读一下 README.md然后用三句话告诉我这个项目是干什么的”。如果它能正确总结出项目内容说明读取文件的链路是通的如果连这个都做不到那后面就不用指望它能改代码了。这一步花不了十分钟但它能快速暴露配置问题省得你带着一个半残的环境开始工作。2.3 claude 不是 cmdlet这类安装报错根因在 PATHclaude : 无法将“claude”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。这条报错出现频率极高原因几乎都是同一个npm 的全局安装目录不在你的 PATH 环境变量里或者终端会话没有刷新。排查方法分两步。第一步用npm root -g查看全局目录通常 Windows 下是C:\Users\你的用户名\AppData\Roaming\npmmacOS 或 Linux 常见是/usr/local/lib/node_modules或~/.npm-global。第二步把这个目录加到 PATH 里。Windows 用系统设置的环境变量编辑界面追加即可改完必须重新打开终端或 VSCode 窗口因为会话是从启动那一刻读取 PATH 的快照。还有一个容易忽略的情况如果你在 VSCode 里安装了终端相关插件或使用了自定义 shell终端命令的 PATH 可能和系统环境变量不一致这时候要单独确认终端自身的配置。这个报错本身很好解决但如果你在配置 PATH 时把变量改坏了后续所有命令行工具都会受影响所以修改 PATH 前建议先备份原值。2.4 在 VSCode 里把 Claude Code 变成顺手的主战场Claude Code 本身是命令行工具我最推荐的用法不是开一个独立终端而是在 VSCode 的内置终端里直接跑。这样做的最大好处是Claude 的工作目录就是当前打开的项目它能直接感知项目结构而你可以一边看代码一边看它操作改完的 diff 也能立刻在编辑器里浏览。具体做法没什么花活打开 VSCode终端面板里cd到项目根目录敲claude就开始了。如果你希望它固定在某个工作区可以在项目根目录的.vscode/settings.json里配置终端的默认命令。另外我习惯在 VSCode 里装一个 Error Lens 或同类代码诊断插件AI 生成的代码里如果有类型错误或 lint 问题编辑器里会直接红标出来审查 diff 时一眼就能看到问题行比靠肉眼读代码高效很多。这套组合装好之后Claude Code 就不再是一个“外部工具”而是融进了你原有的开发环境里。3. 我的日常编码工作流需求、驱动、审查、收尾3.1 第一步把“写代码”翻译成“描述变更”环境搭好后接下来是日常到底怎么用。我的体会是真正决定产出质量的不是你 prompt 写得有多华丽而是你有没有把“这次变更的目标和边界”说清楚。我自己的 prompt 结构基本上是五段式背景、现状、目标、约束、验收标准。比如一个典型任务我会这样写背景这是一个后台管理系统的用户模块 现状userService.ts 里的 updateUser 方法有 300 行逻辑全堆在一起 目标把更新用户资料的主流程拆成可独立测试的小函数 约束只改 src/services/userService.ts不要动路由层和数据库层不要引入新依赖 验收标准重构后对外行为和原有逻辑完全一致已有测试全部通过 并且为拆出来的纯函数补上单元测试。很多人在提示词里最常漏掉的就是约束和验收标准但对我来说这两项恰恰是决定结果能不能用的关键。约束告诉 Claude 什么不能碰验收标准告诉它怎样算做完两者缺一AI 就会按它自己理解的“做完”来自由发挥跑偏只是时间问题。另外如果你发现 Claude 反复在同一个地方犯错比如总是建议引入你没有的依赖那就应该把这些约束升级到CLAUDE.md里让它在后续所有会话中都遵守这比每次重复写 prompt 可靠得多。3.2 第二步让 Claude 先给方案再动手别急着让它写第二条关键经验是在写代码之前先让 Claude 给你方案。我会在任务描述的最后加上一句“先不要写代码先读相关文件梳理现有实现给我一个改造方案等我确认后再动手。”这一句话能省掉大量返工。因为代码生成是一个方向性很强的过程如果方向错了它不仅会浪费 token更会浪费你审查 diff 的时间。而先出方案的好处是实现路径在代码层面先对齐了你可以在大方向上及时纠偏。比如我经常会发现 Claude 打算引入某个重量级框架来实现一个很简单的小功能或者打算把任务范围扩展到我根本没想让它碰的模块。这些偏差在方案阶段发现成本是最低的。那什么时候可以直接让它写我的经验是任务足够小、足够明确、且有测试可以兜底的时候。比如补一个工具函数、修复一个具体的 bug、生成一段数据迁移脚本这种可以直接进入实现。判断标准其实很简单你自己清不清楚这个任务应该怎么做。如果清楚那就让它直接写如果只有模糊感觉还是先要方案。3.3 第三步diff 审查是我从不省略的一环第三步可能是最反 AI 时代直觉的我从来不会把 Claude 的输出直接当作完成品。流程是这样的它改完代码并声称测试通过之后我第一件事是自己跑一遍测试然后打开git diff一行一行看它改了哪些内容。我审查 diff 时重点盯三类问题。第一有没有改动超出任务范围的代码。比如我让它修一个登录 bug结果它顺手优化了旁边三处无关代码这种越界改动哪怕看起来合理也必须撤销或单独提交否则会让 review 变得不可控。第二边界情况和异常处理是否完整。AI 生成的代码在正常路径上通常表现很好但空值、极端输入、并发这些场景经常被忽略需要人眼去补。第三有没有引入隐蔽的新依赖或新的全局状态。有一次 Claude 在重构时把日志输出格式“顺手”改成了 JSON从它自己的角度看这很合理但在我的项目中这意味着日志解析全挂。我在 diff 里发现后让它改回原格式这就是人工审查不可替代的价值。你审查越严格Claude 后续表现也会越稳定因为它会从你的纠偏中学习你真正接受的行为模式。4. 一个真实案例用 Claude 重构一段遗留脚本的全过程4.1 案例背景没有异常处理、没有分层的数据处理脚本讲一个我实际做过的案例带大家把上面的工作流串起来。这个任务是重构一个同事留下的数据处理脚本Python 写的大概 400 行。它的功能是读取几个 Excel 报表做一堆清洗和汇总最后把结果写进另一个 Excel。问题也很典型所有逻辑堆在一个 main 函数里计算和 IO 混在一起完全没有异常处理print 到处都是没法写测试。改造目标很明确把计算逻辑从 IO 中拆出来抽成可测试的纯函数补上异常处理对外输出格式和结果不能变。我当时的第一版需求描述就按上面说的五段式来写特别强调了两个约束不要引入 pandas只用标准库输出文件结构和原脚本保持一致。之所以提这两个约束是因为我知道 Claude 看到 Excel 处理任务的第一反应大概率会建议用 pandas但项目环境基本上不会新增依赖输出格式一变下游依赖这个文件的其他模块也会跟着遭殃。4.2 我和 Claude 的两轮关键协作以及中途纠偏记录第一轮我让它先读原脚本、梳理流程并给重构方案。它花了几个回合读完文件给出了一个清晰的分层方案数据读取与校验、业务计算、文件写出三段并建议把核心计算逻辑拆成几个纯函数。方案方向我基本认可但发现它计划引入 pandas 来简化 DataFrame 操作我在确认环节直接否了要求只用 csv 和 openpyxl 标准库方案。之后它进入实现阶段配合我补充的单元测试整体推进很顺利。中途出了一个典型偏差它在重写文件写出逻辑时为了“更美观”把输出的表格加了一个汇总行。从工程师角度看这个功能很友好但下游模块并不期望它出现测试也立刻暴露了不一致。我用 diff 审查发现后让它删掉汇总行并重新跑了一轮测试。这类偏差在 AI 重构中非常常见它认为自己在做改进但实际上是改变了产品行为。这就是为什么测试和人工审查缺一不可。4.3 这次重构里最值得写下的踩坑经验这次重构下来最值得记录的经验有两点。第一AI 对“改动边界”的感知比我想象中弱很多。它天然倾向于把代码改得“更好”但“更好”和“不改变行为”在它的目标函数里经常冲突。解决办法是把“不要做什么”写得比“要做什么”更具体甚至可以把它写进CLAUDE.md作为这类项目的通用纪律。第二重构类任务必须配上测试约束。AI 在没有测试保护的情况下重构旧代码非常容易在重构过程中悄悄改变行为而且它自己还很确信改得没问题。我的做法是重构前先手工把关键行为用测试固定下来再开始重构重构结束后不只跑测试还要把处理前后的输出导入文件做一次 diff。这几步都是笨功夫但恰恰是这些笨功夫让“让 AI 重构”从一句口号变成了可以稳定复制的工程实践。5. 能踩的坑我都替你们踩过了常见报错与处理手册5.1 安装与启动阶段的报错速查使用 Claude Code 半年多我积累了一份自己的报错速查表先讲安装与启动阶段最常见的几类。报错现象根因解决方案claude 无法识别为 cmdlet/command not foundnpm 全局目录不在 PATH 或会话未刷新重新打开终端用npm root -g找到目录加入 PATHNode 版本过低提示本机 Node 版本太旧安装 Node.js 18 LTSWindows 提示 workspace requires virtual machine platform系统虚拟化功能未启用启用 Windows 功能的虚拟机平台、WSL 相关组件后重启运行某些工具报找不到 msvcp140.dll系统缺少 Visual C 运行库安装对应版本的 VC Redistributable登录或注册提示 currently not available to new users官方区域与供应限制等待官方开放或企业用户走商务渠道申请这里说一个容易被误判的msvcp140.dll缺失通常出现在运行某些本地 Python 工具链或 C 扩展时它和 Claude 本身没有直接关系。很多人一看到 DLL 缺失就以为是 Claude Code 装坏了实际上开发机上游的编译工具链本来就不完整。5.2 运行与配置阶段的报错处理进入运行阶段报错会明显少但更容易让人懵。排第一的是API error: 400 配置错误: claude provider 缺少 base_url 配置。这个报错十有八九出现在你配置了自定义模型提供商的时候。Claude Code 默认走官方接口不需要你填 base_url一旦你按某些教程在配置里写了 provider 或自定义端点就必须把 base_url 和模型名配套写完整漏一个都会出这个 400。第二类高发问题是环境变量不生效。在 PowerShell 里设置环境变量要注意作用域$env:开头的赋值只对当前进程有效关闭终端就没了想让它持久化要么用setx要么去系统设置里改用户环境变量。很多人配置的是临时变量换个窗口就说 Key 无效其实不是 Key 的问题是变量丢了。第三类是权限拦截。Claude Code 执行命令或修改文件时有自己的权限模式如果频繁弹出 Permissions 提示或被拒绝可以在配置里把可信命令和目录加入允许列表但我不建议无脑全放行尤其是删除和批量替换这类高风险操作。最后还有一类是 API Key 本身的问题比如 key 旁边多了一个空格、已经过期、或者权限范围只允许读不允许写排查时要先看报错码再翻配置。5.3 两种隐性失败上下文污染与对代码库的过度自信还有两类问题不报错但比报错更坑。第一类是长会话的上下文污染。Claude Code 的会话如果开得过长前期任务里积累的一些临时假设会残留到后续任务比如前一个任务里定义的临时变量名、临时的编码风格会被它错误地应用到新需求上。我的应对方式是一个会话只做一类任务完成一个就结束换新任务开新会话真正需要长期遵守的约束放进CLAUDE.md不让它们停留在对话记忆里。第二类是它对代码库的“过度自信”。AI 在生成代码时不会去验证每一个被引用的函数是否真实存在所以经常出现它调用了一个自以为存在、实际上根本不存在的模块或方法。这种问题代码不会报错到你看到的层面但一跑就挂。所以每次它说“改完了”我都会先实际运行验证一遍而不是只读它的总结。宁可让“我跑过了”变成一句口头禅也不能让“我以为没问题”变成事故的起点。6. 再进一步把 Claude Code 接到 DeepSeek以及团队落地建议6.1 为什么有人要把 Claude Code 接到其他模型最后聊一个最近讨论度很高的话题把 Claude Code 接到 DeepSeek 这类其他模型上。很多人想这么干原因我理解主要是三个成本考虑、账号获取门槛、以及团队希望统一模型出口。这个需求本身合理而且 Claude Code 提供了环境变量层面的自定义端点能力所以确实有社区方案在做类似的事。这里有个前提必须说清楚Claude Code 是一个 Agent 框架它和底层模型之间是通过类 Anthropic API 协议通信的。如果你想换模型就需要一个能够兼容这个协议的接入点然后通过环境变量把 base_url 指过去。具体能不能跑通取决于你选的模型服务商是否提供了兼容层以及它支持的上下文长度和工具调用能力是否够用。这个领域变化非常快今天有效的配置接口可能过两周就调整了所以动手前一定以官方文档或社区最新实践为准别拿半年前的教程硬套。6.2 base_url 与环境变量配置示例配置方法本身不复杂核心是几个环境变量。以把 Claude Code 指向一个兼容 Anthropic 协议的自定义端点为例Linux 或 macOS 大致是export ANTHROPIC_BASE_URLhttps://你的端点地址 export ANTHROPIC_AUTH_TOKEN你的访问令牌 export ANTHROPIC_MODELdeepseek-chatWindows PowerShell 里对应是$env:ANTHROPIC_BASE_URLhttps://你的端点地址 $env:ANTHROPIC_AUTH_TOKEN你的访问令牌 $env:ANTHROPIC_MODELdeepseek-chat注意 base_url 不能随便写。我见过最多的问题就是漏掉路径前缀或者把整套地址都抄错了。我之前看到过一个典型的 400 报错就是因为 provider 里没有配置 base_url或者模型名和服务商实际的模型标识不一致排查时先确认这一项。配置完成后用一条最简单的指令验证claude -p 请用一句话介绍你自己如果它能正常返回且不是冷冰冰的协议错误说明链路通了。如果返回的是模型能力相关的不支持提示那就说明模型的 API 兼容层对工具调用支持还不完整能不能真正用于 Agent 场景要结合你的任务类型判断。6.3 接入后我的实际体会任务分级比全都要靠谱我自己实际把 Claude Code 接到 DeepSeek 跑过一段时间体会是任务分级非常重要。像生成小工具函数、补测试用例、写注释、整理文档这类相对轻量的任务DeepSeek 的表现完全够用速度也快成本优势明显。但到了复杂重构、跨多文件架构调整、需要深度理解项目上下文的长链路推理场景它的完成质量跟 Claude 官方模型还是有差距尤其在工具调用稳定性和长上下文保持这两块。所以我现在团队里的默认策略是简单任务切轻量模型复杂任务切官方模型中间层靠CLAUDE.md和任务描述来控制。这里还想提醒一句评测一个模型适不适合 Agent 场景别只看它单次生成代码的质量要看它在一整轮“读文件-改文件-跑测试-根据报错再修”的循环里能不能稳定地自主完成闭环。这才是 Agent 场景和普通聊天场景最本质的区别。最后分享一个我每天收工前的小习惯把当天会话里新出现的、值得长期遵守的约束或踩坑追加进项目的CLAUDE.md一般就一两行但我会坚持做。这份文件从最初空白到现在十几行每一条都是真实冲突换来的纪律。用 Claude 写代码这件事越往后我越觉得瓶颈从来不在模型而在人这边——你对自己的代码库有多了解、对验收标准有多清楚、对 AI 的产出去审查得有多严决定了它在你手里是效率杠杆还是麻烦制造器。工具只会越来越强而定义问题和守住底线这件事永远得自己来。