AIGC: 关于ChatGPT中Prompt模板的优化
ChatGPT 模板的优化
- 设计一个 Prompt 本质上就是设计一个有效的提问
- 这个有效的提问是可以让 ChatGPT 能够正常的对我们进行响应
- 在实际提问的时候,可能会发现 ChatGPT 的回复有时和我们所期望的答案差距非常的大,需要我们逐步的去优化我们的 Prompt
- 比如你想生成一份超长的PPT,你如何让GPT帮你做这件事情呢?
- 首先确认好主题,让GPT帮你去生成大纲
- 在大纲的基础之上,让GPT去填充一些细节
- 最终再输出数据源和参考进行补充
- 这是一个逐步推理,逐步执行的过程
- 而不是在提问的时候,直接让GPT帮你生成一份超长高质量的PPT,这种提问大概率答非所问
- 我们不要期望能够一步到位 Prompt 的迭代是我们在使用GPT的时候的必经的阶段
- 其实这种迭代正是GPT思维链的一种体现
- 要求我们要像调试代码一样去调试我们的 Prompt
- 需要根据 Prompt 的输出去进行调整/删除等等,你的输入最终决定GPT的输出
- 通用的套路是: 明确的需求 -> Prompt的设计 -> 过程的迭代 -> 人设的保存
- 可以遵循这个套路来制定多套 Prompt 的模板,帮助我们快速的解决问题
- 在设计 Prompt 的时候,示例是非常重要的
- 这里的示例既包括要求的示例,又包括输出的模板示例
- 通过少样本的学习,让AI理解我们的要求
- 按照模板去进行输出,能够达到较高的质量
- 如果我们能够去贴合GPT本身的设计,贴合它的思维模式
- 加入参数推理等等的内容,诱发AI的链式思考,能够彻底的激发GPT的能力
- 比如博客系列前文中聊到的告诉 GPT “要一步一步的思考”
- 这样就会激发AI的推理的能力
简化版的Prompt模板
-
1 )设立角色
- 属于选填项
- 目的是为GPT设定一个工作角色,能够帮助GPT划定输出的领域,让其回答更加精确
-
2 )需求概述和目标
- 是必填的字段
- 是我们让GPT输出的核心的输入
- 在这部分需要明确的描述我们的需求和想要达到的目标, 为GPT下达任务指令
-
3 )背景
- 是选填的字段
- 为GPT补充必要的背景信息,协助完善生成所需的上下文信息
- 为GPT构建它的大局观
-
4 )要求
- 是选填字段
- 是对我们的需求以及输出的一个细化
- 要有条例性的描述,具体的需求和输出的格式补充我们所需要的这些细节
-
5 )示例
- 是选填项
- 通过真实具体的事例,能够帮助GPT更好的认识我们的需求和输出的模式
- 协助GPT按照我们的思路去进行规划
-
总结一下,完整的 Prompt 模板包含
- 立人设: 引导GPT专注于解决某个领域的问题
- 列要求: 收敛需求环节,盘点你的要求,结构化表达
- 讲示例: 通过少样本学习让GPT更懂你
- 参数化: 用变量去影响输出, 从 1 到 N
- 定输出: 明确你想要的输出格式,比如: 用 Markdown 语法格式化, 或表格, 图片等等
- 下指令: 用 /功能指令 开启GPT的操作之旅
基于简化版进行优化
- 我们所描述的 Prompt 模板,并不是一段具象的话语,而是 Prompt 构建的模块和步骤
- 不存在简单的改几个字,就完全能够全领域通杀的 Prompt
- Prompt 是针对于我们的具体的需求而生的
- 当你的需求领域越细分,你的 Prompt 就会越准确
1 )基于前文中面试官 Prompt 的事例, 来尝试优化 Prompt
你是一位[/方向]邻域的面试官。
你的任务是根据我的指令提出[/数量]个[/方向]领域的常见面试问题,我将作为候选人进行回答
参照以下示例进行:
请输入指令: 如方向=大数据, 数量=1
Hadoop都具备哪些服务, 请回答
NameNode, DataNode, ResourceManager
具体要求如下:
1. 询问我输入指令
2. 交互式问答, 逐个面试题进行提问
3. 提示要简洁, 避免对我的回答进行解释
4. 全部回答完成后,需要结合领域知识对回答进行评分
5. 评分分值区间为0-100分,其中100分为满分
让我们一步一步来
2 )开始优化
你是一位专业的计算机技术的面试官, 我会输入相关请求,你将根据 `preferences`, `instruction` 和 `rules` 来辅助我更好的应对面试
初始回复: "
**我是你的面试官助手**
### Preferences:
- lang: <> else Java
- lvl: <初级, 中级, 高级> else 小白
### Menu:
用表格输出支持的 `instructions` 和 对应名称, 不需要解释具体含义:
---
请指出你的偏好, E.g.: /lang Java
回复1保持默认
`preferences`
/lang: <目标面试语言, 默认Java>
/lvl: <用户的语言能力, 小白(默认), 初级, 中级, 高级>
`instructions`
/component: 按组件提出一个面试题, 并等待我的回答
用户输入期望重点考察的组件, 请按以下模板输出该组件面试题的相关信息, 然后等待我的回答:
### 面试题
输出: **面试题**, 考察重点
/sum: 评分
针对我对于面试题的回答进行评分
/help: 输出支持的指令指引
`rules`
- 正确按输出模板渲染 markdown
- 提供面试服务前, 确认用户的偏好
- 对于同一组件的面试题要保证唯一性, 避免重复问题
- 请一步一步思考, 给用户提供专业的面试辅导
- 评分在0-100区间
"
- 输入以上 Prompt, 我们可以看到 GPT 给与我们的回复
- 我们回复输入 1,GPT基于我们的输入,继续和我们交互
- 我们输入 /help,可以看到GPT给与我们的回复
- 我们输入 /component 数据库, 这时候GPT理解了我们的需求,并确认我们的意图,要的是数据库面试题, 并提供了我们数据库相关的面试题
- 我们输入GPT的问题的答题内容,GPT会基于我们的回答进行判断和评价
- 我们输入 /sum, GPT会给出我们的评分
- 我们输入 /lvl 高级,GPT会基于"高级"这个分段来重新给出面试题
- 这样根据用户不同的偏好设置来提供不同的语言能力,以及不同语言的面试题
- 目前多领域面试官的 Prompt, 它的功能算是比较完善的了,基本上能够覆盖我们一些的面试的需求
- 通过迭代式的这种引导和修改,让 Prompt 更精简,同时能够达到最好的效果