Agent的基本概念
Agent概述
Agent是一个自动推理和决策引擎。它接受用户输入/查询,并可以做出执行该查询的内部决策,以便返回正确的结果。关键代理组件可以包括但不限于:
- 将一个复杂的问题分解为较小的问题
- 选择要使用的外部工具 + 提供调用该工具的参数
- 规划一组任务
- 将之前完成的任务存储在内存模块中
LlamaIndex 为构建代理提供了一个全面的框架。这包括以下组件:
- 使用具有高级工具的代理来构建代理 RAG 和工作流自动化用例
- 用于构建和调试代理的低级组件
- 可用作独立模块的核心代理成分:查询规划、工具使用等。
Agent的使用模式
再llamaIndex中Agent的使用范式如下:
1.定义工具函数:定义需要实现某个功能的函数。
2.把工具函数添加到FunctionTool对象中:把功能函数包裹到FunctionTool对象中。
3.构造LLM模型对象,并初始化LLM:构造和初始化LLM对象。
4.初始化ReAct Agent,也就是ReActAgent对象:初始化ReActAgent对象,该对象封装了一个Agent引擎
代码样例如下:
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI
from llama_index.core.agent import ReActAgent# define sample Tool
def multiply(a: int, b: int) -> int:"""Multiple two integers and returns the result integer"""return a * bmultiply_tool = FunctionTool.from_defaults(fn=multiply)# initialize llm
llm = OpenAI(model="gpt-3.5-turbo-0613")# initialize ReAct agent
agent = ReActAgent.from_tools([multiply_tool], llm=llm, verbose=True)
agent.chat("What is 2123 * 215123")
注意:代理支持chat和query端点,分别继承自我们的 ChatEngine 和 QueryEngine。
通过其他方式来构建Agent
要根据 LLM 自动选择最佳代理,也可以使用from_llm 方法来生成代理。
from llama_index.core.agent import AgentRunneragent = AgentRunner.from_llm([multiply_tool], llm=llm, verbose=True)
以上代码就变成
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI
from llama_index.core.agent import ReActAgent
from llama_index.core.agent import AgentRunner# define sample Tool
def multiply(a: int, b: int) -> int:"""Multiple two integers and returns the result integer"""return a * bmultiply_tool = FunctionTool.from_defaults(fn=multiply)# initialize llm
llm = OpenAI(model="gpt-3.5-turbo-0613")# initialize ReAct agent
#agent = ReActAgent.from_tools([multiply_tool], llm=llm, verbose=True)
agent = AgentRunner.from_llm([multiply_tool], llm=llm, verbose=True)agent.chat("What is 2123 * 215123")
可选tools
另外还有其他工具可以选择:
1.可以把查询引擎包装成代理工具;
2.可以把其他agent作为代理工具;
Agent的使用场景
代理可能的用例范围非常广泛且不断扩大。也就是说,这里有一些可以立即带来价值的实际场景:
- Agentic RAG:根据您的数据构建上下文增强的研究助理,不仅可以回答简单的问题,还可以回答复杂的研究任务。这里有两个资源(资源 1、资源 2)可帮助您入门。
- SQL 代理:上述的一个子集是“文本到 SQL 助手”,可以与结构化数据库交互。查看本指南,了解如何从头开始构建代理。
- 工作流程助手:构建一个可以通过电子邮件、日历等常见工作流程工具进行操作的代理。可以查看 GSuite 代理教程。
- 编码助手:构建可以通过代码进行操作的代理。查看我们的代码解释器教程。
参考文献
- LlamaIndex对Agent的介绍
- agent概述:https://docs.llamaindex.ai/en/stable/use_cases/agents/
- RAG Agent:https://docs.llamaindex.ai/en/stable/understanding/putting_it_all_together/agents/
- SQL代理:https://docs.llamaindex.ai/en/stable/examples/agent/agent_runner/query_pipeline_agent/?h=sql+agent#setup-simple-retry-agent-pipeline-for-text-to-sql
- 工作流助手:https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/tools/llama-index-tools-google/examples/advanced_tools_usage.ipynb
- 代码助手:https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/tools/llama-index-tools-code-interpreter/examples/code_interpreter.ipynb