简介
LlamaIndex 提供了具有高级功能的综合代理应用程序接口(API),其功能不仅限于执行用户查询。
分步式方法允许对代理进行精确控制和导航。因此,用户可以根据自己的数据创建可靠的软件系统。
分步式代理架构
分步式代理由两个对象构成,即代理运行器(AgentRunner)和代理工作者(AgentWorker)。
AgentRunner 对象与 AgentWorker 交互。
AgentRunner
AgentRunner 是一种协调器,可以保持:
AgentWorker
AgentWorker 控制任务的分步执行。
LlamaIndex 定义的几个类:
任务: 高级任务,接收用户查询并传递其他信息,例如内存。
TaskStep: 一个 TaskSep 代表一个步骤,它作为输入输入到 AgentWorker,随后得到一个 TaskStepOutput。完成一项任务可能需要多个任务步骤。
TaskStepOutput: 该类保存给定步骤执行的输出结果。TAskStepOutput 输出任务是否完成。
工作代码示例
下面是分步代理的一个简单工作示例.....你可以将此代码复制并粘贴到笔记本上运行。请确保添加了 OpenAI API 密钥。
%pip install llama-index-agent-openai
%pip install llama-index-llms-openai
!pip install llama-index
import json
from typing import Sequence, List
from llama_index.llms.openai import OpenAI
from llama_index.core.llms import ChatMessage
from llama_index.core.tools import BaseTool, FunctionTool
import nest_asyncio
###########################################
nest_asyncio.apply()
def multiply(a: int, b: int) -> int:
"""Multiple two integers and returns the result integer"""
return a * b
multiply_tool = FunctionTool.from_defaults(fn=multiply)
def add(a: int, b: int) -> int:
"""Add two integers and returns the result integer"""
return a + b
add_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, OpenAIAgent
agent = 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
========================
结论
虽然前沿的软件概念不一定总能在当前的生产实施中被认为是可行的,但这些发展往往是建立未来方法和途径的基础。