前言
基础大模型通过在海量的数据上进行预训练,掌握了非常多的知识和信息;但是它的交互能力有限,只会做文字接龙,无法将所学的知识输出出来。
指令微调大模型在基础大模型的基础上通过RLHF等技术增强了模型的交互能力,让模型可以更好的理解用户的需求,并输出相应的信息。
提示(prompt)就是一门可以让指令微调大模型有效听懂的高级语言。
提示工程(Prompt Engineering)是指为了更好地利用大语言模型的能力,而设计的输入输出规范,以方便与大语言模型进行交互和指令。提示工程需要选择合适的词语、格式、符号等,来引导大语言模型生成高质量和相关的文本。
提示工程可以帮助人们更有效地使用大语言模型来完成各种任务,如文本生成、知识利用、复杂推理等。
指导原则
提示的指导原则是编写清晰而具体的提示和给模型思考的时间。
编写清晰而具体的提示
- 清晰而具体的说明:来表达你希望模型执行的任务,这将指导模型生成期望的输出,减少无关或错误响应的可能;清晰不代表简短;
- 分隔符:使用明确的标点符号或标记,将特定的文本片段部分与提示的其它部分分隔开来;分隔符可以使用三重双引号、单引号、XML标记、章节标题,或者任何可以向模型表明这是一个单独部分的符号或标记。例如我们可以使用这些分隔符: $”””,—,< >,
- 提示注入是指将用户的输入内容也当做的提示,进而破坏了开发人员计划的功能
- 要求结构化的输出:如json,更加容易解析模型的输出,并提高可读性和可用性
- 边界条件:对于不满足的输入,让模型知道该如何输出,避免意外;
- 少样本提示(few-shot prompt):通过少量的qa示例,可以让模型的输出更加符合要求。
给模型的思考的时间
- 指定完成任务所需的步骤:将任务分解为多个子任务,以便模型能够逐步完成,而不是一次性完成。这将帮助模型更好地理解和执行任务,提高输出的质量和准确性。
- 要求推理:要求模型先进行推理分析,再得出结论,避免模型草率的得出结论;与上一条类似,这一条更适用于人类不确定步骤的场景;
模型的局限
幻觉:模型对于知识边界以外的内容也会给出回答,这存在潜在的问题;
一个方式是要求模型先从文本中找到相关引用,再根据引用回答;这样减少模型的幻觉
提示迭代
需要有一个迭代过程,来为特定应用挖掘出良好的提示
温度参数越高,随机性/探索性越高
system角色:可以影响模型的整体风格
messages = [
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},
{'role':'user', 'content':'tell me a joke'},
{'role':'assistant', 'content':'Why did the chicken cross the road'},
{'role':'user', 'content':'I don\'t know'} ]
常见任务
推理
- 分析文本的情绪、态度、意图、主题等
摘要
- 长文本生成短摘要
- 指定风格的摘要
- 提取指定内容的摘要
转换
- 翻译
- 语气、风格转换
- 格式转换:在不同的格式之间进行转换,比如从 JSON、HTML,XML,markdown
- 校正拼写/语法
聊天机器人
- 设定聊天风格
- 点单机器人