提示词工程指南
适用于 ChatGPT、Claude 和 Gemini 的免费提示词工程指南:怎样写提示词、核心技巧、编程用的提示词,以及模型会出错的地方。每个提示词都可以编辑,并直接在你自己的 AI 应用中打开。
开始课程入门
- 提示词是什么提示词是你交给 AI 模型、告诉它要生成什么的文本。看看提示词由哪些部分组成,文本、代码和图片的真实提示词示例,以及提示词与回复、系统提示词有什么区别。
- 提示词工程提示词工程是编写并测试你给 AI 模型的指令,让它产出你需要的结果。本指南解释它为什么有效,并梳理所有核心技巧。
- 怎么写提示词好的提示词就是一份简短的任务说明:角色、任务、模型猜不到的背景、要处理的材料、答案的形式和限制条件。每一部分都对应着回答可能出错的一种方式。
- 提示词示例十三个拿来就能用的提示词,覆盖学习、编程、写作和计划。填好空白,然后复制提示词,或者直接在 ChatGPT 或 Claude 中打开。
- 系统提示词系统提示词是一组对整个 AI 对话都生效的固定指令。了解它放在哪里、里面该写什么,以及它和用户消息有什么区别。
- Token 和上下文窗口AI 模型以 token(文本的小块)为单位读取文本,并且一次只能容纳有限数量的 token,这个上限就是上下文窗口。了解两者的原理,以及聊天变长时该怎么办。
- 温度参数temperature(温度)控制语言模型挑选每个下一个词时有多随机。看看它如何改变每个词的概率、什么时候该调低或调高,以及它和 top_p 有什么区别。
核心技巧
- 零样本提示零样本提示是只靠指令让模型完成任务,不给任何答案示例。大多数人就是这样使用 ChatGPT、Claude 和 Gemini 的。任务常见、指令精确时,它的效果很好。
- 少样本提示少样本提示是在提示词中放入几个完整的示例,每个示例包含一个输入和你想要的答案,让模型照着这个模式来做。要教会模型一种它猜不到的格式、一组标签或一种团队风格,这是最快的办法。
- 思维链思维链提示要求模型在给出答案之前,先把推理过程写出来。它对多步骤的数学和逻辑题帮助最大,对那些回答前本来就会先思考的推理模型则作用较小。
- 角色提示角色提示是给模型分配一个要扮演的角色,比如辅导老师、代码审查者或面试官。角色会改变回答写给谁看、要达到什么标准,但不会给模型增加它本来没有的知识。
- 结构化输出结构化输出是指要求模型按固定的形式回答,比如 JSON、表格或模板,让程序或人无需再整理就能直接使用。给出 schema,说明缺失的值怎么处理,并在代码中校验结果。
- 分隔符和 XML 标签分隔符标出粘贴进来的材料从哪里开始、到哪里结束,让模型能分清你的指令和它要处理的文本。引号、三个反引号、### 行和 XML 标签都可以用;当提示词里有多份材料时,XML 标签最好用。
- 提示词模板提示词模板是一个你已经测试过的提示词,把每次会变的部分留成空白。复制现成的带填空模板,再用五个步骤把你自己最好用的提示词做成模板。
进阶技巧
- 提示词链提示词链(prompt chaining)把一项工作拆成一串更小的提示词,每一步的输出都成为下一步的输入。每一步只做一件事,你可以在下一步运行之前先检查它的结果。
- 自洽性提示自洽性提示是把同一个推理问题问好几次,让每次运行各自推理,然后保留出现次数最多的答案。本文介绍它的原理、如何手动使用,以及如何用代码实现。
- 思维树提示思维树提示让模型探索几个不完整的解法,逐一评判,只保留有希望的分支。本文介绍原始方法的原理、一个可以直接试用的单提示词版本,以及这个版本的不足之处。
- ReAct 提示ReAct 提示让模型在推理任务和调用工具之间交替进行,每拿到一个结果都先读完,再决定下一步。大多数 AI 智能体背后都是这个循环。
- 元提示元提示(meta prompting)是让模型来处理提示词:从零写一个、改进你已有的,或者把一个任务拆成交给其他模型调用的提示词。下面介绍每种做法,以及如何避免拿回一个臃肿的提示词。
- 上下文工程上下文工程就是决定每次调用时放进模型上下文窗口的所有内容:指令、文档、工具结果、记忆和对话历史,以及它们的先后顺序。你输入的提示词只是其中一部分。
用于编程的提示词
- 写代码的提示词编程提示词要写得像一份小型需求说明才管用:语言和版本、输入和输出、边界情况,以及代码必须通过的测试。每次只让 AI 做一小步。
- 调试提示词用 ChatGPT 或 Claude 调试代码时,粘贴完整的错误信息和引发它的代码,说明你期望的结果和实际发生的情况,列出你已经试过的方法,并先问原因,再要修复。
- 解释代码让 AI 按你的水平逐行解释代码,并用一张表格展示代码运行时各个值的变化。说明你已经知道什么,让解释从你所在的地方开始。
- 代码审查提示词好的代码审查提示词会说明要查什么,要求每个问题都标出严重程度,给出一个具体的触发输入和一个 diff,并告诉模型跳过代码风格。然后你要逐条核实,因为其中总会有错的。