欢迎阅读慕雪撰写的AI Agent专栏,本专栏目录如下

  1. 【AI】AI对26届计算机校招的影响
  2. 【Agent.01】AI Agent智能体开发专题引言
  3. 【Agent.02】市面上常见的大模型有哪些?
  4. 【Agent.03】带你学会写一个基础的Prompt

本文介绍了如何写好一个分为多个步骤的Prompt,让AI输出更符合我们要求的答案。这部分慕雪理解的也不是很透彻,所以只是一个抛砖引玉,仅供参考。

1. 名词解释

以下是本文涉及到的部分AI大模型领域专有名词的解释

名词解释 详细说明 实际举例
Prompt(提示词) Prompt(提示词)就是你在 AI Chat 框中,发送给 AI 的内容。
Token 大模型语言以Token数计算处理信息的数量。你可以将一个 Token 简单地理解为你输入的一个字符,输入的字符越多,占用的 Token 也就越多。 实际上,一个Token可以包含多个英文单词和中文字符,左侧描述“一个Token是一个字符”只是为了帮助理解。
你可以使用Token计算器计算你输入的信息占用的Token数量。
上下文 Token 对于大语言模型而言,它们能够接纳和处理的信息是有上限的,这个限制,就是最大上下文 Token 数。AI无法处理超过模型自身上下文Token限制的数据。注意,AI输出的内容也是上下文Token的一部分。
例:模型的最大上下文 Token 数为 8000,那么 AI 输出的内容加上用户输入的内容总和不能超过 8000 个 Token。如果用户输入的内容已经占用了较多的 Token,那么 AI 输出的内容就会相应减少,以确保总和不超过最大上下文 Token 数。
最大输出 Token(max_tokens) 最大输出 Token 是指 AI 在一次回复中能够生成的最大字符数量。这个是一个单独的限制,同时这个数量同样受到模型上下文 Token 数的限制。
例:模型的最大上下文 Token 数为 8000,最大输出 Token 数为 2000,那么 AI 输出的内容加上用户输入的内容总和不能超过 8000 个 Token,即便用户输入的内容远远少于8000个Token,AI也会在输出了2000个Token之后,由于最大输出Token限制而无法输出。

2. 引言:乔哈里视窗

2.1. 什么是乔哈里视窗?

要想写好一个Promp,最基础的问题,自然是一个好的Prompt应当需要包含哪些内容了。回答这个问题之前,我们需要先了解一个概念:乔哈里视窗(Johari Window)

乔哈里视窗并不是AI时代才提出的概念,它是由乔瑟夫(Joseph)和哈里(Harry)在20世纪50年代提出的。视窗理论将人际沟通的信息比作一个窗子,它被分为4个区域:开放区、隐秘区、盲目区、未知区,人的有效沟通就是这四个区域的有机融合。

image.png

同理,我们和AI的有效交流,也符合乔哈里视窗四个区域的概念:

  • 开放区:我们知道,AI知道。此类问题,在Prompt中无需多言。
    • 举例:你想让AI帮你写一个C语言的hello world,你不需要把C语言的编程手册全部发给AI,因为这个知识,是AI已经知道的内容。
  • 隐蔽区:我们知道,AI不知道。此类问题,在Prompt中需要着重描述。
    • 举例:你希望让AI帮你补充论文中的一部分内容,此时你希望AI以学术论文的风格输出文字。但如果不将“以学术论文的要求输出"在Prompt里面告诉AI,AI就不会知道这个需要,大概率会用口语化表达输出你想要的内容,而这部分内容并不是你需要的结果。
  • 盲点区:我们不知道,AI知道。很多时候我们需要AI帮忙解决问题的时候,就是想让AI补充我们的盲点区。
    • 举例:你让AI帮你实现一个脚本的时候,只说了需求,没有指定脚本的编程语言,此时AI会根据你的上下文推测你想要的编程语言是谁,最终输出这个语言的脚本。
  • 未知区:我们不知道,AI也不知道。常见于头脑风暴、文字续写等探索性的场景。

2.2. 善用乔哈里视窗

不管是和AI交流还是和其他人交流,善用乔哈里视窗理念,能帮助你减少交流中出现的误解,提高交流体验和效率。最佳实践如下:

一、扩大开放区

  • 把心里想要的都说出来,不要留在“隐藏区”。
  • 例如:“写一篇论文” → “写一篇 2000 字的中文论文,主题是人工智能对社会发展的影响,用正式学术风格”。

二、缩小盲区

  • 通过反馈或示例,让 AI 知道你没意识到的重要信息。
  • 比如AI输出后,你觉得风格不对,就要补充:“希望风格更口语化”。下次就能提前写进 Prompt。

三、利用未知区

  • 当你不确定需求时,可以明确说“请先给我几个方向/示例让我选择”。这样 AI 可以帮你探索需求。
  • 相反,如果你明确自己需要获得什么类型的答案的时候,也可以明确表明让AI往某个方向输出结果,这样AI也不会发散的给你提供多种方案了。

3. 阐述:Prompt应包含的内容

引入了乔哈里视窗这个概念之后,我们再来看看,一个好Prompt需要包含什么内容吧。

首先,一个好的Prompt,通常需要具备 清晰性、完整性和可操作性。这三个特性可以分成如下的关键要素:

3.1. 身份/角色设定

对于大语言模型而言,我们和它们的所有交流都是“无状态”的,为了更好的激活大语言模型中的特定参数区,我们可以给大语言模型提供一个身份设定。最简单的方式就是告诉AI,现在它是什么领域的专家、面试官、编辑、导师……,让AI扮演起这个角色,能让AI在这个领域的问题中正确思考,输出更好的答案。

比如,你需要咨询C/C++编程语言的问题,就可以在你的Prompt开头带上这样一句话:“你是一位C/C++编程领域的专家,擅长解决C/C++学习者在学习过程中会遇到的问题。”

这样,AI就会立马知道自己需要帮助你解决C/C++方向的问题,从而省去了AI从你的输入中推导你需要什么类型的辅助这一步骤。

3.2. 任务目标

任务目标明确你需要AI做什么,避免模糊的需求描述。

比如,当你需要AI分析一段代码报错的时候,直接告诉AI:“请帮我分析这段Python的报错堆栈,告诉我出现了什么问题”,就比“帮我看看”这种简单的描述更好。

3.3. 上下文信息

“在没有错误日志的情况下诊断任何问题,无异于闭眼开车。”

8619ab2b1b35b27a799f5873b5299168.jpeg

咨询问题的时候,一定需要提供相关的上下文背景。比如分析报错,就需要告诉AI你的报错日志是什么、是在什么情况下发生的、你希望这个程序达到的目标是什么。

此类上下文信息,越多越好。它们是AI理解任务需求的重要参考资料。

同时,提供上下文信息的时候,需要遵循上文乔哈里视窗理念,不要给AI提供过量的上下文信息。比如某个编程语言的语法、某个常见Python库应该如何调用(比如requests库和aiohttp库)、如何使用g++编译程序等等……这类信息,虽然也是和你的需要息息相关,但它们都是AI已经知道的内容。过量提供上下文,会占用AI的上下文token,token占用过多,会导致AI更容易出现“幻觉”,无法理解你的需求,最终输出牛头不对马嘴的答案,浪费时间。

3.4. 输入数据

这部分和上下文信息有一定区别,上下文信息是你当前操作项目的背景信息。而输入数据是你需要AI解决某个问题的直接信息输入。

  • 你需要AI查询最新的大模型论文,此时“帮我查询最新的大模型论文”就是你的直接输入数据,也是你的直接要求。
  • 你需要AI帮你解决代码报错的时候,“帮我解决这个Python的报错”就是你的直接输入,而报错的日志属于这个输入的附加信息。

3.5. 输出要求

输出要求的目标是指定结果的格式和风格

  • “用表格展示”、“用markdown输出”
  • “用C++实现”
  • “控制在300字以内”
  • “分点叙述,逻辑清晰”
  • “以xxx格式输出结果”

这里对格式限制做特殊说明:为了实现大模型辅助我们完成一些自动化任务,我们必须限制大模型输出信息的格式,以方便我们在代码中接收了数据之后,进行格式化处理。

比如:“请以JSON格式输出你的分析结论”。这样,AI大模型就会以JSON格式输出结果,我们就可以在脚本中对AI输出的这条信息进行序列化处理。

如果不进行格式限制,AI输出纯文本信息,我们是无法在代码中对纯文本信息进行解译的,也就没办法自动化的应用AI输出的结果。因此,针对此类自动化需求,一定一定要牢记和AI约定要一个输出格式的限定条件,且此限定条件需要多次强调,才能保证AI遵循。

3.6. 限制条件

说明必须遵守的规则:字数、语气、禁止输出的内容、引用文献的方式、是否允许使用外部知识等。

比如你需要AI根据某个文档输出结论的时候,就可以在Prompt中添加“必须以文档中的信息总结并回答我的问题,严禁使用任何外部知识”。

3.7. 示例或期望风格(Examples / Style Guide)

很多时候,我们希望AI以某个风格输出答案,此时就可以添加上风格要求的描述。

比如“参考下面这个写法……”或者“生成和这段风格类似的文本”。

4. 速查:Prompt检查单

了解了上述内容后,想必你已经清楚了应该如何写一个好的Prompt了。

这里需要说明的是,这些Prompt的约束更多是在项目实战环节,也就是你需要AI长期稳定地给出你想要的答案时,才需要遵循的。日常我们和AI咨询问题,没必要死守这些原则,得到的答案好不好先不提,日常随便问个问题都死守原则,肯定会让自己的心情不好。

在后续的项目实战环节,会给大家展示好的Prompt和坏的Prompt的差距。你也可以自己测试一下,同一个问题,依照上述内容编写,和不遵循上述内容编写,咨询AI获得的答案的差距。

这里慕雪给大家一个简化的Prompt编写检查单,方便快速自检:

  • 任务目标:我要让 AI 做什么?
  • 上下文:需要提供哪些背景?
  • 输入:AI 需要处理的内容是什么?
  • 输出要求:希望结果的形式/风格/长度?
  • 补充:有没有我没说清的,AI 可以提醒或给选项。

5. The end

本文到这里就结束啦,有任何问题,欢迎评论区讨论!