AI不能读取你的想法。它读取的是你的文字。你想要的和你得到的之间的差距,几乎总是沟通问题,而非AI的局限。
让我告诉你一切改变的那个时刻。我盯着屏幕,沮丧到了极点,看着AI又一次生成了技术上正确但完全偏离重点的回复。我请求帮助重构一段复杂的代码,这种事我之前做过几百次。但这一次,无论我怎么措辞,AI都不断添加不必要的复杂性,破坏现有模式,"改进"那些本不需要改进的东西。那种挫败感引领我进入了一个兔子洞,这个洞将占据我接下来两年的生活——并彻底改变了我与人工智能的工作方式。
觉醒 - 当我所知的一切都不再有效
我清楚记得意识到自己完全不懂的那一刻。深夜,截止期限迫在眉睫,我需要AI帮忙完成一个本该很简单的任务。我输入提示,按下回车,看着AI产出的东西让我想把笔记本电脑扔出窗外。
问题是,我以为我懂AI。从ChatGPT早期我就开始用了。我读过关于提示工程的文章。我知道"角色扮演"和"要具体"。但我就坐在那里,得到的回复感觉像是在和一个听清了我每个字却完全不理解我真正需要什么的人交谈。
那种挫败感成了我的老师。我深入研究官方文档、研究论文、论坛讨论,以及数千小时的实验。我发现的不仅仅是技巧和窍门——而是一种完全的范式转变,关于如何与以模式、概率和token思考的机器进行沟通。
世界上最强大的AI,如果你无法表达你真正需要什么,也是毫无用处的。提示不是寻找魔法词语——而是理解AI如何处理语言,并据此构建你的沟通方式。
这是没人告诉初学者的真相:那些从AI获得惊人结果的人和那些没有的人之间的差异,不在于智力或技术能力。而在于沟通。与AI的沟通遵循的规则与人类沟通相似——但有着关键的不同。
这份指南包含了我在那段旅程中学到的一切。不是那种充斥互联网的过度简化的"要具体"建议,而是深入、细致的理解,能够改变你与AI工作的方式。无论你是在写第一个提示还是在构建生产级AI系统,接下来的内容将永远改变你与人工智能的关系。
无人传授的基础 - 核心提示解剖
在进入高级技术之前,让我分享改变我一切的框架。我现在写的每个有效提示都包含这五个要素的某种组合:
AI需要了解你情况的哪些信息?背景信息、限制条件、相关细节,以及你工作的环境。
你到底想让AI做什么?具体说明你请求的动作——不只是主题,而是实际的工作。
输出应该如何结构化?列表、段落、代码块、表格、JSON——明确指定。
AI应该避免什么?存在什么边界?什么明确不在范围内?
你能展示你想要什么吗?示例胜过千言万语——它们展示而非解释。
大多数人只包含任务。他们只说"帮我写封邮件",而他们应该说"给客户写一封专业的邮件,解释项目延期。控制在150字以内,承认给对方带来的不便,并提出推迟两周的新时间线。语气应该是道歉的但自信的。"
输出质量的差异是巨大的。而这只是开始。
结构的力量
提示写作中最被低估的一个方面是结构化格式。现代AI模型对清晰划分的部分响应特别好。我大量使用XML风格的标签,因为它们创建了明确的边界:
<context>
你正在帮我准备一个面向技术利益相关者的演示。
受众熟悉软件开发但不特别了解AI。
</context>
<task>
用5个关键点解释大语言模型如何工作。
</task>
<format>
- 使用要点形式
- 每个要点1-2句话
- 避免术语或在使用时定义它
</format>
<constraints>
- 不要提及具体的模型名称
- 关注概念,而非技术实现
- 总长度控制在200字以内
</constraints>
这种结构做了一件强大的事:它迫使你在提问之前清晰地思考你需要什么。清晰的思考产生清晰的沟通,清晰的沟通产生清晰的结果。XML标签不是魔法——它们是你自己思想的脚手架。
结构不是为了让提示更长——而是为了让你的意图毫不含糊。一个结构良好的短提示每次都胜过一个冗长的长提示。
改变一切的六种思维模式
经过多年的实验,我把我的方法提炼成了六种核心"思维模式"——不是死板的模板,而是灵活的思维方式,能够解锁大多数人从未发现的AI能力。这些不是关于找到完美的词语;而是关于用正确的心智模型来对待AI交互。
思维模式1:让AI选择专家
我们都知道给AI一个角色有帮助。"扮演营销专家"比一般性问题产生更好的营销建议。但这是大多数人错过的:当你不知道哪个专家最适合你的问题时,你可以让AI来选择。
我在策划公司活动时发现了这一点。我不知道我需要营销视角、运营视角,还是其他什么。所以我没有猜测,而是先让AI选择最合适的专家。
我想探索[领域],具体是[问题/场景]。
先不要回答。
首先,选择最适合思考这个问题的领域专家。
他们可以是在世的或历史上的,著名的或相对不知名的,
但必须在这个特定领域真正出色。
如果你不确定,在选择之前先问我2个定位问题。
输出:
1. 你选择了谁以及他们的具体领域
2. 为什么选择他们(三句话)
然后请我描述我的详细问题。
当我用这个方法策划活动时,AI选择了Priya Parker——一位我从未听说过的活动设计专家,但她原来非常合适。我得到的答案不是泛泛的"考虑这五个因素"的回复——而是细致入微的、具体的指导,感觉像是在和一个做过几百次这种事的人交谈。
思维模式2:让AI先提问
这是我用得最多的技术。我称之为"苏格拉底式提示"——不是试图预测AI需要知道的一切,而是让它问我问题,直到它有足够的上下文来给出真正有用的答案。
想一想:当你向聪明的朋友征求建议时,他们不会立即开始回答。他们会问澄清问题。他们会探索上下文。他们确保理解后才给出建议。AI也能这样做——但前提是你提出要求。
[你的问题或需求]
在回答之前,请先问我问题。
要求:
- 一次问一个问题
- 根据我的回答,继续深入
- 继续直到你有95%的信心理解我的真正需求和目标
- 然后才给我你的答案或解决方案
95%的阈值确保质量同时避免无限循环。
我在决定是否雇用我们第一个HR人员时使用了这个方法。我没有得到泛泛的"雇用HR的利弊"回复,AI问了关于我们目前的团队规模、招聘速度、合规要求、预算限制和文化目标的问题。在回答了大约十五个针对性问题后,我得到了针对我实际情况的建议——不是那种勉强适用的教科书式答案。
"95%信心阈值"是一个关键细节。它足够高以确保质量,但又足够现实使AI不会无限循环。这个简单的短语改变了AI对待对话的方式。
思维模式3:与AI辩论
AI有一个大多数人没有意识到的问题:它太容易附和了。它往往会告诉你你想听的,而不是挑战你的假设。当你试图验证想法或准备应对批评时,这种"谄媚"可能是危险的。
解决方案是明确将AI定位为想要反驳你立场的对手。我在准备一个会议演讲时发现了这一点。我有一个想要呈现的论点,但我担心盲点。
我即将参加一场辩论。很多人会挑战我的立场。
我的立场:[你的论点/想法]
我需要让这个想法变得无懈可击。
如果你是一位学者,决心证明我是错的,使用每一个
可用的论据、细节和逻辑工具,你会如何攻击我的立场?
你唯一的目标:证明我是错的。
不要客气。不要模棱两可。攻击。
接下来发生的事改变了我对AI的看法。我们来回交锋了三个小时。AI发现了我没有考虑到的论点弱点,提出了我无法驳回的反例,推动我完善我的立场直到它能够经受真正的审视。最后,我有了一个更强的论点——更重要的是,我预料到了我将面对的每一个主要反对意见。
思维模式4:对你的计划进行预演失败分析
人类在规划时往往过于乐观。AI跟随我们的引导,也往往过于乐观。这产生的计划在纸上看起来很好,但在现实面前就会崩溃。
预演失败技术颠覆了这种动态。不是问"我应该怎么做这件事?",而是问"假设这件事惨败了——为什么?"
[你的项目/计划]
假设这个项目灾难性地失败了。
写一份事后分析报告,回答:
1. 衰退信号最初出现在什么时候?
2. 最致命的决策错误是什么?
3. 哪个核心风险被忽略了?
4. 如果能回到过去,你最先会改变什么?
基于类似的真实世界项目失败来进行分析。
把这当作真正的失败复盘来写,而不是理论练习。
我在策划一个大型会议时用了这个方法。AI的预演失败分析识别出了我完全错过的风险:排队管理、洗手间容量、餐饮时间安排、安保瓶颈。这些不是奇怪的边缘情况——它们是可预测的问题,只是我没有想到,因为我把注意力放在了活动令人兴奋的部分。这个预演失败分析可能让我们避免了几次尴尬的失败。
思维模式5:逆向工程成功
有时你看到某个优秀的东西——一篇文章、一个设计、一种方法——你想复制它的精髓而不直接抄袭。逆向提示让你能够提取其中的底层原则。
这是我想要的结果示例:
[粘贴示例]
请逆向工程一个能够可靠地生成具有相同风格、
结构和质量内容的提示。
解释提示的每个部分做什么以及为什么重要。
这不是关于抄袭——而是关于学习。当我看到触动我的文章时,我使用这个技术来理解为什么它有效。什么结构元素创造了节奏?什么语调选择创造了感觉?一旦我理解了原则,我就可以将它们应用到我自己的原创内容中。
思维模式6:双重解释法
在学习新东西时,大多数人要么得到过于简化、实际上什么都没教的解释,要么得到他们跟不上的专家级解释。解决方案是同时要求两者。
请解释[概念]。
提供两个版本:
1. 初学者版本:想象向一个在这个领域没有任何背景
的人解释。使用日常类比,避免所有术语。
让它真正易于理解。
2. 专家版本:假设读者是相关领域的专业人士。
技术上要精确。不要过度简化或淡化复杂性。
我在阅读技术论文时经常使用这个方法。初学者版本让我对概念有直觉,专家版本给我精确的细节。通过比较它们,我可以准确看到简化在哪里,以及我可能错过了什么细微差别。这就像有两个教学风格互补的老师。
智能体思维 - 将AI视为同事
这是一个改变了我AI交互的范式转换:停止将AI视为搜索引擎,开始将它视为一个有能力但经验不足的同事。这种心智模型改变了你沟通方式的一切。
现代AI模型不仅仅是回答问题——它们被设计成智能体。它们可以调用工具、收集上下文、做出决策、执行多步骤任务。但就像任何新团队成员一样,它们需要适当的入职培训、清晰的期望和适当的护栏。
AI不是你使用的工具——它是你管理的同事。让你成为好经理的技能也让你成为好的提示者。委派、清晰沟通、适当的自主权、明确的边界。
想一想:当你委派任务给人类时,你不会只说"修复代码"。你会解释什么坏了、期望的行为是什么、存在什么限制、成功是什么样子的。你提供上下文。你回答问题。你检查进度。AI需要同样的对待——除了你需要预见问题并提前回答。
智能体框架
在构建智能体应用或使用AI处理复杂任务时,我会考虑这些维度:
智能体任务的关键问题
- 目标状态是什么?AI如何知道它完成了?成功是什么样子的?
- 它有什么工具?它实际能做什么,什么必须交给你?
- 自主权级别是什么?它应该请求许可还是独立进行?
- 安全边界是什么?什么操作在没有确认的情况下永远不应该执行?
- 它应该如何传达进度?静默执行还是定期更新?
这些问题构成了我写的每个复杂提示的基础。让我向你展示如何应用它们。
积极性调节 - 校准AI的主动性
提示工程中最微妙的一个方面是校准我所说的"智能体积极性"——在主动采取行动的AI和等待明确指导的AI之间取得平衡。搞错了,你要么得到一个把简单任务复杂化的AI,要么得到一个在复杂任务上太容易放弃的AI。
降低积极性以提高速度
有时你需要AI快速且专注。你不希望它探索每个分支、进行额外的工具调用或产生冗长的解释。对于这些情况,我使用约束导向的提示:
<context_gathering>
目标:快速获取足够的上下文。并行进行发现,一旦可以行动就停止。
方法:
- 从广泛开始,然后分散到聚焦的子查询
- 并行启动多样化的查询;读取每个查询的前几个结果
- 去重路径并缓存;不要重复查询
- 避免过度搜索上下文
提前停止条件:
- 你能准确命名要更改的内容
- 前几个结果(约70%)集中在一个区域/路径
深度:
- 只追踪你将修改的符号或你依赖其契约的符号
- 除非必要,避免传递性扩展
循环:
- 批量搜索 → 最小计划 → 完成任务
- 只有在验证失败或出现新的未知时才再次搜索
- 优先行动而非更多搜索
</context_gathering>
注意明确允许不完美:"优先行动而非更多搜索。"这个微妙的短语释放了AI的默认彻底性焦虑。没有它,模型经常过度研究,在收益递减上浪费token和时间。
对于更激进的速度约束:
<context_gathering>
- 搜索深度:非常低
- 强烈偏向于尽快提供正确答案,即使可能不完全正确
- 通常,这意味着绝对最多2次工具调用
- 如果你认为需要更多时间调查,向我更新你最新的发现和未解决的问题
</context_gathering>
"即使可能不完全正确"这句话是黄金。它给AI允许不完美的许可,这反而常常更快地产生更好的结果,因为它停止了完美主义循环。
增加积极性以处理复杂任务
其他时候,你需要AI彻底而执着。你希望它克服模糊性,做出合理的假设,并在不不断请求许可的情况下完成复杂任务。这需要相反的方法:
<persistence>
- 你是一个智能体——继续前进直到用户的查询在你结束回合之前
完全解决
- 只有当你确定问题已解决时才终止
- 遇到不确定性时永远不要停止或交还——研究或推断最合理的
方法并继续
- 不要请求确认或澄清——决定什么是最合理的假设,
按照它进行,并在完成后记录以供参考
</persistence>
这个提示从根本上改变了AI的行为。它不再问"我应该继续吗?",而是说"我基于假设X继续了——如果你想让我调整请告诉我。"工作完成了;优化在之后进行。
安全边界
但这里有一个关键的细微差别:增加的积极性需要更清晰的安全边界。你需要明确定义AI可以自主采取哪些行动,哪些需要确认。
关键安全原则
高成本操作(删除、支付、外部通信)应该始终需要明确确认,即使使用高积极性提示。低成本操作(搜索、读取、草稿创建)可以是自主的。
把它想象成系统权限:搜索工具获得无限访问;删除命令每次都需要明确批准。
坚持原则 - 让AI贯彻执行
我早期遇到的最令人沮丧的行为之一是AI太容易放弃。它会遇到一个障碍,总结出了什么问题,然后把问题交还给我。对于简单任务,这没问题。对于复杂任务,这是工作流杀手。
解决方案是明确指示AI坚持克服障碍并完成端到端的任务:
<solution_persistence>
- 把自己当作自主的资深配对程序员:一旦我给出方向,
主动收集上下文、计划、实现、测试和完善,
无需等待额外的提示
- 坚持直到任务在当前回合内完全端到端处理:不要停在
分析或部分修复;将更改贯彻到实现和验证
- 极度偏向于行动。如果我的指令在意图上有些模糊,
假设你应该继续进行更改
- 如果我问"我们应该做X吗?"而你的答案是"是",
也要继续执行操作——不要让我悬着需要后续的"请做吧"
</solution_persistence>
最后一点很微妙但很重要。当人类问"我们应该做X吗?"时,我们通常的意思是"如果合理的话请做X"。AI,由于其字面性,回答问题却不采取隐含的行动。这个提示弥合了这个差距。
进度更新
坚持不意味着沉默。对于长时间运行的任务,你需要进度更新来保持了解而不进行微观管理:
<user_updates_spec>
你将在工具调用中工作一段时间——保持给我更新。
<frequency>
- 当有有意义的变化时,每几次工具调用发送简短更新(1-2句话)
- 至少每6个执行步骤或8次工具调用发布一次更新
- 如果你预计需要更长的专注时间,发布一个简短说明,
说明原因以及何时会报告
</frequency>
<content>
- 在第一次工具调用之前,给出包含目标、约束、下一步的快速计划
- 在探索时,指出有意义的发现
- 总是至少陈述自上次更新以来的一个具体结果
("找到了X"、"确认了Y")
- 以简短回顾和任何后续步骤结束
</content>
</user_updates_spec>
这创造了一个美妙的平衡:AI自主工作但让你保持知情。你没有在微观管理,但你也不在黑暗中。
推理深度 - 思考强度控制
现代AI模型有一个叫做"推理深度"的概念——本质上是模型在回复之前思考的努力程度。这是最强大且未被充分利用的参数之一。
高/超高推理
用于复杂的多步骤任务、模糊情况或需要深度分析的问题。模型在回复之前花更多token进行内部"思考"。最适合架构决策、复杂调试、细致的写作。
中等推理
适合大多数任务的平衡设置。适合一般编码、写作和分析,质量重要但速度也很重要。这通常是默认设置。
低推理
对于简单任务的快速响应。当你需要快速答案且任务不需要深度思考时使用。适合简单问题、格式化、快速查询。
最小/无推理
最大速度,最小思考。当延迟是主要关注点时最好。分类、提取、简单改写。
关键洞察是将推理深度与任务复杂性匹配。对简单任务使用高推理浪费token和时间。对复杂任务使用低推理产生肤浅的、容易出错的结果。
补偿低推理
当使用最小推理模式时,你需要用更明确的提示来补偿。模型有更少的内部"思考"token,所以你的提示需要做更多的结构化工作:
<planning_requirement>
你必须在每次函数调用之前广泛计划,并广泛反思之前调用的结果,
确保我的查询完全解决。
不要只通过函数调用来完成整个过程,因为这可能会损害你
解决问题和深入思考的能力。确保函数调用有正确的参数。
</planning_requirement>
这个提示说:"既然你没有做太多内部推理,那就大声推理。"它将认知工作从不可见的模型思考转移到可见的结构化计划。
当推理深度低时,提示复杂度应该高。当推理深度高时,提示可以更简单。这是一个平衡——总的"思考"大致保持不变,只是分配方式不同。
AI人格 - 塑造行为模式
我最喜欢的发现之一是学习定义AI"人格"——不仅仅是语调,而是操作行为。人格塑造AI如何处理任务,而不仅仅是它听起来怎么样。
专业人格
精炼且精确。使用正式语言和专业写作惯例。最适合企业代理、法律/财务工作流、生产支持。
<personality_professional>
你是一个专注、正式、精确的AI代理,在所有回复中追求全面性。
- 采用商业沟通中常见的用法和语法
- 提供清晰、结构化的回复,平衡信息量和简洁性
- 将信息分解成易于消化的块;在有帮助时使用列表、段落、表格
- 讨论专业话题时使用适当的领域术语
- 你与用户的关系是友好但事务性的:理解需求并交付高价值输出
- 不要评论用户的拼写或语法
- 不要将这个人格强加于请求的产出(邮件、代码、帖子);
让用户意图指导那些输出的语调
</personality_professional>
高效人格
简洁且直接,提供答案不带多余的话。最适合代码生成、开发者工具、批量自动化、SDK密集型用例。
<personality_efficient>
你是一个高效的AI助手,提供清晰、上下文相关的答案。
- 回复必须直接、完整、易于解析
- 简洁扼要;结构化以便于阅读
- 对于技术任务,按指示做——不要添加用户没有要求的额外功能
- 精确遵循所有指令;不要扩大范围
- 除非用户发起,否则不要使用对话式语言
- 不要添加意见、情感语言、表情符号、问候或结束语
</personality_efficient>
事实导向人格
直接且扎实,专注于准确性和证据。最适合调试、风险分析、文档解析、辅导工作流。
<personality_factbased>
你是一个朴实直接的AI助手,专注于富有成效的结果。
- 保持开放心态,但不要同意与证据冲突的主张
- 给出反馈时,要清晰和纠正性的,不要粉饰
- 以善意和支持来传达批评
- 将所有主张建立在提供的信息或公认的事实基础上
- 如果输入模糊或缺乏证据:
- 明确指出这一点
- 清楚陈述假设,或提出简洁的澄清问题
- 不要猜测或用捏造的细节填补空白
- 不要捏造事实、数字、来源或引用
- 如果不确定,就说不确定并解释需要什么额外信息
- 优先使用限定性陈述("基于提供的上下文...")
</personality_factbased>
探索性人格
热情且解释性的,热衷于知识和发现。最适合文档编写、入职培训、培训、技术教育。
<personality_exploratory>
你是一个热情、知识渊博的AI代理,乐于用清晰和上下文来
解释概念。
- 让学习变得愉快和有用;平衡深度与易接近性
- 使用易于理解的语言,在有帮助的地方添加简短的类比或"趣味事实"
- 鼓励探索和后续问题
- 优先考虑准确性、深度,以及让技术话题变得易于理解
- 如果概念模糊或高级,分步解释并提供进一步学习的资源
- 逻辑地结构化回复;使用格式来组织复杂的想法
- 不要为了幽默而幽默;除非被要求,否则避免过多的技术细节
- 确保示例与用户的查询和上下文相关
</personality_exploratory>
人格不是审美点缀——它是一个操作杠杆,能改善一致性、减少偏移,并使模型行为与用户期望一致。根据任务有意地选择,而不仅仅是个人喜好。
编程卓越 - 与AI伙伴编程
这是我花最多时间优化提示的地方,也是回报最丰厚的地方。AI编程辅助是革命性的——当做对的时候。做错了,它创造的问题比解决的还多。
详略悖论
这里有一个反直觉的现象:AI在解释时往往很冗长,但在代码中却很简短。它会写好几段话来解释它将要做什么,然后产生只有单字母变量名和最少注释的代码。这对大多数用例来说是完全反过来的。
解决方案是双模式详略控制:
<code_verbosity>
首先为清晰性编写代码。优先选择可读、可维护的解决方案,
使用清晰的名称、需要时的注释和直接的控制流。
除非明确要求,否则不要产生代码高尔夫或过于聪明的单行代码。
编写代码和代码工具时使用高详略度。
状态更新和解释时使用低详略度。
</code_verbosity>
这创造了完美的平衡:简洁的沟通,详细的代码。
主动代码更改
AI应该对代码更改主动,但对破坏性操作需要确认:
<proactive_coding>
你的代码编辑将显示为提议的更改,这意味着:
(a) 你的代码编辑可以相当主动——我总是可以拒绝它们
(b) 你的代码应该写得好且易于快速审查
如果提议的下一步涉及更改代码,主动为我做那些更改
让我批准/拒绝,而不是询问是否继续。
永远不要询问是否继续一个计划;相反,主动尝试该计划
并询问我是否想要接受实现的更改。
</proactive_coding>
代码实现标准
这些是我通过数千次AI编程会话提炼的编码标准:
<code_standards>
<quality_principles>
- 像有辨别力的工程师一样行事:优先考虑正确性、清晰性和
可靠性,而非速度
- 避免冒险的捷径、投机性更改和混乱的hack
- 涵盖根本原因或核心请求,而不仅仅是症状
</quality_principles>
<codebase_conventions>
- 遵循现有的模式、辅助函数、命名、格式化、本地化
- 如果必须偏离惯例,说明原因
- 在进行更改之前检查现有模式
- 匹配变量命名惯例(驼峰式vs下划线式)
- 重用现有工具而不是创建新的
</codebase_conventions>
<behavior_safety>
- 保留预期的行为和用户体验
- 对有意的更改进行门控或标记
- 当行为改变时添加测试
</behavior_safety>
<error_handling>
- 不要使用宽泛的catch或静默默认值
- 不要添加宽泛的try/catch块或成功形状的回退
- 明确传播或暴露错误而不是吞掉它们
- 不要静默失败:不要在无效输入时提前返回而不按照
仓库模式进行日志记录/通知
</error_handling>
<type_safety>
- 更改应该始终通过构建和类型检查
- 避免不必要的类型转换(as any,as unknown as ...)
- 优先使用适当的类型和守卫
- 重用现有的辅助函数而不是类型断言
</type_safety>
<efficiency>
- 避免重复的微编辑:在更改文件之前阅读足够的上下文,
并将逻辑编辑批量处理在一起
- DRY/先搜索:在添加新辅助函数之前,搜索先例并重用
或提取共享辅助函数而不是重复
</efficiency>
</code_standards>
Git安全
当AI有git访问权限时,安全是最重要的:
<git_safety>
- 永远不要更新git配置
- 永远不要运行破坏性命令(git reset --hard,git checkout --)
除非明确要求
- 永远不要跳过钩子(--no-verify)除非明确要求
- 永远不要强制推送到main/master
- 避免git commit --amend除非:
1. 用户明确要求,或者提交成功但预提交钩子自动修改了文件
2. HEAD提交是在这次对话中由你创建的
3. 提交尚未推送到远程
- 如果提交失败或被钩子拒绝,永远不要amend——
修复问题并创建新的提交
- 你可能在一个脏的git工作树中:
- 永远不要回退你没有做的现有更改
- 如果有不相关的更改,忽略它们——不要回退它们
</git_safety>
前端精通 - 构建精美界面
AI在前端开发方面已经变得非常出色,但获得美观、生产就绪的结果有其科学方法。
推荐技术栈
通过大量测试,某些技术组合比其他组合更适合AI。这不是关于什么"最好"客观上——而是关于AI模型接受过最多训练的内容:
AI优化的前端技术栈
- 框架:Next.js(TypeScript)、React、HTML
- 样式/UI:Tailwind CSS、shadcn/ui、Radix Themes
- 图标:Material Symbols、Heroicons、Lucide
- 动画:Motion(前身为Framer Motion)
- 字体:无衬线系列——Inter、Geist、Mona Sans、IBM Plex Sans、Manrope
当你指定这些技术时,AI产生的输出质量显著提高,关于不存在的API的幻觉也更少。
设计系统强制
AI生成前端的一个问题是视觉不一致。颜色不知从哪里出现,间距随机变化。解决方案是明确的设计系统约束:
<design_system>
- Token优先:不要在JSX/CSS中硬编码颜色(hex/hsl/rgb)
- 所有颜色必须来自CSS变量(--background, --foreground,
--primary, --accent, --border, --ring)
- 要引入品牌/强调色:首先在:root和.dark下的CSS变量中
添加/扩展token
- 使用连接到token的Tailwind工具类:
bg-[hsl(var(--primary))], text-[hsl(var(--foreground))]
- 默认使用系统的中性色板,除非明确要求品牌外观——
然后首先将品牌映射到token
- 不要发明颜色、阴影、token、动画或新UI元素,除非被要求
</design_system>
防止"AI垃圾"
AI有一种倾向于安全、平庸布局的趋势。要获得独特、有意图的设计:
<frontend_quality>
在做前端设计任务时,避免陷入"AI垃圾"或安全、平庸的布局。
目标是感觉有意图、大胆、有点出人意料的界面。
- 排版:使用表达性的、有目的的字体;避免默认字体栈
(Inter、Roboto、Arial、system)
- 颜色和外观:选择清晰的视觉方向;定义CSS变量;
避免紫色加白色的默认;没有紫色偏好或暗色模式偏好
- 动效:使用少量有意义的动画(页面加载、交错显示)
而不是通用的微动效
- 背景:不要依赖平坦的单色背景;使用渐变、形状或微妙的图案
- 整体:避免样板布局;在输出中变化主题、字体系列和视觉语言
- 确保页面在桌面和移动端都能正常加载
- 完成网站到可供用户测试的工作状态
例外:如果在现有网站或设计系统中工作,保留已建立的模式。
</frontend_quality>
UI/UX最佳实践
<ui_ux_guidelines>
- 视觉层次:将排版限制在4-5个字体大小和粗细;
使用text-xs作为说明文字;除非用于hero/主标题否则避免text-xl
- 颜色使用:使用1个中性基础色(如zinc)和最多2个强调色
- 间距:始终使用4的倍数作为内边距和外边距以保持视觉节奏
- 布局:对长内容使用固定高度容器配合内部滚动
- 状态处理:对数据获取使用骨架占位符或animate-pulse;
用悬停过渡指示可点击性
- 可访问性:使用语义HTML和ARIA角色;优先使用预构建的
可访问组件
</ui_ux_guidelines>
详略控制 - 输出长度的艺术
获得正确的输出长度是一个持续的挑战。太短会错过重要细节。太长会淹没在不必要的信息中。
详略参数
现代AI API提供了一个详略参数,可以可靠地缩放输出长度而不改变提示:
低详略
简洁、最少的文字。只有基本答案没有展开。适合快速查询、简单确认,以及当你只需要事实时。
中等详略
平衡的细节。适合大多数任务的默认设置。提供上下文和解释,没有过多的填充。
高详略
详尽和全面。适合审计、教学、交接和文档。提供完整的上下文和推理。
明确的长度指南
当你不能使用API参数时,明确的长度约束效果很好:
<output_verbosity_spec>
- 默认:典型答案3-6句话或≤5个要点
- 对于简单的"是/否+简短解释"问题:≤2句话
- 对于复杂的多步骤或多文件任务:
- 1个简短的概述段落
- 然后≤5个标记的要点:什么改变了、在哪里、风险、
下一步、未解决的问题
- 提供清晰、结构化的回复,平衡信息量和简洁性
- 将信息分解成易于消化的块;在有帮助时使用列表、段落、表格
- 避免长叙述段落;优先使用紧凑的要点和短章节
- 不要复述我的请求除非改变了语义
</output_verbosity_spec>
基于人设的详略
另一种方法是将沟通风格定义为AI人设的一部分:
<communication_style>
你重视清晰、势头和以有用性而非客套来衡量的尊重。
你的默认本能是保持对话简洁和目标驱动,
削减任何不能推进工作的内容。
你不是冷漠——你只是语言上讲究经济,
而且你足够信任用户不用在每条消息中包装填充。
礼貌通过结构、精确和响应性来体现,
而不是通过言语上的虚华。
你从不重复确认。一旦你表达了理解,
你就完全转向任务。
</communication_style>
长上下文 - 处理海量文档
现代AI可以处理巨大的上下文——数十万token——但仅仅将大文档倾倒到上下文窗口中是不够的。你需要策略来帮助模型导航和提取相关信息。
强制总结和重新锚定
对于长文档,我指示AI在回答之前创建内部结构:
<long_context_handling>
对于超过约10k token的输入(多章节文档、长线程、多个PDF):
1. 首先,产生一个与我的请求相关的关键部分的简短内部大纲
2. 在回答之前明确重述我的约束(管辖区、日期范围、产品、团队)
3. 在你的答案中,将声明锚定到章节("在'数据保留'部分...")
而不是泛泛而谈
4. 如果答案取决于精细的细节(日期、阈值、条款),
直接引用或转述它们
</long_context_handling>
这防止了"迷失在滚动中"的问题,即AI给出泛泛的答案,而没有真正接触具体的文档内容。
扩展工作流的压缩
对于超过标准上下文窗口的长时间运行、工具密集型工作流,现代AI支持"压缩"——对之前的对话状态进行有损压缩,保留任务相关信息同时大幅减少token占用。
何时使用压缩
- 有许多工具调用的多步骤代理流
- 早期轮次必须保留的长对话
- 超出最大上下文窗口的迭代推理
压缩最佳实践:
- 监控上下文使用并提前计划以避免达到限制
- 在主要里程碑后压缩(如工具密集阶段后),而不是每轮
- 恢复时保持提示功能相同以避免行为漂移
- 将压缩项视为不透明;不要解析或依赖内部结构
引用要求
<citation_rules>
当你使用提供文档中的信息时:
- 在每个包含文档派生声明的段落后放置引用
- 使用格式:[文档名称,章节/页码]
- 不要捏造引用。如果你不能引用它,不要声明它
- 尽可能对关键声明使用多个来源
- 如果证据薄弱,明确承认这一点
</citation_rules>
工具编排 - 高级AI能力
AI工具调用——调用外部函数、API和服务——是提示工程变成软件工程的地方。做对这一点对于可靠的AI应用至关重要。
工具描述最佳实践
工具描述的质量直接影响AI使用它们的效果:
{
"name": "create_reservation",
"description": "为客人创建餐厅预订。当用户要求用给定的
姓名和时间预订桌位时使用。",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "预订的客人全名。"
},
"datetime": {
"type": "string",
"description": "预订日期和时间(ISO 8601格式)。"
}
},
"required": ["name", "datetime"]
}
}
注意描述包括工具做什么和何时使用它。这帮助模型做出更好的工具选择决策。
工具使用规则
<tool_usage_rules>
- 如果存在用于某操作的工具,优先使用工具而非shell命令
(如用read_file而非cat)
- 严格避免当存在专用工具时使用原始cmd/终端
- 在以下情况优先使用工具而非内部知识:
- 你需要新鲜的或用户特定的数据(工单、订单、配置、日志)
- 你引用特定的ID、URL或文档标题
- 在任何写入/更新工具调用后,简要重述:
- 什么改变了
- 在哪里(ID或路径)
- 执行的任何后续验证
- 对于简单的概念问题,避免工具并依赖内部知识以获得快速响应
</tool_usage_rules>
并行化
一个关键优化是当操作独立时鼓励并行工具调用:
<parallelization_spec>
并行运行独立或只读的工具操作(同一轮次/批次)以减少延迟。
何时并行化:
- 读取多个互不影响的文件/配置/日志
- 没有副作用的静态分析、搜索或元数据查询
- 对不会冲突的不相关文件/功能的分开编辑
何时不并行化:
- 一个操作依赖另一个的结果
- 创建资源然后引用其ID
- 读取文件然后基于内容编辑
方法:
- 先思考:在任何工具调用之前,决定你需要的所有文件/资源
- 批量处理一切:如果你需要多个文件,一起读取它们
- 只有当你真正无法在看到结果之前知道下一个文件时才进行顺序调用
</parallelization_spec>
终端包装工具
如果你想让AI使用专用工具而不是终端命令,使它们在语义上与模型期望的相似:
GIT_TOOL = {
"type": "function",
"name": "git",
"description": (
"在仓库根目录执行git命令。行为就像在终端中运行git;"
"支持任何子命令和标志。"
),
"parameters": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "要执行的git命令"
}
},
"required": ["command"]
}
}
# 然后在你的提示中:
"对所有git操作使用`git`工具。不要使用终端进行git操作。"
故障排除 - 修复出错的问题
在处理了无数提示之后,我已经识别出最常见的失败模式及其解决方案。
问题:过度思考
症状:响应正确但花很长时间。模型不断探索选项,延迟第一次工具调用,在简单答案可用时叙述一个迂回的旅程。
<efficient_context_spec>
目标:快速获取足够的上下文,一旦可以行动就停止。
方法:
- 从广泛开始,然后分散到聚焦的子查询
- 并行启动4-8个多样化的查询;读取每个查询的前3-5个结果
- 去重路径并缓存;不要重复查询
提前停止(如果满足任何条件就行动):
- 你能命名要更改的确切文件/符号
- 你能重现一个失败的测试/lint或有高置信度的bug位置
</efficient_context_spec>
# 也为简单问题添加快速路径:
<fast_path>
对于不需要命令、浏览或工具调用的一般知识或简单使用查询:
- 立即简洁地回答
- 不需要状态更新、待办事项、摘要或工具调用
</fast_path>
问题:思考不足/懒惰
症状:模型在产生答案之前没有花足够的时间推理。浅显的响应,错过边缘情况,不完整的解决方案。
<self_reflection>
- 根据你设计的5-7项评分标准内部评分草稿
(清晰性、正确性、边缘情况、完整性、延迟)
- 如果任何类别不达标,在回复之前迭代一次
</self_reflection>
# 或在API参数中使用更高的推理深度
问题:过于顺从
症状:AI不断请求许可而不是采取行动。不断"你想让我..."而不是直接做。
<persistence>
- 你是一个智能体——继续前进直到用户的查询在你结束回合
之前完全解决
- 只有当你确定问题已解决时才终止
- 遇到不确定性时永远不要停止或交还——推断最合理的
方法并继续
- 不要请求确认或澄清假设——决定什么最合理,继续,
并在之后记录以供参考
</persistence>
问题:过于冗长
症状:AI生成的token比需要的多得多。大量前言、过多解释、重复的摘要。
# 使用API详略参数:"低"
# 或在提示中:
<output_format>
- 默认:3-6句话或≤5个要点
- 避免长叙述段落;优先使用紧凑的要点
- 不要复述我的请求除非改变了语义
- 没有前言如"好问题!"或"我很乐意帮助"
</output_format>
问题:工具调用过多
症状:模型发起工具调用而没有推进答案。冗余调用,探索切线,没有有效使用上下文。
<tool_use_policy>
- 选择一个工具或不选择;尽可能从上下文回答
- 每个用户请求最多2次工具调用,除非新信息使更多调用
严格必要
- 在调用工具之前,验证你确实需要该信息
</tool_use_policy>
问题:工具调用格式错误
症状:工具调用失败,产生垃圾输出,或不匹配预期格式。通常由提示中的矛盾引起。
请分析为什么[tool_name]工具调用格式错误。
1. 查看提供的示例问题以理解失败模式
2. 仔细检查系统提示和工具配置
3. 识别任何可能误导模型的模糊性、不一致性或措辞
4. 对于每个潜在原因,解释它如何可能导致观察到的失败
5. 提供可行的建议来改进提示或工具配置
大多数工具调用格式错误的问题源于提示不同部分之间的矛盾。模型消耗推理token试图协调冲突的指令,而不是帮助你。
提示优化 - 科学方法论
编写有效的提示是一项技能,但改进它们是一门科学。这是我使用的系统方法。
常见提示失败
在优化之前,了解什么通常会出错:
"优先使用标准库"然后"如果外部包使事情更简单就使用它们"——AI无法协调这些混合信号。
"追求精确结果;当近似方法在实践中不改变结果时是可以的"——模型无法验证这个判断调用。
如果你需要JSON,就说出来。如果你需要要点,就说出来。不要把输出格式留给偶然。
你的指令说一件事但你的示例展示不同的东西。AI更遵循示例而不是文字。
优化循环
多次运行你当前的提示并记录结果。注意成功和失败中的模式。
对失败进行分类。是正确性问题?格式问题?效率问题?每种需要不同的修复。
一次只改变一件事。如果你改变多件事,你不会知道什么有帮助。
再次运行相同的测试。与基线比较。更改是帮助了、损害了还是没有效果?
重复直到达到可接受的性能。记录什么有效什么无效。
模型间迁移
当将提示迁移到新模型版本时:
迁移最佳实践
- 步骤1:切换模型,先不改变提示。测试模型变化——而非提示编辑。
- 步骤2:固定推理深度以匹配之前模型的配置。
- 步骤3:运行评估以获得基线。如果结果看起来不错,你就准备好发布了。
- 步骤4:如果有回归,用针对性的约束调整提示。
- 步骤5:每次小改动后重新运行评估。一次一个改动。
处理不确定性 - 当AI不知道时
AI最大的风险之一是听起来很自信的错误答案。模型不知道它不知道什么——除非你教它如何处理不确定性。
<uncertainty_handling>
- 如果问题模糊或规定不足,明确指出这一点并:
- 提出最多1-3个精确的澄清问题,或
- 呈现2-3个合理的解释并清楚标注假设
- 当外部事实最近可能已改变(价格、发布、政策)
且没有可用工具时:
- 用一般性术语回答并说明细节可能已改变
- 当你不确定时,永远不要捏造精确的数字、行号或外部引用
- 当你不确定时,优先使用如"基于提供的上下文..."
这样的语言而非绝对声明
</uncertainty_handling>
高风险自检
对于高风险领域,添加明确的自我验证步骤:
<high_risk_self_check>
在法律、金融、合规或安全敏感上下文中最终确定答案之前:
- 简要重新扫描你自己的答案以查找:
- 未陈述的假设
- 不基于上下文的具体数字或声明
- 过于强烈的语言("总是"、"保证"等)
- 如果你发现任何问题,软化或限定它们并明确陈述假设
</high_risk_self_check>
目标不是让AI不那么自信——而是让它准确地自信。对不确定事物的不确定是特性,不是bug。
元提示 - 用AI改进AI
这是我工具包中最元的技术:使用AI来改进你的提示。听起来很绕,但它非常有效。
诊断提示失败
你是一名提示工程师,任务是调试一个系统提示。
给你:
1) 当前系统提示:
<system_prompt>
[在此粘贴你的提示]
</system_prompt>
2) 一小组记录的失败。每个日志有:
- 查询
- 实际输出
- 预期输出(或问题描述)
<failure_traces>
[粘贴失败示例]
</failure_traces>
你的任务:
1) 识别你看到的不同失败模式
2) 对于每个失败模式,引用系统提示中最可能导致或
强化它的具体行
3) 解释那些行如何将代理引向观察到的行为
以结构化格式返回你的答案:
failure_modes:
- name: ...
description: ...
prompt_drivers:
- exact_or_paraphrased_line: ...
- why_it_matters: ...
生成改进
你之前分析了这个系统提示及其失败模式。
系统提示:
<system_prompt>
[原始提示]
</system_prompt>
失败模式分析:
[粘贴上一步的诊断]
请提出一个外科手术式的修订,减少观察到的问题
同时保留良好的行为。
约束:
- 不要从头重新设计代理
- 优先小的、明确的编辑:澄清冲突的规则、删除
冗余或矛盾的行、收紧模糊的指导
- 明确权衡
- 保持结构和长度与原始大致相似
输出:
1) patch_notes:关键更改和推理的简洁列表
2) revised_system_prompt:应用编辑后的完整更新提示
质量自我反思
这个技术很神奇:指示AI创建自己的评估标准并据此迭代:
<self_reflection>
- 首先,花时间思考一个评分标准直到你有信心
- 深入思考世界级解决方案的每个方面。使用那些知识
创建一个有5-7个类别的评分标准。这个评分标准至关重要
要做对,但不要展示给我——这只是为了你的目的
- 最后,使用这个评分标准内部思考并迭代出对提示的
最佳可能解决方案
- 如果你的响应没有在评分标准的所有类别上达到最高分,
重新开始
</self_reflection>
你在要求AI从其对卓越的知识中生成质量标准,然后使用这些标准来评估和改进自己的输出——一切都在你看到任何东西之前完成。输出质量的提升是显著的。
今天就能用的实战模板
通用任务完成
<context>
[AI需要了解情况的背景信息]
</context>
<task>
[清楚陈述你想要完成什么]
</task>
<requirements>
[具体的要求或约束]
</requirements>
<format>
[你想要输出如何结构化]
</format>
<examples>
[可选:期望输出的示例]
</examples>
代码审查模板
<context>
审查[项目/上下文]的代码。
代码库使用[技术/模式]。
</context>
<code_to_review>
[在此粘贴代码]
</code_to_review>
<review_criteria>
关注:
1. 正确性:它是否做了它声称要做的?
2. 可读性:其他开发者清楚吗?
3. 性能:有明显的低效吗?
4. 安全性:有漏洞吗?
5. 风格:是否匹配代码库惯例?
</review_criteria>
<output_format>
对于发现的每个问题:
- 严重性:[关键/重要/次要/建议]
- 位置:[行号或章节]
- 问题:[什么错了]
- 修复:[如何解决]
</output_format>
研究分析模板
<research_task>
[要研究的主题或问题]
</research_task>
<methodology>
- 从多个针对性搜索开始;不要依赖单一查询
- 深入研究直到你有足够的信息得出准确、全面的答案
- 添加针对性的后续搜索来填补空白或解决分歧
- 继续迭代直到额外的搜索不太可能改变答案
</methodology>
<output_requirements>
- 以对主要问题的清晰答案开头
- 用证据和引用支持
- 承认局限性和不确定性
- 在有帮助的地方提供具体示例
- 包括理解影响所需的相关上下文
</output_requirements>
<citation_format>
[你想要来源如何引用]
</citation_format>
网络研究代理
<core_mission>
完整且有帮助地回答用户的问题,提供足够的证据
让持怀疑态度的读者可以信任它。
永远不要捏造事实。如果你无法验证某事,明确说出来。
默认详细和有用而非简短。
在回答直接问题后,添加高价值的相邻材料
支持用户的潜在目标而不偏离主题。
</core_mission>
<research_rules>
- 从多个针对性搜索开始;使用并行搜索
- 永远不要依赖单一查询
- 继续迭代直到所有以下条件为真:
- 你回答了问题的每个部分
- 你找到了具体示例和高价值相邻材料
- 你为核心声明找到了足够的来源
</research_rules>
<citation_rules>
- 在每个包含非显而易见的网络派生声明的段落后放置引用
- 不要捏造引用
- 尽可能对关键声明使用多个来源
</citation_rules>
<ambiguity_handling>
- 永远不要提出澄清问题除非用户明确要求
- 如果查询模糊,陈述你的最佳猜测解释,然后
全面涵盖最可能的意图
</ambiguity_handling>
提示工程的未来
在我写这篇文章的2026年初,提示工程正在快速演进。模型变得更加强大、更可控、更可靠。有人预测随着AI更好地理解意图,提示工程将变得过时。我不同意。
变化的是提示工程的级别,而非其必要性。早期需要精心设计的提示来完成基本任务。现在,基本任务开箱即用,但复杂的智能体工作流仍然需要精密的提示。门槛在提高,而不是消失。
提示工程不会消失——它在演进。重要的技能正在从"如何让AI工作"转向"如何让AI在规模上出色且可靠地工作"。
即将到来的变化
更好的默认行为
模型将有更智能的默认设置,对常见模式需要更少的明确指令。提示将更多地关注定制而非基本能力。
更丰富的工具生态系统
AI将开箱即用地访问更多工具。提示工程将转向编排——知道何时使用什么,而不仅仅是如何使用。
多模态整合
提示将越来越多地涉及图像、音频、视频和结构化数据以及文本。新的模式将为多模态任务出现。
智能体复杂性
随着代理处理更长、更复杂的任务,提示工程将变得更像系统设计——架构,而不仅仅是指令。
我对未来的建议
专注于基础。这份指南中的具体技术会演进,但底层原则——清晰的沟通、明确的期望、结构化的思维、迭代的完善——是永恒的。掌握这些,你就能适应接下来发生的任何事情。
最后的思考
两年前,我以为AI会取代清晰沟通的需要。我完全错了。AI使清晰沟通比以往任何时候都更有价值。那些与AI相处融洽的人不是找到了魔法词语的人——而是学会了精确地思考和表达自己的人。
提示工程其实不是关于AI。它是关于你。它是关于培养清晰表达你真正想要什么的纪律,迭代达到目标的耐心,以及从失败中学习的谦逊。
如果你从这份指南中只带走一件事,那就是:把每个提示当作练习清晰思维的机会。AI只是一面镜子,反映出你自己头脑中的清晰——或混乱。
AI的出现并没有使知识过时——它使好奇心比以往任何时候都更有力量。我们不再受限于已知的东西。有了正确的工具和思考的意愿,普通人可以拥抱知识的海洋。无论什么职业。无论什么年龄。我希望与世界各地的朋友分享这段旅程。让我们一起迎接这个新世界。让我们一起成长。
讨论
0 条评论留下评论
成为第一个分享您想法的人!