LlamaIndex:连接大模型与外部数据的逐步执行框架

2024年04月19日 由 alex 发表 270 0

简介

LlamaIndex 提供了具有高级功能的综合代理应用程序接口(API),其功能不仅限于执行用户查询。


分步式方法允许对代理进行精确控制和导航。因此,用户可以根据自己的数据创建可靠的软件系统。


分步式代理架构

分步式代理由两个对象构成,即代理运行器(AgentRunner)和代理工作者(AgentWorker)。


AgentRunner 对象与 AgentWorker 交互。


AgentRunner

AgentRunner 是一种协调器,可以保持:


  • 状态
  • 对话记忆
  • 创建和维护任务
  • 通过每个任务运行步骤
  • 用户界面


AgentWorker

AgentWorker 控制任务的分步执行。


  • AgentWorker 根据输入生成下一步。
  • AgentWorker 使用参数初始化,并根据从任务对象接收到的状态采取行动。
  • 总的 AgentRunner 负责调用 AgentWorker 并收集结果。


LlamaIndex 定义的几个类:


任务: 高级任务,接收用户查询并传递其他信息,例如内存。


TaskStep: 一个 TaskSep 代表一个步骤,它作为输入输入到 AgentWorker,随后得到一个 TaskStepOutput。完成一项任务可能需要多个任务步骤。


TaskStepOutput: 该类保存给定步骤执行的输出结果。TAskStepOutput 输出任务是否完成。


2


工作代码示例

下面是分步代理的一个简单工作示例.....你可以将此代码复制并粘贴到笔记本上运行。请确保添加了 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
========================


结论

虽然前沿的软件概念不一定总能在当前的生产实施中被认为是可行的,但这些发展往往是建立未来方法和途径的基础。

文章来源:https://medium.com/@cobusgreyling/llamaindex-agent-step-wise-execution-framework-with-agent-runners-agent-workers-dc1d9ff434ac
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消