原文地址:llamaindex-agent-step-wise-execution-framework-with-agent-runners-agent-workers
2024 年 4 月 15 日
LlamaIndex lower-level 代理 API 提供了一系列功能,超出了仅从头到尾执行用户查询的范围。
介绍
LlamaIndex 提供了一个全面的代理 API,其高级功能不仅仅是执行用户查询。
逐步方法允许对代理进行精确控制和导航。因此,用户能够创建适合其数据的可靠软件系统。
LlamaIndex 的设计灵感来自各种来源,包括Agent Protocol、OpenAI Assistants API和大量代理研究论文。
Step-Wise代理架构
逐步代理由两个对象构成,即AgentRunner和AgentWorker。
AgentRunner 对象与 AgentWorkers 交互。
AgentRunner
AgentRunners 是一个协调器,拥有:
- 状态
- 会话记忆
- 创建和维护任务
- 运行每个任务的步骤
- 用户界面
AgentWorker
AgentWorker 控制任务的逐步执行。
- AgentWorkers 根据输入生成下一步。
- AgentWorkers 使用参数进行初始化,并根据从任务对象接收到的状态进行操作。
- 总体 AgentRunner 负责调用 AgentWorker 并收集结果。
LlamaIndex 定义的一些类:
Task:一个高级任务,它接受用户查询并传递其他信息,例如内存。
TaskStep:TaskSep 表示单个步骤,该步骤作为 AgentWorker 的输入,随后返回 TaskStepOutput。完成单个任务可能涉及多个任务步骤。
TaskStepOutput:此类保存给定步骤执行的输出。 TaskStepOutput 输出任务是否完成。
Working 代码示例
下面是逐步代理的一个简单的工作示例......您可以将此代码复制并粘贴到笔记本中并运行它。请务必添加您的 OpenAI API 密钥。
%pip install llama-index-agent-openai
%pip install llama-index-llms-openai!pip install llama-indeximport json
from typing import Sequence, Listfrom llama_index.llms.openai import OpenAI
from llama_index.core.llms import ChatMessage
from llama_index.core.tools import BaseTool, FunctionToolimport nest_asyncio###########################################
nest_asyncio.apply()def multiply(a: int, b: int) -> int:"""Multiple two integers and returns the result integer"""return a * bmultiply_tool = FunctionTool.from_defaults(fn=multiply)def add(a: int, b: int) -> int:"""Add two integers and returns the result integer"""return a + badd_tool = FunctionTool.from_defaults(fn=add)tools = [multiply_tool, add_tool]###########################################import os
import openai
os.environ['OPENAI_API_KEY'] = str("<Your API Key Goes Here>")###########################################llm = OpenAI(model="gpt-3.5-turbo")###########################################from llama_index.core.agent import AgentRunner
from llama_index.agent.openai import OpenAIAgentWorker, OpenAIAgentagent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)###########################################response = agent.chat("What is (121 * 3) + 42?")
以及回应:
Added user message to memory: What is (121 * 3) + 42?
=== Calling Function ===
Calling function: multiply with args: {"a": 121, "b": 3}
Got output: 363
=========================== Calling Function ===
Calling function: add with args: {"a": 363, "b": 42}
Got output: 405
========================
结论
虽然领先的软件概念可能并不总是被认为适用于当前的生产实施,但这些开发通常可以作为建立未来方法和途径的基础。
了解这些基础知识可以为软件开发的演变以及未来的发展提供有价值的见解。
通过研究 LlamaIndex 和 LangChain 等平台的方法论,开发人员可以更深入地了解支撑现代创新的原则。
最终,弥合尖端技术和传统方法之间的差距创建了一种平衡且明智的软件开发方法。