diff --git a/public/assets/images/prompt-framework.png b/public/assets/images/prompt-framework.png new file mode 100644 index 00000000..ae568772 Binary files /dev/null and b/public/assets/images/prompt-framework.png differ diff --git a/src/pages/posts/prompt-framework.mdx b/src/pages/posts/prompt-framework.mdx new file mode 100644 index 00000000..83d2fc38 --- /dev/null +++ b/src/pages/posts/prompt-framework.mdx @@ -0,0 +1,93 @@ +--- +layout: '@/templates/BasePost.astro' +title: 详解Prompt框架 +description: 介绍主流的四种Prompt框架,并分析每种框架的要素和特点 +pubDate: 2023-12-02T12:00:00Z +imgSrc: '/assets/images/prompt-framework.png' +imgAlt: 'GPTs Insight' +--- + +这节我们深入一点,了解一些prompt框架。这种框架都定义了定义提示语都要包含哪些方面的内容,怎么组织。通过了解这些框架可以帮助我们更好的写出prompt。 + +import { YouTube } from 'astro-embed' + + + +### Prompt结构框架一 + +然后,我们深入一点,了解一些Prompt框架。也就说提示语都要包含哪些方面的内容,怎么组织。 + +先说这个知名的项目里面提到的: + +https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/guides/prompts-intro.md#elements-of-a-prompt + +在这个项目的建议里,prompt 里需包含以下四个元素: + +- **Instruction(必须):** 指令,即你希望模型执行的具体任务。 +- **Context(选填):** 背景信息,或者说是上下文信息,这可以引导模型做出更好的反应。 +- **Input Data(选填):** 输入数据,告知模型需要处理的数据。 +- **Output Indicator(选填):** 输出指示器,告知模型我们要输出的类型或格式。 + +只要你按照这个框架写 prompt,模型返回的结果都不会差。大家要注意必须项和选填项,不一定四项都要包含。 + +### Prompt结构框架二 + +另外一个项目这样建议 ,它简称CRISPE框架 +https://github.com/mattnigh/ChatGPT3-Free-Prompt-List#crispe-prompt-framework + +在这个项目的建议里,prompt 里需包含以下五个元素(也是CRISPE 分别代表的含义): + +- **CR:** Capacity and Role(能力与角色)。你希望 ChatGPT 扮演怎样的角色。 +- **I:** Insight(洞察力),背景信息和上下文(坦率说来我觉得用 Context 更好)。 +- **S:** Statement(指令),你希望 ChatGPT 做什么。 +- **P:** Personality(个性),你希望 ChatGPT 以什么风格或方式回答你。 +- **E:** Experiment(尝试),要求 ChatGPT 为你提供多个答案。 + +### Prompt结构框架三 + + +https://github.com/EgoAlpha/prompt-in-context-learning/blob/main/PromptEngineering.md#22-framework + +这个项目也提出了一个建议,prompt 里需包含以下五个元素: + +* **Context**: 背景. 也就是上下文,确保提供与指定任务相关的足够的背景信息,以便模型能够理解情况并生成相关且准确的文本。 +* **Instruction**: 使用说明,也就是指令。令至关重要,因为它指导模型做什么以及期望做什么。清晰、简洁和具体很重要。在处理复杂的推理任务时,请考虑将任务分解为更小、更易于管理的步骤,以帮助模型理解手头的任务。 +* **Relevance**: 相关性。当需要引用特定信息时,相关性至关重要。该信息可以是相关文章或数据的链接,或者是用户提供的特定输入。通过利用这些特定信息,模型可以定制其输出,使其个性化、可靠且符合用户的需求。 +* **Constraint**: 约束。约束有助于指导llm可以做什么和不能做什么,最终获得更准确的结果。这可能涉及指定输出的格式、要使用的语言类型,甚至输出的长度。此外,指定难度级别和风格可以进一步细化输出。 +* **Demonstration**: 演示,也就是提供例子,这个已经多次强调了,当单独的说明无法有效传达具体细节和准确性时。通过提供输入和输出对的示例,llm可以自动识别模式,然后生成符合用户期望的文本。 + +### Prompt结构框架四 + +前面的框架都只是呈现了Prompt的内容,但没有提供模板化、结构化的prompt形式。接着介绍这个框架。 + +这个是国人的一个项目 https://github.com/EmbraceAGI/LangGPT#steps-to-use-the-role-template + +他把prompt设计成角色扮演的模版,它比较适合做自定义GPT。prompt里需包含以下五个元素: + +* Role: 角色名称 +* Profile: 基本描述 +* Skill: 需要实现的能力,能力可以有多个 +* Rules: 角色必须遵守的规则,通常涉及他们必须采取或避免的行动,例如“绝不破坏角色”等。 +* Workflow: 角色的工作流程,详细说明用户应提供的输入类型以及角色应如何响应。 +* Initialization: 根据角色模板的配置初始化角色,大多数情况下只需要默认内容。 + +作者也总结了结构化Prompt的优势: + +1. 层级结构:内容与形式统一。结构清晰,可读性好;结构丰富,表达性好;他觉得这样符合人类的表达习惯,也符合 ChatGPT 的认知习惯。 +2. 提升语义认知。结构化表达同时降低了人和 GPT 模型的认知负担,又大大提高了人和GPT模型对 prompt 的语义认知。 +3. 定向唤醒大模型深度能力。使用特定的属性词能够确保定向唤醒模型的深层能力。 +4. 像代码开发一样构建生产级 Prompt。**结构化 Prompt 的这些规范,这些模块化设计,能够大大便利于 prompt 后续的维护升级,便利于多人协同开发设计。** + +我这里摘录的是作者的主要思想,内容很长大家可以专门去看。 + +### 后记 + +其实还有其他的结构框架我就不一一列举了。如果你在早期不清楚应该怎么组织prompt可以参考他们,如果你看待别人写出类似结构的prompt也不用觉得他们使用什么高大上的技巧,其实都是积累出来的。因为用这些方式组织prompt这样大模型响应的内容都是比较靠谱的。如果大家还有其他经过验证效果很好的结构框架也欢迎在评论区发出来让大家学习。 + +### 相关链接 + +* https://github.com/mattnigh/ChatGPT3-Free-Prompt-List +* https://github.com/EmbraceAGI/LangGPT +* https://learningprompt.wiki/docs/chatGPT/tutorial-extras/chatGPT-prompt-framework +* https://github.com/EgoAlpha/prompt-in-context-learning/blob/main/PromptEngineering.md +* https://github.com/EmbraceAGI/LangGPT/blob/main/Docs/HowToWritestructuredPrompts.md diff --git a/src/pages/posts/write-good-prompt.mdx b/src/pages/posts/write-good-prompt.mdx index 8e706ec2..bb777298 100644 --- a/src/pages/posts/write-good-prompt.mdx +++ b/src/pages/posts/write-good-prompt.mdx @@ -7,6 +7,9 @@ imgSrc: '/assets/images/write-good-prompt.png' imgAlt: 'Write good prompt' --- +import { YouTube } from 'astro-embed' + + 无论你是使用 ChatGPT 的专业人士,还是有兴趣将人工智能 (AI) 完全集成到您的业务中,亦或者是一个刚刚接触大型语言模型(以下都简称LLM)和ChatGPT的初学者,有一件事是一定要做并且做好的 — 编写提示。今天分享一下我这多半年以来在工作和日常使用中总结出来的一些实践和经验技巧,希望我的经验可以帮助到你写出更有效的提示语。