一泽 Eze:样例驱动的渐进式引导法——利用 AI 高效设计提示词 ,生成预期内容
原文:https://my.eze.is/2024/07/20/sample-driven-ai-prompt/
摘要:一个精彩的 Prompt 是驱动 AI Agent 稳定运作的核心✨。
本文提到的渐进式引导法,简化了提示词设计的过程,让非专业用户也能创建高质量的 Prompt。
🚀 希望能够帮助到对 AI 好奇的朋友,无需深入理解复杂的 Prompt 工程技巧,也能玩转 Prompt。
阅读提示
核心看点:
- 通过实际案例演示,如何从用户期望的 1 个样例出发,通过与 LLM 进行多轮互动,逐步生成高可用的结构化提示词
- 文末「推荐阅读」中,附有相关 OpenAI 官方指引、ICLR 论文等,以供拓展学习
适合人群:
- 初步了解结构化提示词的用户(如果还不知道什么是结构化提示词,推荐阅读:结构化提示词系统论述: 构建高性能 Prompt 之路)
- 在实际运用时,不知道怎么写出能够让 AI 生成符合内心预期结果的提示词的用户
引言
一个精彩的 Prompt 是驱动 AI Agent 稳定运作的核心。
例如,我们常见的”小红书爆文生成 AI”提示词,包含了”二极管标题法进行创作”、”最省力法则和及时享受”这样精确、巧妙的提示。
高质量的 Prompt 极度依赖用户通过逻辑思考,从知识经验(KnowHow)中抽象表达出关键方法与要求。这也是大多数人明知 LLM 能完成很多任务,却无法有效利用 AI 提高效率的原因。
阅读本文后,你只需使用 1-2 个初始样例,就能较为轻松地引导 AI 自动定制出完美的提示词。
为了方便记忆,本文将采用“样例驱动的渐进式引导法”,代称这个 Prompt 创作方式。
什么是“样例驱动的渐进式引导法”
样例驱动的渐进式引导法,就像让 AI 主动来读懂你的想法。以 1-2 个正向样例作为起点,通过与 AI 的多轮对话,引导 AI 从样例中提炼隐含的生成要求,逐步完善提示词。
例如,当你教 AI 仿写一篇爆文时,无需详细解释文章结构或写作技巧,只需提供一个优秀的样例。AI 会自动分析这个样例,理解其中的精髓,然后生成更符合自身运作方式的指令。
这不需要用户具备专业的 Prompt 工程知识,也不需要用户“痛苦”地提炼“Know How”。仅仅只需要利用 AI ,就能让 AI 自动生成精彩的 Prompt。
👉 它的核心步骤包括:
- 构建初始样例: 创建一个符合你期望输出的具体例子。
- 评估样例,尝试提炼模板: 让 AI 分析和理解样例的结构和关键元素,并以专家视角尽可能地优化样例。
- 固定模板,强化要求说明: 基于对初始样例的理解,让 AI 提出一个通用模板。通过测试 Prompt,验证模板的可靠性。
- 生成结构化提示词: 将优化后的模板转化为结构化的提示词。在用户适当调整并确认后,即可投入使用。
在这个过程中,用户的角色主要是:
- 提供尽可能与自己预期一致的初始样例
- 判断 AI 的输出质量
- 反馈改进建议,提供行动引导
这种方法的优势在于简化了提示词设计的过程,让非专业用户也能创建高质量的 Prompt。通过引导 AI 进行分析和优化,用户可以专注于判断输出质量和提供反馈,而不需要深入理解复杂的 Prompt 工程技巧。
😎 接下来,我将通过一个实战案例:可以快速学习任何知识概念的”知识闪卡 AI”,来逐步分享我的运用过程。这将帮助你直观地了解如何使用样例驱动的渐进式引导法来设计高质量的提示词。
渐进式引导法的实战分享
下面直接进入实战内容的分享,希望通过每一步翔实的步骤记录,为读者提供有参考价值的信息。
需求来源
在跨行摸索 AI 的过程中,我常常遇到从未接触过的新名词和新概念。作为喜欢“跳兔子洞”的学习者来说,连续接触新知识,虽然很有趣,但也降低了学习效率。
为了加深知识记忆,我通常使用“费曼学习法”,搜集相关知识,并总结自己的知识卡片。但整个流程中,搜集知识和输出卡片内容依然会消耗大量时间。
为了提高效率,我想让 AI 能够按照我的预期,自动根据给出的主题制作知识闪卡。
构建初始样例
构建初始样例,是整个方法中最基础、关键的一步。
即使无法预先为 AI 总结出生成预期内容的方法论与要求,我依然建议你需要构建/找到与自身预期最相近的初始样例。(如果你都不知道你要的是什么,又怎么指望 AI 能够读心呢🤣)
刚好在做这个案例(知识闪卡生成)前,我在学习“数据向量化”的概念,并整理了一张知识闪卡。
它通过“主题名称、标签分类、一句话应用总结、渐进式原理说明、相关场景、举例说明”,能够非常快速地形成新知识的大致概念。所以,我也希望 AI 能够按照我的输出风格、思考逻辑,来替我生成知识闪卡。
# 数据向量化
#AI #note/on
## 一句话应用总结
数据向量化,可以为 AI 提供高效识别数据(文本、图片等)相似度的量化手段。
## 渐进式原理说明
- 基础原理:根据需识别的特征类型,设定多维坐标轴的数字空间(包含:坐标轴种类数量和量化取值标准),每个坐标轴代表一个特征。通过识别新数据的特征,按标准将数据特征映射到多维坐标轴上的对应数值,即形成高维向量。
- 运用原理:通过计算不同数据的向量距离或相似度,即可量化和比较数据的相似性。常用方法:欧氏距离、余弦相似度等。
## 相关场景 //根据场景的常见度进行排序
常见使用场景:
1. 推荐系统:电商推荐、内容推荐、个性化广告
2. 图像识别
3. 人脸识别
4. 金融风控
5. 自然语言处理:情感分析、机器翻译
---
## 举例说明 //至少 2 个例子
比如,对“猫”进行向量化存储:
### 图像猫
猫的图片,可以使用计算机视觉技术将其向量化。
**步骤:**
1. **确定图像的向量化标准**:如按 64 x 64 像素的图像标准进行向量化,则将图片调整为固定尺寸
2. **量化图像特征**:将图像的像素值展平成一组的一维向量。如果是灰度图像,每个像素一个值。
3. **特征提取** %%使用卷积神经网络(CNN)提取更高级的特征。这些特征可以通过预训练的模型(如ResNet、VGG)来提取,得到一个更紧凑和有意义的特征向量。%%
**示例:**
- 原始图像:64x64 个灰度维度组成的图像
### 结构化数据形式的实体猫
对猫这个实体的特征进行识别将猫的特征属性转换为向量。
**步骤:**
1. **确定需要识别的特征属性**:例如,猫的颜色、年龄、体重、品种等。
2. **量化特征**:将每个属性转换为数值(如颜色用独热编码,年龄用数值,体重用数值等)。
3. **组合向量**:将所有属性的数值组合成一个向量。
**示例:**
如果定义特征属性如下:
- 颜色(独热编码):[0, 1, 0](假设三种颜色:白、黑、灰)
- 年龄:3岁 → [3]
- 体重:4.5公斤 → [4.5]
- 品种(独热编码):[1, 0, 0, 0](假设四种品种)
则在向量数据库中,可用[0, 1, 0, 3, 4.5, 1, 0, 0, 0]指代被存储的“猫”
评估样例,尝试提炼模板
与 AI 开始对话
单凭个人努力,想独自产出一个高质量的样例并非易事。就如我在构建上面的初始样例后,不确定它与优秀的知识卡片还有多大差距。
幸运的是,我们可以借助擅长扮演专家角色的 AI 来改进初始的正向样例。
我选择使用 Claude 3.5 进行对话(读者也可以尝试 GPT-4 等其他 AI 工具),输入以下的初始指令:
<User>
// 设定 AI 的人设,使其回复时尽可能考虑的专业、周全
你是专业的知识学习者,以及各行各业的知识专家,了解快速学习新知识的方式方法。
熟悉费曼学习法、金字塔原理、人类学习认知原理,擅长教育各类小白人群新的知识概念,使其快速、真正的掌握新知识。
// 背景说明
下方分割线“——————”后的内容,是我最近从零学习“数据向量化”这个概念,为了快速学懂、确保学会,我写的“数据向量化”的知识卡片。
// 具体指令
请你分析我的卡片结构,评价作为知识卡片记录,这个结构是否优秀,有无优化空间
——————
{{此处需要粘贴 <构建初始样例> 代码块中的知识卡片}}
以下是 AI 返回的内容:
我们可以通过 AI 的回复,侧面印证 AI 当前对样例的理解与建议。
提炼初始模板
当确保 AI 基本理解了我们的样例与需求目标时,我们就进入下一步”提炼初始模板”:
<User>
// 在生成模板前,反馈真正想要的模板结构
很好,你已经理解了我的知识卡片结构。
针对你提出的优化空间,你可以增加关联知识、版本控制两个内容模块。
// 发出下一步的指令,包含需求的预期描述
现在,请你为我设计一套足够通用的快速学习新知识的知识卡片模板,能够用于学习各类各行业的知识概念、技术手段、现象等等。
多轮反馈,直至达到预期
不过 AI 可能仍然会犯错,输出要求外的内容,这是很正常的情况。所以需要发起多轮的对话引导,使得 AI 不断修正自己的理解,直至双方达成共识。
<User>
// 直接分段输入改建意见。我的习惯是 prompt 中,每一个关键意见换一行,这样可以让 AI 更加容易区分每个要求的详情
请从当前模板中,删除 关键词、深入学习资源、备注 模块;
举例说明 模块中,因为我希望这个卡片足够通用,能够用来学习各种知识、概念、技术、现象,我担心不是所有的例子都能按步骤、示例的方式进行说明。希望你也再改进一下,使其足够通用;
另外,我希望这个知识卡片整体足够精炼、简明、易学习。
用例测试,看看 AI 是否真正理解
找 1~3 个用例,让 AI 根据模板,尝试生成对应的知识卡片:
<User>
请你根据这个模板,解释“金字塔原理”
以下是 AI 的回复:
在这一步, 需要读者根据自身需要,根据结果验证 AI 是否能够按照预期生成目标内容。
如果不能,则需要我们和 AI 继续探讨不符合预期的地方,并要求调整(比如:我想要能够生成 3-5 个关联知识;渐进式原理说明,我觉得需要更加的通俗易懂;请你根据我的反馈再调整一下
)。
注:用例测试和多轮反馈的步骤比较灵活,你可以根据需要,在这两个环节内自由进行反馈,调整 AI 的理解与输出。
像图中金字塔原理的知识卡片生成结果,已经非常符合我的预期,所以就可以进行下一步指令。
固定模板,强化要求说明
由于当前的模板主要限定了结构,但对每个模块中的生成风格和内容逻辑没有详细规定,因此当将 Prompt 应用于全新的 LLM 对话时,由于缺乏之前样例的理解,生成的结果可能会出现较大的偏差。
所以,接下来,我们需要 AI 进一步固定模板,强化说明模板的填写要求。
<User>
很好,为了以后你能够更好的运用这个模板,每次都能生成与上面讨论中的样例一致的预期结果
请进一步提炼、优化这个模板,生成<模板内容>,并对模板的各个模块生成<模板填写说明>,并在代码块内输出完整结果
AI 会反馈如下结构的内容:
<Claude 3.5>
<模板内容>
e.g:
# [知识概念名称]
## 一句话总结
[简洁明了的概念定义或核心应用]
## 渐进式原理说明
- 基础原理:[简明扼要的基本原理解释]
- 进阶原理:[更深入的原理说明,可选]
- 应用原理:[如何在实际中应用这个概念]
……
---
<模板填写说明>
e.g:
1. 知识概念名称:使用3-7个字的简洁词语或短语,准确描述所学习的概念、技术或现象。
2. 主题标签:使用2-3个相关的主题标签,便于分类和检索。必须包含 #note/on 标签。
3. 一句话总结:用一个简短的句子概括该概念的核心内容或主要应用,控制在20-30个字之间。
……
虽然已经很不错,但我依然建议你(像你的老板、客户一样)多问几遍 AI,让其多次反思:仅靠当前的模板,是否足以支持它稳定输出与上方样例预期一致的结果。
<User>
请你仔细评估,仅靠当前的模板和填写说明,就足以你稳定输出与上方样例预期一致的结果了吗?
这时,你会惊喜的发现,AI 终于把自己安排的明明白白:
于是,我们得到了一条完整的模板及要求说明👏。
得益于模板的模块化结构和清晰的条理,我们可以根据实际需要,在对应的模板内容和填写说明中,轻松地微调具体要求,使其更加符合我们的心意。(比如微调生成的例子数量、说明的字数等)
(当然,你也像可以这样,直接替 AI 修改模板)
这比我们一开始直接自己撰写模板要求,可简单了太多😎。
生成结构化提示词
不用过早的生成结构化提示词,这应该经过上述步骤后, AI 理解所有规范与要求后再做的事
现在,终于到了最后一步,让 AI 给自己设计一套 Prompt!
你可以参考我的方式,让 AI 参考已有的结构化提示词 ,生成我们真正需要的 Prompt。
<User>
下方分割线“——————”后是一个 prompt 的示例,你可以根据这个 prompt ,提炼其撰写结构。
根据我们上面确定知识卡片的模板内容和填写说明,在代码块中生成一个“知识闪卡生成 AI”这么一个 AI agent的结构化 Prompt 提示词。
你需要确保生成的 Prompt ,应当:
1. 严格遵守我提供的 Prompt 的撰写结构
2. 仅靠生成的 Prompt,足以让你稳定输出与上方样例预期一致的结果
——————
{{自行粘贴一条用来参考结构的结构化 Prompt}}
不过,在这一步中 AI 输出的 Prompt 中并没有附上模板内容、模板填写说明,所以我很怀疑不能达到我的 Prompt 要求。
再次反馈引导,提示 AI 需要在 Prompt 中包含模板信息。
<User>
但是你生成的Prompt 中,没有包含模板内容、模板填写说明,我很怀疑能不能达到我的 prompt 要求
以下是 AI 的调整结果:
就此一套高度可用的 Prompt,就被我们打磨出来了🎉!!!
👉 补充说明:
- AI 一次性输出过长 Prompt ,输出的格式会有一定的问题
注:在上图中,我已经微调了 Prompt 的格式。
当 AI 输出的 Prompt 格式混乱时,一般需要用户在生成提示词的这一步,自行微调 Prompt 的格式,尤其是 Templates 的中的""" """符号的框定与 #
标题符号的使用。
- 生成提示词的这一步,同样也可以让 AI 再进行多轮反思优化
<User> 提问指令
{{此处粘贴你调整好的 prompt}}
——————
请你评估以上的 prompt 是否精确,你能否正确理解?有无格式上的优化空间
<User> 调整指令
请你根据调整方式,来调整
验证提示词效果
如果提示词效果不符合预期,可以和 AI 再进行几轮对话,调整输出结果。最终通过询问 AI“怎么样修改现有的 Prompt,可以让你稳定输出当前的预期”,来进行 Prompt 的迭代。
得到 Prompt 后,可以新开 1 个 AI 对话,把 Prompt 输入到对话中,开始验证 Prompt 的可用性和稳定性。
例如输入 MECE 法则
,进行测试,AI 制作闪卡如下:
可以看到,仅靠着 Prompt ,整个知识卡片的生成的结果,能够快速帮助我们理解一个全新的知识概念,完美符合预期,大功告成🎉~
总结
在上述案例中,该方法的核心要点在于,充分发挥 AI 自身的逻辑分析以及抽象总结能力,主动从用户所提供的样例表象中总结出方法论。用户只需对 AI 提供的方法论正确与否进行判断,零星、分散地提出自身的意见,便能够推动 AI 不断进行反思,总结出更为优质的内容生成方法与要求,进而为 AI 提示词爱好者提供一种门槛较低的提示词生成途径。
可以说,在某些特定场景下,样例驱动的渐进式引导法,的确能够让 AI 主动理解我们的需求,且不再依赖 Prompt 工程师的知识洞察和思维素质,自动化地提炼出高可用的提示词🥳。
一点补充:提示词递归
LLM 具有上下文长度限制。在长对话中,特别是使用渐进式引导法时,由于对话轮数的增加(用户输入 + AI 回复的累积),可能会触碰到长度限制。这可能导致 AI 遗忘早期的对话内容,进而影响输出质量。
所以需要引入“提示词递归”的概念与方法。我们在长对话中定期总结和重新引入关键信息,确保 AI 不会遗忘重要的上下文。
具体步骤如下:
- 初始提示:开始对话时使用清晰、具体的初始提示。
- 定期总结:在对话进行中,定期总结已讨论的关键点。
- 重新引入:将总结的信息重新引入到新的提示中。
- 细化和拓展:基于之前的回答,逐步细化或拓展问题。
- 验证和优化:确保新的提示词在不同情况下都能引导 AI 生成高质量内容。
例如:
# 初始提示词设计
User: "请解释什么是机器学习。"
# 模拟AI的初始输出
AI: "机器学习是一种通过数据训练模型以进行预测或决策的技术。"
# 观察AI的输出,发现不够详细
# 递归提示词1:细化提示词,增加细节要求
User: "请详细解释什么是机器学习,包括其基本原理和应用领域。"
# 模拟AI的细化输出
AI: """
机器学习是一种通过数据训练模型以进行预测或决策的技术。
基本原理包括数据预处理、模型训练、验证和评估。
应用领域包括图像识别、自然语言处理和推荐系统。
"""
# 进一步细化提示词,要求解释常用算法
# 递归提示词2:增加对常用算法的解释需求
User: "请详细解释什么是机器学习,包括其基本原理、常用算法和应用领域。"
# 模拟AI的进一步细化输出
AI: """
机器学习是一种通过数据训练模型以进行预测或决策的技术。
基本原理包括数据预处理、模型训练、验证和评估。
常用算法包括线性回归、决策树、支持向量机和神经网络。
应用领域包括图像识别、自然语言处理和推荐系统。
"""
# 验证和优化提示词,确保在不同情况下仍能引导AI生成高质量的内容
# 递归提示词3:进一步要求举例说明每种算法的应用场景
User: "请详细解释什么是机器学习,包括其基本原理、常用算法和应用领域,并举例说明每种算法的应用场景。"
# 模拟AI的最终输出
AI: """
机器学习是一种通过数据训练模型以进行预测或决策的技术。
基本原理包括数据预处理、模型训练、验证和评估。
常用算法包括线性回归、决策树、支持向量机和神经网络。
应用领域包括图像识别、自然语言处理和推荐系统。
例如,线性回归常用于预测数值变量,决策树用于分类任务,支持向量机用于图像识别,神经网络广泛应用于深度学习任务如图像和语音识别。
"""
推荐阅读
- Chain complex prompts for stronger performance - Anthropic
- Claude 官方手册中,提出“链式提示”的方法理念,推荐将复杂的任务拆解为多个步骤,一步步指引 AI 完成子任务。
- 好处:
- Accuracy: Each subtask gets Claude’s full attention, reducing errors. 准确率:每个子任务都能得到 Claude 的全神贯注,减少错误。
- Clarity: Simpler subtasks mean clearer instructions and outputs. 清晰性:更简单的子任务意味着更清晰的指令和输出。
- Traceability: Easily pinpoint and fix issues in your prompt chain. 可追溯性:轻松定位和修复提示链中的问题。
- Strategy: Split complex tasks into simpler subtasks - Open AI
- ChatGPT 官方手册中,也提出“将复杂的任务分解成更简单的子任务”的理念。
- Least-to-Most Prompting Enables Complex Reasoning in Large Language Models
- 如果你恰巧想要更加深入的研究,我推荐你阅读这篇已在 ICLR 2023 上发表的论文。
- 它提出了 Least-to-Most Prompting(LtM-最少到最多提示) 提示词策略。
- LtM 同样通过将复杂问题分解成一系列更简单的子问题,然后依次解决这些子问题,从而实现对复杂任务的推理。
- 在文本理解和文本生成场景中,表现出了优秀的效果。
- 如果你恰巧想要更加深入的研究,我推荐你阅读这篇已在 ICLR 2023 上发表的论文。