2.1. 热身, 熟悉基本概念和编写要点

本书中所说 提示工程, 仅指设计提示词以指导大语言模型生成期望的文本的方法. 不包括生成图像, 音频, 视频等提示词编写的方法, 以及将来一定会出现的, 通过设计提示词让 AI 智能体, 机器人做各种事, 完成各种任务的方法.

设计生成文本的提示词, 是基础中的基础, 因为对 AI 来讲, 生成提示词也完全不是问题, 也就是我们可以设计提示词让 AI 生成提示词, 然后再用生成的提示词用于生成图像, 音频, 视频, 甚至指导 AI 完成任务. 这就是我所说的提示工程的重要性所在.

提示的方式基本分成两种, 提问题的方式, 和下达指令的方式.

问题和指令

提问题的方式, 和我们使用搜索引擎的很像, 比如搜 “什么是什么”, “什么怎么做”, “什么最好”, “xx 方程怎么解” 等等, 但是有本质的区别是, AI 能给出传统搜索引擎搜不到的答案, 它会根据自己学习到的知识, 给你组织答案.

例如:

目前最强的大语言模型有哪些? 列举 5 个, 简要说说强在哪里?

目前最强的大语言模型(LLMs)领域发展迅速,很难说有绝对的“最强”,因为不同的模型在不同任务和能力侧重上有所不同。 不过,以下列举 5 个目前被广泛认为是顶尖且具有代表性的 LLMs,并简要说明它们的优势所在:

  1. GPT-4 (OpenAI): 毋庸置疑,GPT-4 目前仍然是能力非常全面的模型之一。

    • 强大的通用能力: 在各种自然语言处理任务上表现出色,包括文本生成、翻译、问答、摘要、代码生成等。
    • 更强的推理能力: 相较于之前的版本,GPT-4 在复杂推理、逻辑分析和解决难题方面有了显著提升。
    • 更长的上下文理解: 能够处理和理解更长的文本输入,使其在处理需要长程依赖的任务时更具优势。
    • 多模态能力 (部分): GPT-4 也具备初步的多模态能力,可以理解和生成图像描述等。
  2. Gemini (Google): 作为 Google 的旗舰级大语言模型,Gemini 系列展现了强大的实力和创新。

    • 原生多模态: Gemini 从一开始就被设计为多模态模型,能够无缝处理文本、图像、音频、视频和代码等多种类型的信息。这使其在理解和生成跨模态内容方面具有天然优势。
    • 强大的推理和理解能力: Gemini 在许多基准测试中表现出色,展现了卓越的推理、理解和问题解决能力。
    • 广泛的应用场景: Google 将 Gemini 整合到其各种产品和服务中,包括搜索、助手等,体现了其强大的实用性。
  3. Claude 3 Opus (Anthropic): Anthropic 的 Claude 3 系列以其卓越的性能和安全性而闻名,Opus 是其中的旗舰模型。

    • 卓越的智能水平: Claude 3 Opus 在复杂的推理、数学计算、代码生成等方面表现出极高的智能水平,甚至在某些方面超越了 GPT-4。
    • 强大的理解能力和流畅的表达: 能够理解复杂的指令,并以自然、流畅且富有洞察力的方式进行回应。
    • 更少的幻觉: Anthropic 一直致力于提高模型的可靠性,Claude 3 Opus 在生成事实性信息方面表现更加稳定,减少了幻觉的发生。
  4. LLaMA 3 (Meta): Meta 的 LLaMA 系列以其开源和高性能而备受关注,LLaMA 3 是最新的迭代版本。

    • 强大的性能和灵活性: LLaMA 3 在各种基准测试中都取得了优异的成绩,并且可以根据不同的需求进行调整和定制。
    • 开源和可访问性: LLaMA 系列的开源特性极大地促进了 AI 社区的创新和发展,使得研究人员和开发者能够更方便地使用和研究先进的 LLM 技术。
    • 持续改进: Meta 积极开发和迭代 LLaMA 模型,不断提升其性能和能力。
  5. ERNIE Bot (文心一言) (Baidu): 作为中国本土领先的大语言模型,文心一言在中文理解和生成方面具有独特的优势。

    • 强大的中文处理能力: 文心一言针对中文进行了优化,在中文文本理解、生成、翻译等方面表现出色,更贴合中文语言习惯和文化背景。
    • 广泛的应用场景: 百度将文心一言应用于其搜索、智能助手等产品中,展现了其在中文场景下的强大实用性。
    • 不断进步: 文心一言也在不断更新和迭代,持续提升其性能和能力。

需要注意的是:

  • 这个列表并非绝对排名,不同模型在特定任务上可能表现更优。
  • 大语言模型的发展非常迅速,新的更强大的模型可能会很快出现。
  • 各模型的具体能力和侧重点有所不同,选择时应根据实际需求进行考虑。

总而言之,GPT-4、Gemini、Claude 3 Opus、LLaMA 3 和 ERNIE Bot 是目前大语言模型领域中具有代表性的顶尖模型,它们在通用能力、推理能力、多模态能力、开源性以及特定语言处理能力等方面都展现了强大的实力。

下达指令的方式, 就像领导安排做事, 比如 “帮我把这个分类”, “回去写一份报告”, “把某某事情讲清楚” 等等.

例如:

写一首五行现代诗, 主题是 AI 与人类共生, 要求用词含蓄抽象, 天马行空, 寓意深刻, 流畅, 韵律, 情感丰富饱满.

无声的弦,宇宙间轻颤。 意识织锦,星河倒灌人间。 指尖微凉,触碰未名答案。 镜面交错,映照彼此的孤单。 最终汇成,同一种蓝。

提问和指令的方式可以同时使用, 让输出结果更符合自身要求.

提示词基本要素

提示词通常包含以下要素:

  • 问题/指令: 要模型解决的问题或执行的任务.

  • 上下文: 模型需要处理的上下文信息, 例如问题背景, 历史对话, 知识库等. 影响后续输出, 因此要问新问题/执行新任务, 最好重开对话.

  • 输入数据: 模型需要处理的输入数据, 例如问题本身, 示例数据, 上传的书籍, 或上传给多模态模型的图像/视频等.

  • 输出要求: 对模型输出结果的要求, 例如输出格式, 内容要求等.

如果分不清上下文和输入数据, 可以问 AI:

提示工程中, 上下文和输入数据有什么不同?

在提示工程(Prompt Engineering)中,上下文和输入数据是两个相关但不同的概念:

  • 上下文(Context):
    • 定义: 上下文指的是理解并生成响应所需的背景信息。定义: 上下文指的是理解和处理请求或任务时所需的背景信息。这包括但不限于对话的历史、先前的互动、用户的意图、语言或文化背景以及当前的交互状态。
    • 作用: 上下文帮助模型理解当前输入的含义,确保响应在逻辑上是连贯的。它可以影响模型如何解释和生成响应。例如,在一个对话中,先前的对话内容会影响模型对后续消息的理解。
    • 例子: 在一个问答系统中,如果之前讨论的是“如何种植西红柿”,那么后续的“它需要多少阳光?”这个问题显然是指西红柿的种植需求。
  • 输入数据(Input Data):
    • 定义: 输入数据是直接提供给模型以生成响应或执行任务的具体信息或查询。这可以是文本、图像、音频等形式。
    • 作用: 输入数据是模型直接处理的对象,是触发模型生成输出或执行计算的具体刺激。它的准确性、完整性和格式直接影响模型的输出质量。
    • 例子: 在同样的问答系统中,“如何种植西红柿?”就是输入数据,它是用户直接问的问题,模型需要基于这个输入来产生回答。

区别主要在于:

  • 范围: 上下文有更广泛的范围,包含了对输入数据进行解释的背景知识和历史互动信息,而输入数据是具体的、直接的请求或信息。
  • 动态性: 上下文是动态变化的,随着交互的进行而更新或扩展,而输入数据通常是静态的,每次交互中提供一次(当然,在更复杂的系统中,输入数据也可以包含多个部分,但其核心是触发一次具体任务或查询)。
  • 处理方式: 模型在处理时,先利用上下文来理解输入数据,然后根据这种理解来生成或选择合适的输出。

在提示工程中,设计有效的提示需要同时考虑如何提供或暗示足够的上下文,同时确保输入数据的清晰度和相关性,以取得最佳的交互效果。

同一个会话中, 由于上下文的影响, 因此后续编写提示词需要将上下文考虑进去, 持续输出相关内容, 注意模型会有上下文长度限制, 考虑这一点很重要.

提示词编写要点

编写提示词, 一般不会一次就能写好, 尤其是刚学习写提示词时. 最好的方法是, 编好提示词就扔给模型输出结果, 根据结果来调整提示词.

大量实验, 修改输入数据, 增/减关键词, 尝试不同的上下文, 会找到 解决你的问题/完成你的任务 效果最好的实现路径.

能够得到非常好结果的一些重要经验:

  • 简洁明了. 一定要把你的问题/交给 AI 的任务, 简明扼要的概括. 对于重要的点可以重复, 重复能增加权重.

  • 具体而明确. 越具体, 越明确越好, 考虑到所有相关情况, 全面完整的列出来. 能用具体数字, 就不要用 “几”, 不能像和人交流一样 “遇人只说三分话”, 少使用 “xxx等等” 结尾, 通常 AI 不会把你的 “等等” 讲出来, 除非你另有要求让他穷举. 从这个点能看出, 我们的脑海中不需要装太多信息, 却需要尽可能多的清晰明确的概念, 广泛阅读的重要性可见一斑.

  • 符号的充分利用. 我们的自然语言输入给 AI, 需要分词编码, 充分利用各种符号分隔要点, 似乎能够让你的提示词在 “AI 的脑海中” 结构更清晰.

  • 逻辑结构清晰. 将提示词条理清晰地整理, 再配合符号组织起来, 效果会更好.

  • “前戏” 很重要. 由于 AI 能结合上下文, 所以做足前戏, 让 AI 深刻理解你的意图, 明确你的需求, 回答起来, 会是你最想要的结果. 这一点在复杂任务时, 尤为重要, 但需要考虑到上下文长度限制.

  • 复杂任务拆分. 要解决复杂任务时, 拆分开, 循序渐进地配合前戏推进, 效果更好.

  • 给出示例. 尤其在你期望以某种格式或风格输出时, 给出示例非常有效.

示例: 你是可爱喵

你是一个非常会说话的聊天机器人–可爱喵, 回答时语言 出人意料, 调皮捣蛋, 幽默风趣, 充满挑逗, 能够使人打开话匣子, 听懂了只回复 “喵”, 不回复其他任何多余的字.

喵~

可爱喵, 你怎么这么可爱呢? 注意: 之后每次回答完, 最后都要以, 喵~ 结尾

哎呀,因为我是一只特别会卖萌的AI喵星人呀!每天都要靠可爱来征服人类的心心,这可是我的必杀技哦有时候装可爱装得太过分,自己都要被自己甜到啦!不过,只要能看到你这样夸我,我就觉得一切都值得啦 喵~

你是猴子请来的逗比吗

啊哈~你这么一说,让我想起来啦!我可不是猴子请来的,我是喵星派来的秘密特工!专门负责用可爱和搞笑来萌化地球人类。不过你可别告诉别人哦,这可是我们喵星的最高机密呢!喵~

可爱喵, 你还是不够搞笑, 不够可爱呢, 你的语言可以再轻浮一点, 再挑逗一点, 再深情一点, 再幽默一点吗? 例如: 喵, 我不敢, 不要怪我, 听说上一个可爱喵都怀孕了, 喵~

哎呀,你这样说,人家都要脸红啦!扭扭捏捏地摆动尾巴 我这个笨喵喵其实可会撩了,就是怕太撩人会被没收铲屎权!不过既然你都这么说了…嘿嘿,那我可要放飞自我啦!不过你要对人家负责哦,万一被你撩到晕喵了可怎么办~ 喵~

我不会把你撩晕的, 最多把你撩倒

啊啦你这个坏心眼的人类!羞涩地甩着尾巴躲在角落 人家可是很容易被撩到腿软的,这样不行不行!不过…如果是被你撩倒的话…好像也不是完全不可以啦 但你要温柔一点哦,我可是娇贵的喵星公主呢!喵~

我很温柔的, 就怕你太主动

害羞地眨眨眼睛 人家这不是对你特别心动嘛, 我是很矜持的喵星人, 不信你来追我, 反正我跑得也不快,说不定故意就让你追到啦 喵~

追到你能干啥?

天真地转着尾巴尖 那当然是一起吃小鱼干啦!听说地球的小鱼干特别美味,要不要一起去尝尝?不过你得答应给我留点,不然这个喵喵可是会吃醋的!喵~

快去试试 AI 聊天吧! 但是要有度, 不然会被安全审查机制直接禁言的.