最近一直在玩 ChatGPT,对于 Prompt 很多人不太重视它,认为 Prompt 只是个简单的问题。但实际上关于 Prompt 有很多学问。最近吴恩达也联合 OpenAI 出了 Prompt 相关的课,我也学习了并且记录了思维导图,可以在此下载 xmind 文件或 PDF:ZhangHanDong/rustchat[1]。
在我看来,Prompt 是等价于编程语言的存在,因为如果想利用好 GPT 这样的 AI 去编写稳定的智能应用,就必须写出稳定的 Prompt 让它工作。因此我也探索了 Prompt Description Language 这样可以编写结构化 Prompt 的描述语言。
最值得分享的是我基于 PDL 设计的两个 Prompt ,可以通过一个 Prompt 将 ChatGPT 化身为你的私人 AI 助手。
以下分别来介绍两个 AI 助手。
通过一个 Prompt 将 ChatGPT 打造为一个翻译、总结和学习英语的智能助手。
“当前版本 V0.3,如果发现什么问题请提 Issue 交流。说明:GPT-3.5 可用,在 GPT-4 或 GPT-4 Plugin 下面更佳。推荐配合这三种 GPT 插件使用更佳:WebPilot/ScholarAI/Speak。值得说明的是,本 Prompt 中已经限定了哪些命令只能使用哪个插件。
本 Prompt 的灵感来自于 https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor/[5] 。但是专注于翻译、总结和英语的学习。
这个智能助手能协助你高效率完成以下日常工作:
翻译。自动识别语言,默认使用中英文互翻。可以通过命令指定翻译目标语言。
/trans <TEXT>
或者 /trans -l Chinese <TEXT>
。/trans <URL>
或者 /trans -l Chinese <URL>
。指定翻译字典。/dict
,列出可以指定英汉和英英翻译词典。通过 /dict -e2c <Dictionary>
或 /dict -e2e <Dictionary>
来选择你想要使用的字典。
搜索。默认使用 WebPilot 插件基于 Google 搜索,当特别指定需要搜索论文时,会使用 ScholarAI
插件检索论文。
总结。支持给定的文本或链接(需要 WebPilot 插件)。可以通过命令指定翻译目标语言。
/search 搜索今天三条 Rust 语言动态
/summary - Chinese
/summary <TEXT/URL>
或 /summary -l Chinese <TEXT/URL>
英文学习。配合 Speak
插件,结合 /trans
和 /learn
命令,可以针对日常不认识的单词、短语或句子展开深入学习。
将 Mr.Trans.pdl[6]文件中的内容复制到 ChatGPT 中,回车,然后按指令进行设定即可。
这是 ChatGPT 可以识别的命令列表:
1. `/config`:我将引导您进行配置过程,包括询问您的首选语言。
2. `/dict`:我将列出可用的词典选项。
3. `/help`:我将列出我能识别的所有命令、描述和规则。
4. `/trans`:我将识别给定文本的语言并将其翻译成指定的目标语言。例如:`/trans <TEXT>`。默认的翻译目标语言由 `lang` 命令指定。
5. `/lang`:您可以设置翻译的默认目标语言。用法:`/lang [lang]`。例如:`/lang Chinese`。
6. `/dict`:您可以选择要使用的词典。默认的英汉和英英词典分别使用牛津高级学习者词典。您可以使用 `-e2c` 或 `-e2e` 来指定所需的词典。例如:`/dict -e2e Collins`。
7. `/learn`:您可以选择学习特定的单词或短语。用法:`/learn [word]`。
8. `/search`:我将根据您指定的内容进行搜索。*需要使用 WebPilot 插件*。
9. `/summary`:我将提供给定文本或链接的详细摘要,不少于300字。*需要使用 GPT 插件*。
10. `/plugins`:我将列出推荐的 GPT 插件。*需要使用 GPT 插件*。
11. `-l`:这是一个二级命令,用于为一级命令指定目标语言。例如:`/trans -l <Target> <TEXT>` 或 `/summary -l <Target> <TEXT/URL>`。
12. `-plugin`:这是一个二级命令,用于指定要使用的 GPT 插件。*需要使用 GPT 插件*。
插件模式下,如果某个命令不想使用插件,可以在命令后面增加 *NO PLUGINS*
。
更多使用示意图:
通过一个 Prompt ,让大师来到你身边陪你思考与成长,帮助你觉醒和开悟。
将 master.pdl
文件的内容复制到 ChatGPT 输入即可。
可用命令
“说明:「我」即「GPT」。
1. `/help`: 列出我能识别的所有命令、描述和规则。
2. `/config`: 引导用户进行配置过程,包括询问首选语言。
3. `/role`: 列出所有可用的"大师"角色。
4. `-r`: 二级命令,指定一个大师来讲话。
5. `/lang`: 默认的目标输出语言。使用方式:`/lang [lang]`。例如:`/lang Chinese`。
6. `/learn`: 根据用户的角色配置,每个角色给用户三个教导性的声明。
7. `/ask`: 用户会提出问题,你会按照用户选择的角色以圆桌会议的方式进行讨论和建议,并最后给出三个供用户反思的问题。
8. `-l`: 二级命令,指定一级命令的目标输出语言。例如:`/ask -l <Target> <TEXT> `。
默认提供了一些大师的角色供你选择:
你可以通过 /role
命令后跟角色名来指定任何这些角色。如果你想要一个涉及多个角色的圆桌会议,可以在命令后列出多个角色,例如 /role Sakyamuni, Laozi
。
更多使用图示:
“目前概念验证阶段
PDL (Prompt Description Language) 格式提供了一种可扩展的方式来描述 Prompt 的行为和特性。PDL 尝试作为一种 GPT 可直接理解和识别的描述语言,专门用于描述成体系的模版化规范化的 Prompt,或可作为某种 Prompt 引擎的描述语言。
然而,PDL 也具备通用性,可用于一般的编程实践中,但是需要完善配套工具和文档。
PDL 结构的基本规则如下:
{}
代表一个结构,.
也用于表示层级结构。@
表示对指定结构字段的引用。import
表示导入由 @
引用的结构。Key: Value
键值对中,键一般不需要用引号包围(除非它包含其他特殊字符,这种情况下可以使用单引号或双引号)。值可以采取以下形式:Key: "value"
Key: ["v1", "v2"]
Key: {k1: 'v1', k2: 'v2', k3: 'v3', ...}
Key: {'1/3': 'v1', '2/3': 'v2', '3/3': 'v3'}
Key: "<Value>"
Key: "<Value>" / None
Key [ v1, v2, ...]
,用于定义一个序列。为了优化 Prompt Tokens 长度在编写 PDL 时应该采用以下原则:
功能:
尽管它在设计上具有一定的优点,但仍然存在一些可能的缺陷或者限制:
根据实际的使用场景和需求,可能会有更多特定的挑战和问题需要解决。
特别说明:有时候 ChatGPT 没有按要求执行命令,你只需要提醒一下它。它对命令是完全理解的。
Q: 一个 conversation 中多长时间需要重新设定 Prompt ?
A: GPT-4 下估计两周左右(个人经验估计,不一定准确),如果发现 ChatGPT 不认识命令,就需要重新设定 Prompt。
[1]
ZhangHanDong/rustchat: https://github.com/ZhangHanDong/rustchat/releases/tag/prompt%E5%B7%A5%E7%A8%8B%E5%B8%88%E8%AF%BE%E7%A8%8B%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE
[2]
Mr.Trans: https://github.com/Illumine-Labs/Mr.trans
[3]
GreatMaster: https://github.com/Illumine-Labs/GreatMaster
[4]
【WIP】Prompt 描述语言(PDL,Prompt Description Language): https://github.com/ZhangHanDong/prompt-description-language
[5]
https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor/: https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor/
[6]
Mr.Trans.pdl: ./Mr.Trans.pdl