llamaindex 开源 RAG 框架 使用汇总

llamaindex 开源 RAG 框架 使用汇总

  1. llamaindex是干什么的:让 AI 访问和理解你的私有数据
    原名 GPT Index,开源 RAG 框架,专门做文档加载、文本分块、向量入库、检索、多轮问答、Agent 流程;支持几乎所有 LLM、Embedding、向量库(Ollama/DashScope/pgvector 等)

  2. llamaindex模块功能实现
    | 模块名称 | 主要功能 | 重要性与典型用途 |
    | --------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
    | llama-index-core | LlamaIndex 框架的心脏和基础。提供所有核心抽象类和构建块,包括: • Document / Node(文档和文本块) • Indexes(索引) • Retrievers(检索器) • Query Engines / Response Synthesizers(查询引擎和答案合成) • Settings(全局配置 LLM、Embedding 等) • Workflows 基础(事件驱动异步流程) • Node Parsers(文本切分)、Storage、Memory 等 | 最重要。几乎所有 LlamaIndex 应用都必须依赖它。 |
    | llama-index-llms-openai | OpenAI 大模型的集成包。 | 提供默认的 生成能力(LLM)。让你可以轻松调用 OpenAI 模型 |
    | llama-index-embeddings-openai | OpenAI 嵌入模型集成包。 | 提供 向量表示能力。向量检索 |
    | llama-index-readers-file | 文件读取器集成包(默认文件加载器)。 支持读取常见文件格式,包括: • PDF、DOCX、PPTX、Markdown、CSV、HTML、EPUB、IPYNB、图像、视频音频等 • 内置多种 Parser | 数据摄入入口。负责把文件转换成 LlamaIndex 能处理的对象 |

    模型调用方式
    | 方法 | 输入类型 | 输出类型 | 是否支持多轮对话历史 | 是否实时输出(流式) | 推荐使用场景 |
    | :-----------------: | :----------------: | :----------------------------: | :------------------: | -------------------- | ------------------------------------ |
    | complete | 纯字符串(prompt) | 完整响应(CompletionResponse) | 不支持 | 否(一次性返回) | 简单单句补全、测试、快速实验 |
    | stream_complete | 纯字符串(prompt) | 生成器(逐 token 返回) | 不支持 | 是 | 需要实时显示文字(如聊天框打字效果) |
    | chat | ChatMessage 列表 | 完整响应(ChatResponse) | 支持 | 否(一次性返回) | 多轮对话、带 system prompt、正式对话 |
    | stream_chat | ChatMessage 列表 | 生成器(逐 token 返回) | 支持 | 是 | 多轮实时对话(最推荐用于聊天界面) |

  3. llamaindex提示词使用:提供了灵活的提示词模板系统,用于自定义模型的行为、控制输出格式、减少幻觉

3.1ChatPromptTemplateLlamaIndex 中专门用于构建多消息对话提示的模板类。它属于旧式简单模板,主要通过消息列表(ChatMessage)来组织 system、user、assistant 等不同角色的内容
特点

- 专为聊天模型(Chat Model)设计。
- 使用消息列表 + f-string 方式构建提示。
- 适合需要明确区分 System PromptUser Prompt 的场景。
- 目前官方已将其归类为旧式模板,推荐新项目优先使用 RichPromptTemplate。
- 但在很多遗留代码和简单聊天场景中仍然非常常用。

3.2RichPromptTemplate 是 LlamaIndex 在 2025-2026 年推出的最新提示词模板,基于 Jinja2 模板引擎,是目前官方最推荐的提示词构建方式。
特点
- 支持 Jinja2 强大语法(变量、if/else 条件判断、for 循环、过滤器等)
- 原生支持 {% chat role="xxx" %} 语法,轻松定义 system、user、assistant 等角色
- 支持多模态提示(可插入图片、音频等)
- 同一个模板既可以输出纯文本(.format()),也可以输出消息列表(.format_messages())
- 功能最强大、最灵活,已成为生产级应用的首选

3.3LlamaIndex 内置了一系列经过优化的默认提示词模板,位于 llama_index.core.prompts.default_prompts 中。可以直接使用或复制修改
常用默认模板示例:
- DEFAULT_TEXT_QA_PROMPT:标准问答模板
- DEFAULT_REFINE_PROMPT:用于 Refine(迭代优化答案)的模板
- DEFAULT_SUMMARY_PROMPT:总结模板
- DEFAULT_TREE_SUMMARIZE_PROMPT:树状总结模板

  1. llamaindex文本加载
    4.1文档加载是 LlamaIndex 构建 RAG 应用的第一步,其核心是将外部数据转换为 LlamaIndex 可处理的 Document 对象
    SimpleDirectoryReader 是官方最推荐的通用文件加载器,几乎所有入门和中型项目都从它开始
    4.2文档数据加载llama-index-readers-file : LlamaIndex 中最基础、最重要的文件读取集成包
    安装后,你可以直接从 llama_index.readers.file 导入以下常用 Reader:

    文件类型 Reader 类名 说明 推荐使用场景
    PDF PDFReader / PyMuPDFReader 读取 PDF(支持文本层或 OCR) 普通 PDF
    Word DocxReader 读取 .docx 文件 Word 文档
    PowerPoint PptxReader 读取 .pptx 文件 演示文稿
    Markdown MarkdownReader 读取 .md 文件(保留格式) 笔记、文档
    CSV / Excel CSVReader、PandasCSVReader 结构化表格数据 数据表格
    Jupyter IPYNBReader 读取 .ipynb 文件 代码笔记本
    纯文本 TextFileReader / FlatReader 读取 .txt 等纯文本 简单文本
    图像 ImageReader 读取图片(可结合多模态模型提取文字) 截图、照片
    HTML HTMLReader 读取 .html 文件 网页保存文件

    4.3网页数据加载llama-index-readers-web
    4.4 LlamaParse 高精度文档解析
    前面介绍的本地加载器(PDFReaderDocxReader 等)在处理结构简单、文字层完整的文档时表现良好,但在以下场景中会遇到明显瓶颈:

    | 场景 | 本地加载器的问题 | LlamaParse 的解决方案 |
    | ---------------------------------- | -------------------------------- | ------------------------------------ |
    | 扫描件 / 图片型 PDF | 无法提取文字,返回空内容 | 内置 OCR 引擎,精准识别文字 |
    | 复杂表格 | 表格结构丢失,变成混乱的纯文本 | 保留表格结构,输出为 Markdown 表格 |
    | 多栏排版 | 文字顺序错乱,左右栏内容混在一起 | 智能识别版面布局,按正确阅读顺序输出 |
    | 嵌套结构(标题层级、列表嵌套) | 层级关系丢失 | 保留文档的层级结构(Markdown 格式) |
    | 图表、公式 | 直接忽略或乱码 | 提取图表描述,识别数学公式 |
    | 混合内容(文字+图片+表格穿插) | 只能提取部分文字 | 完整解析所有元素并按顺序排列 |

  2. llamaindex分割器
    5.1. 句子分割器
    5.2HTML节点解析器
    5.3JSON节点解析器
    5.4Markdown节点解析器

  3. llamaindex存储体系
    StorageContext 是 LlamaIndex 的存储中枢,负责管理索引构建和查询过程中所有数据的存储位置。

  • 当你构建索引时,会产生三类数据:原始节点向量嵌入索引元数据。StorageContext 决定这些数据存在哪里 —— 内存、本地磁盘、还是远程向量数据库

Docstore 存储原始 节点

IndexStore 存储索引 元数据

VectorStore 存储向量 嵌入

GraphStore 存储知识 图谱

posted @ 2026-07-08 14:01  大树2  阅读(1)  评论(0)    收藏  举报