68.高级RAG-父子索引优化
内容参考于图灵AI大模型全栈索引优化在高级RAG中很重要它是在数据摄取阶段和索引构建阶段提升索引数据的结构、检索效率、质量让检索到的结果更加准确、更加相关索引优化核心目标是提高检索的准确性和召回率减少无关数据降低幻觉可以更加好的处理长文档、复杂结构文档文档地址:https://developers.llamaindex.ai/python/framework-api-reference/indices/父子索引在LLamaindex中是一种层级化Hierarchical的索引策略用来解决大文档检索时丢失上下文的问题思路是子节点Child它的文本会很小块一般256到512个tokens用来相似度高的内容如果文档过长会丢失语义父节点Parent它的文本会更大一般1024到2048个tokens或整个文档用来提供完整详细的上下文在检索时它会先通过子节点检索找到子节点后关联出它的父节点来实现高相似度并不会缺失上下文安装指令pip install llama-index-vector-stores-chroma效果图文档信息存储的结构如下图ref_doc_info是当前数据来源于什么文档如下图data里就是父子文档的数据如下图元数据注意元数据的内容在data中如下图红框下图红框的1表示来自于哪一个文档2表示上一个节点3是下一个节点5是子节点的数据5里面的内容它还有个44表示父节点它的结构图代码运行效果Merging 3 nodes into parent node.意思是合并了3个节点Parent node id: aaa5e141-8397-40a7-87ac-17254eb6ec5c.意思是父节点id是aaa5e141-8397-40a7-87ac-17254eb6ec5cParent node text:是父节点的文本代码# 引入LlamaIndex核心组件 # VectorStoreIndex向量索引核心类用于构建、查询向量知识库 # SimpleDirectoryReader目录读取器自动加载文件夹内各类文档(txt/pdf/md等) # StorageContext存储上下文统一管理向量库、文档存储、元数据存储 # load_index_from_storage从本地磁盘加载已持久化保存的索引避免重复向量化 from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, StorageContext, load_index_from_storage # 数据摄入流水线摄取管道封装文档加载→切分→向量化全流程便于复用配置 from llama_index.core.ingestion import IngestionPipeline # 分层节点解析器AutoMerging Retrieval 核心 # HierarchicalNodeParser分层切割文档生成粗粒度父节点 细粒度子叶子节点 # get_leaf_nodes筛选出所有底层细粒度子节点仅将叶子节点存入向量库 from llama_index.core.node_parser import HierarchicalNodeParser, get_leaf_nodes # SimpleDocumentStore本地文档存储用来保存完整分层节点父子节点全部留存 from llama_index.core.storage.docstore import SimpleDocumentStore # AutoMergingRetriever自动合并检索器 # 检索到细碎子节点后自动向上合并父节点上下文解决切片丢失上下文问题 from llama_index.core.retrievers import AutoMergingRetriever # RetrieverQueryEngine检索增强查询引擎把检索器接入大模型实现问答 from llama_index.core.query_engine import RetrieverQueryEngine # Chroma向量存储实现负责存放embedding向量 from llama_index.vector_stores.chroma import ChromaVectorStore # chromadbChroma数据库原生客户端用于创建/获取持久化集合 import chromadb # os模块操作系统接口用来判断文件夹是否存在、路径管理 import os from base_llm import embed_model, llm # 创建Chroma 向量数据库 chroma_client chromadb.PersistentClient( path./chroma_db ) # 数据的名字叫 parent_child_demo chroma_collection chroma_client.get_or_create_collection( parent_child_demo ) # 创建向量数据库存储对象用来操作数据库的 vector_store ChromaVectorStore( chroma_collectionchroma_collection ) # 判断索引是否存在 if os.path.exists(./storage): print(开始加载索引...) # 注意 # 不要自己重新 docstore # 要从 persist_dir 自动恢复 storage_context StorageContext.from_defaults( persist_dir./storage, vector_storevector_store, ) # 加载索引 index load_index_from_storage( storage_contextstorage_context, embed_modelembed_model, ) print(索引加载成功) else: print(开始构建索引...) # 加载文档 documents SimpleDirectoryReader( input_files[./data_file/小说.txt] ).load_data() # 层级切分2048位置标识父节点的大小512的位置表示子节点的大小2048是512的父节点128表示子节点的大小512是128的父节点 node_parser HierarchicalNodeParser.from_defaults( chunk_sizes[2048, 512, 128] ) # 初始化摄取管道 # 这里只做切分 # 不提前做 embedding pipeline IngestionPipeline( transformations[ node_parser, ] ) # 生成所有 nodes nodes pipeline.run( documentsdocuments ) # 获取最子节点 # 只有 leaf nodes 参与向量化 leaf_nodes get_leaf_nodes(nodes) # 创建 docstore # 保存所有层级节点 docstore SimpleDocumentStore() # 父子节点添加到文档存储中 docstore.add_documents(nodes) # 存储管理器用来操作存储的 storage_context StorageContext.from_defaults( vector_storevector_store, docstoredocstore, ) # 创建索引 # 这里只会给 leaf_nodes 生成 embedding index VectorStoreIndex( leaf_nodes, storage_contextstorage_context, embed_modelembed_model, ) # 持久化 # 会保存 # - docstore所有父子节点 # - index_store索引 # - vector_store向量 index.storage_context.persist( persist_dir./storage ) print(索引构建完成) # 基础检索器 # 先召回子节点 base_retriever index.as_retriever( similarity_top_k5 ) # AutoMergingRetriever合并器 # 自动向上合并通过子节点找父节点 # 如果检索出来的子节点超过0.5百分之50来自于同一个父节点那就返回父节点 # 如果小于百分之50就不返回父节点还是使用子节点 retriever AutoMergingRetriever( # 基础检索器 vector_retrieverbase_retriever, # 完整的内容带父节点的内容 storage_contextindex.storage_context, # 是否展示细节 verboseTrue, # 设置阈值也就是百分之50 simple_ratio_thresh0.5 ) # QueryEngine查询引擎 query_engine RetrieverQueryEngine.from_args( # 查询的数据源 retrieverretriever, # 大语言模型 llmllm, ) # 问题 query 萧炎父亲是谁 # 回答问题 response query_engine.query(query) print(\n 回答 \n) print(response) # 查看检索文档这里是返回合并之后的文档就是说会包含父文档 nodes retriever.retrieve(query) print(\n 检索出的文档注意这里是合并之后的文档 \n) for node in nodes: print(node.model_dump_json(indent2)) print()

相关新闻

HDMI 2.1核心技术解析:FRL、DSC、VRR与ALLM如何重塑影音游戏体验

HDMI 2.1核心技术解析:FRL、DSC、VRR与ALLM如何重塑影音游戏体验

1. 从HDMI 2.0到HDMI 2.1:一场接口标准的“代际革命”如果你最近在挑选电视、显卡或者次世代游戏主机,比如PS5或Xbox Series X,那么“HDMI 2.1”这个名词一定反复出现在你的视野里。它被宣传为支持8K、高刷新率、可变刷新率的“未来接口”。但…

2026/7/29 4:21:57 阅读更多 →
N_m3u8DL-CLI-SimpleG:让专业级M3U8下载变得触手可及的图形化神器

N_m3u8DL-CLI-SimpleG:让专业级M3U8下载变得触手可及的图形化神器

N_m3u8DL-CLI-SimpleG:让专业级M3U8下载变得触手可及的图形化神器 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 还在为复杂的命令行操作而烦恼吗?N_m3u8…

2026/7/29 4:21:57 阅读更多 →
数模混仿高级特性:从编译宏展开到UCLI调试的工程实践

数模混仿高级特性:从编译宏展开到UCLI调试的工程实践

1. 从“混合”到“混仿”:为什么高级特性是成败关键在数字芯片设计领域,我们早已习惯了Verilog或VHDL带来的确定性世界,时钟沿一触即发,逻辑门瞬间翻转。然而,当设计触碰到现实世界的物理边界——比如一个高速SerDes的…

2026/7/29 4:20:57 阅读更多 →

最新新闻

UPC码是什么?跨境电商卖家必须搞懂的编码基础

UPC码是什么?跨境电商卖家必须搞懂的编码基础

做跨境电商,不管你是做亚马逊、沃尔玛、Temu还是Shopee,你迟早会碰到这个编码这个东西。它看起来就是12个数字,但背后的规则、获取方式和使用场景,足以让一个新手卖家跑断腿。数跨境BI(帆软旗下跨境电商数据分析工具&a…

2026/7/29 4:29:59 阅读更多 →
儿童量词学习四步法:从实物感知到情境运用

儿童量词学习四步法:从实物感知到情境运用

1. 项目缘起:为什么“量词”成了孩子语言路上的“拦路虎”?前几天,我辅导邻居家刚上一年级的孩子做语文作业,遇到一道填空题:“一( )鱼”。孩子毫不犹豫地写了个“条”。我点点头,心…

2026/7/29 4:29:59 阅读更多 →
UPC码相关的编码有哪些?跨境电商七种编码全盘点

UPC码相关的编码有哪些?跨境电商七种编码全盘点

跨境电商卖家在商品上架过程中,最头疼的环节之一就是商品编码——种类多、规则杂、每个平台要求还不一样。它只是其中一种,围绕着它和GTIN体系,还有EAN、ASIN、SKU、ISBN、FNSKU等一大堆编码。如果不搞清楚每种的用途和获取方式,迟…

2026/7/29 4:29:59 阅读更多 →
基于Arduino与声音传感器的音乐响应LED灯光系统设计与实现

基于Arduino与声音传感器的音乐响应LED灯光系统设计与实现

1. 项目概述:当圣诞树“听见”音乐每年圣诞季,家里的那棵圣诞树总是节日氛围的核心。但你是否想过,让它从一棵静态的装饰,变成一个能与节日音乐共舞的、充满生命力的光影艺术品?这就是我们今天要动手实现的目标&#x…

2026/7/29 4:29:59 阅读更多 →
基于蓝牙手柄与Arduino的无线LED灯光控制系统设计与实现

基于蓝牙手柄与Arduino的无线LED灯光控制系统设计与实现

1. 项目概述与核心价值最近在整理工作室的物料,翻出来一块吃灰已久的 Bluno Mega 开发板。这板子集成了 Arduino Mega 2560 和蓝牙 4.0,功能挺全,但一直没找到特别合适的项目让它“发光发热”。正好手边还有一个闲置的蓝牙游戏手柄&#xff0…

2026/7/29 4:29:59 阅读更多 →
Qt文件元数据操作:QFileInfo核心功能与跨平台实践指南

Qt文件元数据操作:QFileInfo核心功能与跨平台实践指南

1. 项目概述:为什么我们需要QFileInfo? 在Qt开发中,处理文件是家常便饭。无论是读取配置文件、加载用户上传的图片,还是管理本地缓存,我们都需要和文件系统打交道。很多时候,我们需要的不仅仅是打开一个文件…

2026/7/29 4:28:59 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻