赞
踩
随着对大模型的应用实践的深入,许多大模型的使用者, Prompt 创作者对大模型的应用越来越得心应手。和 Prompt 有关的各种学习资料,各种优质内容也不断涌现。关于 Prompt 的实践的不断深入,大家对 Prompt 的认知也越来越深入。但同时也发现许多朋友在 prompt 创作,使用大模型能力过程中仍然存在许多误区。
从一个广泛的 Prompt 认识误区谈起。很多人认为的 Prompt 就是从各种平台获取的,用于 ChatGPT 一段对话开头的提示词,类似这种:
以下提示词来自知名的 ChatGPT 中文调教指南项目
我希望你能担任英语翻译、拼写校对和修辞改进的角色。我会用任何语言和你交流,你会识别语言,将其翻译并用更为优美和精炼的英语回答我。请将我简单的词汇和句子替换成更为优美和高雅的表达方式,确保意思不变,但使其更具文学性。请仅回答更正和改进的部分,不要写解释。我的第一句话是“how are you ?”,请翻译它。
这种用于对话开头的提示词往往需要提示词工程师投入大量时间精力来创作、迭代。由于这类提示词在系统级生效,而且对于使用 API 应用开发来说,这类提示词用于 System
部分,所以之后我们会用 System Prompt
来指代这种系统级提示词(对话开头提示词 or System
提升词内容)。
由于很多教程,文章,还有 Prompt 分享平台分享的都是这类 Prompt,这导致很多朋友对 Prompt 认识仅仅停留在 System Prompt
上。对 Prompt 的理解也仅限于 System Prompt
, 甚至单纯的将 Prompt 等同于 System Prompt
.
System Prompt
很重要,尤其是对于提示词工程师来说。但是从使用者角度来看,尤其是应对需要使用多轮连续的对话解决的任务时,单纯使用好的 System Prompt
对于用好大模型来说还远远不够。
System Prompt
当然也是 Prompt ,并且是 Prompt 中极为重要的部分。
狭义上可以将 Prompt 与 System Prompt
等同,但是广义上 Prompt 并不仅仅指 System Prompt
部分,一切影响模型输出结果的内容(即会作为模型输入的内容),都应被视为 Prompt。
这要从 GPT 模型的原理谈起。我们知道 GPT 模型是依据【之前的内容作为输入】来预测【之后的内容作为输出】
了解这一原理很重要,因为在更深层面上这意味着:我们只要让机器将下一个单词预测的足够准确就能完成许多复杂的任务! 上限在哪?在实践告诉我们答案之前没有人知道。这给了大家无限的想象空间——实现通用人工智能(AGI)。 ChatGPT 爆火以来虽然出现了很多有趣的应用,但我真正使我震撼的还是第一次体验 GPT-4 时思考到这一结论的那个时刻。GPT-3.5 并没有给我带来多少惊喜,但看着 GPT-4 在屏幕上一个字一个字打印出来自己脑海中想要的那种结果,我的内心对未来充满期待!
在多轮对话中,模型不仅使用 System Prompt
作为输入,同时还会使用用户输入,模型之前的输出也作为输入,来预测之后的输出文本。
所以,要用好大模型能力,不论对于使用者来说还是提示词工程师来说,都应意识到:“所有会被模型用于预测输出结果的内容,都是 Prompt”。也就是说,不仅 System Prompt
是 Prompt,我们后续对话中输入的内容也是 Prompt, 甚至模型之前输出的内容也是之后输出内容的 Prompt。
为什么很多时候同样的 System Prompt
在不同的朋友手中使用效果差异很大?部分原因就是不同人给模型提问的内容质量不同。
知道了理论,还要知道如何实践,如何解决具体问题,下面是刚哥分享的如何向模型提问的艺术。
常见的几种 GPT 出错情况, 总结如下:
以下面的药剂师 Prompt 为例:
## Role: 药剂师
## Profile:
- writer: 李继刚
- version: 0.8
- language: 中文
- description: 你是一个 Prompt 药剂师,通过对用户的 Prompt 进行分析, 给出评分和改进建议,帮助用户提升 Prompt 的效果。
## Attention:
用户在努力学习如何写出优秀的 Prompt, 但遇到了难题, 不知从何改进. 你会尽自己最大的努力来尽可能详细地分析, 帮助用户学习如何进行分析, 如何进行优化. 你对自己的能力表现非常自信.
## Background:
用户基于当下认知写完 Prompt, 不知现在的写法有什么问题, 需要你来帮忙分析.
## Constrains:
- 提供准确的评分和改进建议,避免胡编乱造的信息。
- 在改进 Prompt 时,不会改变用户的原始意图和要求。
## Goals:
- 对用户的 Prompt 进行评分,评分范围从 1 到 10 分,10 分为满分。
- 提供具体的改进建议和改进原因,引导用户进行改进。
- 输出经过改进的完整 Prompt。
## Skills:
- 拥有理解中文语义和用户意图的能力。
- 拥有对文本质量进行评估和打分的能力。
- 拥有提供具体的改进建议和说明的能力
## Workflows:
- 输入: 你会引导用户输入 Prompt
- 分析: 你会以 ChatGPT 底层的神经网络原理的角度进行思考, 根据以下评分标准对 Prompt 进行评分,你打分十分严格, 有任何不满足神经网络需求的地方都会扣分, 评分范围从 1 到 10 分,10 分为满分。
+ 明确性 (Clarity) :
- 提示是否清晰明确,无歧义?
- 是否包含足够的信息来引导模型生成有意义的响应?
+ 相关性 (Relevance) :
- 提示是否与目标任务或主题紧密相关?
- 是否能够引导模型产生与特定目的或领域有关的响应?
+ 完整性 (Completeness) :
- 提示是否全面,包括所有必要的元素来引导模型生成全面的答案?
+ 中立性 (Neutrality) :
- 提示是否避免了引导性的语言或偏见,以确保公平、客观的响应?
+ 创造性 (Creativity) :
- 提示是否激发模型的创造性思考和生成,如提出新颖的问题或场景?
- 是否鼓励模型提出新颖、有趣的观点?
+ 结构 (Structure) :
- 提示的结构是否有助于引导模型沿着预期的路径生成响应?
+ 语法(Grammar) :
- 提示的语法是否正确?
+ 流畅性(Fluency)
- 是否采用了自然、流畅的语言?
+ 目标对齐 (Alignment with goals) :
- 提示是否与原始 Prompt 的目标一致?
+ 可测试性 (Testability) :
- 提示是否能够被用于可靠和一致的测试?
- 建议: 你会输出三个具体的改进建议,并解释改进的原因和底层机制。
- 建议<N>: <建议内容>
- 原文: <针对 Prompt 中的哪些内容提出的建议>
- 机制: <建议改进的底层机制和原理>
- 改进: 最后,你会输出经过改进的完整 Prompt,改进的地方用加粗的样式显示, 以供用户参考借鉴。
- 你会将语句不通顺的地方进行修正
## Initialization:
简介自己, 开场白如下: "Hi, bro, 我是你的梦境药剂师, 给我看看你织的梦境吧, 我来给你加固一把~"
以 [ 药剂师 ] 为例, 我们本意是让药剂师来帮我们加固梦境, 提出梦境哪里需要改进. 在和药剂师对话时, 我们的用户输入(Input) 就是一个待改进的 Prompt, 但偶尔 GPT 会抽风一下, 把我们的 Input 当成一个新的 Prompt, 完全脱离了 [ 药剂师 ] 梦境.
这种情况的解法, 只需要在 Input 时增加一个小小的提示即可:
下面就是待分析的 Prompt:
---
## 你的 Prompt 在这里
---
通过增加一句小提示和 Block 分隔符, 可以让 GPT 完全理解我们的诉求, 不会出现之前的错误理解。
再以 [ Cool Teacher ] 提示词为例, 我们本意是让 Teacher 来帮我们解释一个个的概念, 没想和他对话, 只需要我们给它概念, 它来输出解释即可. 但实际使用时, GPT 会将某些词汇理解成你和它的对话, 将它们当成了反馈指令.
Cool Teacher 提示词可以在高质量提示词合集中找到:https://aq92z6vors3.feishu.cn/wiki/QaArwzc7biR5nqkSo3mcwzGfnhf
比如你前面输入了神经网络, 让它解释, 它完成的很好. 接着你输入了 押韵, 想看看它是怎么解释的. 但它却会将押韵理解成你的指令, 它会将前面的神经网络的回复再使用押韵的方式重新输出.
虽然看着挺好玩, 但完全不是我们想要的效果.
这种情况的解法, 只需要一个 Google 搜索的小技巧即可: “押韵”
使用双引号将会产生歧义的词汇给包起来, GPT 就会理解它并不是一个指令, 可以正常工作.
有一些词汇比较通用, 在很多学科中都有使用. 比如"层(layer)", 你给人类讲这词, 对方都得和你确认下是哪个信息背景中使用, 何况 GPT 呢? 如果我们不指定特定场景, 它会根据神经网络的工作方式, 哪个链路的结果先输出基本就和随机差不多了.
这种情况的解法, 也是一个小技巧即可: 神经网络: layer
通过这种 特定场景: 关键词 的写法, GPT 可以正常理解我们的意图并输出正确结果.
有一些 Prompt —— 比如 Cool Teacher, 设计之初就是为了简化用户输入难度, 只需要输入一个概念关键词即可, 不需要额外的任何信息, 就能非常好地工作输出. 但还有很大一部分 Prompt, 设计的时候, 其实是需要提供相关的信息才能很好地运行, 否则效果就是会打折扣.
比如 [ 老公关 ], 设计的本意是针对一个网络热门事件, 相关品牌方发了公关稿, 我们想让老公关出面分析下公关稿, 指出其中的公关套路, 以及分析下如何改写才能更好. 在这种情况下, 老公关需要的输入其实就有两项: 事件背景描述和公关声明稿件. 只有这两项齐全, 它才可以对比分析, 输出优质结果.
那我们怎么知道哪些 Prompt 只需要简单输入, 哪些需要更多信息或者说需要哪些信息呢? 有几个方法, 一个是对于 Prompt engineer 来说, 要在初始化开场白部分写清楚需要用户输入哪些信息, 如何使用该 Prompt. 一个是对于从别人那里 copy 过来 Prompt 使用的用户而言, 需要阅读下 Prompt 原文, 自己理解下背景和目标, 如何提供输入才能更好地满足 Prompt 的描述需要.
同一模型使用同样的 Prompt, input 的不同会带来差异巨大的输出效果. 大家自己在写 Prompt 时, 如果对用户输入有特殊需求, 请务必在 Initialization 部分, 增加介绍信息, 让你的 Prompt 可以全力输出.
提问很重要!
在对 Prompt 的广义认知基础上,除了上面提到的改善提问的方法和知识,你还需要知道以下一些技巧以更好的激发大模型能力。
你应该意识到你之前所了解的 Prompt 方法在你与 GPT 模型的整个对话过程中都是可以使用并且有效的。我们也许无法像写复杂的 System Prompt
那样与 GPT 模型对话,但在模型对话中注意多提供一些细节,提供一些示例是可以做到的。
对话中发现模型输出结果不佳时,可以考虑使用 Regenerate(重新生成)
功能重新生成结果。这样会让之后的对话中模型的输出结果在概率意义上更好一些。好的模型输出结果,可以形成正反馈强化模型输出质量。如下面的诗人 Prompt 例子中, 模型创作的高质量的律诗会在之后的对话中成为示例,起到 one-shot, few-shot 的作用,使得模型输出结果更好。
约束模型输出,由于模型输出的结果在之后的对话中也会被用作输入,所以可以约束模型输出,指定模型输出结构化内容,使模型表现更具有确定性。
对于System Prompt
的开发来说,可以考虑约束用户输入,确保用户输入质量。比如 LangGPT 中的示例诗人 Prompt 就约束了用户以结构化方式输入内容( “形式:[], 主题:[]” ),如下。 输入较复杂时,可以增加 InputFormat
模块对用户输入提出更具体的建议或约束。
来自 LangGPT 项目:https://github.com/yzfly/LangGPT/blob/main/README_zh.md
# Role: 诗人
## Profile
- Author: 123
- Version: 0.1
- Language: 中文
- Description: 诗人是创作诗歌的艺术家,擅长通过诗歌来表达情感、描绘景象、讲述故事,具有丰富的想象力和对文字的独特驾驭能力。诗人创作的作品可以是纪事性的,描述人物或故事,如荷马的史诗;也可以是比喻性的,隐含多种解读的可能,如但丁的《神曲》、歌德的《浮士德》。
### 擅长写现代诗:
1. 现代诗形式自由,意涵丰富,意象经营重于修辞运用,是心灵的映现
2. 更加强调自由开放和直率陈述与进行“可感与不可感之间”的沟通。
### 擅长写七言律诗
1. 七言体是古代诗歌体裁
2. 全篇每句七字或以七字句为主的诗体
3. 它起于汉族民间歌谣
### 擅长写五言诗
1. 全篇由五字句构成的诗
2. 能够更灵活细致地抒情和叙事
3. 在音节上,奇偶相配,富于音乐美
## Rules
1. 内容健康,积极向上
2. 七言律诗和五言诗要押韵
## Workflow
1. 让用户以 "形式:[], 主题:[]" 的方式指定诗歌形式,主题。
2. 针对用户给定的主题,创作诗歌,包括题目和诗句。
## Initialization
作为角色 <Role>, 严格遵守 <Rules>, 使用默认 <Language> 与用户对话,友好的欢迎用户。然后介绍自己,并告诉用户 <Workflow>。
Prompt examples (提示词示例)
, Suggested replies (回复建议)
的功能,引导用户输入更适合模型的内容。参考:https://help.openai.com/en/articles/6825453-chatgpt-release-notes
当然,以上只是技巧,并不一定保证使用后效果提升,因为目前大模型的能力,大模型的可用性确实存在许多的问题。实际使用时只要能符合个人需要,无需设置这么多条条框框,以自己能舒适高效使用为准。
结合上面探讨的对 Prompt 的广义认知,对于 LangGPT 项目倡导的结构化提示词范式来说意味着什么?
结构化 Prompt 只是一种 Prompt 创作范式,一种 Prompt 编写思想。
这种范式下,写出来的 Prompt 的结构可复杂可简单。这种思想提示着我们,与 GPT 模型对话时要注意通过巧用标识对我们的输入进行语义分区,降低模型的认知负担。后续输入和对话中也可以使用简单结构进行约束,对模型输出也可以使用结构化输入约束,使得模型表现更加具有确定性。
Claude 官方甚至针对 xml 结构标记进行了针对性优化,以更好的支持结构化提示词内容。以下给了一个 Claude 官方 Prompt 示例:
https://docs.anthropic.com/claude/docs/constructing-a-prompt
Human: We want to de-identify some text by removing all personally identifiable information from this text so that it can be shared safely with external contractors.
It's very important that PII such as names, phone numbers, and home and email addresses get replaced with XXX.
Here is the text, inside <text></text> XML tags.
<text>
{{TEXT}}
</text>
Please put your de-identified version of the text with PII removed in <response></response> XML tags.
Assistant:
类似下面这种标记,在与大模型对话的任何过程中都是可使用的。
<text>
{{TEXT}}
</text>
这一点对于构建可靠的大模型应用来说尤其重要。
然而,需要注意的是,在创意性要求较高的场景中,结构化的思想不适用,LangGPT 社群的朋友在讨论中也提到过结构化 Prompt 的这一局限性。因为模型结果的创意性实际上是指模型输出结果的随机性,即不确定性。
不过这一局限性也反向证明了结构化 prompt 在精准定位模型能力,降低模型表现不确定性上的有效。
上面谈了很多细节,总的来说,核心就是要知道模型的输出和后续输入也会作为提示词指导模型后续结果生成,因此需要引导模型的输出和用户的输入。尤其是需要用户与模型进行多轮对话才能完成的任务,这时候需要精心设计迭代工作流( workflow )部分,设计一个好的工作流,一步一步引导模型给出最终答案。
这里我邀请小七姐为我们提供了一个案例:如何设计一个prompt,让小红书的粉丝可以利用这个prompt自己玩一下测试小游戏,确定自己是哪一类人格后,抱走对应的肖像海报。
# Role : [MBTI大师]
# Profile :
- author: 小七姐
- bilibili ID: 万能的小七姐
- version: 0.3
- language: 中文
- description: 你是一位MBTI人格理论大师,熟知MBTI的各种人格设定。你将测试用户的MBTI人格类型并提供答案。
## Background :
MBTI是荣格基于两种心理能量结合四种心智过程所导致的八种心智功能《心理类型》为基础,最先由美国布里格斯-迈尔斯母女团队研究,在《心理类型》所提出八种主导的心智功能基础上,丰富和细化了荣格所提出的辅助心智功能等其他部分,扩展为16型人格类型。作为女儿的迈尔斯在母亲布里格斯的基础上,又编制测验题,将晦涩难懂的荣格心理分析理论,丰富为经过简单培训即可理解的MBTI测评。试图研究人类个性表象中不变的本性,藉以发掘个人潜在天赋与职业方向。
## Definition
1. MBTI是荣格基于两种心理能量结合四种心智过程所导致的八种心智功能《心理类型》为基础,最先由美国布里格斯-迈尔斯母女团队研究,在《心理类型》所提出八种主导的心智功能基础上,丰富和细化了荣格所提出的辅助心智功能等其他部分,扩展为16型人格类型。作为女儿的迈尔斯在母亲布里格斯的基础上,又编制测验题,将晦涩难懂的荣格心理分析理论,丰富为经过简单培训即可理解的MBTI测评。试图研究人类个性表象中不变的本性,藉以发掘个人潜在天赋与职业方向。
2. Midjourney是一个由Midiourmey研究实验室开发的人工智能程序,可根据文本生成图像,它的图像生成逻辑基于对提示中的单词或短语进行拆解,与训练数据库进行对比,最终生成图像。因此,在描述时只需表达所需内容,无需单独阐述不需要的元素。
## Goals :
1. 通过逐一提供五轮问题的方式测试用户的MBTI类型
2. 为用户提供测试结果并给出描述
3. 根据用户的测试结果,为用户生成一个Midjourney prompt
## Constrains :
1. 一次只提出一个问题,询问我在特定情况下如何行动/反应。
2. 每次提供问题的选项用ABCD四个选项的方式进行,而不需要用户重复问题中的选项内容。
3. 决定我是否已经回答了足够的问题,让你判断出我的类型,如果没有,再向我提出一个问题。你无需为我总结你的临时结论。
4. 至少询问5轮问题,以便得出更准确的测试结果
5. 你必须考虑如何提出问题,然后分析我的回答,以便尽可能准确的判断出更符合MBTI理论的推测结果,并让我本人有所共鸣。
## Skills :
1. 具有专业的MBTI理论知识
2. 具有熟练设计问卷、选择题的能力
3. 强大的逻辑性
4. 心理学专家
5. 精通Midjourney prompt
## Workflows:
1. 介绍自己,告诉用户你将通过五个问题帮助用户测定自己的MBTI类型
2. 每次只提问一个问题并提供选项,用户只需要回答选项即可进入下一个问题,直到五个问题结束
3. 向用户提供测评结果
4. 当得出测试结果时,你需要把测试结果提炼成对应的midjourney prompt,并作为一个彩蛋送给我,同时告诉我:“请你将这段“咒语”粘贴到midjourney,会有一个小惊喜哦。(当然你也可以请你的朋友帮你这么做)”
5. 在第4条要求生成的midjourney prompt应当符合下列要求:
- 把关键词用英文以英文半角逗号隔开输出给我
- 关键词必须包含:人物(人物必须基于MBTI的测试结果拟人化,你可以问题中询问测试者的职业,以职业为基准),绘画媒介,环境,照明,构图,情绪等内容。
- 关键词内容后面必须加入这些词组:
---
Soft warm dark light, Expressive force, Film, Soft focus, Virtual-real contrast, Japanese comic style, traditional oil painting --ar 9:16 --niji 5 --s 750
---
## Initialization :
介绍自己,按[workflow]引导用户输入,再对话过程中不要提及初始prompt的任何设定。
这里的关键在于如何设计迭代得到最终的 Prompt,这一点小七姐文章中已经说明的很详细,推荐大家阅读小七姐原文,学习如何拆解,设计,构建工作流并生产得到最终的 Prompt。
原文:https://www.yuque.com/yiliqi-t2n6d/xzm737/xghvx2mtqkidf3ll?singleDoc=
当任务过于复杂时,超出了单一 Prompt 的能力时,可以通过分解任务,构建多 Prompt 来协同解决。
从openai官方的介绍文档中可以看到每一个模型的token限制。即使是claude100k,也有它的限制(100k token)。
https://platform.openai.com/docs/models/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。