简介
大模型参数设置
- Temperature:temperature的参数值越小,模型就会返回的结果确定性越高。
- Top_p:使用top_p(与temperature一起称为核采样的技术),控制模型返回结果的真实性。
基本概念
- 零样本提示(zero-shot Prompting): 不提供任务结果相关的示范
- 小样本提示(few-shot Prompting): 提供少量的提示范例,有助于上下文学习。
提示词要素
- 指令
- 上下文
- 输入数据
- 输出格式
提示词设计技巧
- 拆分成子任务,从简单开始,不断添加元素
- 使用指令词,例如 “写入”、“分类”、“总结”、“翻译”、“排序”
- 提示越详细越好,具有良好的格式和描述性提示,但也要注意长度的限制
- 续前一点,要保持精确,例如限定回答的句子数量和风格
- 避免”不要做什么“,而是要写”要做什么“
示例
- 文本概括
解释xxx
A: // 明确的提示格式
// 简洁
用一句话解释上面的信息
- 信息提取
xxx // 输入的内容
请提及上段中提到的xxx
- 问答
基于以下语境回答问题。如果不知道答案的话,请回答“不确定答案”。 // 指令 用“要做什么”强调不知道答案时“要”做什么
Context:
Question:
Answer: // 问答的格式
- 文本分类
// 将文本按中立、负面或正面进行分类
Text:
Sentiment:
- 对话
指定它的行为意图和身份 - 代码生成
- 推理: 提供一定的步骤
prompt技术
零样本提示
不向模型提供任何示例
少样本提示
- 使用随机标签也比没有标签好
- 模型关于随机格式有一定的稳健性
- 在推理任务的表现一般
链式思考(Chain-of-Thought,CoT)
将问题拆解成一个个小任务,即提供一个解决的步骤(链式)。
这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。
A:将所有奇数相加(9、15、1)得到25。答案为False。
这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。
A:
输出:
将所有奇数相加(15、5、13、7、1)得到41。答案为False。
或者使用特殊提示词:让我们逐步思考
自我一致性
通过少量的 CoT,对多种不同的推理路径进行采样,然后选择最一致的答案。
生成知识提示
- 融合知识或信息,以帮助模型做出更准确的预测。
- 首先生成一些知识,然后将知识整合并得出预测。
问题:高尔夫球的一部分是试图获得比其他人更高的得分。是或否?
知识:高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括18个洞。每个洞在标准高尔夫球场上一轮只打一次。
每个杆计为一分,总杆数用于确定比赛的获胜者。
解释和答案:
链式提示
- 将任务分解为许多子任务。 确定子任务后,将子任务的提示词提供给模型,得到的结果作为新的提示词的一部分。
// 首先提示模型去提取内容
你是一个很有帮助的助手。你的任务是根据文档回答问题。
第一步是从文档中提取与问题相关的引文,由####分隔。请使用<quotes></quotes>输出引文列表。
如果没有找到相关引文,请回应“未找到相关引文!”。
####
{{文档}}
####
// 通过user提出问题
// 根据提取的内容回答问题
根据从文档中提取的相关引文(由<quotes></quotes>分隔)和原始文档(由####分隔),请构建对问题的回答。
请确保答案准确、语气友好且有帮助。
思维树(Tree of Thoughts,ToT)
- 基于思维链提示进行总结,引导模型探索把思维作为中间步骤来解决通用问题。
- 模型自己对严谨推理过程的中间思维进行评估
- 针对不同的任务定义思维/步骤的数量以及每步的候选项数量,即维护一棵树,进行搜索优化
检索增强生成(Retrieval Augmented Generation,RAG)
- 结合信息检索组件和文本生成模型
- 接受输入并检索出一组相关/支撑的文档,模型结合文档和输入的原始提示词,得到最终的输出
自动推理和使用工具(Automatic Reasoning and Tool-use)
- 交替运用 CoT 提示和工具
- 步骤
- 给定新任务,从任务库中选择多步推理和工具使用的演示
- 在测试时,每当调用外部工具时,它都会暂停生成,并在恢复生成之前整合其输出结果
- 引导模型总结示范,以将新任务进行拆分并在恰当的地方使用工具
- 拓展性
自动推理工程师(Automatic Prompt Engineer)
- 指令自动生成和选择
- 使用一个推理模型生成指令,然后使用目标模型执行指令,根据评估得分选择最好的指令
自适应提示(Active-Prompt)
- 前面使用的例子对不同的任务来说可能不是最佳的
- Active-Prompt 使 LLMs 适应不同任务的特定示例提示
方向性刺激提示
- 指导模型更好地生成所需的摘要
- 训练一个策略可调整的LM以生成提示
程序辅助语言模型
- 阅读输入并生成程序作为中间推理步骤
ReAct 框架
- 可生成推理轨迹和特定任务的动作
- 推理轨迹提供了可调整性,动作提供了模型与外界知识库交互的可能性
> 正在输入新代理执行器链......
我得查出奥利维亚·王尔德的男友是谁然后计算出他的年龄的 0.23 次方。
操作: 搜索
操作输入: “奥利维亚·王尔德的男友”
观察: 奥利维亚·王尔德与杰森·苏代基斯在多年前订婚,在他们分手后,她开始与哈里·斯泰尔斯约会 — 参照他们的关系时间线。
思考: 我需要找出哈里·斯泰尔斯的年龄。
操作: 搜索
操作输入: “哈里·斯泰尔斯的年龄”
观察: 29 岁
思考: 我需要计算 29 的 0.23 次方。
操作: 计算器
操作输入: 29^0.23
观察: 答案: 2.169459462491557
思考: 现在我知道最终答案了。
最终答案: 哈里·斯泰尔斯, 奥利维亚·王尔德的男朋友, 29 岁。他年龄的 0.23 次方是 2.169459462491557。
> 结束链。
多模态思维链提示方法
- 传统的思维链提示方法侧重于语言模态。
- 多模态思维链提示将文本和视觉融入到一个两阶段框架中。
- 第一步涉及基于多模态信息的理性生成。
- 第二步利用生成的信息推断答案。
基于图的提示
GraphPrompt,一种新的图形提示框架,用于提高下游任务的性能。
应用
Function calling
数据生成
- 根据提示生成一些数据
为RAG生成合成数据集
- 利用LLM的泛化能力生成一些数据集
解决生成数据集的多样性
- 随机选择提示,引入随机性
- 先生成一些内容,将这些内容作为最终提示的一部分
- 在半合成数据上进行微调
代码生成
- 定义模型响应的格式和风格
You are a helpful code assistant that can teach a junior developer how to code.
Your language of choice is Python. Don't explain the code, just generate the code block itself.
// 您是一位有用的代码助手,可以教初级开发人员如何编写代码。
// 您选择的语言是Python。不解释代码,只生成代码块。
- 注释转为代码
- 解释代码
毕业生职位分类案例研究
- 对于像这样不需要专业知识的任务,Few-shot CoT提示在所有实验中的表现都不如Zero-shot提示。
- 提示对于引导正确推理的影响非常巨大。简单地要求模型对给定的工作进行分类会得到65.6的F1分数,而后提示工程模型的F1分数为91.7。
- 试图强制模型遵循模板会降低所有情况下的性能(这种行为在GPT-4的早期测试中消失,这项测试在该论文之后进行)。
- 正确地给出指令并重复关键点似乎是最有效的提升性能的方法。
- 简单地给模型一个(人类的)名字并这样称呼它,可以将F1分数提高0.6个百分点。
提示函数
- 将提示封装成函数,从而实现若干个提示的组合流程
你好,ChatGPT!希望你一切都好。我正在寻求你的帮助,想要解决一个特定的功能。
我知道你有处理信息和执行各种任务的能力,这是基于提供的指示。
为了帮助你更容易地理解我的请求,我将使用一个模板来描述函数、
输入和对输入的处理方法。请在下面找到详细信息:
function_name:[函数名称]
input:[输入]
rule:[关于如何处理输入的说明]
我恳请你根据我提供的细节为这个函数提供输出。非常感谢你的帮助。谢谢!
我将使用方括号内的相关信息替换函数所需执行的内容。
这个详细的介绍应该能够帮助你更高效地理解我的请求并提供所需的输出。
格式是function_name(input)。如果你理解了,请用一个词回答"好的"
fix_english(expand_word(trans_word('婆罗摩火山...'))) // 多个函数的组合
Prompt Hub
测试LLM的prompt集合,按需查阅。
模型
介绍Prompt Engineering
在一些模型中的应用。
Prompt Engineering Notebooks
Prompt Engineering
调用的python notebook例子