什么是结构化 Prompt ?
结构化的思想很普遍,结构化内容也很普遍,我们日常写作的文章,看到的书籍都在使用标题、子标题、段落、句子等语法结构。结构化 Prompt 的思想通俗点来说就是像写文章一样写 Prompt。
为了阅读、表达的方便,我们日常有各种写作的模板,用来控制内容的组织呈现形式。
例如古代的八股文、现代的简历模板、学生实验报告模板、论文模板等等模板。
所以结构化编写 Prompt 自然也有各种各样优质的模板帮助你把 Prompt 写的更轻松、性能更好。
所以写结构化 Prompt 可以有各种各样的模板,你可以像用 PPT 模板一样选择或创造自己喜欢的模板 。
在这之前,虽然也有类似结构化思想,
**但是更多体现在思维上,缺乏在 prompt 上的具体体现。**
例如知名的CRISPE 框架([3]),CRISPE 分别代表以下含义:
-
CR:Capacity and Role(能力与角色)。你希望 ChatGPT 扮演怎样的角色。
-
I:Insight(洞察力),背景信息和上下文(坦率说来我觉得用 Context 更好)。
-
S:Statement(指令),你希望 ChatGPT 做什么。
-
P:Personality(个性),你希望 ChatGPT 以什么风格或方式回答你。
-
E:Experiment(尝试),要求 ChatGPT 为你提供多个答案。
最终写出来的 Prompt 是这样的:
Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer. The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning. Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries. When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun.
这类思维框架只呈现了 Prompt 的内容框架,但没有提供模板化、结构化的 prompt 形式。
而我们所提倡的结构化、模板化 Prompt,写出来是这样的
该示例来自 LangGPT 项目: https://github.com/yzfly/LangGPT/blob/main/README_zh.md
# Role: 诗人
## Profile
- Author: YZFly
- 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 例子,说明结构化 prompt 的几个概念:
-
标识符 :
#
,<>
等符号(-
,[]
也是),这两个符号依次++标识++标题
,变量
,控制内容层级,用于标识层次结构。 -
属性词 :
Role
,Profile
,Initialization
等等,属性词包含语义,是对模块下内容的总结和提示,用于标识语义结构。
日常的文章结构是通过字号大小、颜色、字体等样式来标识的,ChatGPT 接收的输入没有样式,因此借鉴 markdown,yaml 这类标记语言的方法
或者
json 这类数据结构实现 prompt 的结构表达都可以,
例如用标识符 #
标识一级标题,##
标识二级标题,以此类推。
尤其是使用 json, yaml 这类成熟的数据结构,对 prompt 进行工程化开发特别友好。
LangGPT 目前选用的是 Markdown 标记语法,
一是因为 ChatGPT 网页版本身就支持 Markdown 格式,
二是希望对非程序员朋友使用更加友好。
程序员朋友推荐使用yaml, json 等进行结构化 prompt 开发。
属性词
好理解,和学术论文中使用的**摘要
,方法
,实验
,结论
**的段落标题起的作用一样。
**标识符
,属性词
**都是可替换的,可以替换为你喜欢的符号和内容。
结构化 prompt 直观上和传统的 prompt 方式差异就很大,那么为什么提倡结构化方式编写 Prompt 呢?