LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略
导读:2024年7月23日,Meta重磅推出Llama 3.1。本篇文章主要提到了Meta推出的Llama 3.1自然语言生成模型。
>> 背景痛点:过去开源的大型语言模型在能力和性能上一直落后于闭源模型。需要一个开源的大型基础模型来推动人工智能的创新和发展。
● 开源模型的局限性:过去,开源的大型语言模型在性能和能力上一直落后于闭源模型。
● 需求增长:随着AI应用的广泛普及,开发者需要更强大、更灵活的模型来支持各种复杂应用。
>> 具体的解决方案:Meta公开发布了Llama 3.1 405B参数的大型语言模型,被认为是当前世界上最大和最强大的公开可用基础模型。
● 模型发布:Llama 3.1 405B及其他升级版模型(8B和70B)发布,支持多种高级应用。其中Llama 3.1 405B是首个具备前沿水平的开源AI模型。目前世界上首个能与顶级AI模型媲美、最大和能力最强的开源基础模型。还升级了8B和70B多语种模型,上下文长度达到128K,工具使用能力和推理能力显著增强。
● 工具和系统:提供全套Llama系统,提供更多组件和参考系统,帮助开发者创建自定义代理和新型代理行为,包括引导、合成数据等多个组件。
● 安全与责任:推出Llama Guard 3和Prompt Guard,确保模型的安全和负责任的使用。
>> 核心思路步骤
● 迭代后训练:采用监督微调、拒绝采样和直接偏好优化等多轮迭代训练。大幅优化全流程,使用16000多张H100 GPU进行405B模型训练。
● 模型评估:基于150多个基准数据集进行评估,并通过广泛的人类评估比较Llama 3.1与其他顶级模型的性能。
● 发布Llama系统,包含多语种安全模型Llama Guard 3、输入检测工具Prompt Guard等新组件。提出Llama Stack标准接口,推动生态系统兼容性
● 开放接口标准:发布Llama Stack API,旨在简化第三方项目对Llama模型的利用。
● 开源生态系统:与超过25个合作伙伴(如AWS、NVIDIA、Google Cloud等)合作,提供模型服务。该模型将引领创新应用和研究新模式。与AWS、NVIDIA、Databricks等25+合作伙伴合作,为开发者提供完整生态支持。
>> 核心技术点
● 模型架构:采用标准的仅解码器Transformer模型结构,进行小幅改动以最大化训练稳定性。
● 训练规模:在超过16,000个H100 GPU上进行训练,处理超过15万亿个token的语料库上预训练语言模型。
● 数据处理:优化预训练和后训练数据的质量和多样性,采用更严格的数据预处理和过滤方法。采用合成数据生成、数据过滤等技术大规模生成高质量指令fine-tune数据。
● 多语言支持:支持8种语言翻译等能力,扩展了上下文长度至128K。
● 工具使用:支持调用外部工具、代码生成等功能。
● 量化技术:将模型从16位量化到8位,降低推理计算需求,使405B模型能够在单节点服务器上运行。
● 指令和聊天微调:通过多轮对齐和合成数据生成,提升模型对用户指令的响应能力、质量和详细程度。
>> 优势
● 性能优异:性能与顶尖商业模型、头部闭源模型GPT-4相当,在广泛任务上表现优异,在通用知识、可控性、数学、工具使用、多语种翻译等方面表现卓越。
● 开源和可定制性:坚持开源理念,确保AI公平获取,避免权力过度集中。Llama模型权重公开可供下载,开发者可以完全定制模型以满足其需求,支持定制训练和推理部署。支持合成数据生产、模型蒸馏等前沿工作流,释放更多创新可能。真正实现开放获取的AI,推动AI技术更广泛应用。更新了许可协议,允许开发者使用Llama模型的输出来改进其他模型。
● 低成本:提供业内最低的每token成本,使更多开发者能够负担得起。与闭源模型相比,总体拥有更低的成本和更高的灵活性、可定制性。提供极低成本的产品服务。
● 广泛应用:支持实时和批量推理、监督微调、模型评估、连续预训练等多种高级工作流程。
● 生态系统支持:提供完善的工具和合作伙伴支持,从第一天起就可以进行生产部署,多家云供应商提供服务。
● 安全和责任:通过多种措施(如红队测试和安全微调)识别、评估和缓解潜在风险,持续致力于安全和负责任的开发。
总的来说,Llama 3.1 405B作为目前最大的公开可用基础模型,在性能、灵活性和控制能力上都达到了新的高度,将推动开源人工智能的创新和应用。通过其前沿的开源能力、多语言支持、强大的工具和系统、以及严格的安全和责任措施,解决了过去开源模型的局限性,推动了AI技术的普及和创新。其标准的模型架构设计、广泛的生态系统支持和低成本优势,使其成为开发者的理想选择。
目录
相关文章
LLMs之LLaMA:LLaMA的简介、安装和使用方法、案例应用之详细攻略
LLMs之LLaMA-2:LLaMA-2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略
LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略
LLMs之llama3-from-scratch:llama3-from-scratch(从头开始利用pytorch来实现并解读LLaMA-3模型的每层代码)的简介、核心思路梳理
LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略
Llama 3.1的简介
1、要点
2、模型评估
Benchmarks:Llama 3.1 405B、Nemotron 4 340B lnstruct、GPT-4(0125)、GPT-4 Omni、claude 3.5 Sonnet
Benchmarks:Llama 3.1 8B、Gemma 2 9BIT、Mistral 7B lnstruct、Llama 3.1 70B、Mixtral 8x22B Instruct、GPT 3.5 Turbo
Llama 3.1 405B Human Evaluation
3、模型架构:Llama 3.1 405B =15 T个token+1.6K个H100 +仅解码器的transformer 模型架构+迭代式后训练(SFT+DPO)+训练前和训练后的大数量和高质量+采用量化技术(FP8)
4、指令和聊天微调:多轮对齐(SFT+RS+DPO)+使用合成数据+多种数据处理技术过滤到最高质量
5、Llama系统—降低开发门槛:新组件=Llama Guard 3+Prompt Guard+Llama Stack
6、开放驱动创新
7、使用 Llama 3.1 405B 进行构建:持续预训练、RAG、函数调用、合成数据生成等
8、立即试用 Llama 3.1 系列模型
Llama 3.1的安装和使用方法
1、Llama 3.1的安装
Llama 3.1模型下载地址
下载llama-agentic-system
2、使用方法
2.1、工具使用
2.2、多语言代理
2.3、复杂推理
2.4、编码助手
3、Llama 3.1中支持的角色
支持 4 种不同的角色
4、Llama 3.1中的指令
(1)、用户与助手对话
(2)、内置基于 Python 的工具调用
步骤 - 1 用户提示和系统提示
步骤 - 2 模型确定调用哪个工具
步骤 - 3 由工具即 Wolfram Alpha 生成响应。
步骤 - 4 使用工具响应重新提示模型
步骤 - 5 代理对用户的回复
(3)、基于 JSON 的工具调用
步骤 - 1 用户提示自定义工具详细信息
步骤 - 2 模型确定调用哪个工具
步骤 - 3 调用工具的结果被传回模型
当工具调用的结果发送回模型时,我们ipython在标题中使用新角色。
(4)、用户定义自定义工具调用
步骤 - 1 用户提示自定义工具详细信息
步骤 - 2 模型确定调用哪个工具
步骤 - 3 调用工具的结果被传回模型
步骤 - 4 模型生成用户的最终响应
Llama 3.1的案例应用
相关文章
LLMs之LLaMA:LLaMA的简介、安装和使用方法、案例应用之详细攻略
LLMs之LLaMA:LLaMA的简介、安装和使用方法、案例应用之详细攻略_chinese_calendar每年手动更新-CSDN博客
LLMs之LLaMA-2:LLaMA-2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略
LLMs之LLaMA-2:LLaMA-2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略_llama2-CSDN博客
LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略
LLMs之Llama 3:Llama 3的简介、安装和使用方法、案例应用之详细攻略-CSDN博客
LLMs之llama3-from-scratch:llama3-from-scratch(从头开始利用pytorch来实现并解读LLaMA-3模型的每层代码)的简介、核心思路梳理
LLMs之llama3-from-scratch:llama3-from-scratch(从头开始利用pytorch来实现并解读LLaMA-3模型的每层代码)的简介、核心思路梳理-CSDN博客
LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略
LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略-CSDN博客
Llama 3.1的简介
2024年7月23日,Meta重磅推出Llama 3.1。到目前为止,开源大型语言模型在功能和性能方面大多落后于闭源模型。现在,我们正迎来一个由开源引领的新时代。我们公开发布了 Meta Llama 3.1 405B,我们认为这是世界上最大、功能最强大的开源基础模型。迄今为止,所有 Llama 版本的总下载量已超过 3 亿次,而这仅仅是个开始。
Llama 3.1 405B 是第一个公开可用的模型,在常识、可操纵性、数学、工具使用和多语言翻译等先进功能方面可与顶级 AI 模型相媲美。随着 405B 模型的发布,我们已准备好增强创新能力,为增长和探索提供前所未有的机会。我们相信最新一代的 Llama 将激发新的应用程序和建模范例,包括合成数据生成,以便改进和训练较小的模型,以及模型提炼,这是开源中从未如此大规模实现的功能。
作为最新版本的一部分,我们推出了 8B 和 70B 模型的升级版本。这些模型支持多种语言,上下文长度显著增加,达到 128K,使用最先进的工具,推理能力也更强。这使得我们的最新模型能够支持高级用例,例如长篇文本摘要、多语言对话代理和编码助手。我们还对许可证进行了更改,允许开发人员使用 Llama 模型(包括 405B)的输出来改进其他模型。为了履行我们对开源的承诺,从今天开始,我们将这些模型提供给社区,供其在llama.meta.com和Hugging Face上下载,并可在我们广泛的合作伙伴平台生态系统上立即开发。
官网地址:https://ai.meta.com/blog/meta-llama-3-1/
论文地址:https://ai.meta.com/research/publications/the-llama-3-herd-of-models/
文档地址:https://llama.meta.com/docs/overview/
GitHub地址:https://github.com/meta-llama/llama-models
llama-agentic-system地址:https://github.com/meta-llama/llama-agentic-system/
1、要点
>> 开源性:Meta致力于公开可访问的人工智能。马克·扎克伯格发表了一封信,详细阐述了开源对开发者、Meta以及世界的好处。
>> 开源顶级模型:我们最新的模型将上下文长度扩展到128K,支持八种语言,并包含了Llama 3.1 405B——首个前沿级别的开源人工智能模型。
>> 媲美闭源模型:Llama 3.1 405B具有无与伦比的灵活性、控制力和最先进的能力,可与最佳的闭源模型相媲美。新模型将使社区能够解锁新的工作流程,如合成数据生成和模型蒸馏。
>> 新的安全工具:我们正在继续发展Llama成为一个系统,提供更多与模型配合使用的组件,包括参考系统。我们希望赋予开发者工具,以创建他们自己的定制代理和新类型的代理行为。我们正在用新的安全和保障工具来加强这一点,包括Llama Guard 3和Prompt Guard,以负责任地构建。
>> 标准接口:我们发布了有关Llama Stack API的征求意见,希望这个标准接口能简化第三方项目利用Llama模型的过程。
>> 生态系统:生态系统已经准备就绪,超过25个合作伙伴,包括AWS、NVIDIA、Databricks、Groq、Dell、Azure、Google Cloud和Snowflake,第一天就提供服务。
>> 可访问性:在美国,您可以在WhatsApp上以及通过访问meta.ai提出具有挑战性的数学或编程问题来尝试Llama 3.1 405B。
2、模型评估
对于此版本,我们在 150 多个涵盖多种语言的基准数据集上评估了性能。此外,我们还进行了广泛的人工评估,在真实场景中将 Llama 3.1 与竞争模型进行了比较。我们的实验评估表明,我们的旗舰模型在一系列任务中与领先的基础模型相媲美,包括 GPT-4、GPT-4o 和 Claude 3.5 Sonnet。此外,我们的小型模型与具有相似数量参数的封闭和开放模型相媲美。
Benchmarks:Llama 3.1 405B、Nemotron 4 340B lnstruct、GPT-4(0125)、GPT-4 Omni、claude 3.5 Sonnet
Benchmarks:Llama 3.1 8B、Gemma 2 9BIT、Mistral 7B lnstruct、Llama 3.1 70B、Mixtral 8x22B Instruct、GPT 3.5 Turbo
Llama 3.1 405B Human Evaluation
3、模型架构:Llama 3.1 405B =15 T个token+1.6K个H100 +仅解码器的transformer 模型架构+迭代式后训练(SFT+DPO)+训练前和训练后的大数量和高质量+采用量化技术(FP8)
作为我们迄今为止最大的模型,在超过15万亿个 token 上训练 Llama 3.1 405B 是一项重大挑战。为了能够以这种规模进行训练并在合理的时间内取得成果,我们显著优化了整个训练堆栈,并将模型训练推向超过 16,000 个H100 GPU,使 405B 成为第一个以这种规模训练的 Llama 模型。
为了解决这个问题,我们做出了设计选择,重点关注保持模型开发过程的可扩展性和简单性。
>> 我们选择了标准的仅解码器的transformer 模型架构,并进行了细微的改动,而不是混合专家模型,以最大限度地提高训练稳定性。
>> 我们采用了迭代式后训练过程,每轮都使用监督式微调和直接偏好优化。这使我们能够为每一轮创建最高质量的合成数据,并提高每项功能的性能。
与之前的 Llama 版本相比,我们提高了用于训练前和训练后的数据的数量和质量。这些改进包括为训练前数据开发更仔细的预处理和管理流程、开发更严格的质量保证以及训练后数据的过滤方法。
正如语言模型的缩放定律所预期的那样,我们的新旗舰模型比使用相同程序训练的小型模型表现更好。我们还使用 405B 参数模型来提高小型模型的训练后质量。
为了支持 405B 规模模型的大规模生产推理,我们将模型从 16 位 (BF16) 量化为 8 位 (FP8) 数字,有效降低了所需的计算要求并允许模型在单个服务器节点内运行。
4、指令和聊天微调:多轮对齐(SFT+RS+DPO)+使用合成数据+多种数据处理技术过滤到最高质量
借助 Llama 3.1 405B,我们努力提高模型对用户指令的响应能力、质量和详细指令遵循能力,同时确保高水平的安全性。我们面临的最大挑战是支持更多功能、128K上下文窗口和更大的模型大小。
在后训练中,我们通过在预训练模型的基础上进行几轮对齐来生成最终的聊天模型。每轮都涉及监督微调 (SFT)、拒绝抽样 (RS) 和直接偏好优化 (DPO)。我们使用合成数据生成来生成绝大多数 SFT 示例,并进行多次迭代以生成涵盖所有功能的越来越高质量的合成数据。此外,我们投资了多种数据处理技术,以将这些合成数据过滤到最高质量。这使我们能够跨功能扩展微调数据量。
我们仔细平衡数据,以生成在所有功能上都具有高质量模型。例如,即使扩展到 128K 上下文,我们的模型在短上下文基准上也能保持质量。同样,即使我们添加了安全缓解措施,我们的模型仍能继续提供最有帮助的答案。
5、Llama系统—降低开发门槛:新组件=Llama Guard 3+Prompt Guard+Llama Stack
Llama 模型始终旨在作为整体系统的一部分,该系统可以协调多个组件,包括调用外部工具。我们的愿景是超越基础模型,让开发人员能够访问更广泛的系统,让他们能够灵活地设计和创建符合他们愿景的定制产品。这种想法始于去年,当时我们首次引入了核心 LLM 之外的组件。
为了持续致力于在模型层之外负责任地开发 AI 并帮助其他人也这样做,我们发布了一个完整的参考系统,其中包括几个示例应用程序,并包括新组件,例如Llama Guard 3(多语言安全模型)和 Prompt Guard(即时注入过滤器)。这些示例应用程序是开源的,社区可以在此基础上进行构建。
Llama System 愿景中的组件实现仍然很分散。这就是为什么我们开始与行业、初创公司和更广泛的社区合作,以帮助更好地定义这些组件的接口。为了支持这一点,我们在 GitHub 上发布了对我们称之为“Llama Stack”的评论请求。Llama Stack 是一组标准化和有主见的接口,用于如何构建规范的工具链组件(微调、合成数据生成)和代理应用程序。我们希望这些接口能够在整个生态系统中得到采用,这将有助于更轻松地实现互操作性。
我们欢迎反馈和改进提案的方法。我们很高兴能够发展围绕 Llama 的生态系统并降低开发人员和平台提供商的门槛。
6、开放驱动创新
与闭源模型不同,Llama 模型权重可供下载。开发人员可以根据自己的需求和应用完全自定义模型,在新数据集上进行训练,并进行额外的微调。这使更广泛的开发人员社区和世界能够更充分地认识到生成式 AI 的强大功能。开发人员可以完全自定义其应用程序,并在任何环境中运行,包括本地、云端,甚至本地笔记本电脑上 - 所有这些都无需与 Meta 共享数据。
尽管许多人可能认为闭源模型更具成本效益,但根据人工智能分析的测试,Llama 模型的每token成本是业内最低的。正如马克·扎克伯格所说,开源将确保全世界更多的人能够享受人工智能的好处和机会,权力不会集中在少数人手中,并且该技术可以更均匀、更安全地在整个社会中部署。这就是为什么我们继续采取措施,让开放式人工智能成为行业标准。
我们看到社区利用过去的 Llama 模型构建了令人惊叹的东西,包括使用 Llama 构建并部署在 WhatsApp 和 Messenger 中的AI 学习伙伴、专为医疗领域量身定制的 LLM,旨在帮助指导临床决策,以及巴西的一家医疗保健非营利初创公司,它使医疗保健系统能够更轻松地以数据安全的方式组织和传达患者的住院信息。借助开源的力量,我们迫不及待地想看看他们利用我们的最新模型构建了什么。
7、使用 Llama 3.1 405B 进行构建:持续预训练、RAG、函数调用、合成数据生成等
对于普通开发者来说,使用 405B 规模的模型是一项挑战。虽然这是一个非常强大的模型,但我们认识到,使用它需要大量的计算资源和专业知识。我们与社区进行了交流,我们意识到生成式 AI 开发不仅仅是提示模型。我们希望让每个人都能充分利用 405B,包括:
>> 实时和批量推理
>> 监督微调
>> 针对您的特定应用评估您的模型
>> 持续预训练
>> 检索增强生成 (RAG)
>> 函数调用
>> 合成数据生成
这正是 Llama 生态系统可以提供帮助的地方。在第一天,开发人员就可以利用 405B 模型的所有高级功能并立即开始构建。开发人员还可以探索高级工作流程,例如易于使用的合成数据生成、遵循模型提炼的交钥匙指示以及使用 AWS、NVIDIA 和 Databricks 等合作伙伴的解决方案实现无缝 RAG。此外,Groq 针对云部署优化了低延迟推理,而戴尔也针对本地系统实现了类似的优化。
我们与 vLLM、TensorRT 和 PyTorch 等主要社区项目合作,从第一天开始提供支持,以确保社区为生产部署做好准备。
我们希望 405B 的发布也能激发整个社区的创新,使这种规模的模型的推理和微调变得更容易,并推动模型提炼的下一波研究。
8、立即试用 Llama 3.1 系列模型
我们迫不及待地想看看社区将如何处理这项工作。使用多语言性和增加的上下文长度,可以构建有用的新体验,潜力巨大。借助 Llama Stack 和新的安全工具,我们期待继续负责任地与开源社区共同建设。在发布模型之前,我们会通过多种措施来识别、评估和减轻潜在风险,包括通过红队进行部署前风险发现练习以及安全微调。
例如,我们与外部和内部专家进行了广泛的红队测试,以对模型进行压力测试并找到可能使用它们的意外方式。(阅读此博客文章,了解有关我们如何负责任地扩展我们的 Llama 3.1 模型集合的更多信息。)
虽然这是我们迄今为止最大的模型,但我们相信未来仍有许多新的领域值得探索,包括更多设备友好的尺寸、更多模式以及在代理平台层的更多投资。与往常一样,我们期待看到社区将利用这些模型构建的所有令人惊叹的产品和体验。
Llama 3.1的安装和使用方法
1、Llama 3.1的安装
Llama 3.1模型下载地址
官网下载:https://llama.meta.com/
HuggingFace下载:https://huggingface.co/collections/meta-llama/llama-31-669fc079a0c406a149a5738f
下载llama-agentic-system
llama-agentic-system地址:https://github.com/meta-llama/llama-agentic-system/
2、使用方法
2.1、工具使用
上传数据集并进行分析。提示模型绘制图形并获取市场数据。
2.2、多语言代理
提示:将汉塞尔和格莱特的故事翻译成西班牙语。
2.3、复杂推理
提示:我有 3 件衬衫、5 条短裤和 1 件太阳裙。我要旅行 10 天,我的假期带够了吗?
2.4、编码助手
提示:创建一个程序,使用递归回溯算法或深度优先搜索算法生成一个完美的迷宫,其大小和复杂性可自定义。
3、Llama 3.1中支持的角色
支持 4 种不同的角色
system
:设置与 AI 模型交互的环境。它通常包括规则、指南或帮助模型有效响应的必要信息。
user
:表示人与模型的交互。它包括对模型的输入、命令和问题。
ipython
:Llama 3.1 中引入的新角色。从语义上讲,此角色表示“工具”。此角色用于在从执行器发送回模型时使用工具调用的输出标记消息。
assistant
:表示 AI 模型根据“系统”、“ipython”和“用户”提示中提供的上下文生成的响应。
4、Llama 3.1中的指令
注意:对于结合了对话和工具调用的应用程序,我们建议使用 Llama 70B-instruct 或 Llama 405B-instruct。Llama 8B-Instruct 无法可靠地与工具调用定义一起保持对话。它可以用于零次工具调用,但对于模型和用户之间的常规对话,应删除工具指令。
指令模型提供了不同的提示自定义选项,从用户和助手之间的简单交互到复杂的工具调用场景。下面我们提供了一个分为四类的提示示例:用户和助手对话、Python 格式的内置工具、JSON 格式的内置自定义工具以及完整的自定义工具格式,重点是工具调用。可用的工具调用选项需要特别注意,因为它们可以以不同的方式实现。
这些模型经过训练可以识别可以用三种不同工具(Brave Web Search、Wolfram Alpha Search 和 Code Interpreter)回答的提示,并生成适当的 Python 函数调用来获取答案(更多详细信息请参阅内置工具调用部分)。
此外,系统和用户均可在提示中定义自定义格式。该模型经过训练,可以识别提示中的新工具定义,根据这些定义生成工具调用,并仅以 JSON 格式回答,以便更轻松地解析响应并执行适当的工具。
在系统中定义多个工具和/或用户提示可能会导致模型根据用户查询生成多个工具调用。开发人员必须迭代所需的提示才能获得所需的结果并相应地解析结果。
鉴于 Llama 模型用例的多样性,我们建议开发人员根据自己的需求彻底测试不同的提示和格式,并使用此处提供的指南作为这些测试的起点。我们在最后一节“定义您自己的格式”中提供了一个在我们自己的Llama 代理系统环境中运行良好的格式示例。
为了更好地说明下面的流程,此图显示了所描述的信息流:
(1)、用户与助手对话
用户与模型之间的常规多轮对话的格式在 Llama 3 和 Llama 3.1 之间没有变化。下面是其格式的一个简单示例。
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
You are a helpful assistant<|eot_id|><|start_header_id|>user<|end_header_id|>
What is the capital for France?<|eot_id|><|start_header_id|>assistant<|end_header_id|></code></span></span></span></span></span>
(2)、内置基于 Python 的工具调用
可以使用以下提示打开三个内置工具(brave_search
、wolfram_alpha
和code interpreter
system
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
You are a helpful assistant<|eot_id|>
<|start_header_id|>user<|end_header_id|>
What is the current weather in Menlo Park, California?<|eot_id|><|start_header_id|>assistant<|end_header_id|></code></span></span></span></span></span>
需要注意以下几点:
只需包含 Environment: ipython 即可打开代码解释器;因此,您无需在 Tools: 行中指定代码解释。模型可以生成由执行器解释的 Python 代码,并将结果返回给模型。 助手响应的消息正文以特殊标签<|python_tag|>开头 如上所述,在这样的环境中,模型可以生成 <|eom_id|> ,而不仅仅是标准的 <|eot_id|> 。后者表示回合已完成,而前者表示继续进行多步推理。也就是说,模型期望在工具调用的输出中出现延续消息。内置工具使用Python 语法调用,而不是像zero-shot工具那样使用JSON 格式。模型为每个工具生成的 Python 调用格式如下:
# for Search
<|python_tag|>
brave_search.call(query="...")
<|eom_id|>
# for Wolfram
<|python_tag|>
wolfram_alpha.call(query="...")
<|eom_id|>
要使用模型的 zero-shot学习功能创建自定义工具调用,您可以在系统提示中提供工具定义的说明以及您希望模型为调用生成的格式。llama-agentic-system GitHub 存储库中提供了一个工作示例。 您可以在此处查看。
下面的示例展示了用户 ⇔ 模型 ⇔ 工具之间的
端到端提示交互
。此示例系统使用wolfram_alpha
内置工具。(请注意:模型不会执行对工具的调用;您需要使用我们的llama-agentic-system或其他类似框架来利用工具调用功能。)
步骤 - 1 用户提示和系统提示
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
You are a helpful Assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>
Can you help me solve this equation: x^3 - 4x^2 + 6x - 24 = 0<|eot_id|><|start_header_id|>assistant<|end_header_id|>
步骤 - 2 模型确定调用哪个工具
<|python_tag|>wolfram_alpha.call(query="solve x^3 - 4x^2 + 6x - 24 = 0")<|eom_id|>
步骤 - 3 由工具即 Wolfram Alpha 生成响应。
{
"queryresult": {
"success": true,
"inputstring": "solve x^3 - 4x^2 + 6x - 24 = 0",
"pods": [
{
"title": "Input interpretation",
"subpods": [
{
"title": "",
"plaintext": "solve x^3 - 4 x^2 + 6 x - 24 = 0"
}
]
},
{
"title": "Results",
"primary": true,
"subpods": [
{
"title": "",
"plaintext": "x = 4"
},
{
"title": "",
"plaintext": "x = ± (i sqrt(6))"
}
]
},
...
]
}
}
步骤 - 4 使用工具响应重新提示模型
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
You are a helpful Assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>
Can you help me solve this equation: x^3 - 4x^2 + 6x - 24 = 0<|eot_id|><|start_header_id|>assistant<|end_header_id|>
<|python_tag|>wolfram_alpha.call(query="solve x^3 - 4x^2 + 6x - 24 = 0")<|eom_id|><|start_header_id|>ipython<|end_header_id|>
{"queryresult": {"success": true, "inputstring": "solve x^3 - 4x^2 + 6x - 24 = 0", "pods": [{"title": "Input interpretation", "subpods": [{"title": "", "plaintext": "solve x^3 - 4 x^2 + 6 x - 24 = 0"}]}, {"title": "Results", "primary": true, "subpods": [{"title": "", "plaintext": "x = 4"}, {"title": "", "plaintext": "x = \u00b1 (i sqrt(6))"}]}, ... ]}}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
步骤 - 5 代理对用户的回复
The solutions to the equation x^3 - 4x^2 + 6x - 24 = 0 are x = 4 and x = ±(i√6).<|eot_id|>
(3)、基于 JSON 的工具调用
Meta Llama 模型现在可以从单个消息输出自定义工具调用,以便 更轻松地调用工具 。以下提示提供了如何从模型输出调用自定义工具的示例。需要注意的是,模型 本身并不执行调用 ;它提供结构化输出以 方便执行器调用 。可以在llama-agentic-system中找到一个示例执行器。工具格式类似于OpenAI 定义,可以进行调整以更好地满足您的需求,如下一节所述。
使用自定义工具调用时,要使模型输出eom_id
,需要在系统提示符中添加以下指令:Environment: ipython
。否则,它应该输出eot_id
。
需要调整系统提示以告知模型如何处理工具调用输出
工具定义在用户提示中提供,因为这是模型针对内置 JSON 工具调用进行训练的方式。但是,也可以在系统提示中提供工具定义,并获得类似的结果。开发人员必须测试哪种方式最适合他们的用例。
步骤 - 1 用户提示自定义工具详细信息
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
# Tool Instructions
- Always execute python code in messages that you share.
- When looking for real time information use relevant functions if available else fallback to brave_search
You have access to the following functions:
Use the function 'spotify_trending_songs' to: Get top trending songs on Spotify
{
"name": "spotify_trending_songs",
"description": "Get top trending songs on Spotify",
"parameters": {
"n": {
"param_type": "int",
"description": "Number of trending songs to get",
"required": true
}
}
}
If a you choose to call a function ONLY reply in the following format:
<{start_tag}={function_name}>{parameters}{end_tag}
where
start_tag => `<function`
parameters => a JSON dict with the function argument name as key and function argument value as value.
end_tag => `</function>`
Here is an example,
<function=example_function_name>{"example_name": "example_value"}</function>
Reminder:
- Function calls MUST follow the specified format
- Required parameters MUST be specified
- Only call one function at a time
- Put the entire function call reply on one line"
- Always add your sources when using search results to answer the user query
You are a helpful Assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>
Can you check the top 5 trending songs on spotify?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
步骤 - 2 模型确定调用哪个工具
由于我们没有使用Environment: ipython
系统提示中的指令,因此模型以 token 结束生成eot_id
,而不是eom_id
token
{"name": "get_current_conditions", "parameters": {"location": "San Francisco, CA", "unit": "Fahrenheit"}}<eot_id>
步骤 - 3 调用工具的结果被传回模型
当工具调用的结果发送回模型时,我们ipython
在标题中使用新角色。
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
You are a helpful assistant with tool calling capabilities. When you receive a tool call response, use the output to format an answer to the orginal use question.<|eot_id|><|start_header_id|>user<|end_header_id|>
Given the following functions, please respond with a JSON for a function call with its proper arguments that best answers the given prompt.
Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}. Do not use variables.
{
"type": "function",
"function": {
"name": "get_current_conditions",
"description": "Get the current weather conditions for a specific location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g., San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["Celsius", "Fahrenheit"],
"description": "The temperature unit to use. Infer this from the user's location."
}
},
"required": ["location", "unit"]
}
}
}
Question: what is the weather like in San Fransisco?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
{"name": "get_current_conditions", "parameters": {"location": "San Francisco, CA", "unit": "Fahrenheit"}}<|eot_id|><|start_header_id|>ipython<|end_header_id|>
Clouds giving way to sun Hi: 76° Tonight: Mainly clear early, then areas of low clouds forming Lo: 56°"<|eot_id|><|start_header_id|>assistant<|end_header_id|>
步骤 - 4 模型生成用户的最终响应
The weather in Menlo Park is currently cloudy with a high of 76° and a low of 56°, with clear skies expected tonight.<eot_id>
(4)、用户定义自定义工具调用
以下提示提供了一个示例,说明如何在系统提示中定义自己的格式并在与模型交互时使用它。此格式将使用新的自定义 <function> 标记将 JSON 对象与函数参数括起来。
模型eom_id
根据Environment: ipython
指令使用了 token。
系统提示定义了自定义格式以及模型可用的工具。
步骤 - 1 用户提示自定义工具详细信息
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
# Tool Instructions
- Always execute python code in messages that you share.
- When looking for real time information use relevant functions if available else fallback to brave_search
You have access to the following functions:
Use the function 'spotify_trending_songs' to: Get top trending songs on Spotify
{
"name": "spotify_trending_songs",
"description": "Get top trending songs on Spotify",
"parameters": {
"n": {
"param_type": "int",
"description": "Number of trending songs to get",
"required": true
}
}
}
If a you choose to call a function ONLY reply in the following format:
<{start_tag}={function_name}>{parameters}{end_tag}
where
start_tag => `<function`
parameters => a JSON dict with the function argument name as key and function argument value as value.
end_tag => `</function>`
Here is an example,
<function=example_function_name>{"example_name": "example_value"}</function>
Reminder:
- Function calls MUST follow the specified format
- Required parameters MUST be specified
- Only call one function at a time
- Put the entire function call reply on one line"
- Always add your sources when using search results to answer the user query
You are a helpful Assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>
Can you check the top 5 trending songs on spotify?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
步骤 - 2 模型确定调用哪个工具
现在模型按照系统提示中定义的格式进行响应,函数名称位于开始标记中,参数作为 JSON 对象位于开始和结束标记之间。
由于我们正在使用Environment: ipython
系统提示中的指令,模型以令牌结束生成eom_id
。
<function=spotify_trending_songs>{"n": "5"}</function><eom_id>
步骤 - 3 调用工具的结果被传回模型
当工具调用的结果发送回模型时,我们ipython
在标题中使用新角色。
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipython
Tools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023
Today Date: 23 Jul 2024
# Tool Instructions
- Always execute python code in messages that you share.
- When looking for real time information use relevant functions if available else fallback to brave_search
You have access to the following functions:
Use the function 'spotify_trending_songs' to: Get top trending songs on Spotify
{"name": "spotify_trending_songs", "description": "Get top trending songs on Spotify", "parameters": {"n": {"param_type": "int", "description": "Number of trending songs to get", "required": true}}}
If a you choose to call a function ONLY reply in the following format:
<{start_tag}={function_name}>{parameters}{end_tag}
where
start_tag => `<function`
parameters => a JSON dict with the function argument name as key and function argument value as value.
end_tag => `</function>`
Here is an example,
<function=example_function_name>{"example_name": "example_value"}</function>
Reminder:
- Function calls MUST follow the specified format
- Required parameters MUST be specified
- Only call one function at a time
- Put the entire function call reply on one line"
- Always add your sources when using search results to answer the user query
You are a helpful Assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>
Can you check the top 5 trending songs on spotify?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
<function=spotify_trending_songs>{"n": "5"}</function><|eom_id|><|start_header_id|>ipython<|end_header_id|>
["1. BIRDS OF A FEATHER by Billie Eilish", "2. Espresso by Sabrina Carpenter", "3. Please Please Please by Sabrina Carpenter", "4. Not Like Us by Kendrick Lamar", "5. Gata Only by FloyyMenor, Cris Mj"]<|eot_id|><|start_header_id|>assistant<|end_header_id|>
步骤 - 4 模型生成用户的最终响应
The top 5 trending songs on Spotify are:
1. BIRDS OF A FEATHER by Billie Eilish
2. Espresso by Sabrina Carpenter
3. Please Please Please by Sabrina Carpenter
4. Not Like Us by Kendrick Lamar
5. Gata Only by FloyyMenor, Cris Mj<|eot_id|>
Llama 3.1的案例应用
持续更新中……
总结