LlamaIndex 实现 React Agent

news2024/9/21 20:28:53

React Agent 是指 LLM 对问题自行推理并调用外部工具解决问题,如下图所示,通过一些推理步骤最终找到想要的答案。
在这里插入图片描述
LlamaIndex 提供了实现 React Agent 的框架,通过框架可以轻松的实现上图中的步骤。那么,如果不用 LlamaIndex 应该如何实现一个 Agent 呢?首先,需要将需要调用的外部 API 和问题提供给LLM,LLM 判断得到结果是否需要调用API,如果需要调用,将 API 名称和参数相关信息返回到应用端,应用端执行API 并将结果再次传给 LLM,LLM 再次判断是否需要调用外部工具,这是个循环的过程,直到 LLM 得到答案。通过代码,分析一下 LlamaIndex 是如何实现 ReactAgent 多轮对话的。

用 LlamaIndex 实现 ReactAgent 代码如下:

from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
from llama_index.core.tools import BaseTool, FunctionTool

from utils import init_model

import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'parent_directory')))


def multiply(a: int, b: int) -> int:
    """Multiply 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)


init_model()


agent = ReActAgent.from_tools([multiply_tool, add_tool], verbose=True)

response = agent.chat("What is 20+(2*4)? Calculate step by step ")

实现 Agent 主要通过 FunctionTool 和 ReactAgent,分别看一下两个类的主要作用。

FunctionTool

FunctionTool 用来定义外部工具,包括 Function 的详细信息,功能描述、入参和出参等信息,通过跟踪可以看到,代码首先创建了两个 FunctionTool,ToolMetadata 定义了工具的详细信息。

在这里插入图片描述
在这里插入图片描述

ReactAgent

创建 ReactAgent,传入 tools、llm,max_iteration 是指最大推理次数,默认为 10 次。

在这里插入图片描述
调用 self._react_chat_formatter 准备提示词,提示词准备完成之后,调用 LLM大模型进行处理。

在这里插入图片描述
解析大模型返回结果并调用对应 Function。

在这里插入图片描述
每一步的结果都会存储在 Memory 中,作为历史在下一步中传给 LLM 进行处理。

总结

LlamaIndex 通过提示词将问题与工具进行关联,通过多轮推理得到最终答案。核心还是在提示词,无论 RAG 还是 Agent,都是作为桥梁,底层逻辑还是通过提示词的方式把大模型的能力外部应用能力打通并进行整合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【轻松面试】Java中的迭代器

Java中的迭代器 一、迭代器的基本方法 二、示例解释 三、注意事项 🎈边走、边悟🎈迟早会好 在 Java 中,迭代器(Iterator)是一种用于遍历集合(如 List、Set 等)元素的对象。迭代器提供了一种通…

6款超好用的图纸加密软件推荐(为图纸加密软件披上隐形铠甲!)

场景设定: 一个阳光明媚的下午,在创意满满的设计工作室里,李明和小张正围坐在会议桌旁,讨论着如何更好地保护他们精心设计的图纸不被泄露。 李明(眉头紧锁):“小张啊,最近咱们的项目…

C# Unity 面向对象补全计划 七大原则 之 接口隔离原则 (ISP) 难度:☆ 总结:大接口分成小的,然后该干啥干啥

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.接口隔离原则 (ISP) 这…

按钮类控件

目录 1.Push Button 代码示例: 带有图标的按钮 代码示例: 带有快捷键的按钮 代码示例: 按钮的重复触发 2.Radio Buttion 代码示例: 选择性别 代码示例: click, press, release, toggled 的区别 代码示例: 单选框分组 3.3 Check Box 代码示例: 获取复选按钮的取值 1.Pu…

sql注入sqli-labs第一关

目录 sql注入是什么? sqli-labs第一关--字符型注入 思路:想要利用连表查询 进一步思考如何逃脱单引号 如何知道表的列数 最终目的:注入管理员账号密码 sql注入是什么? 注入:都是合理合法的MySQL执行语句 产生的原…

PXE学习及其简单应用

一、PXE 的定义 PXE 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…

C#学习笔记12:SYN6288语音模块_Winform上位机控制软件

今日尝试使用C# Winform写一个上位机软件控制 SYN6288语音模块 这里不讲什么基本原理(或者讲的比较略简),直接讲实现了就...... 文章提供测试代码讲解、测试效果图、整体测试工程下载 目录 控件的摆放: SYN6288介绍: 代码编程: 对16进制发送…

一款绿色免费免安装的hosts文件编辑器

BlueLife Hosts Editor 是一款免费的 Hosts 文件编辑工具,主要用于管理和修改电脑系统的 Hosts 文件。该软件具有多种功能,包括添加、删除和更新域名记录,以及调整 IP 与网域名称的交叉对应关系,类似于 DNS 的功能。 该软件特别适…

鸿蒙应用服务开发【华为账号服务】

Account Kit 介绍 本示例展示了使用Account Kit提供的登录、授权头像昵称、实时验证手机号、收货地址、发票抬头、未成年人模式的能力。 本示例模拟了在应用里,调用一键登录Button组件拉起符合华为规范的登录页面;调用获取头像昵称接口获取头像昵称&a…

七天打造一套量化交易系统:Day8-阶段性总结、未完待续...

七天打造一套量化交易系统:Day8-阶段性总结、未完待续... 阅读数据分析私信情况汇总如何收费代写策略功能拓展商务合作如何联系我 下一阶段规划 从 2024-07-18 准备进行【七天打造一套量化交易系统】系列分享,到昨天(2024-08-04)&…

【Kubernetes】k8s集群的pod基础

目录 一.Pod概述 1.什么是pod 2.k8s中pod的两种使用方式 3.pod容器的常规使用流程 4.创建pod的3种方式 二.Pod中容器概述 1.容器分类 2.Pod容器的3种镜像拉取策略 3.Pod容器的3种重启策略 4.pod的dns策略 一.Pod概述 1.什么是pod Pod是kubernetes中最小的资源管理组…

登录相关功能的优化【JWT令牌+拦截器+跨域】

登录相关功能的优化 登录后显示当前登录用户el-dropdown: Element - The worlds most popular Vue UI framework <el-dropdown style"float: right; height: 60px; line-height: 60px"><span class"el-dropdown-link" style"color: white;…

【香橙派系列教程】(八)一小时速通Python

【八】一小时速通Python 本章内容服务于香橙派下的开发&#xff0c;用C语言的视角来学习即可&#xff0c;会改就行。 详细说明&#xff0c;请看链接:python全篇教学 Python是一种动态解释型的编程语言&#xff0c;Python可以在Windows、UNIX、MAC等多种操作系统上 使用&…

codetop标签双指针题目大全解析(C++解法),双指针刷穿地心!!!

写在前面&#xff1a;此篇博客是以[双指针总结]博客为基础的针对性训练&#xff0c;题源是codetop标签双指针近一年&#xff0c;频率由高到低 1.无重复字符的最长子串2.三数之和3.环形链表4.合并两个有序数组5.接雨水6.环形链表II7.删除链表的倒数第N个节点8.训练计划II9.最小覆…

SMU Summer 2024 div2 4th

文章目录 The Fourth Week一、前言二、算法1.最近公共祖先lca倍增算法2.Dijkstra算法<1>&#xff08;游戏&#xff09; 3.拓扑排序3. Bellman-Ford算法4. SPFA算法 三、总结 The Fourth Week 不须计较苦劳心&#xff0c;万事原来有命。 ————宋朱敦儒《西江月世事短如…

大模型岗位面试总结,靠它轻松拿下offer

节前技术群邀请了一些参加大模型面试&#xff08;含实习&#xff09;的同学&#xff0c;分享他们面试算法工程师(大模型方向)的宝贵经验。 之前总结链接如下&#xff1a; 超全总结&#xff01;大模型算法岗面试真题来了&#xff01; 面了 5 家知名企业的NLP算法岗(大模型方向…

计算机组成原理(1):计算机系统概述

计算机底层和计算机原理&#xff01;&#xff01;&#xff01;&#xff01; 研究计算机硬件在底层是怎末运行的&#xff01; 计算机硬件能识别的数据 用低电平表示0 用高电平表示1 皮卡丘使高电压&#xff01; 计算机传递数据是用的电信号&#xff01;&#xff01;&#xff…

云原生-搭建dhcp服务并测试kickstart脚本

# 安装DHCP服务 【为其他服务器提供分配ip地址的功能&#xff0c;前提是其他服务器网卡必须设置成DHCP获取IP地址模式】 [rootpxe ~]# yum install dhcp.x86_64 -y[rootpxe ~]# rpm -qc dhcp /etc/dhcp/dhcpd.conf[rootpxe -]# cat /etc/dhcp/dhcpd.conf## DHCP Server Configu…

NLP论文阅读PALM

NLP论文阅读PALM 模型构成Joint Modeling of Autoencoding and AutoregressionInput&Output RepresentationsCopying Tokens from Context扩展词汇的分布复制分布最终分布 PALM: Pre-training an Autoencoding&Autoregressive Language Model for Context-conditioned …

[flink]部署模式

部署模式 在一些应用场景中&#xff0c;对于集群资源分配和占用的方式&#xff0c;可能会有特定的需求。 Flink为各种场景提供了不同的部署模式&#xff0c;主要有以下三种&#xff1a;会话模式&#xff08;Session Mode&#xff09;、单作业模式&#xff08;Per-Job Mode&…