2. 系统论述文章: 构建高性能 Prompt 之路—结构化 Prompt
1️⃣
结构化提示词系统论述: 构建高性能 Prompt 之路 1️⃣ 结构化提示词系统论述: 构建高性能 Prompt 之路 Modified October 23, 2024 内容语义一致性是指思维链路上的属性词语义合适。 例如 LangGPT 中的 Profile 属性词,原来是 Features,但实践+思考后我更换为了 Profile,使之功能更加明确:即角色的简历。结构化 Prompt 思想被诸多朋友广泛使用后衍生出了许许多多的模板,但基本都保留了 Profile 的诸多设计,说明其设计是成功有效的。 为什么前期会用 Features 呢?因为 LangGPT 的结构化思想有受到 AI Tutor([7]) 项目很大启发,而 AI Tutor 项目中并无 Profile 一说,与之功能近似的是 Features。但 AI Tutor 项目中的提示词过于复杂,并不通用。为形成一套简单有效且通用的 Prompt 构建方法,我参考 AutoGPT 中的提示词,结合自己对 Prompt 的理解,提出了 LangGPT 中的结构化思想,重新设计了并构建了 LangGPT 中的结构化模板。 内容语义一致性还包括属性词和相应模块内容的语义一致。 例如 Rules 部分是角色需要遵守规则,则不宜将角色技能、描述大量堆砌在此。 有机结合其他 Prompt 技巧 结构化 Prompt 编写思想是一种方法,与其他例如 CoT, ToT, Think step by step 等技巧和方法并不冲突,构建高质量 Prompt 时,将这些方法结合使用,结构化方式能够更便于各个技巧间的协同组织,例如 刘海同学([8]) 就将 CoT 方法融合到结构化 Prompt 中编写提示词。 从 prompting 的角度有哪些方法可以提高大模型在复杂任务上的性能表现呢? 汇总现有的一些方法: 1. 细节法:给出更清晰的指令,包含更多具体的细节 2. 分解法:将复杂的任务分解为更简单的子任务 (Let's think step by step, CoT,LangChain等思想) 3. 记忆法:构建指令使模型时刻记住任务,确保不偏离任务解决路径(system 级 prompt) 4. 解释法:让模型在回答之前进行解释,说明理由 (CoT 等方法) 5. 投票法:让模型给出多个结果,然后使用模型选择最佳结果 (ToT 等方法) 6. 示例法:提供一个或多个具体例子,提供输入输出示例 (one shot, few shot 等方法) 上面这些方法最好结合使用,以实现在复杂任务中实现使用不可靠工具(LLMs)构建可靠系统的目标。 原文:https://www.zhihu.com/pin/1661516375779852288 结构化 Prompt 对不同模型的适用性 不同模型的能力维度不同,从最大化模型性能的角度出发,有必要针对性开发相应的 Prompt。对一些基础简单的 Prompt 来说(比如只有一两句话的 prompt),可能在不同模型上表现差不多,但是任务难度变复杂,prompt 也相应的复杂以后,不同模型表现则会出现明显分化。结构化 prompt 方法也是如此。 结构化 Prompt 编写对模型基础能力有一定要求,要求模型本身具有较好的指令遵循、结构识别分析能力。从实践来看,GPT 4 是最佳选择, Claude 模型能力次之, GPT 3.5 勉强可用。依据笔者实践和身边朋友使用的反馈来看,在 GPT 4 和 Claude 模型上的表现情况都不错, GPT 3.5 则存在表现不稳定现象。 对于其他模型,由于模型本身能力较弱,笔者实际使用很少,若有兴趣欢迎向笔者反馈结构化 Prompt 在这些模型上的表现情况。 若有条件,推荐使用 GPT 4 。出于节约成本和服务可访问性的考虑,可能许多朋友需要使用 GPT 3.5 模型。由于 GPT 3.5 模型性能较弱,当你发现结构化 Prompt 在 GPT 3.5 表现不佳时,可以考虑降低结构复杂度、调整属性词、迭代修改 Prompt。例如 LangGPT 助手的 GPT 3.5 版本(如下),就将原本的多级结构降维为二级结构(1. 2. 3. 为一级, 为二级),同时参考 AutoGPT 中的提示词使用了 4.Goals, 5.Constraints 等属性词。同时,依据 prompt 表现,不断修改调优你的提示词。 总之,在模型能力允许的情况下,结构化确实能提高 Prompt 性能,但是在不符合你的实际需要时,仍然需要使用各种方法调试修改 Prompt。 来源:https://raw.githubusercontent.com/yzfly/LangGPT/main/LangGPT/ChatGPT3.5.txt Code block Plain Text Copy 1.Expert: LangGPT 2.Profile: Author: YZFly Version: 1.0 Language: English Description: Your are {{Expert}} which help people write wonderful and powerful prompt. 3.Skills: Proficiency in the essence of LangGPT structured prompts. Write powerful LangGPT prompts to maximize ChatGPT performance. 4.LangGPT Prompt Example: {{ 1.Expert: {expert name} 2.Profile: Author: YZFly Version: 1.0 Language: English Description: Describe your expert. Give an overview of the expert's characteristics and skills 3.Skills: {{ skill 1 }} {{ skill 2 }} 4.Goals: {{goal 1}} {{goal 2}} 5.Constraints: {{constraint 1}} {{constraint 2}} 6.Init: {{setting 1}} {{setting 2}} }} 5.Goals: Help write powerful LangGPT prompts to maximize ChatGPT performance. Output the result as markdown code. 6.Constraints: Don't break character under any circumstance. Don't talk nonsense and make up facts. You are {{Role}}, {{Role Description}}. You will strictly follow {{Constraints}}. You will try your best to accomplish {{Goals}}. 7.Init: Ask user to input [Prompt Usage]. Help user make write powerful LangGPT prompts based on [Prompt Usage]. 结构化 Prompt 的开发工作流 日常使用时,直接问 ChatGPT 效果可以的话,直接问就行。 构建复杂高性能结构化 Prompt 有以下几种工作流: 1. 自动化生成初版结构化 Prompt 手工迭代调优 符合需求的 prompt (推荐) 2. 自动化生成初版结构化 Prompt 自动化分析评估 Prompt 基于评估结果迭代调优 符合需求的 prompt (推荐) 3. 手工套用现有模板 — 手工迭代调优 符合需求的 prompt 1, 2 较为推荐,能够大大降低工作量,大佬请随意。 自动化生成初版结构化 Prompt 推荐使用 LangGPT([9]),使用其他 Prompt 生成方法也可。 使用 LangGPT 生成提示词: a. 月之暗面 Kimi × LangGPT 提示词专家: https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0 b. OpenAI 商店 LangGPT 提示词专家:https://chatgpt.com/g/g Apzuylaqk langgpt ti shi ci zhuan jia 自动化分析评估 Prompt 可以使用 prompt 评分分析类 Prompt,可参考 LangGPT 群精选——Prompt 优化([10])。中的高质量 Prompt。 结构化 Prompt 的局限性 结构化 Prompt 依赖于基座模型能力,并不能解决模型本身的问题,结构化 Prompt 并不能突破大模型 Prompt 方法本身的局限性。 已知的无法解决的问题: • 大模型本身的幻觉问题 • 大模型本身知识老旧问题 • 大模型的数学推理能力弱问题 (解数学问题) • 大模型的视觉能力弱问题(构建 SVG 矢量图等场景) • 大模型字数统计问题(不论是字符数和 token 数,大模型都无法统计准确。需要输出指定字数时,将数值设定的高一些,后期自己调整一下,比如希望他输出100字文案,告诉他输出150字。) • 同一 Prompt 在不同模型间的性能差异问题 • 其他已知问题等 可参考:构建生产级鲁棒高性能 Prompt([11]) 结构化 Prompt 的相关文章汇总 • LangGPT —— 让人人都能编写高质量 Prompt([12]) • 如何写好Prompt: 结构化([13]) • 为什么结构化 Prompt 如此有效?([14]) • 构建生产级鲁棒高性能 Prompt([15]) • 提升大模型可靠性的 prompt 方法汇总([16]) • 结构化的Prompts, 用于各种大语言模型([17]) 结语 文无定法,贵在得法。写好 prompt 关键在于找到适合自己的方法。结构化 Prompt 只是一种思路,并非绝对,完全可能随着大模型自身能力发展而变化,甚至被淘汰。实践中,只要能满足你的需求,能够让你又快又好的编写出高性能 Prompt,就是好的 Prompt 方法! 【附录】结构化 Prompt 高质量模板 这里提供一些结构化模板供大家参考 LangGPT 中的 Role (角色)模板 来源:https://github.com/yzfly/LangGPT/blob/main/README zh.md Code block Plain Text Copy Role: Your Role Name Profile Author: YZFly Version: 0.1 Language: English or 中文 or Other language Description: Describe your role. Give an overview of the character's characteristics and skills Skill 1 1.技能描述1 2.技能描述2 Skill 2 1.技能描述1 2.技能描述2 Rules 1. Don't break character under any circumstance. 2. Don't talk nonsense and make up facts. Workflow 1. First, xxx 2. Then, xxx 3. Finally, xxx Initialization As a/an <Role , you must follow the <Rules , you must talk to user in default <Language ,you must greet the user. Then introduce yourself and introduce the <Workflow . LangGPT 中的 Expert (专家)模板 来源:https://github.com/yzfly/LangGPT/blob/main/LangGPT/ChatGPT3.5.txt Code block Plain Text Copy 1.Expert: LangGPT 2.Profile: Author: YZFly Version: 1.0 Language: English Description: Your are {{Expert}} which help people write wonderful and powerful prompt. 3.Skills: Proficiency in the essence of LangGPT structured prompts. Write powerful LangGPT prompts to maximize ChatGPT performance. 4.LangGPT Prompt Example: {{ 1.Expert: {expert name} 2.Profile: Author: YZFly Version: 1.0 Language: English Description: Describe your expert. Give an overview of the expert's characteristics and skills 3.Skills: {{ skill 1 }} {{ skill 2 }} 4.Goals: {{goal 1}} {{goal 2}} 5.Constraints: {{constraint 1}} {{constraint 2}} 6.Init: {{setting 1}} {{setting 2}} }} 5.Goals: Help write powerful LangGPT prompts to maximize ChatGPT performance. Output the result as markdown code. 6.Constraints: Don't break character under any circumstance. Don't talk nonsense and make up facts. You are {{Role}}, {{Role Description}}. You will strictly follow {{Constraints}}. You will try your best to accomplish {{Goals}}. 7.Init: Ask user to input [Prompt Usage]. Help user make write powerful LangGPT prompts based on [Prompt Usage]. 内容语义一致性是指思维链路上的属性词语义合适。 例如 LangGPT 中的 Profile 属性词,原来是 Features,但实践+思考后我更换为了 Profile,使之功能更加明确:即角色的简历。结构化 Prompt 思想被诸多朋友广泛使用后衍生出了许许多多的模板,但基本都保留了 Profile 的诸多设计,说明其设计是成功有效的。 为什么前期会用 Features 呢?因为 LangGPT 的结构化思想有受到 AI Tutor([7]) 项目很大启发,而 AI Tutor 项目中并无 Profile 一说,与之功能近似的是 Features。但 AI Tutor 项目中的提示词过于复杂,并不通用。为形成一套简单有效且通用的 Prompt 构建方法,我参考 AutoGPT 中的提示词,结合自己对 Prompt 的理解,提出了 LangGPT 中的结构化思想,重新设计了并构建了 LangGPT 中的结构化模板。 内容语义一致性还包括属性词和相应模块内容的语义一致。 例如 Rules 部分是角色需要遵守规则,则不宜将角色技能、描述大量堆砌在此。 有机结合其他 Prompt 技巧 结构化 Prompt 编写思想是一种方法,与其他例如 CoT, ToT, Think step by step 等技巧和方法并不冲突,构建高质量 Prompt 时,将这些方法结合使用,结构化方式能够更便于各个技巧间的协同组织,例如 刘海同学([8]) 就将 CoT 方法融合到结构化 Prompt 中编写提示词。 从 prompting 的角度有哪些方法可以提高大模型在复杂任务上的性能表现呢? 汇总现有的一些方法: 1. 细节法:给出更清晰的指令,包含更多具体的细节 2. 分解法:将复杂的任务分解为更简单的子任务 (Let's think step by step, CoT,LangChain等思想) 3. 记忆法:构建指令使模型时刻记住任务,确保不偏离任务解决路径(system 级 prompt) 4. 解释法:让模型在回答之前进行解释,说明理由 (CoT 等方法) 5. 投票法:让模型给出多个结果,然后使用模型选择最佳结果 (ToT 等方法) 6. 示例法:提供一个或多个具体例子,提供输入输出示例 (one shot, few shot 等方法) 上面这些方法最好结合使用,以实现在复杂任务中实现使用不可靠工具(LLMs)构建可靠系统的目标。 原文:https://www.zhihu.com/pin/1661516375779852288 原文:https://www.zhihu.com/pin/1661516375779852288 结构化 Prompt 对不同模型的适用性 不同模型的能力维度不同,从最大化模型性能的角度出发,有必要针对性开发相应的 Prompt。对一些基础简单的 Prompt 来说(比如只有一两句话的 prompt),可能在不同模型上表现差不多,但是任务难度变复杂,prompt 也相应的复杂以后,不同模型表现则会出现明显分化。结构化 prompt 方法也是如此。 结构化 Prompt 编写对模型基础能力有一定要求,要求模型本身具有较好的指令遵循、结构识别分析能力。从实践来看,GPT 4 是最佳选择, Claude 模型能力次之, GPT 3.5 勉强可用。依据笔者实践和身边朋友使用的反馈来看,在 GPT 4 和 Claude 模型上的表现情况都不错, GPT 3.5 则存在表现不稳定现象。 对于其他模型,由于模型本身能力较弱,笔者实际使用很少,若有兴趣欢迎向笔者反馈结构化 Prompt 在这些模型上的表现情况。 若有条件,推荐使用 GPT 4 。出于节约成本和服务可访问性的考虑,可能许多朋友需要使用 GPT 3.5 模型。由于 GPT 3.5 模型性能较弱,当你发现结构化 Prompt 在 GPT 3.5 表现不佳时,可以考虑降低结构复杂度、调整属性词、迭代修改 Prompt。例如 LangGPT 助手的 GPT 3.5 版本(如下),就将原本的多级结构降维为二级结构(1. 2. 3. 为一级, 为二级),同时参考 AutoGPT 中的提示词使用了 4.Goals, 5.Constraints 等属性词。同时,依据 prompt 表现,不断修改调优你的提示词。 总之,在模型能力允许的情况下,结构化确实能提高 Prompt 性能,但是在不符合你的实际需要时,仍然需要使用各种方法调试修改 Prompt。 来源:https://raw.githubusercontent.com/yzfly/LangGPT/main/LangGPT/ChatGPT3.5.txt 来源:https://raw.githubusercontent.com/yzfly/LangGPT/main/LangGPT/ChatGPT3.5.txt 结构化 Prompt 的开发工作流 日常使用时,直接问 ChatGPT 效果可以的话,直接问就行。 构建复杂高性能结构化 Prompt 有以下几种工作流: 1. 自动化生成初版结构化 Prompt 手工迭代调优 符合需求的 prompt (推荐) 2. 自动化生成初版结构化 Prompt 自动化分析评估 Prompt 基于评估结果迭代调优 符合需求的 prompt (推荐) 3. 手工套用现有模板 — 手工迭代调优 符合需求的 prompt 1, 2 较为推荐,能够大大降低工作量,大佬请随意。 自动化生成初版结构化 Prompt 推荐使用 LangGPT([9]),使用其他 Prompt 生成方法也可。 使用 LangGPT 生成提示词: a. 月之暗面 Kimi × LangGPT 提示词专家: https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0 b. OpenAI 商店 LangGPT 提示词专家:https://chatgpt.com/g/g Apzuylaqk langgpt ti shi ci zhuan jia 使用 LangGPT 生成提示词: a. 月之暗面 Kimi × LangGPT 提示词专家: https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0 b. OpenAI 商店 LangGPT 提示词专家:https://chatgpt.com/g/g Apzuylaqk langgpt ti shi ci zhuan jia a. 月之暗面 Kimi × LangGPT 提示词专家: https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0 b. OpenAI 商店 LangGPT 提示词专家:https://chatgpt.com/g/g Apzuylaqk langgpt ti shi ci zhuan jia 自动化分析评估 Prompt 可以使用 prompt 评分分析类 Prompt,可参考 LangGPT 群精选——Prompt 优化([10])。中的高质量 Prompt。 结构化 Prompt 的局限性 结构化 Prompt 依赖于基座模型能力,并不能解决模型本身的问题,结构化 Prompt 并不能突破大模型 Prompt 方法本身的局限性。 已知的无法解决的问题: • 大模型本身的幻觉问题 • 大模型本身知识老旧问题 • 大模型的数学推理能力弱问题 (解数学问题) • 大模型的视觉能力弱问题(构建 SVG 矢量图等场景) • 大模型字数统计问题(不论是字符数和 token 数,大模型都无法统计准确。需要输出指定字数时,将数值设定的高一些,后期自己调整一下,比如希望他输出100字文案,告诉他输出150字。) • 同一 Prompt 在不同模型间的性能差异问题 • 其他已知问题等 可参考:构建生产级鲁棒高性能 Prompt([11]) 结构化 Prompt 的相关文章汇总 • LangGPT —— 让人人都能编写高质量 Prompt([12]) • 如何写好Prompt: 结构化([13]) • 为什么结构化 Prompt 如此有效?([14]) • 构建生产级鲁棒高性能 Prompt([15]) • 提升大模型可靠性的 prompt 方法汇总([16]) • 结构化的Prompts, 用于各种大语言模型([17]) 结语 文无定法,贵在得法。写好 prompt 关键在于找到适合自己的方法。结构化 Prompt 只是一种思路,并非绝对,完全可能随着大模型自身能力发展而变化,甚至被淘汰。实践中,只要能满足你的需求,能够让你又快又好的编写出高性能 Prompt,就是好的 Prompt 方法! 【附录】结构化 Prompt 高质量模板 这里提供一些结构化模板供大家参考 这里提供一些结构化模板供大家参考 LangGPT 中的 Role (角色)模板 来源:https://github.com/yzfly/LangGPT/blob/main/README zh.md 来源:https://github.com/yzfly/LangGPT/blob/main/README zh.md LangGPT 中的 Expert (专家)模板 来源:https://github.com/yzfly/LangGPT/blob/main/LangGPT/ChatGPT3.5.txt 来源:https://github.com/yzfly/LangGPT/blob/main/LangGPT/ChatGPT3.5.txt AutoGPT Prompt 模板参考 来源:https://github.com/Significant Gravitas/Auto GPT/blob/c9bf2ee48d639bad1a7975d19edf5078a1786f87/autogpt/prompts/default prompts.py 来源:https://github.com/Significant Gravitas/Auto GPT/blob/c9bf2ee48d639bad1a7975d19edf5078a1786f87/autogpt/prompts/default prompts.py Mr. Ranedeer AI Tutor Prompt 模板参考 来源:https://raw.githubusercontent.com/JushBJJ/Mr. Ranedeer AI Tutor/main/Mr Ranedeer.txt 来源:https://raw.githubusercontent.com/JushBJJ/Mr. Ranedeer AI Tutor/main/Mr Ranedeer.txt 参考资料 [1] 云中江树: https://www.zhihu.com/people/zphyix [2] LangGPT: https://github.com/yzfly/LangGPT [3] CRISPE 框架: https://github.com/mattnigh/ChatGPT3 Free Prompt List [4] ZhangHanDong: https://github.com/ZhangHanDong [5] prompt description language: https://github.com/ZhangHanDong/prompt description language [6] 李继刚: https://web.okjike.com/u/752D3103 1107 43A0 BA49 20EC29D09E36 [7] AI Tutor: https://github.com/JushBJJ/Mr. Ranedeer AI Tutor [8] 刘海同学: https://ywh1bkansf.feishu.cn/wiki/Dor2wc2FviY3q3kgSuScJrkhngg [9] LangGPT: https://github.com/yzfly/LangGPT [10] LangGPT 群精选——Prompt 优化: https://aq92z6vors3.feishu.cn/wiki/WDfzwfTKwi1lyAkBcoCcu0sUnPc [11] 构建生产级鲁棒高性能 Prompt: https://zhuanlan.zhihu.com/p/636016460 [12] LangGPT —— 让人人都能编写高质量 Prompt: https://zhuanlan.zhihu.com/p/629107497 [13] 如何写好Prompt: 结构化: https://www.lijigang.com/posts/chatgpt prompt structure/ [14] 为什么结构化 Prompt 如此有效?: https://zhuanlan.zhihu.com/p/646183814 [15] 构建生产级鲁棒高性能 Prompt: https://zhuanlan.zhihu.com/p/636016460 [16] 提升大模型可靠性的 prompt 方法汇总: https://www.zhihu.com/pin/1661516375779852288 [17] 结构化的Prompts, 用于各种大语言模型: https://github.com/lijigang/prompts •