跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 LlamaIndex 实现 Agent 智能体

Agent 是具备感知、规划、行动能力的智能系统。基于 LlamaIndex 框架,详解 Agent 的核心原理与实现方式。通过代码示例展示了工具调用(Function Tool)和检索增强生成(RAG)的集成方法,并探讨了 Agent 的记忆机制。内容涵盖从基础定义到复杂场景的完整构建流程,帮助开发者快速掌握 LLM 应用开发中的智能体技术。

花里胡哨发布于 2025/2/7更新于 2026/7/2338 浏览
基于 LlamaIndex 实现 Agent 智能体

基于 LlamaIndex 实现 Agent 智能体

Agent 是什么?

在当前的 AIGC 应用生态中,Agent(智能体)已成为不可或缺的核心功能。从字面意义上理解,Agent 意为'代理',但在国内主流大模型产品的定义中,绝大多数将其称为'智能体'。

智能体的定义与定位

不同厂商对 Agent 的定义略有差异,但核心逻辑一致:

  • 智谱清言:定义为'智能体'。
  • 通义千问:定义为'智能体'。
  • Kimi:定义为'私人助理'。
  • 扣子 (Coze):定义为'智能体'。

从使用者角度看,智能体就像专门完成某一类任务的机器人。其设计目的为了实现特定的目标或完成特定的任务。它像是一个专家,专门解决某一类问题。例如,医生比喻中,Agent 如同专科大夫,只能看骨科相关的病;而大模型 LLM 则像全科大夫,什么病都能看。

在设计上,Agent 与通用 LLM 有显著区别。处理复杂数学公式或特定领域知识时,向专门为解决问题设计的 Agent 提问,比直接向 LLM 提问得到的答案更准确。

Agent 的创建和使用

以智谱清言为例,创建智能体时有不少配置项,其中两个最重要的配置是:

  1. 配置信息 (Prompt Engineering):包括 System Prompt 和 Role Prompt。这决定了 Agent 的角色设定和行为准则。
  2. 知识库 (RAG):加上知识库后,Agent 实际上变成了一个 RAG(检索增强生成)应用。这让 Agent 外挂一个用户上传的知识库,学习上传的知识后,能更准确地回答问题。

除了联网能力和代码能力外,知识库的集成是提升 Agent 专业性的关键。

基于 LlamaIndex 的 Agent 实现

LlamaIndex 是一个强大的数据框架,用于构建 LLM 应用。使用 LlamaIndex 实现一个简单的 Agent Demo 相对容易。

环境准备

首先确保安装了必要的依赖包:

pip install llama-index llama-index-llms-glm

基础工具调用 Demo

我们可以利用 ReActAgent 来实现工具调用。以下代码展示了如何创建一个能够执行加减乘除运算的 Agent。

import sys
import os

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))

from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool
# 假设已自定义 GLM4LLM 封装
from llamaindex_demo.custom.custom_llm_glm import GLM4LLM


def multiply(a: float, b: float) -> :
    
     a * b


 () -> :
    
     a + b


 ():
    
    multiply_tool = FunctionTool.from_defaults(fn=multiply)
    add_tool = FunctionTool.from_defaults(fn=add)

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

    
    response = agent.chat()

    (response)


 __name__ == :
    main()
float
"""Multiply two numbers and returns the product"""
return
def
add
a: float, b: float
float
"""Add two numbers and returns the sum"""
return
def
main
# 注册工具
# 初始化 LLM
# 创建 ReActAgent 实例
True
# 发起查询
"20+(2*4)等于多少?使用工具计算每一步"
print
if
"__main__"

代码解析:

  1. FunctionTool:将 Python 函数包装为 Agent 可调用的工具。
  2. ReActAgent:采用 Reasoning + Acting 模式,让 LLM 思考下一步该做什么动作。
  3. LLM 配置:此处使用了 GLM-4 Plus 模型作为推理核心。

输出分析: Agent 会将提问中的计算步骤分别利用自定义的函数 add 和 multiply,而不是直接由大模型估算。这体现了 Agent 的控制力,除了使用 Prompt 外,开发者对处理流程拥有更大的控制权。

集成 RAG 知识库

为了增强 Agent 的知识获取能力,可以将 RAG 引擎作为工具加入 Agent。

import os
import sys
import re

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))

from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool, QueryEngineTool
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llamaindex_demo import logger
from llamaindex_demo.custom.custom_llm_glm import GLM4LLM
from llamaindex_demo.custom.custom_embedding_zhipu import ZhipuEmbeddings

# 设置环境变量,禁用 tokenizers 的并行处理
os.environ["TOKENIZERS_PARALLELISM"] = "false"


def toHtml(text: str) -> str:
    """遇到英文单词就用 html 标签包裹"""
    return re.sub(r"(\b[a-zA-Z]+\b)", r'<span style="color:red;">\1</span>', text)


def run_glm4_query_with_embeddings(query: str):
    # 从指定目录加载文档数据
    documents = SimpleDirectoryReader(input_files=["./data/sample.txt"]).load_data()

    # 设置 LLM 和嵌入模型
    Settings.llm = GLM4LLM()
    Settings.embed_model = ZhipuEmbeddings()

    # 创建索引和查询引擎
    index = VectorStoreIndex.from_documents(documents, show_progress=True)
    query_engine = index.as_query_engine(streaming=True)

    # 将查询引擎包装为工具
    yc_tool = QueryEngineTool.from_defaults(
        query_engine,
        description="关于作者背景知识的 RAG 引擎",
    )

    to_html_tool = FunctionTool.from_defaults(fn=toHtml)

    # 创建 Agent,包含 RAG 工具和文本处理工具
    agent = ReActAgent.from_tools(
        [to_html_tool, yc_tool],
        verbose=True,
    )

    # 执行查询
    logger.info("agent 查询结果:")
    response = agent.chat(query)

    print(response)
    logger.info("\n查询完成")


def main():
    run_glm4_query_with_embeddings("请描述一下作者的求学经历,并将英文用 html 高亮显示")


if __name__ == "__main__":
    main()

运行效果说明: 在此示例中,yc_tool 是通过加载本地文件自定义的 RAG 应用,并加入到 Agent 的工具列表中。Agent 在执行过程中会先调用 RAG 工具获取相关知识,再调用 toHtml 工具进行格式处理。日志输出显示了 Agent 的思考过程(Thought)、行动(Action)及观察结果(Observation),验证了多工具协作的能力。

Agent 的记忆功能

Agent 具备记忆功能,这意味着它能记住之前的对话上下文,而不是将每次提问视为独立事件。

在 LlamaIndex 中,可以通过配置 ConversationBufferMemory 或其他记忆机制来实现。当在一个流程中发起多次提问时,Agent 能够结合历史对话信息进行回答。这对于多轮对话场景至关重要。

深入理解 Agent 架构

ReAct 模式详解

ReAct (Reasoning + Acting) 是目前最流行的 Agent 范式。其工作流程如下:

  1. Thought:根据当前输入和历史,决定需要采取什么行动。
  2. Action:选择具体的工具并传入参数。
  3. Observation:执行工具后返回的结果。
  4. Final Answer:综合所有信息给出最终回复。

这种循环机制允许 Agent 自主规划任务路径,处理复杂问题。

工具注册与管理

在 LlamaIndex 中,工具可以是任意 Python 函数,也可以是外部 API 的封装。关键在于正确描述工具的 description 和参数类型,以便 LLM 能准确理解何时调用该工具。

错误处理与鲁棒性

在实际应用中,Agent 可能会遇到工具调用失败、API 超时或 LLM 幻觉等问题。建议采取以下措施:

  • 重试机制:对失败的 API 调用实施指数退避重试。
  • 超时控制:限制每个工具调用的最大耗时。
  • 人工干预:对于高风险操作,保留人工确认环节。

最佳实践与总结

性能优化

  1. 缓存策略:对相同的查询请求进行缓存,减少重复的向量检索和 LLM 调用。
  2. 流式输出:使用 streaming=True 提升用户体验。
  3. 异步处理:在支持的环境中,尽量使用异步 IO 提高并发处理能力。

局限性

尽管 Agent 功能强大,但仍存在局限性:

  • 成本:多轮思考和工具调用会增加 Token 消耗。
  • 延迟:复杂的规划过程可能导致响应时间变长。
  • 不可控性:Agent 可能产生意外的行为,需做好监控。

结语

学习 AI 大模型是当前科技发展的趋势。通过掌握 LlamaIndex 等框架,开发者可以构建出具备感知、规划和行动能力的智能体,从而更好地理解和应用人工智能技术。这不仅能为职业发展增添竞争力,还能创造实际的业务价值。

本文详细讲解了如何使用 LlamaIndex 实现 Agent 智能体,涵盖了从基础定义、工具调用、RAG 集成到记忆管理的完整流程。希望这些内容能帮助你在 AI 应用开发道路上少走弯路,快速构建出高质量的智能系统。

目录

  1. 基于 LlamaIndex 实现 Agent 智能体
  2. Agent 是什么?
  3. 智能体的定义与定位
  4. Agent 的创建和使用
  5. 基于 LlamaIndex 的 Agent 实现
  6. 环境准备
  7. 基础工具调用 Demo
  8. 假设已自定义 GLM4LLM 封装
  9. 集成 RAG 知识库
  10. 设置环境变量,禁用 tokenizers 的并行处理
  11. Agent 的记忆功能
  12. 深入理解 Agent 架构
  13. ReAct 模式详解
  14. 工具注册与管理
  15. 错误处理与鲁棒性
  16. 最佳实践与总结
  17. 性能优化
  18. 局限性
  19. 结语
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ STL unordered_set/unordered_map 使用介绍
  • OCC 架构设计与 Scan 测试时钟控制原理
  • 基于 ms-swift 的多模态 AI 绘画理解微调实践
  • Web 开发者转型 AI:多模态 Agent 图像识别 Skills 全栈实战
  • 使用 llama.cpp 部署本地 AI 模型遇到的问题与解决方案
  • C++11 新特性深度解析:从可变参数模板到 Lambda 表达式
  • Midjourney 官方网址查询与中文访问方案
  • 前端实战:如何让用户回到上次阅读的位置?
  • JDK 8 至 JDK 25 JVM 核心优化与演进前瞻
  • 人工智能早间新闻:英伟达 GTC 万亿美元目标与产业动态
  • Python 新手 LeetCode 快速刷题指南
  • VS Code 环境 GitHub Copilot 无法使用?关键排查与解决步骤
  • 腾讯云服务器部署 OpenClaw 对接飞书实战详解
  • DeepSeek 结合通义万相制作 AI 视频实战指南
  • C++ 关联容器:Set、Map 与键值对详解
  • 国内无人机车辆行人检测数据集:智慧交通与应急救援应用
  • GitLens 使用指南:VS Code 中完整的 Git 可视化开发体验
  • LLaMA 大模型家族发展历程及技术解析
  • 自然语言处理在客户服务领域的应用与实战
  • Python 语言基础、应用场景与学习路径详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online