借助LlamaIndex实现简单Agent

LlamaIndex 控制Agent代理推理循环的直接返回FunctionTool工具 控制代理推理循环的直接返回工具所有工具都有一个的选项——如果这个选项设置为True,并且关联的工具被调用(没有其他工具被调用),那么代理的推理循环将结束,并且工具的输出将直接返回。这在你知道工具的输出已经足够好时,可以用来加快响应时间,避免代理重写响应,并用于结束推理循环。本笔记本通过一个例子来介绍,在这个例子中,代理需要从用户那里收集信息以完成餐厅预订。所有工具都提供了一个选项——如果此选项设为True。 阅读详情

借助LlamaIndex实现简单Agent

1 简介

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

2 构建公共类

由于LlamaIndex中的OpenAI无法直接连接国内大模型,因此需要使用OpenAI构建CustomLikeOpenAI。

from typing import Any

from llama_index.core.base.llms.types import CompletionResponseGen, LLMMetadata, CompletionResponse
from llama_index.core.llms import CustomLLM
from openai import OpenAI
from pydantic import Field


class CustomLikeOpenAI(CustomLLM):
    model: str = Field(description="自定义模型名称")
    api_key: str = Field(description="自定义API Key")
    api_base: str = Field(description="自定义API地址")
    context_window: int = Field(default=32768, description="上下文窗口大小")
    temperature: float = Field(ge=0, le=1, default=0.3, description="设置温度,值域须为 [0, 1]")
    num_output: int = Field(default=8192, description="设置max_tokens")

    def __init__(self, **data):
        # 必须调用父类初始化
        super().__init__(**data)

        # 创建对象
        self._client = OpenAI(
            api_key=self.api_key,
            base_url=self.api_base
        )

    @property
    def metadata(self) -> LLMMetadata:
        """Get LLM metadata."""
        return LLMMetadata(
            context_window=self.context_window,
            num_output=self.num_output,
            model_name=self.model
        )

    def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:
        """
        生成文本

        :param prompt: 添加提示词
        :param kwargs: 其他相关参数
        :return: CompletionResponse
        """
        # 构建生成
        completion = self._client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "user", "content": prompt}
            ],
            temperature=self.temperature,
            max_tokens=self.num_output
        )
        # 返回值
        return CompletionResponse(text=completion.choices[0].message.content)

    def stream_complete(self, prompt: str, **kwargs: Any) -> CompletionResponseGen:
        """
        生成流式文本

        :param prompt: 提示词
        :param kwargs: 其他参数
        :return: CompletionResponseGen迭代器
        """

        # 根据需要可以不实现,如果不想实现使用下面代码即可
        # raise NotImplementedError("Streaming not supported")

        # 构建数据流
        stream = self._client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "user", "content": prompt}
            ],
            temperature=self.temperature,
            max_tokens=self.num_output,
            stream=True
        )
        # 遍历数据流
        for chunk in stream:
            # 获取新文本
            delta = chunk.choices[0].delta

            # 判断数据是否存在
            if delta.content:
                yield CompletionResponse(text=delta.content, delta=delta.content)

3 函数调用实现Agent

源代码

# 使用LlamaIndex中的ReActAgent和函数调用的方法,实现Agent
# ReActAgent集成AgentRunner/AgentWorker 此方法LlamaIndex未来会被舍弃,推荐使用AgentWorkflow 和 Workflows.
# 需要安装的组件
"""
pip install llama-index
pip install llama-index-llms-openai-like
"""

import asyncio

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

from my_custom_rag.custom_like_openai import CustomLikeOpenAI


def add(x: int, y: int) -> int:
    """Useful function to add two numbers."""
    return x + y


def multiply(x: int, y: int) -> int:
    """Useful function to multiply two numbers."""
    return x * y


async def main():
    # 函数回调
    tools = [
        FunctionTool.from_defaults(fn=add, description="实现加法"),
        FunctionTool.from_defaults(fn=multiply, description="实现乘法")
    ]

    # Llama index中的OpenAILike调用千问和Kimi不能使用,一直报参数错误,所以只能自定义了
    llm = CustomLikeOpenAI(
        model="XXXX",
        api_base="XXXX",
        api_key="XXXX"
    )

    # 构建Agent
    agent = ReActAgent.from_tools(
        llm=llm,
        verbose=True,
        tools=tools
    )
    ret = agent.chat(message="1乘以10等于几")
    print(ret)


if __name__ == "__main__":
    asyncio.run(main())

截图

4 WorkFlow实现Agent

运行流程

flowchart TD
	subgraph 说明
    A1[(1)找到启动的方法,含有StartEvent参数的方法 ] --> B1
    B1[(2)执行第一个任务流,根据含有StartEvent参数的方法的输出找到的方法 ] --> C1
    C1[(3)执行任务流,根据上一个方法的输出找到下一个方法] --> D1
    D1[(4)执行结束,直到执行方法的返回值是StopEvent]
    end
    
    subgraph 函数
    A2[(1)call_tool] --> B2
    B2[(2)generate_joke] --> C2
    C2[(3)……] --> D2
    D2[(4)critique_joke]
    end    

代码

# 需要安装的组件
"""
pip install llama-index
pip install llama-index-llms-openai-like
"""


import asyncio

from llama_index.core.workflow import (
    Event,
    StartEvent,
    StopEvent,
    Workflow,
    step
)

from my_custom_rag.custom_like_openai import CustomLikeOpenAI


class ToolCallEvent(Event):
    """
    用于回调返回数据
    """
    data: str


class JokeEvent(Event):
    """
    笑话实体类
    """
    joke: str


class JokeFlow(Workflow):
    # Llama index中的OpenAILike调用千问和Kimi不能使用,一直报参数错误,所以只能自定义了
    llm = CustomLikeOpenAI(
        model="XXXX",
        api_base="XXXX",
        api_key="XXXX"
    )

    @step
    async def call_tool(self, ev: StartEvent) -> ToolCallEvent:
        """
        生成笑话
        :param ev: 开始事件
        :return: 返回笑话事件
        """
        topic = ev.topic

        prompt = f"根据主题 {topic} 拓展相关主题."
        response = await self.llm.acomplete(prompt)
        print("生成的相关主题:", response)
        return ToolCallEvent(data=str(response))

    @step
    async def generate_joke(self, ev: ToolCallEvent) -> JokeEvent:
        """
        评价笑话事件

        :param ev: 笑话事件
        :return: 停止事件
        """
        prompt = f"写一个关于{ev.data}主题的笑话."
        response = await self.llm.acomplete(prompt)
        print("生成的笑话:", response)

        return JokeEvent(joke=str(response))

    @step
    async def critique_joke(self, ev: JokeEvent) -> StopEvent:
        """
        评价笑话事件

        :param ev: 笑话事件
        :return: 停止事件
        """
        joke = ev.joke

        prompt = f"请分析和评价笑话: {joke}"
        response = await self.llm.acomplete(prompt)
        return StopEvent(result=str(response))


async def main():
    w = JokeFlow(timeout=60, verbose=True)
    result = await w.run(topic="水果")
    print(str(result))


if __name__ == "__main__":
    asyncio.run(main())
    

截图

侧杆试验 - 高速撞击 - 显式动力学 - ANSYS Workbench 显式动力学是一种时间积分方法,用于在速度很重要时执行动态模拟。显式动力学考虑快速变化的条件或不连续事件,例如自由落体、高速撞击和施加的负载。由于这些“非线性动力学”已集成到模拟中,因此显式动力学是模拟高度瞬态物理现象的首选。有些侧面碰撞是指车辆侧向撞上路边的坚硬物体,如树木或电线杆。这通常是由于驾驶员失去控制、超速、误判拐角或在湿滑路面上打滑造成的。 阅读详情

相关推荐

MATLAB实战:Gardner定时同步算法实现与BER曲线优化指南

本文详细介绍了Gardner定时同步算法在MATLAB中的实现与优化方法,重点解析了算法原理、关键步骤实现及BER曲线绘制中的常见问题解决方案。通过优化参数设置和系统架构,提升数字通信系统的符号同步性能,为QPSK、QAM等调制系统提供实用参考。

weixin_29085865的博客 231

【LLM-agent】(task2)用llama-index搭建AI Agent

# note - LlamaIndex 实现 Agent 需要导入 `ReActAgent` 和 `Function Tool`,循环执行:推理、行动、观察、优化推理、重复进行。可以在 `arize_phoenix` 中看到 agent 的具体提示词,工具被装换成了提示词 - ReActAgent 使得业务自动向代码转换成为可能,只要有 API 模型就可以调用,很多业务场景都适用,LlamaIndex 提供了一些开源的工具实现,可以到官网查看。 - 虽然 Agent 可以实现业务功能, 但是一个 Agen

发现问题,并解决问题,批判性思维 2346

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1882

如何用 LlamaIndex 实现 agent

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

python1234_的博客 1095

RV1126上YOLOv8部署实战:从模型转换到板端推理的完整避坑指南

本文提供了在瑞芯微RV1126芯片上部署YOLOv8目标识别算法的完整实战指南。内容涵盖从模型转换、环境搭建到板端推理代码编写的全流程,重点解析了RKNN-Toolkit使用、量化配置、内存优化及后处理实现等关键环节的常见问题与解决方案,旨在帮助开发者高效避坑,实现边缘AI应用的稳定落地。

pz89012345的博客 568

手把手教你校准垂起固定翼(VTOL)遥控器与电调:从零到飞的完整流程

本文详细介绍了垂起固定翼(VTOL)遥控器与电调的校准流程,从基础认知到飞行前检查,涵盖遥控器通道配置、电调校准、舵机方向调整等关键步骤。通过图文并茂的指导,帮助无人机爱好者安全完成VTOL调试,确保首飞成功。特别强调多旋翼模式、过渡模式和固定翼模式的设置要点,适合新手和进阶用户参考。

jenkins8butler的博客 357

LlamaIndex实现Agent

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

沐雪架构师 786

利用autojs制作抢购支付宝消费劵的手机脚本

前期准备工作 1.打开支付宝,点击中间的抢消费券的广告 2.点击左上角,将抢购页面添加到首页 3.查看支付宝首页是否出现消费劵 . autojs代码 "auto"; functiontaskstart(){ sleep(1000); launchApp('支付宝'); toast("正在打开支付宝应用"); sleep(1000); varxf=textContains("消费").findOne().bounds(); ...

洛阳泰山的博客 1万+

LlamaIndex 实现 Agent

ReActAgent 使得业务自动向代码转换成为可能,只要有 API 模型就可以调用,很多业务场景都适用,LlamaIndex 提供了一些开源的工具实现,可以到官网查看。虽然 Agent 可以实现业务功能, 但是一个 Agent 不能完成所有的功能,这也符合软件解耦的设计原则,不同的 Agent 可以完成不同的任务,各司其职,Agent 之间可以进行交互、通信,类似于微服务。后续的文章中,我们将继续介绍 Agent 的高级实现方式。

hawk2014bj的博客 1467

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 210

Vue3 - 实现集成配置百度语音识别转文字,长按或开启录音并将录音文件实时转换为文字,上传音频文件利用百度语音识别API转换为文本并展示(vue3百度智能云API实现上传录音文件并转换成文字案例)

vue3对接百度智能云语音识别,vue3 h5移动端网页中实现语音识别,百度语音识别录音转文字_百度智能云,vue3如何使用百度语音识别,如何将语音转文字,使用vue3实现录音并将录音转换为文字,vue3如何实现语音输入功能功能,vue3集成百度智能云API实现录音转文字详细教程完整示例代码demo,VUE3使用百度语音识别语音转文字,vue调用百度语音识别,vue3百度语音识别文字并展示功能,vue3免费语音转文本api,百度语音识别申请配置教程,Vue3项目配置自定义界面百度语音识别转文字和原生使用方式

🏆 前端领域优质创作者 2728

开发AI Agent到底用什么框架——LangGraph VS. LlamaIndex

​今天我们来讨论一下两个具体的开发框架,LangGraph和LlamaIndex,结合上篇我们对Agent概念本质的剖析,来做一个提纲挈领(而非细节)的对比。

2401_82469710的博客 914

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

m0_46364958的博客 4345

AI Agent框架之争:LangGraph vs LlamaIndex

AI Agent 开发存在多套工程体系,当前正处群雄混战的 “战国时代”,从业者选择框架需更审慎思考。​今天结合 Agent 概念本质剖析,对 LangGraph 和 LlamaIndex 两大框架做提纲挈领式对比(非细节)。​选这两者,一是因它们属 AI 时代 “老牌” 框架、使用者广;二是篇幅有限,需逐一探讨(二者能力不止于 Agent 开发,市面框架也远不止这两个)。

优快云_430422的博客 941

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LangGraph 和 LlamaIndex怎么选?AI Agent开发者的入门指南

市面上的AI开发框架远不止这两个,而且在Agent开发之外,LangGraph和LlamaIndex也都包含了众多其他的能力。之所以本篇我选择这两个框架进行对比,一个是因为它们都算是AI时代「老牌」的框架了,使用者广泛;另一个则是因为篇幅有限,我们需要一个一个地来聊。

2401_85373691的博客 725

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

用 LlamaIndex GraphDBCypherReader 从图数据库加载文档:Cypher 查询到 LlamaIndex Document 完整指南

本篇文章以 LlamaIndex 官方 reader 集成包 `llama-index-readers-graphdb-cypher` 为核心,系统讲解如何使用 `GraphDBCypherReader` 将图数据库中的 Cypher 查询结果转换为 LlamaIndex 的标准 `Document` 对象。你将掌握该 Reader 的安装方式、初始化参数、查询调用方法、YAML 序列化原理,以及

gitblog_00824的博客 1011

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

AI Agent开发大比拼:LangGraph与LlamaIndex,哪个框架更给力?

本文对比了LangGraph和LlamaIndex两个AI开发框架的Agent抽象设计。两个框架都支持从固定工作流到自主Agent的统一概念(AgenticSystem),但实现方式不同:LangGraph采用基于图的编排框架,显式定义节点和边;LlamaIndex则通过事件驱动机制,用step和事件隐式表达执行关系。文章详细分析了两者在多Agent支持、状态管理、并发处理等方面的差异,指出虽然底层设计哲学不同,但都具备动态编排能力以支持不同自主程度的系统。

2401_84494441的博客 1082

揭秘开发AI Agent的最佳框架:LangGraph与LlamaIndex,谁更胜一筹?

本文对比分析了AI Agent开发的两大主流框架LangGraph和LlamaIndex的核心设计理念。二者在底层架构上存在显著差异:LangGraph采用基于Pregel模型的显式图编排系统,通过节点和边构建工作流;LlamaIndex则采用事件驱动的隐式编排机制。尽管实现方式不同,二者都支持动态编排特性,能够构建不同自主程度的Agent系统。文章从抽象理念、multi-agent支持、状态管理等维度展开对比,指出两大框架正朝着融合方向演进,反映了AI开发领域理想主义与务实路线的统一趋势。

m0_65555479的博客 1001

实操干货!MCP全解析,一步步教你借助第三方MCP Server开发Agent

随着最近Manus带动Agent应用的火热,MCP(模型上下文协议)成为很多社区热议的话题。今天为带大家带来深度的MCP解析与实操应用指南,相信看完这篇你应该可以立刻上手MCP。

大模型研究中心 1616

从零开始学LlamaIndex Agent:收藏这份指南,轻松掌握大模型智能体开发

本文介绍了LlamaIndex框架中的三种Agent模式(FunctionAgent、ReActAgent、CodeActAgent)及其应用。FunctionAgent利用大模型的Function Call能力调用工具,ReActAgent通过提示词驱动推理,CodeActAgent则支持Python代码执行。文章通过代码示例展示了如何构建Agent、使用上下文实现记忆功能、人机交互(HITL)、多Agent协作和结构化输出等技术。此外,还介绍了如何利用事件驱动机制实现复杂工作流,为开发者提供了构建智能体

2301_80239908的博客 912

大模型Agent应用:LangChain、Langgraph、LlamaIndex、Spring AI、AutoGen、Semantic Kernel

总的来说,Spring AI 是一个为 Java 开发者量身定制的 GenAI 开发框架。它不仅降低了入门门槛,还提供了强大的功能和灵活性,非常适合企业级应用开发。无论是企业还是个人开发者,都可以利用 Spring AI 的强大功能来加速开发进程,同时保持高度的可扩展性和模块化设计。

star_nwe的博客 1965

AI Agent开发必备:LangGraph与LlamaIndex框架全方位对比,建议收藏备用

本文深入对比LangGraph和LlamaIndex两大AI Agent开发框架,从Agent抽象方式看,LangGraph基于图结构显式定义节点和边,LlamaIndex采用事件驱动隐式定义关系;多Agent系统构建上,两者均支持动态编排;关键特性对比包括接口易用性、状态管理、并发支持和streaming能力。两者都具备动态调整执行顺序的能力,这是支持Agent自主性的核心,为AI Agent开发提供了不同但有效的技术路径。

2401_84815887的博客 1255

我惊了!构建AI智能体居然这么简单?LlamaIndex保姆级教程,小白也能造出“钢铁侠”!

其通过。

m0_59235945的博客 900

LlamaIndex LegacyOfficeReader 实战:借助 Apache Tika 解析 Word 97(.doc)等旧版 Office 文档

在 RAG 与文档智能场景中,除了现代 `.docx`、`.pdf` 格式,企业知识库中还沉淀着大量 Word 97(`.doc`)等旧版二进制 Office 文档。`llama-index-readers-legacy-office` 是 LlamaIndex 官方集成仓库中专用于处理这类历史文档的加载器:它封装了 Apache Tika 服务端,将 `.doc` 等旧格式解析为统一的 `Doc

gitblog_00905的博客 510
上一篇: Docker安装hoppscotch
下一篇: 简单使用MCP
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值