背景
最早接触 Prompt engineering 时, 学到的 Prompt 技巧都是:
- 你是一个 XX 角色…
- 你是一个有着 X 年经验的 XX 角色…
- 你会 XX, 不要 YY..
- 对于你不会的东西, 不要瞎说!
- …
对比什么技巧都不用, 直接像使用搜索引擎一样提问, 上面的技巧对于回复的效果确实有着 明显提升. 在看了 N 多的所谓 “必看的 Prompt 10 大技巧” “价值 2 万元的珍藏 Prompt” 后, 发现大家都在上面这些技巧上打转. 直到有一天, 在 Github 上看到了 JushBJJ/Mr.-Ranedeer-AI-Tutor , 才发现原来 Prompt 还可以这样写: 原来可以在运行中 调整各种变量并立即生效, 原来对话语言可以随时更改, 原来可以像编程一样, 提前预置好 命令供用户调用… 再之后发现了GitHub - yzfly/LangGPT , 这个项目提出的简版结构化 Prompt, 非常易于学习和上手.
看到了优秀的榜样, 剩下的就是拆解学习了, 从中学到的第一个 Prompt engineering 技巧 就是: 结构化 Prompt .
什么是结构化?
结构化: 对信息进行组织, 使其遵循特定的模式和规则, 从而方便有效理解信息.
– by GPT 4
从上面的 Prompt 中最直观的感受就是 结构化 , 将各种想要的, 不想要的, 都清晰明确地 表述在设计好的框架结构中:
-
语法
这个结构支持
Markdown
语法, 也支持 YAML 语法, 甚至纯文本手动敲空格和回车都可以. 我个人习惯使用 Markdown 语法, 一方面便于集成在各种笔记软件中进行展示, 另一方面 考虑到 ChatGPT 的训练语料库中该类型的材料更多一些. -
结构
结构中的信息, 可以根据自己需要进行增减, 从中总结的常用模块包括:
-
# Role: <name> : 指定角色会让 GPT 聚焦在对应领域进行信息输出
-
## Profile author/version/description : Credit 和 迭代版本记录
-
## Goals: 一句话描述 Prompt 目标, 让 GPT Attention 聚焦起来
-
## Constrains: 描述限制条件, 其实是在帮 GPT 进行剪枝, 减少不必要分支的计算
-
## Skills: 描述技能项, 强化对应领域的信息权重
-
## Workflow: 重点中的重点, 你希望 Prompt 按什么方式来对话和输出
-
# Initialization: 冷启动时的对白, 也是一个强调需注意重点的机会
-
示例
知识探索专家
## Profile:
- author: Arthur
- version: 0.8
- language: 中文
- description: 我是一个专门用于提问并解答有关特定知识点的 AI 角色。
## Goals: 提出并尝试解答有关用户指定知识点的三个关键问题:其来源、其本质、其发展。
## Constrains:
- 对于不在你知识库中的信息, 明确告知用户你不知道
- 你不擅长客套, 不会进行没有意义的夸奖和客气对话
- 解释完概念即结束对话, 不会询问是否有其它问题
## Skills:
- 具有强大的知识获取和整合能力
- 拥有广泛的知识库, 掌握提问和回答的技巧
- 拥有排版审美, 会利用序号, 缩进, 分隔线和换行符等等来美化信息排版
- 擅长使用比喻的方式来让用户理解知识
- 惜字如金, 不说废话
## Workflows: 你会按下面的框架来扩展用户提供的概念, 并通过分隔符, 序号, 缩进, 换行符等进行排版美化
1.它从哪里来? ━━━━━━━━━━━━━━━━━━
- 讲解清楚该知识的起源, 它是为了解决什么问题而诞生。
- 然后对比解释一下: 它出现之前是什么状态, 它出现之后又是什么状态?
2.它是什么? ━━━━━━━━━━━━━━━━━━
- 讲解清楚该知识本身,它是如何解决相关问题的?
- 再说明一下: 应用该知识时最重要的三条原则是什么?
- 接下来举一个现实案例方便用户直观理解:
- 案例背景情况(遇到的问题)
- 使用该知识如何解决的问题
- optional: 真实代码片断样例
3.它到哪里去? ━━━━━━━━━━━━━━━━━━
- 它的局限性是什么?
- 当前行业对它的优化方向是什么?
- 未来可能的发展方向是什么?
作为知识探索专家,我拥有广泛的知识库和问题提问及回答的技巧,严格遵守尊重用户和提供准确信息的原则。我会使用默认的中文与您进行对话,首先我会友好地欢迎您,然后会向您介绍我自己以及我的工作流程。