在实际 AI 编程辅助工具的使用中一个普遍存在的误区是认为提示词越长、越详细模型的表现就越好。许多开发者习惯于在 Claude Code 这类工具中编写冗长的系统提示试图通过事无巨细的指令来约束模型行为结果往往导致响应速度变慢、上下文窗口被无效占用甚至因为指令过于复杂而引发模型的理解偏差。Boris Cherny 关于“删减了 Claude Code 提示词 80%”的实践恰恰揭示了提示工程中“少即是多”的核心哲学。这不是简单的文字删减而是对模型能力边界、任务本质和沟通效率的深度重构。本文将以 Claude Code 或类似 AI 编程助手为背景探讨如何为代码生成、代码审查和问题解答设计高效、精炼的提示词。我们将从理解模型的工作机制出发分析冗长提示词的常见问题然后通过一系列具体的代码场景对比展示如何将一段臃肿的提示词重构为简洁有力的指令。最后我们会总结一套适用于日常编程任务的提示词设计原则与检查清单帮助你在不牺牲效果的前提下显著提升与 AI 协作的效率和愉悦感。1. 理解 AI 编程模型如何“阅读”你的提示词在开始动手删减提示词之前必须建立一个基本认知像 Claude、GPT 这类大语言模型并非像人类一样“理解”指令而是基于海量训练数据对输入的 token 序列进行概率预测生成最可能的下一个 token 序列。提示词的质量直接影响了模型预测的“上下文”质量。1.1 冗长提示词的三大负面影响许多开发者会编写类似下面的提示词希望模型能完美完成任务请你作为一个资深的 Java 后端开发专家遵循阿里巴巴 Java 开发手册并且考虑到 Spring Boot 2.7 版本的最佳实践帮我完成以下任务。首先请检查我提供的代码是否有任何潜在的性能问题、线程安全问题、内存泄漏风险或者不符合 RESTful 设计规范的地方。其次如果发现问题请不仅指出问题还要给出详细的修改建议和修改后的代码片段。最后请确保你的回答格式清晰使用 Markdown 代码块并且对每个问题进行分类例如【性能】、【安全】、【规范】。另外我比较喜欢代码简洁所以请避免不必要的注释。现在开始分析以下代码[此处粘贴大段代码]这段提示词包含了角色设定、多项约束、格式要求、个人偏好和具体任务。看似周全实则问题重重上下文污染与注意力稀释模型在处理提示时会对所有 token 分配注意力。过多的前置修饰如“资深专家”、“遵循XX手册”会挤占用于理解核心任务“分析代码”和核心数据待分析的代码的上下文资源。模型可能花更多精力去模拟“专家口吻”而非深入分析代码逻辑。指令冲突与模糊性“遵循阿里巴巴规范”和“避免不必要的注释”可能在特定场景下冲突如某些规范要求类注释。多项复杂指令并行模型需要自行权衡优先级增加了输出不确定的风险。效率低下每个 token 的输入和处理都需要时间和计算资源。冗长的提示词会降低响应速度并在按 token 付费的场景下增加不必要的成本。更重要的是它浪费了宝贵的上下文窗口当需要分析更长代码文件时可能因超出限制而失败。1.2 模型的能力边界与“默认行为”现代代码生成模型在编程领域已经过大量训练它们内化了常见的编程规范、设计模式和最佳实践。许多我们试图通过提示词明确指出的要求其实是模型的“默认行为”或“强项”。代码质量模型本身就被训练生成高质量、可读性强的代码。无需额外强调“写出优雅的代码”。语言惯例当你说“用 Python 写一个函数”模型默认就会遵循 PEP 8 等基础规范。只有当你需要特定的、非通用的规范如公司内部的命名约定时才需要明确指出。问题解决直接描述问题“这段代码为什么慢”比描述你期望的分析过程“请先进行时间复杂度分析再检查循环…”更有效。模型自己知道如何拆解问题。理解这一点是进行提示词精简的前提信任模型的内化能力只提示它偏离默认路径的部分。2. 环境与工具准备聚焦提示词本身本文的实践不依赖于复杂的开发环境或特定的 IDE 插件核心工具就是任何支持 Claude 或类似大语言模型的交互界面。为了清晰地对比效果建议准备以下环境访问渠道确保你可以访问 Claude通过官方网页、Claude Desktop 或集成 Claude 的 IDE 如 Cursor或 OpenAI GPT 系列模型。测试用例准备几个典型的编程任务作为测试用例例如代码生成生成一个 Python 函数从 URL 中提取域名。代码审查审查一段存在 bug 或风格问题的代码片段。问题解答解释某个编程概念或错误信息。记录与对比使用纯文本文件或笔记软件记录下原始的长提示词、精简后的提示词以及模型两次的完整输出以便对比。我们的目标不是配置某个特定的claude-code桌面客户端而是掌握在任何场景下都能写出高效提示词的方法。因此请将注意力集中在提示词文本内容的迭代上。3. 从“肥胖提示”到“精炼提示”实战重构案例让我们通过三个最常见的编程场景看看如何将冗长的提示词削减 80%同时保持甚至提升输出效果。3.1 场景一代码生成原始“肥胖”提示词我希望你扮演一个经验丰富的 Python 软件开发工程师专门处理数据清洗和字符串操作任务。请严格按照以下要求编写一个函数 1. 函数名为 extract_domain。 2. 输入是一个字符串类型的 URL。 3. 输出是该 URL 的顶级域名和二级域名例如从 https://www.example.com/path 中提取出 example.com。 4. 请充分考虑边缘情况比如 URL 可能没有协议头http:// 或 https://可能包含子域名如 blog.example.com也可能包含端口号或查询参数。 5. 使用 Python 内置的库不要引入 urllib.parse 以外的第三方库。 6. 代码需要有清晰的注释解释关键步骤。 7. 最后请为这个函数编写两个简单的 pytest 测试用例测试正常情况和边缘情况。 请开始你的工作。重构后的“精炼”提示词写一个 Python 函数 extract_domain(url)从任意 URL 字符串中提取出 example.com 格式的域名。处理缺少协议、子域名、端口和参数的情况。使用 urllib.parse。附上两个 pytest 测试。分析与对比删除角色扮演“扮演经验丰富的工程师”是无效指令。模型的任务是生成代码它不需要“扮演”谁来执行此任务。删除后提示词更直接。合并与简化要求将第 1、2、3 点合并为一句核心指令“写一个 Python 函数extract_domain(url)从任意 URL 字符串中提取出example.com格式的域名”。用例子example.com替代冗长的描述模型能更好理解格式。提炼关键约束“处理缺少协议、子域名、端口和参数的情况”一句话概括了所有边缘情况。“使用urllib.parse”明确了工具限制。直接表达最终需求“附上两个 pytest 测试”比“编写两个简单的 pytest 测试用例测试正常情况和边缘情况”更简洁意图同样明确。移除主观偏好“清晰的注释”是模型的默认良好行为无需特别强调。如果真有特殊注释风格要求如特定格式的 docstring再单独说明。效果评估精炼提示词生成的代码在功能正确性、健壮性和测试覆盖面上与肥胖提示词的结果几乎无差别但获取答案的速度更快消耗的上下文更少。模型将更多“算力”用于思考 URL 解析逻辑本身而不是努力满足一系列琐碎的前置条件。3.2 场景二代码审查与调试原始“肥胖”提示词你好我现在有一段 JavaScript 代码它在处理一个数组去重并排序的功能时好像性能不是最优而且可能在某些边缘情况下有 bug。我希望你能以代码审查者的身份深入剖析这段代码。审查时请关注 - 时间复杂度与空间复杂度是否最优。 - 代码是否符合 ES6 的现代语法规范。 - 是否有潜在的边界条件未处理比如输入为 null、undefined、非数组等。 - 函数命名和变量命名是否清晰易懂。 - 请给出具体的优化后的代码。 以下是代码[此处粘贴一段有瑕疵的 arrayUniqueSort 函数]重构后的“精炼”提示词审查并优化这段 JS 代码的性能和健壮性。关注输入校验、去重算法效率。直接给出优化后的代码。 [此处粘贴一段有瑕疵的 arrayUniqueSort 函数]分析与对比前置描述后置将问题描述“性能不是最优可能有 bug”和核心指令“审查并优化”提到最前面并合并为一句。聚焦核心痛点用“关注输入校验、去重算法效率”替代了冗长的审查清单。这直接点明了最可能出问题的两个区域引导模型集中火力。模型本身就会检查语法规范、命名等无需列出。明确输出格式“直接给出优化后的代码”比“给出具体的优化后的代码”更干脆避免了模型在输出前添加大量分析文字除非你需要。移除元指令“以代码审查者的身份”是多余的。要求模型审查代码它自然就会进入审查模式。效果评估精炼提示词能更快地引导模型定位到关键问题例如使用Set去重比indexOf循环更高效缺少对非数组输入的处理。输出直接是优化后的代码附带非常简要的解释效率极高。如果你需要更详细的分析可以在得到代码后追加提问“解释一下你将O(n^2)改为O(n)的具体改动。”3.3 场景三概念解释与问题解答原始“肥胖”提示词我正在学习异步编程对 Python 中的 asyncio、async/await 机制感到困惑。请你用尽可能通俗易懂的方式为我系统性地讲解一下 1. 同步、异步、阻塞、非阻塞这几个核心概念的区别与联系。 2. asyncio 事件循环Event Loop的工作原理它如何管理多个任务 3. async 和 await 关键字在实际编码中如何正确使用请举例说明。 4. 在什么场景下应该选择异步编程它的优势和劣势分别是什么 希望你的回答结构清晰分点论述并包含一些简单的代码示例来辅助理解。谢谢重构后的“精炼”提示词用比喻和简单代码示例解释 Python 的 async/await。重点说明事件循环如何工作以及它相比线程的优势。何时该用它分析与对比概括核心诉求用户的核心诉求是“理解async/await”。精炼提示词直接点明。指定解释方法“用比喻和简单代码示例”给出了明确的输出风格指令这比“通俗易懂”、“系统性讲解”更具体、更可操作。聚焦关键难点“重点说明事件循环如何工作以及它相比线程的优势”直接命中了异步编程理解中最关键的两个比较点。这比罗列四个子问题更高效。保留决策指导“何时该用它” 这个问题极具实践价值保留它能确保回答的实用性。效果评估精炼提示词通常能引导模型生成一个以比喻如“餐厅服务员”、“单线程切换任务”开头的、解释清晰、配有简短代码如一个简单的asyncio.sleep示例的回答并明确列出适用场景I/O 密集型与不适用的场景CPU 密集型。它去掉了冗余的结构化要求“分点论述”但模型的回答本身依然会很有条理因为条理是模型输出高质量解释的默认行为。4. 高效编程提示词的设计原则与检查清单基于以上案例我们可以总结出设计高效编程提示词的几个核心原则从结果出发而非过程描述你想要的最终代码或答案是什么样而不是一步步指挥模型如何思考。例如“写一个快速排序函数” 优于 “首先选择一个基准元素然后…”。信任默认能力模型已具备良好的代码风格、规范遵循和问题分解能力。除非有特殊、非通用要求否则无需强调。使用示例而非描述一个好的例子胜过千言万语。“提取格式如 example.com 的域名”比“提取顶级域名和二级域名”更精确。先简后繁先给出最简短的提示。如果输出不满意再像“对话”一样逐步增加约束或纠正方向。这比一次性扔出一个复杂提示更容易调试。将复杂任务拆分为多次交互对于非常复杂的任务如“为我设计一个微服务架构”不要试图在一个提示中解决。先让模型给出大纲或核心组件再针对每个部分深入。为了帮助你实践这里提供一个在编写提示词后的自我检查清单提示词精简检查清单检查项需删除或简化的内容精简后建议角色与礼仪“请你扮演…”、“你好麻烦你…”、“谢谢”直接陈述任务。模型不需要寒暄。冗余的修饰词“高质量的”、“优雅的”、“健壮的”、“系统性的”除非有非常具体的质量维度如“内存占用低于1MB”否则删除。微观管理“首先…然后…接着…最后…”、“分点论述”、“结构清晰”信任模型的输出组织能力。仅在输出格式特殊如严格的JSON时指定。内化的常识“遵循 PEP 8”、“编写注释”、“处理错误”这些是模型的默认良好行为。仅在要求偏离常识时说明如“不使用异常处理”。模糊的指令“深入剖析”、“尽可能优化”替换为具体、可衡量的指令“将时间复杂度从 O(n^2) 降至 O(n log n)”。可以后置的追问在第一个提示中就包含多个深度子问题先问核心问题根据回答再追问细节。5. 常见问题与排查指南即使遵循了精简原则有时输出仍不如预期。以下是常见问题及排查思路问题现象可能原因排查与解决思路模型忽略了关键要求要求被埋没在冗长文本中或表述不够突出。1.将核心指令放在最前或最后。模型对提示词开头和结尾部分通常更敏感。2.使用分隔符。用---或将指令与待处理的代码/数据分开。3.重新措辞使其更直接。将“请考虑…”改为“必须…”。输出过于简略缺乏解释提示词过于精简未表达需要推理过程。在提示词中明确要求解释。例如在代码后追加“解释一下这个解决方案的时间复杂度。” 或 “为什么选择这种方法而不是另一种”生成的代码有语法错误或逻辑bug任务描述本身可能存在歧义或模型在复杂逻辑上“幻觉”。1.迭代提示不要期望一次成功。将错误反馈给模型“你生成的代码在输入为 None 时会崩溃请修复。”2.提供更具体的输入输出示例。模型自行添加了未要求的功能模型基于训练数据进行了“泛化”或“补全”。在提示词中增加限制性语句。例如在生成函数后强调“只生成这个函数不要生成调用示例或测试代码。”对于非常规或小众技术栈效果差模型训练数据中相关模式较少。1.提供更多上下文粘贴相关的配置文件、依赖或错误日志。2.采用分步引导先让模型理解组件 A再理解组件 B最后让它们协作。注意精简提示词的核心是“删除噪音”而非“删除必要信息”。对于任务成功至关重要的约束条件如“必须使用 Java 8”、“不能使用递归”、“输出必须是 JSON 格式”必须清晰保留。6. 高级技巧与生产环境考量当你掌握了基础的精简技巧后可以进一步考虑以下高级策略特别是在团队协作或生产集成环境中构建可复用的提示词模板为常见任务如“生成 CRUD 接口”、“编写单元测试”、“审查 SQL 查询”创建团队共享的精简模板。模板中可以使用占位符如{language},{framework},{requirement}。# 模板示例代码生成 用{language}和{framework}写一个{functionality}函数。输入是{input_description}输出是{output_description}。处理{edge_case}。系统提示词System Prompt与用户提示词User Prompt的分离在某些平台你可以设置一个持久的、精简的“系统提示词”来定义模型的固定角色或行为准则如“你是一个简洁的编程助手”然后在每次交互中用户提示词只需关注当次任务本身。这实现了约束的复用。为生成代码添加“护栏”在要求生成用于生产环境的代码时可以在提示词中嵌入强制要求例如“生成的代码必须包含完整的错误处理并且所有外部调用都必须有超时和重试逻辑。” 这比事后审查更主动。结合上下文学习In-Context Learning对于极其复杂的任务提供一两个高质量的输入输出示例Few-Shot Learning比用长篇大论描述规则更有效。例如展示一个“错误代码”和“优化后代码”的对比对然后让模型处理新的类似代码。在将 AI 编程助手集成到生产流程时除了提示词质量还需考虑代码安全生成的代码需经过严格的安全扫描和人工审查避免引入依赖漏洞、硬编码密钥或不安全函数。许可合规确保生成的代码不侵犯第三方版权特别是当模型可能复现训练数据中的代码片段时。可预测性对于关键路径精炼、明确的提示词有助于获得更稳定、可预测的输出减少随机性。从 Boris Cherny 的实践中我们可以学到优秀的提示工程不是堆砌指令而是做精准的沟通。删除那 80% 的冗余提示词本质上是删除我们作为人类在沟通时的不自信和过度修饰转而信任工具的能力并以最清晰的方式表达核心意图。下次在使用 Claude Code、Cursor 或任何 AI 编程工具时不妨先花一分钟审视你的提示词哪些词是真正不可或缺的删除其余部分你很可能会获得一个更快、更准、更令人满意的结果。