LlamaIndex 实现 Agent

LlamaIndex 加 Ollama 实现 Agent AI Agent 是 AIGC 落地实现的场景之一,与 RAG 不同,RAG 是对数据的扩充,是模型可以学习到新数据或者本地私有数据。AI Agent 是自己推理,自己做,例如你对 AI Agent 说我要知道今天上海的天气怎么样,由于 AI 是个模型,底层通过一套复杂的算法进行相似度的比较,最终选出相似最高的答案,所以模型本身是无法访问网络去获取数据的。如果AIGC 只能回答问题,复杂任务和与外界的沟通还需要人手工处理,就没有发挥出模型应有的能力。 阅读详情

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 的高级实现方式。

LlamaIndex : 项目中,如何设计一个Agent? 我们假设这个 Agent 的任务是根据用户提供的金融问题,从一个特定的数据库或数据源中提取相关信息,然后提供分析结果。通过这些设计思路和技巧,可以在 LlamaIndex 项目中构建更加强大、可靠和高效的 Agent 系统。最重要的是,持续基于实际使用情况进行评估和迭代,不断提升 Agent 的性能和用户体验。为了完成任务,Agent 需要一组精心选择的工具,这些工具能够覆盖大部分的需求。:我们提供的工具集应该足够精简,只包括必要的工具,而不是一大堆选择。:查询金融数据,分析股票趋势,生成简要的报告。 阅读详情

相关推荐

【大模型应用开发 动手做AI Agent】LlamaIndex和基于RAG的AI开发

随着人工智能技术的飞速发展,大语言模型(Large Language Models, LLMs)在各个领域得到了广泛应用。LLMs通过从大规模文本语料中学习,可以生成连贯、自然的文本,完成复杂的自然语言处理任务。然而,LLMs仍然存在知识储备有限、推理能力不足等问题。为了进一步增强LLMs的能力,学术界和工业界开始探索LLMs与其他技术的结合,比如知识图谱、检索增强生成(Retrieval-Augmented Generation, RAG)等。

AI天才研究院 1775

如何用 LlamaIndex 实现 agent

好,我们再进一步,那什么是智能体呢?从 “智能体” 使用者的角度看,“智能体” 就像专门完成某一类任务的机器人。智能体的设计目的其实就是为了实现特定的目标或完成特定的任务。它像是一个专家一样,专门解决某一类的问题,用医生做比喻,agent就像一个专科大夫,比如骨科大夫,只能看骨科相关的病,而大模型LLM 像是一个全科大夫,什么病都能看。从设计上不一样,使用上自然就要有所区别,比如你要处理和计算复杂的数学公式,那么向专门为解决这类问题而设计的 “智能体” 提问就比直接向LLM 提问得到的答案要准确。

python1234_的博客 1095

STM32开发者必看:如何在正点原子探索者开发板上快速移植CANopenNode协议栈

本文为STM32开发者提供了在正点原子探索者开发板上快速移植CANopenNode协议栈的实战指南。文章详细介绍了从环境准备、硬件抽象层适配到协议栈初始化与测试的全过程,并分享了PDO配置与性能优化等关键技巧,帮助开发者高效实现CANopen标准化通信。

weixin_29173777的博客 464

让 Agent 说“机器能懂的话”——LlamaIndex 构建 Agent 的结构化输出策略

LlamaIndex 支持把 Agent 的回答“收口”成结构化 JSON / Pydantic 模型。本文带你理解背后的原理、常见方案、实践示例与工程思考。

python1234567_的博客 904

别再手动填序号了!用Python脚本在Arcgis属性表里实现分组自动编号(附完整代码)

本文详细介绍了如何利用Python脚本在Arcgis属性表中实现分组自动编号,告别低效的手工操作。通过核心代码解析和实战教程,帮助GIS工程师快速掌握自动化编号技术,提升工作效率并降低错误率。特别适合城市规划、国土调查等需要处理大量分组数据的场景。

weixin_42532473的博客 309

大疆 DJI Mobile SDK实战指南——从零构建Android示例开发环境

本文提供了一份详尽的DJI Mobile SDK Android开发环境搭建实战指南。文章手把手教你从注册开发者账号、获取App Key,到配置Android Studio、下载官方示例代码,最终成功运行DJI官方Android示例程序,帮助开发者快速入门无人机应用开发,避开常见编译与依赖问题。

weixin_29188043的博客 275

借助LlamaIndex实现简单Agent

智能体的构建发展是一个趋势,借助LlamaIndex简单实现Agent。本文主要借助LlamaIndex中的FunctionTool和Workflow。Workflow是使用事件流的方法实现。

make_progress的博客 546

SIwave仿真手册——电源完整性仿真之PDN阻抗的提取(四)

(想不到我这个弱鸡的博主有一天也有被催更的时候,看到后台被催的消息,我慌了,赶紧写一篇把。) 文章目录3.1 PDN阻抗的提取3.1.1手动完成PDN阻抗的提取1、创建pin group2、创建端口3、数据文件的清理和检查(参考1.3.4&1.3.5)4、添加电容模型(参考2.2.1)(==这一步很重要==)5、开始仿真6、查看仿真结果3.1.2利用向导工具完成PDN阻抗的提取1、点击图标![在这里插入图片描述](https://img-blog.csdnimg.cn/36d974339ea5449

luohuo9844的博客 1万+

LlamaIndex 实现 React Agent

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

hawk2014bj的博客 1280

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2766

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

LlamaIndex 实现ReAct Agent

要使用自定义LLM模型,需要实现类(或实现一些简单接口)——负责将文本传递给模型并返回新生成的标记。

m0_74045201的博客 498

ISE 14.7 MCS文件的生成--- Spartan3AN XC3S200AN

步骤一: Generate Programming File生成 .bit文件 步骤二: Tools——>iMPCAT 步骤三: iMPACT Flows——>双击“Create PROM File(PROM File Formatter)” 步骤四: Non-Volatile FPGA——>点击”Spartan 3AN“——>点击“绿色箭头”——>Spartan3AN(bits)——>选择“xc3s200an"——>点击”Add storage Device“—

qq_40039676的博客 2100

LlamaIndex实现Agent

摘要:LlamaIndex提供了构建智能代理的方案,支持通过ReActAgent或FunctionAgent集成工具。示例展示了如何将自定义函数(如乘法运算)或查询引擎(如SQL代理)作为工具接入,适用于OpenAI等主流LLM。FunctionAgent更适合支持工具API的LLM,开发者只需定义工具并配置系统提示即可快速构建功能代理。代码演示了从基础函数到复杂查询引擎的两种集成方式。

沐雪架构师 787

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2584

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深入了解LlamaIndex实现Agent代码和原理

将Agent或 LLM 与函数调用一起使用时,命中准确率在很大程度上依赖于工具名称(Function Name)和参数的描述(工具用途);优化它们可提升 LLM 调用这些工具的准确率。

瓦罗兰特顶级C位的博客 702

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CrewAI+LlamaIndex实现金融分析师Agent探索

CrewAI是一个创新的开源框架([Multi-Agent架构-CrewAI详解]),它允许用户利用智能代理的协作能力来完成复杂任务。与传统的聊天机器人不同,CrewAI中的代理能够相互协作、交换信息,并以团队的形式解决复杂问题。这种协作原则在AI领域的应用,使得CrewAI能够模拟一群专家协同工作的场景,每个成员都拥有独特的专长和知识,通过有效的沟通和任务分配,实现超越个体能力的成果。LlamaIndex是另一个用户友好的框架,它支持开发者利用自己的数据轻松构建基于LLM(大型语言模型)的应用程序。

python1234_的博客 1661

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Llamaindex实战-Agent-实现简单运算的Agent(本地部署-可断网运行)

本文通过一个简单的例子来介绍llamaindex的Agent的使用。该例子会通过对话来让Agent调用对应的工具函数实现两个数相乘的运算。

zg_hover的专栏 733

解密prompt系列55.Agent Memory的工程实现 - Mem0 & LlamaIndex

对比llamaindex和mem0的一些差异包括维度LlamaIndexMem0技术差异记忆架构显式区分长/短期记忆统一持久化记忆压缩触发长度触发压缩每轮都自动更新避免信息滞后压缩机制固定事实类型多维度偏好抽取(7类)更全面的用户画像存储介质向量库/文本向量库+知识图谱更高压缩的记忆存储记忆一致性无冲突处理(只有超长压缩)每轮都做记忆消歧解决记忆冲突但当前的记忆工程化处理方案还面临一些挑战认知型压缩。

weixin_40363825的博客 95
上一篇: LlamaIndex 实现 RAG(五)- RAG 评估
下一篇: LlamaIndex 工作流
hawk2014bj
博客等级 码龄12年 1013粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值