Llama 2提示工程完全指南

部署运行你感兴趣的模型镜像

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/
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值