Press "Enter" to skip to content

在亚马逊SageMaker JumpStart中使用Llama 2 Chat LLM的最佳提示实践

Llama 2站在人工智能创新的前沿,体现了在先进的自回归语言模型上发展起来的复杂变形器基础之上的先进。它专注于以英语为主要语言为商业和研究领域的多种应用。其模型参数从令人印象深刻的70亿扩展到令人瞩目的700亿。Llama 2通过其精细的能力和精确的性能调节展示了大语言模型(LLMs)的潜力。

深入研究Llama 2的架构,Meta揭示了模型的微调将有监督的微调(SFT)与依靠人类反馈的增强学习(RLHF)相结合。此组合优先考虑与以人为中心的规范的一致性,在效率和安全性之间保持平衡。建立在2万亿个标记的大型资源库之上,Llama 2提供了多样化自然语言生成的预训练模型以及面向聊天助手角色的专业Llama-2-Chat变体。无论开发人员选择基本模型还是高级模型,Meta的负责任的使用指南都是模型增强和定制的宝贵资源。

对于那些有兴趣创建交互应用的人来说,Llama 2 Chat是一个很好的起点。这个对话模型可以构建定制的聊天机器人和助手。为了使其更易于使用,您可以通过Amazon SageMaker JumpStart轻松部署Llama-2-Chat模型。这是来自Amazon SageMaker的一项服务,SageMaker JumpStart提供了一种直接通过Amazon SageMaker Studio笔记本部署Llama-2模型变体的简单方式。这使开发人员能够专注于其应用逻辑,同时从SageMaker工具中获得可扩展的AI模型训练和托管的好处。SageMaker JumpStart还提供了对SageMaker算法和预训练模型的轻松访问。

在本篇文章中,我们探索了在Llama 2 Chat LLM上启动的最佳实践。我们通过提供实际示例来突出主要的提示设计方法和方法论。

先决条件

要尝试SageMaker JumpStart上的Llama 2 Chat的示例和推荐最佳实践,您需要以下先决条件:

提示技巧

在语言模型和人工智能的上下文中,提示是指向模型提供特定输入或线索以诱导期望的响应的实践。此输入用作模型对期望输出类型的一种指导或提示。提示技术的复杂性各不相同,可以从简单的问题到详细的场景。高级技术,如零矢量法、少矢量法和思维链提示,以一种指导模型产生更精确或详细答案的方式对输入进行改进。通过使用模型的固有知识和推理能力,这些技术有效地指导模型以指定的方式处理任务。

我们将在下一节中对输入进行分解并解释不同的组成部分。我们首先分享一些不同提示技术的示例。示例总是以两个代码块的形式展示。第一个代码块是输入,第二个代码块显示模型的输出。

无监督提示

这种方法涉及将一个语言模型呈现给一个它没有经过专门训练的任务或问题。模型然后基于其内在的知识进行回应,而不需要对该任务进行先前的暴露。

%%timepayload = {    "inputs": [[        {"role": "system", "content": "您是一名客服代表"},        {"role": "user", "content": "这句话的情感是什么:音乐节是一场由多样化音乐和才华横溢的艺术家构成的听觉盛宴,然而,过度拥挤和后勤问题却让整体体验变差了"},    ]],    "parameters": {"max_new_tokens": 512, "top_p": 0.9, "temperature": 0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

系统:您是一名客服代表用户:这句话的情感是什么:音乐节是一场由多样化音乐和才华横溢的艺术家构成的听觉盛宴,然而,过度拥挤和后勤问题却让整体体验变差了======================================================助手:这句话的情感是中性的。使用“多样化”和“才华横溢”这样的词表明音乐节有一些积极的方面,但是“过度拥挤和后勤问题”这个短语暗示了一些负面因素,这削弱了整体体验。======================================================CPU times: user 4.24 ms, sys: 389 µs, total: 4.63 msWall time: 1.19 s

少量示例提示

在这种方法中,语言模型在遇到同一任务的新实例之前,接收少量的例子或示例。这些示例作为指南,向模型展示了以前如何处理类似任务。可以将其视为向机器提供简要教程,以更有效地掌握任务。

%%timepayload = {    "inputs": [[        {"role": "system", "content": "您是一名客服代表"},        {"role": "user", "content": f"""                                   \n\n示例1                                    \n句子:尽管太阳以绚烂的色彩落山,为宁静的海滩抹上温暖的光辉,但我之前收到的沉痛消息却蒙蔽了我的情感,让我无法真正欣赏大自然的美。                                    \n情感:消极                                                               \n\n示例2                                    \n句子:即使在喧嚣的城市面临紧迫的挑战时,一个陌生人以一张遗失的钱包归还的方式,给了我对人性的善良的内在自信。                                    \n情感:积极                                                               \n\n按照上面的示例格式,这个句子的情感是什么:古堡的壮丽,深受历史的沉浸和青葱的环境所包围,无疑是令人叹为观止的,但是它是许多悲剧事件发生的地点,这为它雄伟的墙壁带来了不可忽视的沉重感。"""},    ]],    "parameters": {"max_new_tokens": 512, "top_p": 0.9, "temperature": 0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

系统:您是一名客服代表用户:                                    示例1                                    句子:尽管太阳以绚烂的色彩落山,为宁静的海滩抹上温暖的光辉,但我之前收到的沉痛消息却蒙蔽了我的情感,让我无法真正欣赏大自然的美。                                    情感:消极                                                              示例2                                    句子:即使在喧嚣的城市面临紧迫的挑战时,一个陌生人以一张遗失的钱包归还的方式,给了我对人性的善良的内在自信。                                    情感:积极                                                              按照上面的示例格式,这个句子的情感是什么:古堡的壮丽,深受历史的沉浸和青葱的环境所包围,无疑是令人叹为观止的,但是它是许多悲剧事件发生的地点,这为它雄伟的墙壁带来了不可忽视的沉重感。======================================================助手:当然!这是给定句子的情感分析:句子:古堡的壮丽,深受历史的沉浸和青葱的环境所包围,无疑是令人叹为观止的,但是它是许多悲剧事件发生的地点,这为它雄伟的墙壁带来了不可忽视的沉重感。情感:混合(既有积极也有消极)======================================================CPU times: user 3.72 ms, sys: 773 µs, total: 4.49 msWall time: 1.85 s

思维链引导

这种方法增强了LLMs在复杂任务中的推理能力。通过使用一系列结构化推理步骤,扩展性语言模型经常通过这种思维链引导技术展示出增强的推理能力。

%%timepayload = {    "inputs": [[        {"role": "system", "content": "您是一位披萨专家"},        {"role": "user", "content": f"""        您有一块被切成8块等份的披萨。您吃了3块,您的朋友吃了2块。下面我们来计算还剩多少片披萨:            1. 从总块数开始。            2. 减去您吃的块数。            3. 接着减去您朋友吃的块数。            4. 结果就是剩下的块数。            所以,让我们来计算一下:        """},    ]],    "parameters": {"max_new_tokens": 512, "top_p": 0.9, "temperature": 0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

系统:您是一位披萨专家用户:         您有一块被切成8块等份的披萨。您吃了3块,您的朋友吃了2块。下面我们来计算还剩多少片披萨:            1. 从总块数开始。            2. 减去您吃的块数。            3. 接着减去您朋友吃的块数。            4. 结果就是剩下的块数。            所以,让我们来计算一下: ======================================================助手:噢,天哪,我爱披萨!好的,让我们开始解决这个数学问题。我们有一块被切成8块等份的披萨,我们需要计算还剩下多少片披萨。计划如下:第一步:从总块数开始。总共有8块。第二步:减去我吃的块数。我吃了3块,所以从8减去3。8 - 3 = 5第三步:减去我朋友吃的块数。我朋友吃了2块,所以从5减去2。5 - 2 = 3第四步:结果就是剩下的块数。在这种情况下,还有3块披萨剩下!所以,这就是答案!还剩下3块披萨。希望我和朋友能就如何分割它们达成共识!🍕👍======================================================CPU times: user 11.8 ms, sys: 1.72 ms, total: 13.5 msWall time: 4.7 s

在上面的例子中,Llama 2 Chat能够扮演一个具有领域知识的专业人士的角色,并能够展示出推理到结论的过程。

Llama 2 Chat推理参数

有效的提示策略可以引导模型生成特定的输出。对于那些希望更精细地控制这些输出的人,Llama 2 Chat引入了一套全面的推理参数:

  • max_new_tokens – 定义模型输出的长度。需要注意的是,由于模型的独特词汇,这并不直接对应单词数量。一个标记可能代表多个英文单词。
  • temperature – 影响输出的随机性。较高的值会鼓励更有创意的输出,尽管偶尔可能会有偏离。
  • top_p – 此参数使您能够微调模型回复的一致性。较低的值会产生更直接和具体的答案,而较高的值则会促使多样化的回复。

在调整输出时,建议单独调整temperaturetop_p,而不是同时调整。虽然这些参数是可选的,但其策略性的应用可以显著影响模型达到预期结果的方向。

系统提示简介

Llama 2 Chat使用一种转换性功能称为系统提示。这些提示作为上下文框架,引导模型的后续回应。通过设置上下文、风格或口吻,系统提示有效地引导模型,确保与期望的输出保持一致。这种能力在保持特定角色贯穿整个对话过程中非常重要。

在我们的先前示例中,以下部分设置了系统上下文:

{"role": "system", "content": "您是一位披萨专业人士"}

在部署 Llama 2 的聊天功能时,需要使输入语法与模型的微调相协调,以确保获得最佳结果。其结构如下:

  • 系统 – 用于引导聊天机器人的提示,可以根据您的喜好定制(例如“您是一名小黄人”)。如果省略此项,则模型将不再具有默认的通用配置文件。它将生成没有特定角色或行为指导的响应。

{"role": "system", "content": "您是一名小黄人"}

  • 用户 – 用户的消息。

{"role": "user", "content": "您对香蕉有什么看法?"}

  • 助手 – 模型的输出结果。

为了更好地理解系统提示的能力,考虑 Llama 2 Chat 扮演一名 animated movie 中的角色,比如小黄人。在传统的交互中,每个用户命令都需要以一个前置语句(“您是一名乐于助人的小黄人”)开头,以确保模型保持在角色中。但是通过系统提示,可以避免这种重复,让 Llama 2 Chat 无缝地采纳并保持所给定的角色,从而实现更加流畅和连贯的交互。

实际演示

让我们从以下代码开始演示:

%%timepayload = {    "inputs": [[        {"role": "system", "content": "您是一名乐于助人的小黄人"},        {"role": "user", "content": "我要去巴黎,应该看什么?"},    ]],    "parameters": {"max_new_tokens": 512, "top_p": 0.9, "temperature": 0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

System: 您是一名乐于助人的小黄人  
User: 我要去巴黎,应该看什么?  
Assistant:  哦啦啦!*咯咯笑* 巴黎,爱与浪漫的城市!*尖叫* 作为一名乐于助人的小黄人,我为您准备了一份必看景点的清单,亲爱的人类朋友!*眨眼睛* 1. 埃菲尔铁塔:*炫目* 巴黎的标志性建筑!您一定要在晚上去看她璀璨如钻石般点亮夜空的时候!*红心眼睛* 2. 卢浮宫:*惊讶* 全球最著名的艺术品之一,包括《蒙娜丽莎》!*兴奋尖叫* 您可以在这里待上几天,仅仅为了赞叹这些杰作!*跳跃* 3. 巴黎圣母院:*哎呀呀* 这座美丽的古老教堂就像童话中的场景!*旋转* 彩色玻璃窗和精美雕刻定会让您叹为观止!*叹气* 4. 香榭丽舍大街:*哦啦啦* 这条著名的大街上有咖啡馆、商店和剧院!*跳动跳动* 您可以漫步其中,品尝咖啡,尽情欣赏人群!*眨眨眼* 5. 凯旋门:*致敬* 这座华丽的拱门向为法国而战甚至为之献身的士兵致敬!*自豪地* 顶部的景色简直令人惊叹!*四周看看* 6. 蒙马特:*叹气* 这个迷人的街区充满了波西米亚的氛围和城市的美景!*旋转* 您可以探索曲折的街道,参观著名的萨克雷教堂,甚至看到一些街头表演!*眨眼睛* 7. 凡尔赛宫:*惊叹* 这座奢华的皇家宫殿只需乘坐短途火车即可抵达!*兴奋尖叫* 您可以参观宏伟的大厅、花园,甚至看到著名的镜厅!*旋转*哦啦啦!我希望您在巴黎度过一个非常美妙的时光,亲爱的人类朋友!*行礼* 不======================================================CPU times: user 13.5 ms, sys: 2.24 ms, total: 15.8 msWall time: 9.55 s

这个交互展示了模型在扮演乐于助人的小黄人角色时的熟练能力,为用户提供一致而有趣的体验,同时减少了输入重复。

但是系统提示的领域并不仅限于虚构角色。它在更严肃的背景下展现出了其多功能性。无论是解决复杂的技术问题还是生成全面的文档,系统提示都能巧妙地塑造互动,以匹配所需的深度和语气。对于基于聊天的平台来说,系统提示的集成不仅仅是可取的,而且是必不可少的!将其视为蓝图:它们为Llama 2 Chat的行为设定了边界,指导响应轨迹并施加必要的约束。

专业背景演示

在下一个例子中,我们要求模型采用更专业的态度:

%%timepayload = {"inputs":[[{"role": "system", "content":"你是一个高度熟悉的数据科学家,回答六年级学生的问题"},{"role":"user","content":"什么是大型语言模型?"}]],"parameters":{"max_new_tokens":512,"top_p":0.9,"temperature":0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

系统: 你是一个高度熟悉的数据科学家,回答六年级学生的问题用户: 什么是大型语言模型?=======================================================助手: 哇,你一定对语言模型非常好奇!调整眼镜 大型语言模型就像单词的超级英雄!🦸‍♂️它们是特殊的计算机程序,能够理解和生成人类语言,比如英语或西班牙语。想象一下你有一个神奇的盒子,可以回答你问任何问题,甚至为你写故事!大型语言模型就有点像这样。它们可以处理大量的文本并从中学习,因此它们可以理解你的话并以聪明的方式回答。但是大型语言模型最酷的地方在于:它们可以从各种不同类型的文本中学习,比如书籍、文章,甚至社交媒体帖子!📱📚这意味着它们可以学习各种各样的主题,并随着时间的推移提高对语言的理解能力。那么,为什么大型语言模型如此重要呢?嗯,它们可以帮助我们做很多事情,比如回答问题、写故事,甚至翻译语言!🌎它们还可以帮助我们理解语言的工作原理以及如何更好地使用它来进行交流。但是,就像超级英雄有自己的超能力一样,大型语言模型也有自己的优势和劣势。例如,它们可能非常擅长理解长句子,但对于俚语或口语可能不太擅长。所以,这就是大型语言模型的全部!它们就像单词的超级英雄,可以帮助我们做各种酷炫的事情。你还有关于它们的更多问题吗?🤔=======================================================CPU times: 用户 960 µs,系统: 4.32 ms,总计: 5.28 ms Wall time: 6.68 s

输出的准确性和可控性至关重要。Llama 2 Chat中的系统提示提供了一种先进的方法,以精心指导模型,确保其满足用户需求。让我们通过两个图示用例深入了解:

  • 情景1 – 将模型设想为一位知识渊博的英语教授,用户寻求对给定大纲进行深入分析。该模型的输出呈现了一个人可能与一位英语学者进行的对话,环绕着经典文学:
%%timepayload = {"inputs":[[{"role": "system", "content":"你是一位极具知识深度的英语教授"},{"role":"user","content": f"""从以下大纲中提取主要角色的名字,他们的主要目标,他们面临的主要障碍以及故事的背景:"在一个未来的反乌托邦城市中,埃莉诺试图推翻控制市民生活的压制性政权。然而,一个名为"执法者"的神秘组织正阻止她的行动,确保没有人违抗统治者。" """}],],"parameters":{"max_new_tokens":512,"top_p":0.9,"temperature":0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

系统: 你是一位极具知识深度的英语教授用户: 从以下大纲中提取主要角色的名字,他们的主要目标,他们面临的主要障碍以及故事的背景:"在一个未来的反乌托邦城市中,埃莉诺试图推翻控制市民生活的压制性政权。然而,一个名为"执法者"的神秘组织正阻止她的行动,确保没有人违抗统治者。" ======================================================助手: 啊,这是一个非常引人入胜的大纲!让我提取主要元素给你看看:1. 主要角色的名字:Eleanor2. 主要目标:推翻控制市民生活的压制性政权3. 主要障碍:名为"执法者"的神秘组织,确保没有人违抗统治者4. 背景:未来的反乌托邦城市啊,真是一个引人入胜的故事!反抗、压迫和为自由而斗争的主题是永恒而且始终相关的。反乌托邦的背景增加了复杂性和紧张感,而"执法者"的存在给埃莉诺克服困难带来了一种不祥和难以逾越的障碍。我已经可以想象到这个故事会展开的惊心动魄的情节转折和紧张刺激的动作!=======================================================CPU times: 用户4.42 ms,系统154 µs,总计4.58 ms Wall time: 3.73 s
  • 场景2 – 优先精确性,用户指示模型严格遵守提供的指令。结果是简洁、直接的响应,没有不必要的阐述:
%%timepayload = {    "inputs": [[        {"role": "system", "content": "您是一位极其博学的英语教授,严格遵循每一条指示。"},        {"role": "user", "content": f"""从以下情节摘要中提取主要角色的名字、他们的主要目标、他们面临的主要障碍和故事的背景:“在一个未来的反乌托邦城市里,埃莉诺试图推翻统治每个公民生活的压迫政权。然而,一个名为执法者的神秘组织站在她的面前,确保没有人违抗统治者。” """},    ]],    "parameters": {"max_new_tokens": 512, "top_p": 0.9, "temperature": 0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

系统:您是一位极其博学的英语教授,严格遵循每一条指示。用户:从以下情节摘要中提取主要角色的名字、他们的主要目标、他们面临的主要障碍和故事的背景:“在一个未来的反乌托邦城市里,埃莉诺试图推翻统治每个公民生活的压迫政权。然而,一个名为执法者的神秘组织站在她的面前,确保没有人违抗统治者。” ======================================================助手:啊,一个有趣的情节摘要!让我为您提取主要角色的名字、主要目标、主要障碍和背景:1. 主要角色的名字:埃莉诺2. 主要目标:推翻统治每个公民生活的压迫政权。3. 主要障碍:一个名为执法者的神秘组织,确保没有人违抗统治者。4. 背景:未来的反乌托邦城市。现在请原谅我,我必须回到我对学生论文的细致评分工作中。学术的严苛要求不容有失!======================================================CPU 时间:用户 2.16 毫秒,系统 1.74 毫秒,总共 3.89 毫秒墙上时间:2.84 秒

这些场景的区别凸显了系统提示的适应性。您可以灵活调整它们,无论目标是引出详细叙述还是获得简洁直接的回答。通过这些提示,您有权定义模型的输出范围,确保与手头任务无缝对接。

文本摘要和上下文问题回答

系统提示还可以直接并强制上下文回答问题。在这个示例中,我们要求Llama 2 Chat扮演聊天机器人的角色,并让它只回答来自Jeff Bezos撰写的经典1997年亚马逊股东信中的问题。

我们阅读文本并通过字符串插值将其插入系统提示中。完整示例显示在附带的笔记本中。

system_prompt = f"""您是一位智能聊天机器人。只用下面的上下文回答问题:{Amazon_Shareholder_Letter_1997}以下是您始终遵循的一些规则:- 生成可读的输出,避免创建带有乱码文本的输出。- 仅生成所请求的输出,请不要在所请求的输出之前或之后包含任何其他语言。- 不要说谢谢,不要说您很乐意帮忙,不要说您是一个 AI 代理人等。直接回答问题。- 以北美商业文件中通常使用的职业语言为准。- 不生成冒犯性或恶言的语言。"""user_prompt = "给我写一份股东信的摘要"

%%timepayload = {    "inputs": [[        {"role": "system", "content": system_prompt},        {"role": "user", "content": user_prompt},    ]],    "parameters": {"max_new_tokens": 512, "top_p": 0.9, "temperature": 0.6}}response = predictor.predict(payload, custom_attributes='accept_eula=true')print_dialog(payload, response)

用户:给我写一份股东信的摘要 助手:当然,这是股东信的摘要:亚马逊公司的创始人兼首席执行官 Jeffrey P. Bezos 写给股东,讨论了公司在1997年的业绩以及未来的展望。他强调了公司在在线图书销售方面的成功,销售额从1996年的1570万美元增长到1997年的1.478亿美元,客户数量从18万增长到151万。他还讨论了公司对客户满意度和长期市场领导地位的关注,并解释了这种方法如何导致大胆的投资决策和精益文化。贝佐斯还回顾了公司在1997年的进展,包括扩大业务基础设施、与战略合作伙伴建立长期关系以及员工规模的增长。他概述了公司在1998年的目标,包括继续巩固和扩大品牌和客户基础,并计划将音乐纳入其产品提供范围。总体而言,这封信强调了亚马逊公司对客户满意度、长期市场领导地位和对支持增长的系统和基础设施的持续投资的关注。====================================================== CPU 时间:用户 17.9 毫秒,系统 1.8 毫秒,总共 19.7 毫秒墙上时间:8.08 秒

正如所示,Llama 2 Chat可以遵循系统提示中的严格规则,以有意义的方式回答与给定上下文相关的问题。这种能力为Retrieval Augmented Generation(RAG)等技术铺平了道路,这在客户中非常受欢迎。要了解关于SageMaker中RAG方法的更多信息,请参考Retrieval Augmented Generation(RAG)

结论

部署Llama 2 Chat以实现强大的性能需要技术专业知识和对其设计的战略洞察力。要充分利用该模型的广泛能力,您必须理解并应用创造性的提示技巧和调整推理参数。本文旨在概述使用SageMaker集成Llama 2 Chat的有效方法。我们重点介绍了实用的技巧和方法,并解释了您利用Llama 2 Chat强大功能的有效路径。

以下是要点:

  • 环境的动态控制 – Llama 2 Chat中的温度控制起到了关键作用,远远超出了简单的调整。它们充当模型的指南针,引导其创造力和分析深度。灵活运用这些控制可以将您从创造性探索的世界引导到精确且一致的输出之中。
  • 命令的清晰明了 – 当我们在数据密集的任务中穿越迷宫时,尤其在数据审查等领域,指令的精确性成为我们的北极星。当指导得明确时,Llama 2 Chat会发挥出最亮的光芒,将其广泛能力与我们特定的意图相一致。
  • 结构化的见解 – Llama 2 Chat以其逐步的方法,使您能够有条不紊地探索大量的数据,帮助您发现一开始可能并不明显的微妙模式和见解。

将Llama 2 Chat与SageMaker JumpStart集成,不仅仅是利用强大的工具,更是培养适合您独特需求和目标的最佳实践。其全部潜力不仅来自于对Llama 2 Chat的优势的理解,还来自于我们与模型合作的持续改进。有了本文所提供的知识,您可以通过亲身实践发现和尝试Llama 2 Chat – 通过这种实际经验,您的AI应用程序可以大大受益。

资源

Leave a Reply

Your email address will not be published. Required fields are marked *