1. 为什么我从"写 Prompt"转向"做编排":一个真实的演进过程
1.1 最初的起点:把 Claude Code 当成高级聊天框
我第一次接触 Claude Code,心态和大多数人一样:手里有个能读代码、改代码、跑命令的 AI 助手,那我只要把需求说清楚,它就能帮我干活。于是我把大量精力花在 Prompt 上,写那种"你是一个资深工程师,请帮我完成以下任务:……"的提示词,甚至专门整理过一份几百行的"系统提示词",指望一个 Prompt 走天下。
坦白说,刚开始这套思路能跑通。简单的代码重构、写测试、查文档错误,Claude Code 的表现相当惊艳。但随着项目复杂度上来,我很快发现一个尴尬的事实:Prompt 写得再好,模型也只是在"对话"里工作,它不会主动管理项目状态、不会区分哪些文件是核心、哪些是生成的临时产物,更不会在多次任务之间保持一致的"做事方式"。换句话说,Prompt 解决的是"单次任务怎么表达",解决不了"一系列任务怎么组织"。这就是我从 Prompt 走向编排的最直接动机。
1.2 撞上"对话边界"之后,我才意识到 Prompt 不是万能的
有段时间我在做一个多模块的 Web 服务迁移,需要同时改动后端接口、前端调用、数据库脚本和部署配置。我的做法是:一个长对话里持续追加任务,把上下文越撑越大。结果出现了所有 Claude Code 用户都会遇到的经典问题——"prompt is too long · automatic compaction failed"。对话历史被截断,模型对前面已改过的文件记忆模糊,开始出现重复修改、互相冲突的代码。
那次教训让我彻底改变思路:靠一条 Prompt 把一个问题从头问到尾,本质上是把模型当成一个"超级函数",但真实的开发流程不是函数,而是一条流水线。流水线需要的是拆解、分工、状态传递和节点间的协作,这就是编排。后面我会详细讲我是怎么在 Claude Code 里搭建这套编排体系的,但先别急,我们得先把基础打扎实。
2. 环境准备与基础配置:先把 Claude Code 跑起来
2.1 安装、登录与版本选择
Claude Code 由 Anthropic 官方出品,闭源、强绑定 Claude 系列模型。安装方式其实很简单,基于 Node.js 环境,通过 npm 全局安装即可:
npm install -g @anthropic-ai/claude-code安装后执行claude命令进入交互界面,首次启动会让你登录所在平台的账号并完成授权。这里我建议留意版本更新:Claude Code 迭代非常快,很多能力和 bug 修复都跟着版本走,claude update可以直接更新到最新版本。
安装过程中有几个细节比较容易踩坑。第一,Node.js 版本不要太老,建议 18 以上,否则安装或运行过程可能报兼容性错误。第二,如果你的项目目录非常大,首次启动时它要扫描项目结构来建立索引,尽量在干净的目录里初始化,或者利用.gitignore让 Claude Code 忽略不必要的目录。第三,关于登录时卡在账号界面这个问题,我遇到过几次,通常是因为本地的认证缓存出了问题,把~/.claude下的本地配置目录备份后清空,重新登录一般就能解决。
2.2 VS Code 集成与工作流配置
很多人喜欢在终端里用 Claude Code,但我个人更推荐配合 VS Code 使用。官方提供了 VS Code 扩展,安装之后可以直接在编辑器里选中代码片段,右键发送给 Claude 分析或修改。这个体验比在终端里复制粘贴代码高一个量级,尤其是做局部重构的时候。
在 VS Code 里配置 Claude Code 的关键一点是:让扩展能访问到你的项目上下文。建议在项目根目录启动 VS Code,这样 Claude Code 会把整个工作区当作操作边界。如果你在子目录里打开,它能感知的项目范围会受限,遇到"找不到文件""修改位置不对"这类问题时,先检查一下工作区路径。
提示:团队协作时,可以在项目里维护一份
.claude/settings.json,把权限、允许的命令白名单、禁用的危险操作都写进去。Claude Code 的自主能力很强,不加限制的话它可能会在你眼皮底下跑出意料之外的操作。
2.3 中文环境与显示问题
Claude Code 的界面默认是英文,但它的输入输出完全支持中文。海外用户可能还会遇到区域可用性的相关提示,我的建议是:以官方发布的渠道为准,如果官方提示当前环境不受支持,不要依赖非官方渠道,直接选择官方支持的方式使用。国内开发者如果希望界面更友好,社区里出现过"中文启动器"之类的第三方封装,但我的实测体会是:官方 CLI 本身已经很够用,第三方封装反而会带来版本滞后和额外的不确定性。你只需要让模型用中文回复,它就是中文环境。
3. Prompt 工程在 Claude Code 里的实战心得
3.1 从"大而全的 Prompt"到"小而准的任务描述"
如果说编排是流水线,那么 Prompt 就是流水线上每个工位的"操作规程"。我花了很长时间才明白:在 Claude Code 里,一个精准的小 Prompt,远比一个包罗万象的大 Prompt 有效。
举个例子。以前我会写:"请检查这个项目的所有代码,找出潜在的 bug、性能问题、安全隐患,并给出优化建议。"这种 Prompt 听起来很全面,但 Claude Code 面对一个庞大的项目,根本不知道你关心的优先级是什么,结果就是它把精力分散在无数个它认为的"问题"上,真正你关心的那部分反而被冲淡。
现在我更倾向于这样拆:
请重点检查 src/services/payment.ts 这个文件: 1. 确认事务边界是否覆盖了所有数据库写入; 2. 检查异常分支是否会导致资金流水不一致; 3. 只报告与上述两点相关的问题,不要做代码风格建议。这个小 Prompt 的效果好得多,因为它限定了文件范围、明确了检查目标、还规定了输出内容的边界。在 Claude Code 这种 agent 场景里,Prompt 的核心不是"让模型更聪明",而是"让模型知道什么该做、什么不该做"。
3.2 两类高频报错的处理思路
在实际使用中,Prompt 相关报错主要集中在两类。
第一类是"invalid prompt: your prompt was flagged as potentially violating our usage policy"。这个报错看起来吓人,但绝大多数时候不是真的违规,而是你的描述触发了安全审查的"误标"。比如你让它处理一段测试代码里的攻击 payload,或者让它分析某个恶意脚本的逻辑,就可能触发这个标记。我遇到这类报错的标准动作是:换一个描述角度,把任务从"分析恶意内容"改成"解释这段代码的功能和风险",同时缩小输入范围,只粘贴必要片段而不是整段原文。这样既完成了任务,也避免误标。
第二类是"prompt is too long · automatic compaction failed",这个是上下文超限的硬问题。处理思路不是去压缩单次 Prompt,而是从源头减少上下文占用:
- 清理对话,一个会话只专注一件事,做完就开新会话;
- 用
.claudeignore排除大目录,减少 Claude Code 扫描和读入的文件量; - 把长文档拆成片段,分批传入;
- 将项目公共知识放到 CLAUDE.md 里,而不是每次都在对话里重复。
3.3 用 CLAUDE.md 把你的项目知识"固化"进上下文
CLAUDE.md 是 Claude Code 的核心配置文件之一,也是我走向编排的关键第一步。它会自动注入到每次会话的上下文中,相当于给 Claude Code 一份"项目说明书"。
我的 CLAUDE.md 通常包含:项目结构说明、技术栈、常用命令、代码风格约定、哪些目录不能动、测试如何运行。这样在每一轮对话中,Claude Code 都自带这些背景知识,不需要我在 Prompt 里反复交代。
比如我维护过一个项目,构建命令是make build-api而不是常见的npm run build,刚开始 Claude Code 每次都会用错命令。后来我在 CLAUDE.md 里写清楚:
## 构建与测试 - 构建 API:make build-api - 运行测试:make test-api - 不要运行 npm run build(那是前端构建)从那以后,这类问题基本绝迹。CLAUDE.md 的威力在于:它把"你希望 AI 怎么在这个项目里工作"变成了项目的标准配置,而不是每次人工叮嘱。
4. 从 Prompt 到编排:真正的核心进阶
4.1 什么是"编排",为什么它是我的转折点
我认为,Claude Code 与普通聊天式 AI 最大的区别,是它给了你一个可以"编排"的底座。所谓编排,就是把一次大任务拆成多个小步骤,让每个步骤使用不同的上下文、工具和策略,并通过某种机制把它们串联起来,最终完成一个靠单次对话无法完成的复杂目标。
打个比方:Prompt 是给厨师的菜谱,但一顿宴席需要多个厨师配合、按顺序上菜、协调食材和火候——这就是编排。Claude Code 的编排能力体现在几个层面:Skills(技能)、MCP(工具接入)、Hooks(自动化事件钩子)以及多 Agent 协作框架。下面逐个说。
4.2 Skills:把"会做一件事的方法"做成可复用模块
Skills 是我目前使用频率最高的编排机制。它的含义是:把一个任务的操作方法、约束、步骤写成一个 Markdown 文件,放在项目的.claude/skills/目录下,Claude Code 在遇到相关任务时会自动读取并使用这个技能。
一个典型的 skill 目录结构如下:
.claude/skills/ └── code-review/ ├── SKILL.md └── scripts/ └── check_todos.pySKILL.md里面写清楚这个技能适用的场景、执行步骤和注意点。比如我做过一个"安全审计"技能,里面规定了先安装依赖、再扫描依赖漏洞、输出固定的报告格式。之后我只要说"对当前项目做一次安全审计",Claude Code 就会按照 skill 里定义的流程走一遍,而不是临时发挥。
这里有个关键的实操经验:Skill 的粒度要控制好。太粗的技能等于没写,太细的技能会频繁触发、反而降低效率。我的一般标准是:这个任务至少要在不同项目里重复执行三次以上,才值得固化为 skill。像"生成 README""前端构建检查""接口参数校验"这类工作,就很适合做成 skill。
4.3 MCP:把外部工具接进 Claude Code 的会话管道
MCP(Model Context Protocol)是另一个让我觉得"编排真正跑起来"的功能。它可以让 Claude Code 直接调用外部服务或工具,而不只是读写文件、执行命令。我接入过数据库查询、内部 API 文档、日志检索系统,效果非常直接。
举个例子,我在 Electron 项目里集成了 MCP 后,可以直接让 Claude Code 查询运行日志里的异常堆栈,再结合源码定位问题。整个流程从"我去日志平台复制日志 → 粘贴给 Claude"变成了"Claude 自己查日志 → 自己分析定位"。这个改变带来的效率提升不是一点半点。
MCP 配置写在~/.claude.json或者项目级的.mcp.json中。以服务进程方式接入的示例:
{ "mcpServers": { "log-service": { "command": "node", "args": ["/path/to/log-mcp-server.js"], "env": { "LOG_BASE_URL": "https://log.example.com" } } } }配好之后,在 Claude Code 的会话里输入/mcp命令就能看到可用的工具列表。这里有一个重要提醒:接入 MCP 等于给 Claude Code 打开了外挂权限,务必控制好服务端的鉴权和数据范围。我见过有人把生产数据库直接接进 MCP,AI 一个失误跑了全表更新,这种事故要尽量避免。
4.4 Hooks 与自动化:让编排跑起来
如果说 Skills 和 MCP 解决的是"能力"问题,那 Hooks 解决的就是"自动化"问题。Claude Code 的 Hooks 可以在特定事件发生时自动执行脚本,比如:
PreToolUse:在调用某个工具之前触发,可以用来做安全拦截;PostToolUse:工具执行后触发,可以做自动化质检;Stop:一次任务结束后触发,可以自动汇总结果或清理临时文件。
我把 Hooks 配置在.claude/settings.json里,最常用的场景是"每次 Claude 修改文件后,自动跑一遍 lint 和测试",如果发现问题就直接告诉 Claude,让它自己修复。这样在多轮对话里,修改和验证形成了一个闭环,不需要我人工介入检查。我实测下来,这种"改完就验、验完就改"的循环,比那种让 AI 一次性改完再集中检查的方式稳定得多。
5. 编排实战:一个完整案例的拆解
5.1 场景设计:从需求到交付
为了讲清楚编排的完整流程,我拿最近一个实际项目举例:一个内部工具的前端页面,需要从一个老旧的 jQuery 页面迁移到 React,同时要求保持原有接口不变、UI 样式尽量一致。
之前用单次 Prompt 的做法,我会说"请把这个页面迁移到 React",然后看着 Claude Code 在庞大的代码库中东一榔头西一棒子。走编排路线之后,我做了如下设计:
- 先写 CLAUDE.md:说明项目技术栈、目录结构、构建命令、迁移的基本约束(不能改动后端接口)。
- 建一个迁移技能(skill):规定迁移的步骤——先分析老页面依赖的接口,再逐个组件重写,最后做样式对比。
- 配置测试 hook:每次文件修改后自动跑构建和冒烟测试。
- 拆分子任务:先让 Claude 梳理页面结构和接口清单,再分批迁移组件,每批验证,最后统一收尾。
5.2 Agent 协作框架的取舍
在编排过程中,我也研究了社区中流行的多 Agent 协作框架,比如 LangGraph 这类用于构建 AI Agent 的框架,也接触了 ChatGPT 衍生生态里的一些容器编排方案。这里我想说一个重要判断:不是所有的项目都需要引入重型的 Agent 编排框架。
LangGraph 这类框架的优势在于:可以用代码显式地定义 Agent 之间的状态流转、条件分支、循环机制,适合构建面向用户的、需要长期运行的智能体应用。但如果你只是在做"用 Claude Code 辅助开发"这件事,引入框架反而增加了维护成本。我现在的做法是:
- 利用 Claude Code 原生机制(CLAUDE.md、Skills、Hooks)处理日常开发任务,这套方案落地最快、成本最低;
- 在需要构建独立的 AI 产品功能时,才使用 LangGraph 这类框架,把 Claude Code 当作开发时的辅助工具,两者职责分开。
这种取舍的核心逻辑是:编排的第一原则是简单。能用配置解决的,不要写代码;能用写代码解决的,不要引入框架。
5.3 编排带来的实际收益
这个迁移项目最终用了三天完成,其中 Claude Code 承担了大约八成的工作量。我自己的时间主要花在:设计 skill 的输入输出规范、处理 MCP 工具返回的数据格式、以及在关键节点做代码审查。对比之前那种"长对话硬跑"的方式,体验上的差异非常明显:
- 上下文不再膨胀:每个子任务独立开会话,CLAUDE.md 提供背景,不需要反复提醒;
- 错误率显著下降:修改后自动跑 lint 和测试,问题在产生阶段就被拦截;
- 可复用性极高:同一个迁移 skill 稍微改改,就能用于其他页面的迁移。
这才是编排的终极价值:它把"一次性的人机对话"变成了"可复用的工程流程"。
6. 踩坑实录与我的排错思路
6.1 从报错信息反推问题的完整链路
使用 Claude Code 大半年,我积累了一套相对成熟的排错思路。核心原则是:先分清楚是环境问题、权限问题、还是 Prompt/上下文问题,再动手。下面按我实际遇到的频率排个序。
第一类:能力与权限相关报错。比如Agent terminated due to error,我遇到的情况多是某个工具执行长时间卡住或脚本抛异常,导致任务中断。我的排查链路是:先看 Claude Code 日志(claude --debug模式),定位到具体是哪一步操作触发的——是命令超时,还是文件写入失败,还是网络请求异常。大多数情况是因为我给 Claude 的命令没有加超时保护,或者它调用了不存在的路径。解决方法是:在 skill 或 Prompt 里明确命令的超时时间,并对文件操作做存在性检查。
第二类:Prompt 相关内容报错。除了前面说的 invalid prompt 和 prompt is too long,还有一个容易被忽略的问题:Prompt 里的任务边界不清晰,模型理解跑偏。这种报错不会显式出现,但会以"结果不对"的方式暴露。我的检查方法是:开一个最小复现会话,把原任务缩减到极小的规模,看看模型是否理解正确。如果小规模理解正确,说明问题出在任务被塞了太多信息,这时应该拆分而不是压缩。
第三类:环境与配置类问题。比如 VS Code 里扩展连不上 CLI、MCP 服务启动失败。这类问题通常和环境变量有关,我建议做排查时先看终端输出,不要只看界面报错。MCP 服务如果启动失败,直接在命令行里手动运行服务进程,输出信息比 Claude Code 界面里展示的详细得多。
这里要特别提一下地域可用性相关的问题:如果你收到类似"might not be available in your country"的提示,不要去折腾非官方渠道,以官方支持的流程为准,在合规的前提下开展工作。这不是套话,而是我踩过坑之后的真实建议——非官方方案短期看省事,长期看一定会带来版本兼容、账号安全、数据合规的不确定性。
6.2 资源限制与成本控制
Claude Code 会消耗 token 额度,而且 agent 模式下消耗速度非常快。我见过有人抱怨"一个下午烧掉一个月预算",基本都是因为没有做任何成本控制。
我的实际做法是:
- 尽量用本地小模型处理简单任务,比如代码格式化、批处理脚本,不要让 Claude Code 掺和;
- 大任务拆小之后,每次会话目标单一,避免一次会话里来回纠缠同一个问题;
- 善用 Hooks 做质量门禁,让模型在错误发生之前自我修正,而不是事后反复重试;
- 定期查看 token 使用统计,找出消耗量最大的场景,针对性地优化 Prompt 或改用更便宜的模型处理。
还有一个很多人忽略的技巧:不要在一个项目里频繁重启会话。每次新会话都要重新加载 CLAUDE.md 和项目索引,这部分也会消耗输入 token。我一般的做法是:一个功能模块一个会话,中途不轻易切换任务。
6.3 第三方模型接入的边界与选择
社区里经常有人讨论"Claude Code 接入 DeepSeek"这类话题。原理上确实可行:Claude Code 通过环境变量ANTHROPIC_BASE_URL指向 Anthropic API 兼容的端点,如果你的模型服务商提供了兼容接口,就可以切换过去。做法大概是:
export ANTHROPIC_BASE_URL="https://your-provider-endpoint" export ANTHROPIC_AUTH_TOKEN="your-token" claude我实测下来,这类接入有两个明显问题:一是兼容性不完全,Claude Code 依赖的一些 Anthropic API 特性(比如某些工具调用格式、流式输出字段)在非官方端点上有时候不一致,会导致会话中断;二是体验差异,不同模型的 agent 能力参差不齐,在代码修改类任务上表现差距很大。我的建议是:如果核心诉求是代码辅助开发,官方模型仍然是最稳妥的选择。第三方接入可以作为成本控制的备选方案,但要在小范围场景先验证,不要一上来就全量切换。
我个人的体会是:从 Prompt 到编排,本质上是一个从"把 AI 当工具"到"把 AI 当团队"的认知升级。Claude Code 提供了足够丰富的机制来支撑这种升级,但前提是你愿意花时间设计你自己的工作流,而不是每次都指望一个灵光一现的 Prompt 解决所有问题。这个投入是值得的,因为一旦编排体系跑通,你节省的不仅仅是重复写 Prompt 的时间,更是整个开发流程中反复纠错的成本。