LlamaIndex 实现 Agent

news2024/9/22 18:02:22

RAG 是在数据层面为大模型提供更多、更新的外部知识,而 Agent (智能体),为大模型扩展了推理业务的能力。数据是静态的,数据周期可能是天、小时甚至到秒,通过 RAG 实现时,需要调用对应系统的 API 去实时获取相关数据并组合发给 LLM,如果是一系列动作完成一个需求,前一个动作的输出是下一个动作的输入,使用 RAG 处理就相当复杂,也没有利用到大模型强大的推理能力。

Agent 的推出很好的解决了模型调用工具能力(Function Call),工具能力最早始于 ChatGPT,例如,我们想了解当前北京的气温,需要实时数据,有了工具能力就可以调用 API 获取是实时数据。本文将介绍如果通过 LlamaIndex 实现 Agent。

ReActAgent

LlamaIndex 实现 Agent 需要导入 ReActAgent 和 Function Tool,

from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool

ReActAgent 是什么?

ReActAgent 通过结合推理(Reasoning)和行动(Acting)来创建动态的 LLM Agent 的框架。该方法允许 LLM 模型通过在复杂环境中交替进行推理步骤和行动步骤来更有效地执行任务。ReActAgent 将推理和动作形成了闭环,Agent 可以自己完成给定的任务。

一个典型的 ReActAgent 遵循以下循环:

  1. 初始推理:代理首先进行推理步骤,以理解任务、收集相关信息并决定下一步行为。
  2. 行动:代理基于其推理采取行动——例如查询API、检索数据或执行命令。
  3. 观察:代理观察行动的结果并收集任何新的信息。
  4. 优化推理:利用新信息,代理再次进行推理,更新其理解、计划或假设。
  5. 重复:代理重复该循环,在推理和行动之间交替,直到达到满意的结论或完成任务。

在这里插入图片描述

本地模型实现 Agent

实现最简单的代码,通过外部工具做算术题,只是一个简单的例子,这个不用 Agent,大模型也可以回答。

from llm import get_local_ollama
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool

llm = get_local_ollama()

def multiply(a: float, b: float) -> float:
    """Multiply two numbers and returns the product"""
    return a * b


multiply_tool = FunctionTool.from_defaults(fn=multiply)


def add(a: float, b: float) -> float:
    """Add two numbers and returns the sum"""
    return a + b


add_tool = FunctionTool.from_defaults(fn=add)

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

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



在这里插入图片描述
当我们问大模型一个天气的问题,当没有工具时,大模型这么回答,作为大语言模型,他不知道天气情况并给出去哪里可以查到天气情况。
在这里插入图片描述
现在为我们的 Agent 添加一个查询天气的方法,返回假数据做测试

def get_weather(city: str) -> int:
    """
    Gets the weather temperature of a specified city.

    Args:
    city (str): The name or abbreviation of the city.

    Returns:
    int: The temperature of the city. Returns 20 for 'NY' (New York),
         30 for 'BJ' (Beijing), and -1 for unknown cities.
    """

    # Convert the input city to uppercase to handle case-insensitive comparisons
    city = city.upper()

    # Check if the city is New York ('NY')
    if city == "NY":
        return 20  # Return 20°C for New York

    # Check if the city is Beijing ('BJ')
    elif city == "BJ":
        return 30  # Return 30°C for Beijing

    # If the city is neither 'NY' nor 'BJ', return -1 to indicate unknown city
    else:
        return -1

weather_tool = FunctionTool.from_defaults(fn=get_weather)

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

response = agent.chat("纽约天气怎么样?")

可以看到模型的推理能力很强,将纽约转成了 NY。
在这里插入图片描述
可以在 arize_phoenix 中看到 agent 的具体提示词,工具被装换成了提示词。
在这里插入图片描述

总结

ReActAgent 使得业务自动向代码转换成为可能,只要有 API 模型就可以调用,很多业务场景都适用,LlamaIndex 提供了一些开源的工具实现,可以到官网查看。

虽然 Agent 可以实现业务功能, 但是一个 Agent 不能完成所有的功能,这也符合软件解耦的设计原则,不同的 Agent 可以完成不同的任务,各司其职,Agent 之间可以进行交互、通信,类似于微服务。后续的文章中,我们将继续介绍 Agent 的高级实现方式。

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

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

相关文章

uni-app组件

一. 什么是组件,有什么好处? 在uni-app中,组件是构成应用的基本单位,它们是用来定义用户界面的一部分,并且通常包含了视图和逻辑。组件的设计使得开发者能够以声明式的方式构建应用界面,并且通过组件化的开发方式来提高代码的复…

vue-cli搭建项目过程

一.前言 传统的前端项目架构: 指的就是一个项目中有很多个HTML文件,每一个HTML文件都是相互独立的,如果需要在页面中导入一些外部依赖的css,js文件,就需要在每一个html文件中都导入就会显得特别麻烦,而且这些外部依赖…

详细git使用教程以及git base here命令行

0 下载 这个是官网下载特别慢 Git - Downloads (git-scm.com) 1 最基本操作与初始配置 1.1,linux的基本命令可用 下载安装后鼠标右键选git base here即可打开 1.2,git init /git clone初始化,创建本地仓库 出现.git隐藏文件 git clone “…

Big Model Weekly | 第34期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 MiniCPM-V: A GPT-4V Level MLLM on Your Phone 近期多模态大型语言模型(MLLMs)的快速发展,从根本上改变了人工智能研究和产业的格局,为实现人工智能的下一个重…

Java去掉字符串中的特殊符号只保留中文数字和字母

今天在做一个导入功能发现用户导入的数据有特殊符号,于是想着给他去掉,搜了一下发现大多数方法都只保留了字母数字,连中文都去掉了,这很明显不符合我的需求 直接上代码 /*** author Sakura* date 2024/8/27 15:18*/ public clas…

Python(C++)自动微分导图

🎯要点 反向传播矢量化计算方式前向传递和后向传递计算方式图节点拓扑排序一阶二阶前向和伴随模式计算二元分类中生成系数高斯噪声和特征二元二次方程有向无环计算图超平面搜索前向梯度下降算法快速傅里叶变换材料应力和切线算子GPU CUDA 神经网络算术微分 Pytho…

使用谷歌浏览器查看原型

需求人员给了一个原型文件包,用谷歌浏览器打开提示以下内容: 找到需求人员发的原型文件包 进入到resources-->chrome,找到axure-chrome-extension.crx,复制一份出来命名为axure-chrome-extension.tar,然后在该目录下…

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%

在竞争激烈的消费金融市场中,有效利用海量数据、提升业务运营效率是赢得市场的关键。早期招联采用典型的 Lambda 架构提供业务报表、数据运营、个性推荐、风险控制等数据服务,而 Lambda 过多的技术栈也引发了数据孤岛、查询效率不足、代码复用性差以及开…

AI算法平台训练站裸土检测算法训练裸土检测算法源码

在全球化进程加快与环境问题日益突出的今天,裸土检测成为了环境监测和土壤管理中不可或缺的一环。裸土指的是没有植被覆盖的土壤区域,这些区域易受侵蚀,并可能导致土壤流失和环境退化。为了有效应对这些问题,裸土检测算法应运而生…

Redis持久化与主从同步

1 淘汰策略 127.0.0.1:6379> help expireEXPIRE key secondssummary: Set a keys time to live in secondssince: 1.0.0group: generic127.0.0.1:6379> help PEXPIREPEXPIRE key millisecondssummary: Set a keys time to live in millisecondssince: 2.6.0group: gener…

【CSP:202112-1】序列查询(Java)

题目链接 202112-1 序列查询 题目描述 求解思路 模拟:a数组可以看作是记录 f ( x ) f(x) f(x) 函数值发生变化出的 x x x 点(每次自增1)。因此将每段相同数值的 f ( x ) f(x) f(x) 用乘法计算出来即可,最后记得要加上最后一…

Java Web —— 第九天(事务)

事务管理 & AOP 事务回顾 概念 事务 是一组操作的集合,它是一个不可分割的工作单位,这些操作 要么同时成功,要么同时失败 操作 开启事务(一组操作开始前,开启事务): start transaction / begin 提交事务(这组操作全部成功…

服务器访问端口命令

服务器访问端口命令是一组用于管理服务器端口的命令行指令。服务器端口是用于与外部设备或应用程序进行通信的逻辑通道,它允许数据在服务器和其他设备之间传输。以下是一些常见的服务器访问端口命令。 netstat:这个命令用于检查服务器上当前的网络连接和…

FPGA第 5 篇,FPGA技术优略势,FPGA学习方向,FPGA学习路线(FPGA专业知识的学习方向,FPGA现场可编程门阵列学习路线和方向)

前言 前几篇讲了一下FPGA的发展和应用,以及未来前景。具体详细,请看 FPGA发展和应用,以及未来前景https://blog.csdn.net/weixin_65793170/category_12665249.html 这里我们来,记录一下,FPGA专业知识的学习路线 一.…

OpenAI remove key access while using AAD authentication

题意:“OpenAI 在使用 AAD 认证时移除了密钥访问权限” 问题背景: I am calling Azure OpenAI API in my python code. To set it up, we need to provide a few parameters, one of which is openai.api_key. There are 2 options to get this value -…

力扣hot100-动态规划

文章目录 概念动态规划基本思想常见步骤常用技巧常见问题类型 动态规划题目题目: 爬楼梯题解 概念 动态规划 动态规划(Dynamic Programming,简称DP)是一种解决问题的算法思想,通常用于优化问题。它的核心思想是将一个…

K8S声明式的管理方式

一、K8S声明式的管理方式: 1、适合对资源的修改操作 2、声明式管理依赖于yaml文件,所有的内容都在yaml文件中声明 3、编辑好的yml文件还是要靠陈述式命令发布到K8S集群中 二、K8S中支持三种声明式的资源管理方式: 1、deployment格式&…

如何用Java SpringBoot Vue搭建创新创业学分管理系统?实战教程

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

GLM大模型 - CogVideoX:5B 开源,2B 转为 Apache 协议

8月6日,我们发布并开源了CogVideoX-2B模型,受到广大开发者的欢迎。 为了促进社区的自主使用和开放式创新,我们现决定将参数规模更大、性能更强的产品级模型 CogVideoX-5B 开源,同时 CogVideoX-2B 的开源协议调整为更加开放的Apac…

阿里云链接远程桌面Ubuntu22.4,出现的各种问题汇总,太艰辛,所以发出来,帮助一下后边的小伙伴

问题一:远程登录桌面计算机名写什么:写ip,公网ip,用户名不要填 问题二 Win10远程连接Ubuntu20.04桌面黑屏的问题 如果你是用浏览器连接上了云服务器,那么请先logout!