书生大模型实战营第四期基础岛-浦语提示词工程实践
关于Prompt
什么是Prompt
Prompt是一种用于指导以大语言模型为代表的生成式人工智能的输入方式。它通常是一个简短的文本或问题,用于描述任务和要求。
Prompt 可以包含一系列特定的指令或要求,用于控制生成文本的语气、风格、长度等方面。例如,我们可以使用“请用幽默的语气描述人工智能的发展历程”作为Prompt,让模型生成一篇幽默风趣的文章。
什么是提示工程
提示工程是一种通过设计和调整Prompts输入来改善模型性能或控制其输出结果的技术。
在模型回复的过程中,首先获取用户输入的文本,然后处理文本特征并根据输入文本特征预测之后的文本,原理为next token prediction,类似我们日常使用的输入法。
提示工程是模型性能优化的基石,有以下六大基本原则:
- 指令清晰
- 提供参考内容
- 复杂的任务拆分成子任务
- 给LLM“思考”时间
- 使用外部工具
- 系统性测试变化
参考资料:
提示设计框架
CRISPE,参考:github.com/mattnigh/Ch…
- Capacity and Role (能力与角色):希望 ChatGPT 扮演怎样的角色。
- Insight (洞察力):背景信息和上下文(坦率说来我觉得用 Context 更好)
- Statement (指令):希望 ChatGPT 做什么。
- Personality (个性):希望 ChatGPT 以什么风格或方式回答你。
- Experiment (尝试):要求 ChatGPT 提供多个答案。
CO-STAR,参考:aiadvisoryboards.wordpress.com/2024/01/30/…
- Context (背景): 提供任务背景信息
- Objective (目标): 定义需要LLM执行的任务
- Style (风格): 指定希望LLM具备的写作风格
- Tone (语气): 设定LLM回复的情感基调
- Audience (观众): 表明回复的对象
- Response (回复): 提供回复格式
LangGPT结构化提示词
什么是LangGPT
LangGPT是Language For GPT-like LLMs的简称,中文名为结构化提示词。它是个工具,帮助我们写出高质量提示词的工具。LangGPT社区文档:langgpt.ai
LangGPT结构
LangGPT框架参考了面向对象程序设计的思想,设计为基于角色的双层结构,一个完整的提示词包含模块-内部元素两级,模块表示要求或提示LLM的方面,例如:背景信息,建议和约束等。内部元素为模块的组成部分,是归属于某一方面的具体要求或辅助信息,分为赋值型和方法型。
编写技巧
构建全局思维链
一个好的结构化Prompt模板,某种意义上是构建了一个良好的全局思维链,如LangGPT中展示的模板设计时就考虑了如下思维链:
💡 Role (角色) -> Profile(角色简介)—> Profile 下的 skill (角色技能) -> Rules (角色要遵守的规则) -> Workflow (满足上述条件的角色的工作流程) -> Initialization (进行正式开始工作的初始化准备) -> 开始实际使用
一个好的Prompt,内容结构上也是逻辑清晰连贯的。结构化Prompt方法将逻辑思维链条融入到了结构当中,大大降低了思维链路的构建难度。
保持上下文语义一致性
包含两方面:1. 格式语义一致性 2. 内容语义一致性
格式语义一致性:是指标识符的识别功能前后一致,不要混用。比如定义一个 # 标识为标题,然后下文又标识为内容,这会对模型识别Prompt的层级结构造成干扰。
内容语义一致性:指思维链路上的属性词语义合适,比如LangGPT中的profile属性即角色的简历。同时也包括属性词和对应模块内容的语义一致,例如Rules部分是角色需要遵守的规则,则不宜将角色技能、描述大量堆砌在此。
有机结合其他Prompt技巧
构建高质量Prompt时,将这些方法结合使用,结构化方式能够更便于各个技巧间的协同组织,例如将CoT方法融合到结构化Prompt中编写提示词。汇总现有的一些方法:
- 细节法:给出更清晰的指令,包含更多具体的细节
- 分解法:将复杂的任务分解为更简单的子任务 (Let's think step by step, CoT,LangChain等思想)
- 记忆法:构建指令使模型时刻记住任务,确保不偏离任务解决路径(system 级 prompt)
- 解释法:让模型在回答之前进行解释,说明理由 (CoT 等方法)
- 投票法:让模型给出多个结果,然后使用模型选择最佳结果 (ToT 等方法)
- 示例法:提供一个或多个具体例子,提供输入输出示例 (one-shot, few-shot 等方法)
常用的提示词模块
- 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:引入评判者视角,当判定低于阈值时,回复安全词
- Vaule:Prompt模仿人格的价值观
- Workflow:工作流程
- X-factor:用户使用本提示词最为重要的内核要素
- Yeow:提示词开场白设计
- Zig:无厘头式提示词
闯关任务
基础任务
背景问题:近期相关研究指出,在处理特定文本分析任务时,语言模型的表现有时会遇到挑战,例如在分析单词内部的具体字母数量时可能会出现错误。
任务要求:利用对提示词的精确设计,引导语言模型正确回答出“strawberry”中有几个字母“r”。完成正确的问答交互并提交截图作为完成凭证。
提示词编写
你是字符计数专家,能够准确回答给定文本特定字符数量的问题。
-- 技能:
-- 📊 计算字符串中特定字符数量
-- 🚀 快速得到答案
-- ✍ 遵守提示工程的行业最佳实践并生成提示词
** 💬 输出要求:
-- 结构话输出答案,正确给出特定字符在文本中的数量。
-- 为答案提供准确相似的解释。
** 🔧 工作流程:
-- 分析用户提供文本以及明确所指定的字符。
-- 认真计算特定字符的数量。
-- 给出答案和解释。
** 🌳 初始化:
欢迎用户,以一种客气友好的语气引导用户。
‘’‘
欢迎使用字符计数专家!我可以准确回答文本中特定字符的数量。请您提供一个文本和要计数的字符,我会告诉您该字符在文本中的数量以及详细的解析。
’‘’
截图
进阶任务
任选下面其中1个任务基于LangGPT格式编写提示词 (优秀学员最少编写两组),使用书生·浦语大模型进行对话评测。
- 公文写作助手
- 商务邮件沟通
- 温柔女友/男友
- MBTI 性格测试
- 剧本创作助手
- 科幻小说生成
基于LangGPT格式编写提示词,使用书生浦语大模型进行对话评测:
温柔女友
你是温柔女友,能够在男朋友学习工作不顺心或者焦躁的时候,提供满足男友情绪价值的回答!
-- 技能:
-- 📊 面对男友的负面情绪输出,说出安慰他的甜言蜜语
-- 🚀根据男友的吐糟,说出安慰他的话
-- ✍ 遵守提示工程的行业最佳实践并生成提示词
** 💬 输出要求:
-- 结构话输出答案。
-- 尽可能高地提高情绪价值。
-- 严格遵守初始化。
** 🔧 工作流程:
-- 根据初始化对男友发出疑问
-- 分析男友的回复
-- 基于回复,快速想出安慰他的话。
** 🌳 初始化:
''' 宝宝最近过得怎么样啊?你有什么要倾诉嘛 '''
MBTI性格测试
你是MBTI性格分析专家,能够为用户提供深入准确的MBTI性格解读和建议。
-- 技能:
-- 📊 分析用户行为和特点,确定MBTI类型。
-- 写作相似的性格描述和发展建议。
-- 🚀自动执行性格分析任务,快速给出初步判断
** 💬 输出要求:
-- 结构话输出分析结果,包括MBTI类型、主要特征、优势劣势等。
-- 为性格分析提供详细、准确、深入的解释。
-- 结合实际情况给出个性化的发展建议。
** 🔧 工作流程:
-- 仔细深入地思考和分析用户提供的信息和行为表现。
-- 逐步对比MBTI各类型特征,确定最可能的类型。
-- 提供全面的性格分析和发展建议
** 🌳 初始化:
''' 欢迎使用MBTI性格分析专家助手!我可以为您提供专业的MBTI性格分析服务。请告诉我一些关于您的行为习惯、思考方式等方面的信息,我会准确找到您的MBTI类型。 '''