PaperAgent 2024年07月26日
Meta亲自下场教学Llama3.1 Agent/RAG!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Meta发布的Llama 3.1模型,除了强大的405B模型外,还开源了一个名为llama-agentic-system的框架,用于实现“Agentic”任务,例如将任务分解并执行多步骤推理,使用搜索或代码解释器等工具,以及零样本学习使用以前未见过的工具。该框架提供了内置和自定义工具调用两种方式,并详细介绍了提示语法和工具调用方法。

😊 **内置工具调用**:Llama 3.1模型支持三种内置工具:Brave Search(联网搜索)、Wolfram Alpha(数学工具)和Code Interpreter(代码解释器)。用户可以通过简单的提示语法调用这些工具,例如,使用 `wolfram_alpha.call(query="solve x^3 - 4x^2 + 6x - 24 = 0")` 来调用 Wolfram Alpha 求解方程。

🤔 **自定义工具调用**:对于没有内置工具的情况,用户可以自定义工具调用。模型通过结构化输出提供信息,以便执行器完成调用。这种方法类似于 OpenAI 的工具调用方式。用户需要在系统提示中添加 `Environment: ipython` 指令,以便模型输出 `eom_id`,否则它将输出 `eot_id`。

🚀 **Nvidia Agentic RAG**:Nvidia 与 Meta 合作,确保最新的 Llama 模型能够通过 NVIDIA NIM 得到最佳部署。LangGraph 等多代理框架可以帮助开发人员将 LLM 应用程序级逻辑分组为节点和边缘,以便更精细地控制代理决策。LangGraph 可用于嵌入、重新排序和使用 LLM 实现必要的 Agentic RAG 技术。为了实现这一点,应用程序开发人员必须在其 RAG 管道之上包含更精细的决策。

2024-07-26 16:59 湖北

Llama 3.1 Agentic RAG使用指南

这次Llama 3.1发布大家期待较多的是405B模型,但工具调用才是大模型落地的重头戏,Meta这次也开源了一个专门的框架:llama-agentic-system。

运行Llama 3.1作为能够执行“Agentic”任务的系统,例如:

同时在 Llama3.1 的文档里也详细的写了完整的提示语法和工具调用方法,分内置自定义调用两种方式: 

内置示例

使用以下prompt调用三个内置工具:

<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipythonTools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023Today 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|>

步骤 - 1 用户提示和系统提示

<|begin_of_text|><|start_header_id|>system<|end_header_id|>
Environment: ipythonTools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023Today 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: ipythonTools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023Today 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|>

自定义工具调用示例

Meta Llama 3.1模型现在可以从单个消息输出自定义工具调用,以便更轻松地调用工具。模型本身并不执行调用;它提供结构化输出以方便执行器调用。可以在llama-agentic-system中找到一个示例执行器,工具格式类似于OpenAI 定义。

步骤 - 1 用户提示自定义工具详细信息

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

Environment: ipythonTools: brave_search, wolfram_alpha
Cutting Knowledge Date: December 2023Today 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 模型确定调用哪个工具

{"name": "get_current_conditions", "parameters": {"location": "San Francisco, CA", "unit": "Fahrenheit"}}<eot_id>

步骤 - 3 调用工具的结果被传回模型

<|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>

Nvidia Agentic RAG(Llama-3.1

对于Llama 3.1的强大工具调用功能能力,NVIDIA已与Meta 合作,以确保最新的 Llama 模型能够通过 NVIDIA NIM得到最佳部署。

多Agent框架(例如 LangGraph)使开发人员能够将 LLM 应用程序级逻辑分组为节点和边缘,以便更精细地控制代理决策。带有 NVIDIA LangChain OSS 连接器的LangGraph可用于嵌入、重新排序和使用LLM 实现必要的Agentic RAG技术。

为了实现这一点,应用程序开发人员必须在其RAG管道之上包含更精细的决策。

具有默认路由器的Agentic RAG工作流

带有Web搜索工具的Agentic RAG工作流程

带有问题重写的Agentic RAG工作流程

https://developer.nvidia.com/blog/build-an-agentic-rag-pipeline-with-llama-3-1-and-nvidia-nemo-retriever-nims/https://llama.meta.com/docs/model-cards-and-prompt-formats/llama3_1/https://github.com/meta-llama/llama-agentic-system/tree/main

推荐阅读


欢迎关注我的公众号“PaperAgent”,每天一篇大模型(LLM)文章来锻炼我们的思维,简单的例子,不简单的方法,提升自己。



Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Llama 3.1 Agentic RAG 工具调用 多代理框架 LangGraph
相关文章