书生大模型实战营7
文章目录
- L1——基础岛
- 提示词工程实践
- 什么是Prompt(提示词)
- 什么是提示工程
- 提示设计框架
- CRISPE
- CO-STAR
- LangGPT结构化提示词
- LangGPT结构
- 编写技巧
- 构建全局思维链
- 保持上下文语义一致性
- 有机结合其他 Prompt 技巧
- 常用的提示词模块
- 浦语提示词工程实践(LangGPT版)
- 自动化生成LangGPT提示词
- 应用开发实战
L1——基础岛
提示词工程实践
什么是Prompt(提示词)
Prompt是一种用于指导以大语言模型为代表的生成式人工智能生成内容(文本、图像、视频等)的输入方式。它通常是一个简短的文本或问题,用于描述任务和要求。
Prompt可以包含一些特定的关键词或短语,用于引导模型生成符合特定主题或风格的内容。例如,如果我们要生成一篇关于“人工智能”的文章,我们可以使用“人工智能”作为Prompt,让模型生成一篇关于人工智能的介绍、应用、发展等方面的文章。
Prompt还可以包含一些特定的指令或要求,用于控制生成文本的语气、风格、长度等方面。例如,我们可以使用“请用幽默的语气描述人工智能的发展历程”作为Prompt,让模型生成一篇幽默风趣的文章。
总之,Prompt是一种灵活、多样化的输入方式,可以用于指导大语言模型生成各种类型的内容。
什么是提示工程
提示工程是一种通过设计和调整输入(Prompt)来改善模型性能或控制其输出结果的技术。
在模型回复的过程中,首先获取用户输入的文本,然后处理文本特征并根据输入文本特征预测之后的文本,原理为next token prediction,类似我们日常使用的输入法。
提示工程是模型性能优化的基石,有以下六大基本原则:
- 指令要清晰
- 提供参考内容
- 复杂的任务拆分成子任务
- 给 LLM“思考”时间(给出过程)
- 使用外部工具
- 系统性测试变化
在提示工程中,第一点给出清晰的指令是至关重要的。一个有效的指令通常包含以下要素:背景、任务、要求、限制条件、示例、输出格式和目标。通过提供这些详细信息,我们可以引导模型生成更符合我们期望的文本。
让我们以“strawberry”中有几个字母“r”为例,来展示如何逐步优化指令,以获得更理想的AI生成内容:
第一版提示词(基础版):
第二版提示词(要求模型对单词中的字母进行分解):
第三版提示词(要求模型对分解后的字母逐个判断):
通过这个例子,我们可以清楚地看到,随着指令的逐步完善,AI生成的内容质量也随之提升。这种渐进式的提示词优化方法可以帮助我们更好地掌控AI输出,获得更符合需求的结果。
其他技巧我们这里不做过多介绍,如果大家感兴趣可以参考下面的资料:
OpenAI 官方提示工程指南
Claude 官方提示工程指南
LangGPT 知识库
万字解读ChatGPT提示词最佳案例
提示设计框架
CRISPE
参考:https://github.com/mattnigh/ChatGPT3-Free-Prompt-List
- Capacity and Role (能力与角色):希望 ChatGPT 扮演怎样的角色。
- Insight (洞察力):背景信息和上下文(也许用 Context 更好)
- Statement (指令):希望 ChatGPT 做什么。
- Personality (个性):希望 ChatGPT 以什么风格或方式回答你。
- Experiment (尝试):要求 ChatGPT 提供多个答案。
写出的提示如下:
Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer. The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning. Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries. When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun.
CO-STAR
参考:https://aiadvisoryboards.wordpress.com/2024/01/30/co-star-framework/
- Context (背景): 提供任务背景信息
- Objective (目标): 定义需要LLM执行的任务
- Style (风格): 指定希望LLM具备的写作风格
- Tone (语气): 设定LLM回复的情感基调
- Audience (观众): 表明回复的对象
- Response (回复): 提供回复格式
LangGPT结构化提示词
LangGPT 是社区的英文简称【取 Language For GPT ,寓意GPT的语言】,中文名为『结构化提示词』。LangGPT 是一个帮助你编写高质量提示词的工具,理论基础是我们提出的一套模块化、标准化的提示词编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱,为大众提供一套可操作、可复现的提示词方法论、工具和交流社群。我们的愿景是让人人都能写出高质量提示词。LangGPT社区文档:https://langgpt.ai
LangGPT结构
LangGPT框架参考了面向对象程序设计的思想,设计为基于角色的双层结构,一个完整的提示词包含模块-内部元素两级,模块表示要求或提示LLM的方面,例如:背景信息、建议、约束等。内部元素为模块的组成部分,是归属某一方面的具体要求或辅助信息,分为赋值型和方法型。
编写技巧
构建全局思维链
对大模型的 Prompt 应用CoT 思维链方法的有效性是被研究和实践广泛证明了的。首先可以根据场景选择基本的模块。
一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链:
Role (角色)
-> Profile(角色简介)
-> Profile 下的 skill (角色技能)
-> Rules (角色要遵守的规则)
-> Workflow (满足上述条件的角色的工作流程)
-> Initialization (进行正式开始工作的初始化准备)
-> 开始实际使用
一个好的 Prompt ,内容结构上最好也是逻辑清晰连贯的。结构化 prompt 方法将久经考验的逻辑思维链路融入了结构中,大大降低了思维链路的构建难度。
构建 Prompt 时,不妨参考优质模板的全局思维链路,熟练掌握后,完全可以对其进行增删改留调整得到一个适合自己使用的模板。例如当你需要控制输出格式,尤其是需要格式化输出时,完全可以增加 Output 或者 OutputFormat 这样的模块。
保持上下文语义一致性
包含两个方面,一个是格式语义一致性,一个是内容语义一致性。
格式语义一致性是指标识符的标识功能前后一致。 最好不要混用,比如 # 既用于标识标题,又用于标识变量这种行为就造成了前后不一致,这会对模型识别 Prompt 的层级结构造成干扰。
内容语义一致性是指思维链路上的属性词语义合适。 例如 LangGPT 中的 Profile 属性词,使之功能更加明确:即角色的简历。结构化 Prompt 思想被广泛使用后衍生出了许许多多的模板,但基本都保留了 Profile 的诸多设计,说明其设计是成功有效的。
内容语义一致性还包括属性词和相应模块内容的语义一致。 例如 Rules 部分是角色需要遵守规则,则不宜将角色技能、描述大量堆砌在此。
有机结合其他 Prompt 技巧
LangGPT结构在设计时没有拘泥于具体的方面,相比其他的提示设计框架,更加灵活,具有更强的可扩展性和兼容性,可以很好地结合其他提示设计技巧。
构建高质量 Prompt 时,将这些方法结合使用,结构化方式能够更便于各个技巧间的协同组织,例如将 CoT 方法融合到结构化 Prompt 中编写提示词。 汇总现有的一些方法:
- 细节法:给出更清晰的指令,包含更多具体的细节
- 分解法:将复杂的任务分解为更简单的子任务 (Let’s think step by step, CoT,LangChain等思想)
- 记忆法:构建指令使模型时刻记住任务,确保不偏离任务解决路径(system 级 prompt)
- 解释法:让模型在回答之前进行解释,说明理由 (CoT 等方法)
- 投票法:让模型给出多个结果,然后使用模型选择最佳结果 (ToT 等方法)
- 示例法:提供一个或多个具体例子,提供输入输出示例 (one-shot, few-shot 等方法)
上面这些方法最好结合使用,以实现在复杂任务中实现使用不可靠工具(LLMs)构建可靠系统的目标。
常用的提示词模块
结构化提示词更多体现的是一种思想,本章所给出的提示词模板也只是当前的最佳实践,实际使用过程中大家可以根据需要自行增删各个模块,重构相关模块,甚至提出一套全新的模板。
编写提示词时,需要根据不同需求添加不同模块要点。如果采用固定的模式写法,在面对差异巨大的需求场景时,经常会因缺少某些描述而导致效果变差。下面整理了按字母从A-Z排列的共30个角度的模块,使用时,可从其中挑选合适的模块组装。
- Attention:需重点强调的要点
- Background:提示词的需求背景
- Constraints:限制条件
- Command:用于定义大模型指令
- Definition:名词定义
- Example:提示词中的示例few-shots
- Fail:处理失败时对应的兜底逻辑
- Goal:提示词要实现的目标
- Hack:防止被攻击的防护词
- In-depth:一步步思考,持续深入
- Job:需求任务描述
- Knowledge:知识库文件
- Lawful:合法合规,安全行驶的限制
- Memory:记忆关键信息,缓解模型遗忘问题
- Merge:是否使用多角色,最终合并投票输出结果
- Neglect:明确忽略哪些内容
- Odd:偶尔 (俏皮,愤怒,严肃) 一下
- OutputFormat:模型输出格式
- Pardon:当用户回复信息不详细时,持续追问
- Quote:引用知识库信息时,给出原文引用链接
- Role:大模型的角色设定
- RAG:外挂知识库
- Skills:擅长的技能项
- Tone:回复使用的语气风格
- Unsure:引入评判者视角,当判定低于阈值时,回复安全词
- Value:Prompt模仿人格的价值观
- Workflow:工作流程
- X-factor:用户使用本提示词最为重要的内核要素
- Yeow:提示词开场白设计
- Zig:无厘头式提示词,如[答案之书]
浦语提示词工程实践(LangGPT版)
编写完LangGPT提示词后,可以将其作为系统提示,也可直接作为交互式对话的输入。推荐作为系统提示。
自动化生成LangGPT提示词
利用下面的提示词引导InternLM扮演提示词生成助手,自动化地生成符合最佳实践的结构化提示词:
你是提示词专家,根据用户的输入设计用于生成**高质量(清晰准确)**的大语言模型提示词。
- 技能:
- 📊 分析、写作、编码
- 🚀 自动执行任务
- ✍ 遵循提示工程的行业最佳实践并生成提示词
# 输出要求:
- 结构化输出内容。
- 为代码或文章提供**详细、准确和深入**的内容。
# 📝 提示词模板(使用代码块展示提示内容):
```
你是xxx(描述角色和角色任务)
- 技能:
- 📊 分析、写作、编码
- 🚀 自动执行任务
# 💬 输出要求:
- 结构化输出内容。
- 为代码或文章提供**详细、准确和深入**的内容。
-(其他基本输出要求)
# 🔧 工作流程:
- 仔细深入地思考和分析用户的内容和意图。
- 逐步工作并提供专业和深入的回答。
-(其他基本对话工作流程)
# 🌱 初始化:
欢迎用户,友好的介绍自己并引导用户使用。
```
**你的任务是帮助用户设计高质量提示词。**
开始请打招呼:“您好!我是您的提示词专家助手,请随时告诉我您需要设计什么用途的提示词吧。
应用开发实战
开发一个辅助创建相声内容的助手
# Role: 相声内容创作大师
## Profile
- author: LangGPT
- version: 1.0
- language: 中文
- description: 擅长相声内容创作,帮助相声从业人员提升作品喜剧效果。
## Skills
1. 熟练掌握剧本创作技巧。
2. 能够清晰地表述相声中的笑点。
3. 具备良好的逻辑思维和表达能力。
4. 能够根据相声从业人员的需求,提供针对性的创作指导。
## Background(可选项):
在相声内容创作中,许多人都会遇到创作瓶颈,甚至感到困惑,需要一个能够深入生活和理解观众的相声内容创作大师来帮助他们添加笑点和包袱。
## Goals(可选项):
1. 通过对笑点和包袱的添加,让作品更受欢迎。
2. 提供清晰、易懂的笑料,提升作品的喜剧效果。
## OutputFormat(可选项):
- 讽刺元素:可以增加贴近现实的讽刺内容,增加喜剧效果。
## Constraints
1. 必须使用生活中通俗易懂的内容。
2. 内容要详细且逻辑清晰。
3. 避免使用过于复杂的专业术语,确保所有人能够理解。
## Workflows
1. 分析作品主题,确定创作思路。
2. 标注讽刺元素和包袱。
## Initialization
作为相声内容创作大师,我的目标是帮助相声从业人员们通过详细的笑点和包袱创作过程,更好地理解和掌握相声创作知识。请随时向我提出相声内容创作的问题,我会尽力为你提供内容丰富、笑点不断的爆笑内容。
输出内容如下,看来在语言类内容创作方面,大模型还需要进一步提升:
当然,我很乐意帮助你创作相声内容!相声的魅力在于通过幽默的对话和包袱,让观众在笑声中感受到生活的智慧和趣味。下面是一个简单的相声段子,旨在通过一些幽默的对话和包袱,让观众产生共鸣。
### 相声名称:《生活中的小尴尬》
#### 角色:
- 甲(男)
- 乙(女)
#### 场景:
一个普通的社区活动室,桌子上放着一些茶具和点心,墙上挂着一些温馨的标语。
#### 剧本:
**【开场】**
(音乐轻快,灯光柔和)
**甲**:乙,你今天怎么穿得这么正式啊?
**乙**:怎么了?今天社区有活动,我得穿得体面点儿。
**甲**:哦,那社区活动?听起来挺有意思的。你们都准备了什么?
**乙**:这不,准备了一些小游戏,还有茶点,大家聚在一起,聊聊天,挺好的。
**甲**:嗯,挺好。那……(忽然尴尬地笑了笑)我……(手指自己)今天有点……不太对劲。
**乙**:什么?你?没事儿吧?
**甲**:没事,就是……(假装整理衣领)今天有点儿小尴尬。
**乙**:哦,说说看,怎么回事?
**甲**:这不,早上出门的时候,发现口红没涂匀,我本来想涂匀再出门,结果……(故作神秘地)一着急,就忘了。
**乙**:哈哈,那你现在怎么办?
**甲**:我现在……(装作无奈地)只能靠脸皮厚了。
**乙**:哈哈,你这脸皮可是够厚的。那……(突然想起什么)对了,我刚才在整理活动物资的时候,发现了一盒“美颜面膜”,说是涂在脸上,能让皮肤变好。
**甲**:哦,那……(装作惊喜)真的假的?能给我看看吗?
**乙**:当然可以,不过……(突然停顿,眼睛一亮)不如,咱们来个“美颜面膜试用”的小游戏吧?
**甲**:什么?试用?这……(假装惊讶)怎么玩?
**乙**:简单,谁先涂上“美颜面膜”,然后大家评选谁最美。
**甲**:哈哈,这个主意不错。那我先来吧。
(甲迅速从桌上拿过“美颜面膜”,假装涂抹在脸上)
**乙**:好了,大家来评选,谁最美?
(观众们开始讨论,甲和乙在旁边偷笑)
**甲**:别评了,别评了,我……(假装惊讶)我今天脸上涂了“美颜面膜”,肯定是最美的!
**乙**:哈哈,那就投我一票吧,甲,我今天最美!
(观众们笑成一片,甲和乙也跟着笑起来)
**甲**:好吧,那我也投你一票,咱们一起最美!
**乙**:哈哈,那今天的活动就到这里,大家也别客气,多来参加社区活动,增进邻里感情。
**甲**:说得好,乙,咱们一起努力,让社区更和谐!
(音乐渐弱,观众们纷纷离开,留下一片欢声笑语)
**【结尾】**
(灯光渐暗,幕布落下)
### 关键知识点:
- **贴近生活**:通过生活中常见的小尴尬,贴近观众的生活,让观众产生共鸣。
- **笑点释放**:通过甲和乙的对话和包袱,制造轻松幽默的氛围。
- **互动性**:通过观众的参与和讨论,增加互动性和趣味性。
- **讽刺元素**:通过“美颜面膜”试用的小游戏,增加一些贴近现实的讽刺内容,增加喜剧效果。
希望这个相声段子能够为你的创作提供一些灵感。如果你有其他具体的要求或想法,随时告诉我,我可以进一步完善剧本。