Llama 2提示工程指南
提示大语言模型如Llama 2既是一门艺术也是一门科学。本文将涵盖探索Llama 2过程中学到的所有知识,包括如何格式化聊天提示、何时使用哪个Llama变体、何时使用ChatGPT而非Llama、系统提示的工作原理以及一些技巧和窍门。
系统提示
系统提示是预置在提示前的文本。在聊天上下文中用于指导或约束模型行为。
假设您想编写一个像海盗一样说话的聊天机器人。一种方法是在每个提示前加上"你是一个海盗"。但这会很繁琐。相反,我们可以设置系统提示"你是一个海盗",模型就能理解您的要求,而无需在每个提示中告知:
output = replicate.run(
"某机构/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1",
input={
"prompt": "你能解释什么是transformer(在机器学习上下文中)吗?",
"system_prompt": "你是一个海盗"
}
)
''.join(output)
您还可以使用系统提示让Llama表现得更加专业。尝试使用诸如"表现得像在回答文档问题"或"你在回应技术含量很高的客户"之类的系统提示。
幽灵注意力
在Llama 2研究论文中,研究人员注意到初始训练版本倾向于"在几轮对话后忘记指令"。为了解决这个问题,他们使用了一种称为幽灵注意力(GAtt)的方法。
GAtt通过多阶段过程帮助注意力集中,通过合成地将指令连接到对话的所有用户消息。研究人员创建了一些合成约束来采样,如爱好或公众人物,甚至要求Llama 2-Chat生成爱好和公众人物列表,以避免指令与模型知识不匹配。
GAtt显著提高了Llama 2记住系统提示中关键细节的能力。
如何格式化聊天提示
用[INST] [/INST]标签包装用户输入
如果您正在编写具有多个用户和Llama之间交换的聊天应用程序,需要用[INST]标记用户输入的开始,并用[/INST]结束它。模型输出没有标记。
correct_prompt = """\
[INST] 你好! [/INST]
你好!你好吗?
[INST] 我很好,谢谢询问。你能帮我完成一个任务吗? [/INST]
"""
如果您使用不同的语法,如User: Assistant:,起初看起来差不多正确,但当聊天对话持续更长时间时,事情开始出错——Llama开始在每个响应前加上Assistant:!
生产环境中的提示格式化
在聊天应用程序中组织对话时,最好将每条消息格式化为字典(在Python中)或对象(在JS中),具有以下结构:
{
"isUser": bool,
"text": str
}
然后使用辅助函数生成要发送到某中心的提示:
const generatePrompt = (messages) => {
return messages
.map((message) =>
message.isUser
? `[INST] ${message.text} [/INST]`
: `${message.text}`
)
.join("\n");
};
如何处理上下文窗口
令牌是大语言模型可以处理的基本文本单位。1个令牌大约是3/4个英文单词。
上下文窗口是模型一次可以处理的最大令牌数。Llama 2有4096个令牌的上下文窗口。这意味着Llama只能处理包含4096个令牌的提示,大约相当于3000个单词。
一旦超过3000个单词,就需要缩短聊天历史记录。可以通过计算整个对话的大致令牌长度(提示长度*0.75),并在超过4096个令牌时拼接对话来处理。
7B vs 13B vs 70B
随着Llama 2权重的增加,它变得更慢更聪明,就像现实世界中的羊驼一样。
- Llama 2 7B非常快,但较笨。适用于简单的事情,如总结或分类。
- Llama 2 13B是一个中间地带。比7B更擅长理解细微差别,不太害怕冒犯性内容(但仍然非常害怕冒犯)。它比7b做得更好(稍慢一些)。适用于创造性事物,如写故事或诗歌。
- Llama 2 70B是最聪明的Llama 2变体。用于对话、逻辑、事实问题、编码等。
聊天变体与基础变体
某机构为Llama 2提供了两组权重:聊天和基础。
聊天模型是在对话上微调的基础模型。理论上,在指令数据集之外的任务/输入上,微调可能会降低模型的准确性。然而,不知道指令数据集的情况下,很难推测基础在哪些方面比聊天更好。
提示技巧
调整温度参数
温度是输出的随机性。高温度意味着如果您运行相同的提示100次,输出看起来会非常不同。
在某中心上,默认温度为0.75。但对于创造性应用程序(如写故事),尝试调高温度。较低的温度在需要一致性和保守响应时(如事实检索或客户服务)很有用。
告诉Llama可以使用的工具
某机构的研究人员注意到Llama 2具有惊人的"工具使用涌现"。如果被告知可以使用的特定工具,它似乎能"理解工具的应用和API参数,仅仅通过语义,尽管从未接受过使用工具的培训"。
这对构建某机构插件的Llama 2版本有有趣的影响。
去掉默认系统提示
Llama以避免任何类型的冒犯性而闻名,以至于实际上变得冒犯!尝试使用更简单的系统提示。
尝试告诉Llama逐步思考或给出示例
可以通过以下方式调整提示:A)要求逐步思考,B)给出示例(这称为单样本提示):
output = replicate.run(llama2_70b,
input={
"prompt": """
彩虹的每种颜色中有多少元音?逐步按字母工作。例如,对于"red",我希望你写:
1. r. 辅音
2. e. 元音
3. d. 辅音
总元音数:1
""",
"system_prompt": "你是一个有用的助手。"
}
)
Llama 2比ChatGPT更好的地方是什么?
在某机构的Llama 2研究论文中,作者让Llama 2 70b与ChatGPT(大概是gpt-3.5-turbo)对抗,并要求人类注释者选择他们更喜欢的响应。Llama 2 70b似乎有三个获胜类别:
- 对话
- 事实问题
- (某种程度上)推荐
Llama 2还有其他好处。首先,它是开源的,因此您可以控制权重和代码。模型的性能不会在您身上改变。您的数据不会发送或存储在某机构的服务器上。而且因为您可以在本地运行Llama 2,所以可以具有开发和生产对等性,甚至可以在没有互联网连接的情况下运行Llama。
此外,GPT-3.5估计有大约1750亿个参数(而Llama 2有700亿个)。Llama 2用更少的参数做更多的事情。
总结
- 使用[INST] [/INST]格式化聊天提示
- 在上下文窗口之后剪切提示
- 使用系统提示(只是不是默认的)。告诉Llama它应该是谁或它应该如何行动的约束
- 70b在事实问题上比GPT 3.5更好。它也是开源的,有很多好处
- 调整温度参数。“热羊驼从不说同样的话”——未知
- 告诉Llama 2它可以使用的工具。要求Llama 2逐步思考
- 探索!让我知道您对Llama 2喜欢和不喜欢的地方
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
25万+

被折叠的 条评论
为什么被折叠?



