🤨与 AI 对话的艺术?
内容参考👉 DW 教学课程 - Prompt 工程入门
Editor:cc
当你在平时使用 AI 写文章、编代码时,会不会在某些时候发现,AI 的输出异常地让你满意?甚至你也积累了许多巧妙的用法?那么,如何让这些巧妙的用法和灵光乍现的良好体验不断重现呢?换言之,如何能让 ai 总是能输出符合心意的回答呢?
这时候就需要 Prompt 工程 来引导 AI 输出。不止是完成最基本的任务,更需要使 AI 的输出更加地贴合你的需求。仔细阅读这篇文档,相信能给你带来一些不一样的启发。
PS:无论大模型如何变化,Prompt 工程的核心 —— 说人话、描述清楚需求是一直不变的,Prompt 工程的迁移比发现并挖掘一个场景痛点并尝试用 Prompt 解决,要简单得多。
😇免责声明
本章内容面向新手,主要是应对一些日常使用 AI 工具辅助的情况。 需要深入了解可以看 提示词(prompt)工程 - 进阶玩家攻略。
一、什么是 Prompt
1. Prompt 概念
Prompt 是一种短文本字符串,用于指导语言模型生成响应。 Prompt 通常翻译成提示文本,是一段文本或一个问题,作用是引导 生成式 AI 大模型 产生预期的回答或反应。其形式多样,可以是一个简单的问题、一个详细的段落,或一系列具体的指令,具体形式取决于用户的需求和应用场景。
通常,Prompt 是由人类设计的,以帮助模型更好地理解特定任务或领域。Prompt 可以包含任务相关的信息和上下文,以帮助模型更好地理解要求并生成正确的输出。
对于具有较强自然语言理解、生成能力,能够实现多样化任务处理的大语言模型(LLM)来说,一个好的 Prompt 极大地决定了其能力的上限与下限,且会塑造其输出文本的内容、风格和整体质量。
举个例子:如果我们把 AI 模型比作一名员工,Prompt 就相当于给员工的具体指令。指令的明确性和详细性决定了模型的输出效果。
如何去使用 Prompt,以充分发挥 LLM 的性能?设计 Prompt 有两个关键原则:编写清晰、具体的指令和给予模型充足思考时间。掌握这两点,对创建可靠的语言模型交互尤为重要。
2. Prompt 常见作用
Prompt 常见的作用 | 描述 |
---|---|
引导模型输出: | 通过 prompt 设计引导 AI 模型生成特定信息或行为 |
改善交互体验: | 设计用户友好的 prompt 以提升与 AI 系统的交互体验 |
指导模型任务: | 使用 prompt 作为示例输入,帮助模型学习特定任务 |
进行一定微调: | 通过 prompt 微调预训练模型,使其适应特定领域或任务 |
控制生成内容: | 调整 prompt 来控制 AI 生成内容的风格、主题和格式 |
提高可解释度: | 利用 prompt 分析模型反应,提高 AI 模型的透明度和可解释性 |
提升安全性和道德可靠性: | 设计 prompt 以防止生成有害内容,确保 AI 系统的道德使用 |
降低一定成本: | 设计 prompt 提供较稳定的效果,减少一定的 token 消耗 |
3. 大模型的局限性
也有一些时候,不管你 Prompt 写的多好,出来的结果始终不尽如人意,这是因为目前的 AI 大模型在实际应用中,存在着一些固有局限性,但我们相信随着技术的持续发展,很多问题都会得到解决,比如目前有一些大模型已经可以很好的应对长文本的问题。
下面做一些简单的局限性科普:
- 时效性差
PS:现在很多大模型通过加入 搜索网页的插件工具 或 外挂定期更新的知识库 等方式可以部分解决这个问题。但当我们涉及到需要基于大模型能力开发时,要注意选择方案来规避这个问题。
Prompt 提示词与 AI 大语言模型交互的知识来自训练时接触到的数据,无法提供未知信息或新的发现。
举例: 如果您询问关于一项最新科学研究的问题,模型可能无法提供相关信息,因为它的知识截止日期通常在训练数据截止日期之前。
上下文记忆有限
- 😩 上下文记忆问题可能是由于模型在处理超长文本时遇到了字节长度限制或者信息丢失的情况导致的。这可能会导致模型在较长的对话或文本中失去一些先前的上下文信息。
- 要解决这个问题,你可以尝试以下几种方法:
- 分割文本: 如果你的文本很长,可以尝试将其分割成较短的段落或句子,减轻模型的记忆负担;
- 表达清晰: 尽量使用清晰、简洁的语言表达你的问题或信息,避免过于复杂的句子结构;
- 明确问题: 确保对话中提出的问题或请求是明确的,以便模型更容易理解并提供相关的回答;
- 逐步引导: 逐步引导模型,提供必要的背景信息,确保模型能够理解上下文;
- 检查输入格式: 确保输入的格式符合模型的期望,避免包含过多的冗余信息或不必要的细节。
存在幻觉
- 由于 AI 大模型 的生成是概率性的,且会针对性做一些人类倾向的对齐处理,以实现让人满意的效果,以及满足一定泛化能力,因此 AI 在面对没有训练过的场景,会概率性生成可能被期待的内容(有一定讨好倾向)。
- 另外,模型输出的可靠性值得怀疑,可能会出现格式错误,甚至偶尔表现出叛逆行为(例如拒绝遵循指示)。
- 举例: 当 AI 大语言模型被询问 “林黛玉为何倒拔垂杨柳?” 时,可能会编造一个听似合理的解答,并配以看似道理十足的引用。(也就是一本正经的胡说八道🤬)
不过不同模型性能不同,针对特定问题的正确率会有差异
无法精确字数
- 在让大语言模型写文章时,在 Prompt 提示词里写明需要生成 1000 字的文章,但它写出来的文章字数可能是 800 字或者 900 字,就是很难精确刚刚好是 1000 字。
- 大模型无法输出准确的字数的原因是多方面的,包括数据噪声、过拟合、基于概率统计的预测方法、设计限制、输入文本长度限制以及幻觉问题等。这些因素共同作用,导致大模型在处理特定任务时,无法精确控制生成内容的字数。
内容需要合规
- AI 大语言模型的生成内容是受国内监管的,当您的 Prompt 提问或 AI 回答的内容中存在敏感信息🔞,AI 大语言模型厂商将会使用合规的方式进行过滤,不显示最终结果。
长期规划和任务分解能力不足
- 长期规划和有效探索解决方案空间仍然具有挑战性。LLM 在遇到意外错误时很难调整计划,与从试错中学习的人类相比不太稳健。
二、如何写好 Prompt
了解了 Prompt 的基础概念之后,相信你一定已经跃跃欲试,那么以下建议,请你一定收好了!
核心要点
🌻葵花宝典:指定角色扮演,明确分配任务,控制输出结果。
例如:我想你扮演一个英语老师,请你给我写一篇 120 字左右的英语作文,主题是小明买菜记。
明确并结构化地表达需求,可以提高输出回答的质量。
以下是一个有效的提示词通用模板:
- 角色: 让模型扮演某个特定角色,比如 “作家”、“设计师” 或 “历史学家” 等。
- 任务: 明确告诉模型你希望它完成的任务,比如 “写一篇小说” 或 “设计一个标志” 等。
- 格式: 指定你希望的输出格式,如 “Markdown 格式” 或 “PDF 格式” 或 “表格格式”。
示例:
- 角色: 你是马克思
- 任务: 你需要给中国的大学新生一些开学建议,要求有深度且可落地。
- 格式: 字数不超过 200 字,请以英文的方式表达。
🤔正反对比例子
❌ 不好的例子
我要如何学习创建 Agent
这个 prompt 提的问题非常宽泛,所以得到的结果也是非常粗糙的
✅ 优化后的例子
你是一名 AI 专家,我想了解更多关于如何系统地学习并创建一个人工智能 Agent,比如聊天机器人。能否提供一个详细的学习路径,包括推荐的资源、课程和实践项目?
可以看到优化后的结果比之前清晰了很多,有非常具体的课程和资源推荐,其实还可以进一步优化,告诉大模型更多你的个人背景情况,这样它会给出更个性化的建议。
进阶框架
以下简单扩展补充 9 种 Prompt 提示词框架,大家可以选择适合自己的框架并结合场景灵活运用。
- APE (行动、目的、期望)
- CARE (上下文语境、行动、结果、示例)
- RACE (角色、行动、上下文背景、期望)
- COAST (背景、客观、行动、场景、任务)
- CRISPE (能力、角色、洞察、陈述、个性、实验)
- RISE (角色、输入、步骤、期望)
- TRACE (任务、请求、操作、上下文、示例)
- ROSES (角色、客观、场景、预期解决方案、步骤)
- LangGPT (高级框架:Markdown 语法、角色、限制、能力、工作流...)
写好 Prompt 的策略
以下法则部分来自于 OpenAI Cookbook,在学习 Prompt 的过程中值得反复琢磨和尝试。
有兴趣的同学可参阅原文 🔗:OpenAI Cookbook
编写清晰的说明:
包含详细信息 提示越具描述性和详细,结果越好。特别是当你对生成的结果或风格有要求时,这一点尤为重要。 不存在什么特定的词元(tokens)或关键词(tokens)能确定带来更好的结果。更重要的是要有一个具有良好格式和描述性的提示词。 在设计提示时,还应注意提示的长度,因为提示的长度是有限制的。想一想你需要多么的具体和详细。包含太多不必要的细节不一定是好的方法。这些细节要与你期望它做的任务强相关。
例如, 让我们尝试从一段文本中提取特定信息的简单提示。
提示:
提取以下文本中的地名。
所需格式: 地点:<逗号分隔的地点名称列表>
输入:“虽然这些发展对研究人员来说是令人鼓舞的,但仍有许多谜团。里斯本未知的香帕利莫德中心的神经免疫学家 Henrique Veiga-Fernandes 说:“我们经常在大脑和我们在周围看到的效果之间有一个黑匣子。”“如果我们想在治疗背景下使用它,我们实际上需要了解机制。””
输出:
地点:里斯本,香帕利莫德中心
- 避免不明确 具体和直接会更好。这里的类比非常类似于有效沟通 —— 越直接,信息传达得越有效。你可能有兴趣了解提示工程的概念。你可以尝试这样做。
例如:
解释提示工程的概念。保持解释简短,只有几句话,不要过于描述。
从上面的提示中不清楚要使用多少句子以及什么风格。尽管你可能仍会从上述提示中得到较好的响应,但更好的提示应当是非常具体、简洁并且切中要点的。
例如:
使用 2-3 句话向高中学生解释提示工程的概念。
说明要做什么,避免说不要做什么 这样(说要做什么)更加的具体,并且聚焦于(有利于模型生成良好回复的)细节上。
以下是一个电影推荐聊天机器人的示例,因为我写的指令 —— 关注于不要做什么,而失败了。
提示:
以下是向客户推荐电影的代理程序。不要询问兴趣。不要询问个人信息。
客户:请根据我的兴趣推荐电影。
代理:
输出:
当然,我可以根据你的兴趣推荐电影。你想看什么类型的电影?你喜欢动作片、喜剧片、爱情片还是其他类型的电影?
以下是更好的提示:
提示:
以下是向客户推荐电影的代理程序。代理负责从全球热门电影中推荐电影。它应该避免询问用户的偏好并避免询问个人信息。如果代理没有电影推荐,它应该回答 “抱歉,今天找不到电影推荐。”。
顾客:请根据我的兴趣推荐一部电影。
客服:
输出:
抱歉,我没有关于你兴趣的任何信息。不过,这是目前全球热门的电影列表:[电影列表]。希望你能找到喜欢的电影!
为模型指定一个角色 上文已经提及。
使用分隔符 使用分隔符可以明确输入的不同信息部分(如 “###” 或 “---”)
指定完成任务所需的步骤,1,2,3…… 如果希望模型按照特定的流程完成任务,可以明确列出所需的步骤。这有助于模型更好地理解任务的顺序和逻辑,避免产生混乱或不连贯的内容。
提示:
请按照以下步骤撰写一篇关于如何编写优秀程序代码的博客文章。
- 介绍编写高质量代码的重要性。
- 讨论常见的编程原则(如 KISS 和 DRY 原则)。
- 提供编写清晰代码的具体建议(如使用有意义的变量名、注释和文档)。
- 总结文章,鼓励读者实践良好的编程习惯。
- 提供示例 对于一些复杂任务,尝试提供示例,对于解决这些任务很有用。这会让 LLM 更好地理解它要做什么。 这也被成为少样本提示(few-shot)技术。
提示:
“whatpu” 是坦桑尼亚的一种小型毛茸茸的动物。一个使用 whatpu 这个词的句子的例子是:
我们在非洲旅行时看到了这些非常可爱的 whatpus。
“farduddle” 是指快速跳上跳下。一个使用 farduddle 这个词的句子的例子是:
输出:
当我们赢得比赛时,我们都开始 farduddle。
- 指定格式及所需的输出长度