日喀则市网站建设_网站建设公司_SSL证书_seo优化
2026/1/13 14:15:23 网站建设 项目流程

01 前言

上一篇我们概览了LlamaIndex的整体架构与定位[构建Agents框架|LlamaIndex使用概览],接下来将分篇深入其核心功能模块—从RAG、Workflow到Agent,再到其生态体系。

RAG(Retrieval Augmented Generation:检索增强生成)是LlamaIndex的核心功能模块,覆盖了从数据加载索引构建存储管理及检索的全流程。其数据连接与加载能力,更是LlamaIndex早期开源阶段的一大亮点。通过连接和检索特定数据片段,RAG不仅有效解决了大语言模型(LLM)面临的上下文长度限制,也保障了私有领域数据的安全。

02 RAG介绍

**RAG(Retrieval Augmented Generation:检索增强生成)**是一种增强大模型上下文来提高大模型回答准确性的有效且重要手段。通过检索特定内容也保障了企业数据的安全。

其流程如下(图来自官方):

核心步骤包括:

  • Loading:

    数据加载,通过加载不同的数据源进行数据获取,如数据库、PDF、API接口等等方式,LlamaIndex目前支持上百种数据源的连接。

  • Indexing:

    索引构建,包括对加载数据分块、向量化以及元数据提取,向量化通常被用于语义匹配。

  • Storing:

    存储,对构建的向量数据和元数据进行存储,避免对源数据进行多次向量化操作。

  • Querying:

    检索,根据用户问题对数据进行检索召回,并加入到大模型的上下文中。常见检索的方式包括向量化语义检索同时伴有元数据过滤、全文关键词检索、混合检索并应用重排序等。

  • **Evaluating:**评估效果,RAG的效果评估是对结果的检验,也是进行优化索引和检索的依据。

03 LlamaIndex的RAG实战

数据加载

LlamaIndex提供了上百种连接数据的方式,包括:本地文件加载集成连接器(可以通过llamahub搜索)、通过文本创建Document。加载后的数据都统一转换成Document类对象。

1、本地文件加载

from llama_index.core import SimpleDirectoryReader documents = SimpleDirectoryReader("../data").load_data() print(f"document length:{len(documents)}, document:{documents}")

LlamaIndex中定义了SimpleDirectoryReader类,是内置的最简单的方式,对本地文件进行加载。示例中会加载当前目录的上级data目录下所有文件。

2、集成连接器

以DB为例,通过连接DB,执行Sql查询的每一条数据都是一个Document。

# pip3 install llama-index-readers-database from llama_index.readers.database import DatabaseReader # 使用PyMySQL:pip3 install pymysql # {root}换成密码 reader_media = DatabaseReader( uri="mysql+pymysql://root:{root}@localhost:3306/demo", schema="demo", # optional namespace ) # 加载 docs = reader_media.load_data( query="SELECT id,username,age,sex,register_time,address FROM xudj.user;", # 元数据列 metadata_cols=[ ("id", "user_id"), # 参数转换,用user_id替代id存储 "username", ], # map / include in metadata excluded_text_cols=["address"], # 剔除字段 document_id=lambda row: f"xudj-user-{row['id']}", # custom document id ) print(docs)

示例首先导入数据库相关依赖,这里使用的是Mysql,可以通过llamahub.ai/?tab=readers搜索使用方式,然后定义DatabaseReader配置连接信息,再调用load_data执行sql完成数据加载。

3、通过文本创建Document

from llama_index.core import Document doc = Document(doc_id="1", text="文本创建", metadata={"id":"1", "type":"custom"}) print(doc) print(doc.metadata)

有了文本,这是最直接的方式。

索引构建

数据加载后,有了一系列的Document,便可以进行索引的构建。包括长文本按特定规则分块、提取元数据、向量化处理。

from llama_index.core.node_parser import TokenTextSplitter from llama_index.core import VectorStoreIndex from llama_index.core import Settings from llama_index.embeddings.dashscope import DashScopeEmbedding from llama_index.core import StorageContext # pip install chromadb # pip install llama-index-vector-stores-chroma import chromadb from llama_index.vector_stores.chroma import ChromaVectorStore # 1、分块 - chunk_size每块的token数 text_splitter = TokenTextSplitter(chunk_size=200, chunk_overlap=5) # 2、向量化模型,使用千问的模型 dashscope_embed_model = DashScopeEmbedding( model_name="text-embedding-v2", api_key="sk-...") # 向量化存储,默认使用基于内存的SimpleVectorStore类 # 初始化客户端,设置保存数据的路径 db = chromadb.PersistentClient(path="./chroma_db") # 3、创建向量存储上下文 chroma_collection = db.get_or_create_collection("quickstart") vector_store = ChromaVectorStore(chroma_collection=chroma_collection) storage_context = StorageContext.from_defaults(vector_store=vector_store) # 4、创建index index = VectorStoreIndex.from_documents( documents=documents, transformations=[text_splitter], embed_model=dashscope_embed_model, insert_batch_size=5, # 限制每次插入的节点数量 storage_context=storage_context, )

示例包括4部分(下面序号对应代码注释序号):

1、首先定义了分块逻辑,示例使用Token计数的分块方式,默认是按完整句子拆分的SentenceSplitter类,它们都属于NodeParser的子类,用于将Document拆分成Node(Node表示Document的一个分块“chunk”,可以是文本或图片等);在LlamaIndex中,不管是分块XxxSplitter类、提取元数据XxxExtractor类(示例未体现)、向量化Node数据XxxEmbedding类,它们都属于transformations,在解析Document时,可以指定多个,transformations是一个列表。

2、定义向量化模型为千问的text-embedding-v2,LlamaIndex默认使用的OpenAI的text-embedding-ada-002模型,这和框架的起源有关,一开始就是为了解决OpenAI系列模型相关问题。

3、创建向量化存储库,示例使用的是开源向量库chroma,指定存储目录和集合名。

4、定义Index(由Document组成的数据结构),并指定文档Documents、转换列表transformations、向量化模型及每批次数量、向量化存储库。VectorStoreIndex是LlamaIndex中最常见的索引类型,通过将Document拆分成Node,然后进行向量化每个Node,为后续语义检索做准备。

示例代码中定义的所有组件,在LlamaIndex中都有默认的实现,我们可以通过Settings查询,同时也可以通过Settings进行设置默认值,如下所示:

from llama_index.core import Settings import os # 随便设置值,不然会报错找不到apiKey os.environ["OPENAI_API_KEY"] = "sk-..." # 默认使用OpenAI的text-embedding-ada-002模型 print(f"Settings.embed_model :{Settings.embed_model}") # 默认使用的SentenceSplitter,这三个取得都是相同的默认node_parser print(f"Settings.transformations :{Settings.transformations}") print(f"Settings.text_splitter :{Settings.text_splitter}") print(f"Settings.node_parser :{Settings.node_parser}") # global可以通过这种方式设置 # Settings.text_splitter = text_splitter

上面我们已经把数据进行了向量化存储,如果想要基于存储的向量数据构建Index索引,可以使用如下方式,不用再次经过一遍上面的流程处理数据了:

# 从向量库中创建index,指定向量库和模型 index = VectorStoreIndex.from_vector_store( vector_store=vector_store, embed_model=dashscope_embed_model, )

1、有关Document和Node介绍:https://developers.llamaindex.ai/python/framework/module_guides/loading/documents_and_nodes/

类定义见:llama_index.core.schema

2、chroma开源向量库:

https://github.com/chroma-core/chroma

3、Index不同的索引类型和检索介绍:

https://developers.llamaindex.ai/python/framework/module_guides/indexing/index_guide/#vector-store-index

检索查询

有了数据也进行了向量化存储,并得到了Index索引对象,现在就可以进行检索并加入大模型上下文,回答问题。LlamaIndex的检索查询包括三步骤:检索Node -> 后置处理过滤Node -> 响应合成

1、仅检索

# 上文得到的index索引对象 retriever = index.as_retriever() nodes = retriever.retrieve("育儿方式") print(f"len:{len(nodes)} nodes:{nodes[0].text}") # 另一种方式:直接定义VectorIndexRetriever,指定index retriever = VectorIndexRetriever( index=index, similarity_top_k=1, # 召回一条数据 ) nodes = retriever.retrieve("育儿方式") print(f"len:{len(nodes)} nodes:{nodes[0].text}")

示例使用index的as_retriever()方法得到VectorIndexRetriever,然后调用retrieve方法来检索node列表。直接定义VectorIndexRetriever效果一样。

2、后置处理过滤Node

# 导入postprocessor from llama_index.core.postprocessor import KeywordNodePostprocessor, SimilarityPostprocessor node_postprocessors=[ # 相似性 SimilarityPostprocessor( similarity_cutoff=0.1 ) ] query = index.as_query_engine(llm=llm, node_postprocessors=node_postprocessors)

示例使用了相似性分数过滤Node,过滤后把更少的Node信息作为上下文传递给大模型,减少大模型的Token数量以及降低响应时间。更多后置处理器见下面地址。

3、响应合成-检索后发起大模型对话

# 查询 from llama_index.llms.deepseek import DeepSeek llm = DeepSeek(model="deepseek-chat", api_key="sk-...") from llama_index.core.response_synthesizers import ResponseMode from llama_index.core import get_response_synthesizer # 定义响应合成逻辑,默认是ResponseMode.COMPACT # "compact": 合并Node作为上下文,如果超长,则使用refine提炼,减少模型的请求次数,最终借助生成一个答案 response_synthesizer = get_response_synthesizer( response_mode=ResponseMode.COMPACT ) query = index.as_query_engine(llm=llm, response_synthesizer=response_synthesizer) print(query.query("育儿方式?"))

示例通过使用index的as_query_engine()方法得到query引擎,并指定响应合成模式“compact”,这个也是默认模式,含义见上代码注释,最后调用query方法借助LLM生成答案。

as_query_engine会获取无状态的查询引擎,另有as_chat_engine支持多轮对话的有状态查询引擎。

compact是其中一种合成模式,让ChatGPT基于官方文档生成的不同模式的对照表,供参考:

为什么会有不同的响应合成模式呢?

是因为 RAG 里拿到的文档往往是多个 chunk,而 LLM 的 prompt 有长度限制。

所以 LlamaIndex 提供了多种“怎样合成答案”的策略。

不同的后置过滤器:

https://developers.llamaindex.ai/python/framework/module_guides/querying/node_postprocessors/node_postprocessors/

不同响应合成模式:

https://developers.llamaindex.ai/python/framework/module_guides/querying/response_synthesizers/

及对应代码类型定义:llama_index.core.response_synthesizers.type.ResponseMode

04 总结

从整体来看,LlamaIndex 已经构建出一个覆盖数据接入 → 文本解析 → 向量化与存储 → 检索策略 → 响应生成的完整 RAG 技术栈,提供了高度模块化、可自由组合的能力。

本文展示的示例仅是 LlamaIndex 功能体系中的一小部分。更多丰富的索引类型、检索模式、数据连接器,以及企业级场景的模板与实践,可以在官方文档或 LlamaHub 中学习和阅读。

值得一提的是,除了 RAG 相关组件外,LlamaIndex 还提供了 基于事件驱动的 Workflow 工作流 与 Agent 智能体 能力,能够进一步支持复杂任务编排、多模型协作等更高级的应用模式。这些在后续文章中逐一展开。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

L5阶段:专题集丨特训篇 【录播课】


四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询