当前位置: 首页 > article >正文

【RAG】【query_engine01】多文档自动检索分析

1. 案例目标本案例展示了如何实现结构化分层检索(Structured Hierarchical Retrieval)这是一种处理多文档RAG(检索增强生成)的高级架构。该架构能够根据用户查询动态选择相关文档然后再从这些文档中选择相关内容。主要目标包括演示如何将每个文档表示为包含不同属性的简洁元数据字典展示如何将元数据字典作为过滤器存储在向量数据库中说明如何实现自动检索(auto-retrieval) - 推断相关语义查询和过滤器集合展示如何结合文本到SQL和语义搜索来查询数据2. 技术栈与核心依赖核心框架LlamaIndex - 查询引擎和索引框架VectorIndexAutoRetriever - 自动检索器Weaviate - 向量数据库关键组件IndexNode - 索引节点SummaryIndex - 摘要索引MetadataFilters - 元数据过滤器GitHubRepositoryIssuesReader - GitHub问题读取器3. 环境配置安装步骤%pip install llama-index-readers-github%pip install llama-index-vector-stores-weaviate%pip install llama-index-llms-openai!pip install llama-index llama-hubAPI密钥配置import os# 配置GitHub和OpenAI API密钥os.environ[GITHUB_TOKEN] ghp_...os.environ[OPENAI_API_KEY] sk-...导入必要模块import nest_asyncioimport weaviatefrom llama_index.readers.github import (GitHubRepositoryIssuesReader,GitHubIssuesClient,)from llama_index.vector_stores.weaviate import WeaviateVectorStorefrom llama_index.core import VectorStoreIndex, StorageContext, SummaryIndexfrom llama_index.core.async_utils import run_jobsfrom llama_index.llms.openai import OpenAIfrom llama_index.core.schema import IndexNodefrom llama_index.core.vector_stores import (FilterOperator,MetadataFilter,MetadataFilters,MetadataInfo,VectorStoreInfo,)from llama_index.core.retrievers import VectorIndexAutoRetrieverfrom llama_index.core.query_engine import RetrieverQueryEngine异步环境配置# 应用nest_asyncio以支持异步操作 nest_asyncio.apply()4. 案例实现4.1 数据准备与加载从GitHub仓库加载问题数据# 创建GitHub客户端和加载器github_client GitHubIssuesClient()loader GitHubRepositoryIssuesReader(github_client,ownerrun-llama,repollama_index,verboseTrue,)# 加载数据orig_docs loader.load_data()# 限制文档数量并添加索引IDlimit 100docs []for idx, doc in enumerate(orig_docs):doc.metadata[index_id] int(doc.id_)if idx limit:breakdocs.append(doc)4.2 向量数据库设置配置Weaviate向量数据库并创建存储上下文# 配置Weaviate客户端auth_config weaviate.AuthApiKey(api_keyXRa15cDIkYRT7AkrpqT6jLfE4wropK1c1TGk)client weaviate.Client(https://llama-index-test-v0oggsoz.weaviate.network,auth_client_secretauth_config,)# 创建向量存储和存储上下文class_name LlamaIndex_docsvector_store WeaviateVectorStore(weaviate_clientclient, index_nameclass_name)storage_context StorageContext.from_defaults(vector_storevector_store)# 创建文档索引doc_index VectorStoreIndex.from_documents(docs, storage_contextstorage_context)4.3 创建索引节点为每个文档创建包含摘要和元数据的索引节点async def aprocess_doc(doc, include_summary: bool True):处理文档并创建索引节点metadata doc.metadata# 提取日期信息date_tokens metadata[created_at].split(T)[0].split(-)year int(date_tokens[0])month int(date_tokens[1])day int(date_tokens[2])# 提取分配者和大小信息assignee if assignee not in doc.metadata else doc.metadata[assignee]size if len(doc.metadata[labels]) 0:size_arr [l for l in doc.metadata[labels] if size: in l]size size_arr[0].split(:)[1] if len(size_arr) 0 else # 创建新元数据new_metadata {state: metadata[state],year: year,month: month,day: day,assignee: assignee,size: size,}# 提取文档摘要summary_index SummaryIndex.from_documents([doc])query_str Give a one-sentence concise summary of this issue.query_engine summary_index.as_query_engine(llmOpenAI(modelgpt-3.5-turbo))summary_txt await query_engine.aquery(query_str)summary_txt str(summary_txt)# 创建过滤器index_id doc.metadata[index_id]filters MetadataFilters(filters[MetadataFilter(keyindex_id, operatorFilterOperator.EQ, valueint(index_id)),])# 创建索引节点index_node IndexNode(textsummary_txt,metadatanew_metadata,objdoc_index.as_retriever(filtersfilters),index_iddoc.id_,)return index_node# 批量处理文档index_nodes await aprocess_docs(docs)4.4 创建自动检索索引为摘要元数据创建单独的向量索引# 创建新的向量存储用于摘要元数据class_name LlamaIndex_autovector_store_auto WeaviateVectorStore(weaviate_clientclient, index_nameclass_name)storage_context_auto StorageContext.from_defaults(vector_storevector_store_auto)# 创建摘要索引index VectorStoreIndex(objectsindex_nodes, storage_contextstorage_context_auto)4.5 定义向量数据库模式定义向量数据库的模式包括元数据字段信息vector_store_info VectorStoreInfo(content_infoGithub Issues,metadata_info[MetadataInfo(namestate,descriptionWhether the issue is open or closed,typestring,),MetadataInfo(nameyear,descriptionThe year issue was created,typeinteger,),MetadataInfo(namemonth,descriptionThe month issue was created,typeinteger,),MetadataInfo(nameday,descriptionThe day issue was created,typeinteger,),MetadataInfo(nameassignee,descriptionThe assignee of the ticket,typestring,),MetadataInfo(namesize,descriptionHow big the issue is (XS, S, M, L, XL, XXL),typestring,),],)4.6 创建自动检索器基于定义的模式创建自动检索器# 创建自动检索器retriever VectorIndexAutoRetriever(index,vector_store_infovector_store_info,similarity_top_k2,empty_query_top_k10, # 如果只指定了元数据过滤器这是限制verboseTrue,)4.7 创建查询引擎将检索器与查询引擎结合实现完整的RAG流程# 创建查询引擎llm OpenAI(modelgpt-3.5-turbo)query_engine RetrieverQueryEngine.from_args(retriever, llmllm)# 执行查询response query_engine.query(Tell me about some issues on 01/11)print(str(response))5. 案例效果5.1 自动检索能力系统能够根据用户查询自动推断语义查询和元数据过滤器# 示例输出Using query str: issuesUsing filters: [(day, , 11), (month, , 01)]5.2 结构化查询系统能够基于元数据进行结构化查询# 示例输出Using query str: agentsUsing filters: [(state, , open)]5.3 分层检索系统能够先检索相关文档然后从这些文档中检索具体内容# 示例输出Retrieval entering 9995: VectorIndexRetrieverRetrieving from object VectorIndexRetriever with query issuesRetrieval entering 9985: VectorIndexRetrieverRetrieving from object VectorIndexRetriever with query issues5.4 综合响应系统能够基于检索到的内容生成综合响应# 示例输出There are two issues that were created on 01/11. The first issue is related to ensuring backwards compatibility with the new Pinecone client version bifurcation. The second issue is a feature request to implement the Language Agent Tree Search (LATS) agent in llama-index.6. 案例实现思路6.1 整体架构该案例采用了以下架构思路数据准备阶段从GitHub加载问题数据并处理元数据摘要生成阶段为每个文档生成简洁摘要索引节点创建阶段创建包含摘要和元数据的索引节点双层索引阶段为原始文档和摘要元数据分别创建索引自动检索阶段基于用户查询自动推断语义查询和过滤器分层检索阶段先检索相关文档再从这些文档中检索具体内容响应生成阶段基于检索到的内容生成综合响应6.2 关键技术点结构化元数据将文档表示为包含不同属性的元数据字典自动检索结合文本到SQL和语义搜索来查询数据分层检索先选择相关文档再从这些文档中选择内容索引节点使用IndexNode连接摘要和原始文档6.3 创新点将每个文档表示为包含不同属性的简洁元数据字典将元数据字典作为过滤器存储在向量数据库中实现自动检索推断相关语义查询和过滤器集合结合文本到SQL和语义搜索来查询数据7. 扩展建议功能扩展支持更多元数据字段和类型添加自定义过滤器操作符实现多级分层检索支持跨文档关联查询添加查询结果排序和分页性能优化优化摘要生成算法实现并行文档处理添加查询结果缓存优化向量索引结构支持增量索引更新用户体验改进提供查询过程的可视化界面添加查询结果高亮和标注实现查询建议和自动补全提供查询历史和收藏功能添加查询结果导出功能应用场景扩展企业知识库检索学术论文搜索法律文档检索医疗记录查询客户支持系统8. 总结多文档自动检索案例展示了一种高级的RAG架构通过结构化分层检索实现了对多文档集合的高效查询。该架构能够根据用户查询动态选择相关文档然后再从这些文档中选择相关内容从而提高了查询的准确性和效率。该案例的核心价值在于提供了一种系统化的方法来处理多文档RAG问题通过结构化元数据实现了更精确的文档选择结合了语义搜索和结构化查询的优势实现了自动化的查询推断和执行注意这种结构化分层检索方法特别适合处理包含大量文档的集合其中每个文档都有丰富的元数据。通过将文档表示为包含不同属性的元数据字典系统能够更精确地选择相关文档从而提高查询的准确性和效率。随着数据量的不断增长和查询复杂性的提高这种基于结构化元数据的分层检索方法将成为构建智能检索系统的重要技术路径为各种需要处理多文档查询的应用场景提供支持。

相关文章:

【RAG】【query_engine01】多文档自动检索分析

1. 案例目标 本案例展示了如何实现结构化分层检索(Structured Hierarchical Retrieval),这是一种处理多文档RAG(检索增强生成)的高级架构。该架构能够根据用户查询动态选择相关文档,然后再从这些文档中选择相关内容。 主要目标包括: 演示如…...

学习如何用CC-Switch + Claude Code 接入 DeepSeek-V4-Pro

1.概述 1.1.关键词 Claude Code:Anthropic 出品的 AI 编程命令行工具。在终端里让 AI 帮你写代码、改 Bug、分析项目。 CC-Switch:开源的图形化配置管理工具。一键切换 Claude Code 背后使用的模型,不用手动改配置文件。 1.2.目的 使用C…...

基于多智能体架构的AI股票分析系统PRISM-INSIGHT部署与实战

1. 项目概述:一个由13个AI智能体驱动的股票分析与交易系统如果你对AI如何应用于金融投资感兴趣,或者正在寻找一个能自动分析市场、生成专业报告甚至执行交易的开源工具,那么PRISM-INSIGHT值得你花时间深入了解。这不是一个简单的数据可视化工…...

5分钟快速上手Sonar CNES Report:让代码质量报告变得简单高效

5分钟快速上手Sonar CNES Report:让代码质量报告变得简单高效 【免费下载链接】sonar-cnes-report Generates analysis reports from SonarQube web API. 项目地址: https://gitcode.com/gh_mirrors/so/sonar-cnes-report 你是否经历过这样的场景&#xff1f…...

如何用开源Lenovo Legion Toolkit彻底掌控你的拯救者笔记本:技术深度解析与实战指南

如何用开源Lenovo Legion Toolkit彻底掌控你的拯救者笔记本:技术深度解析与实战指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo…...

别再手动加下划线了!AD原理图封装库字体设置,这个隐藏功能一键搞定

Altium Designer原理图封装库字体设置:高效处理上下划线的专业技巧 在硬件设计领域,原理图符号的规范性和一致性直接影响团队协作效率和设计质量。Altium Designer作为行业主流EDA工具,其字体自定义功能常被工程师忽视,特别是处理…...

别只盯着YOLOv5了!从R-CNN到DETR:手把手带你看懂目标检测算法演进史(附论文精读笔记)

从R-CNN到DETR:目标检测算法的范式革命与技术演进 当计算机视觉领域的研究者翻开2023年的顶会论文时,会发现目标检测任务已经呈现出与五年前截然不同的技术图景。这个看似"古老"的计算机视觉基础任务,正在经历着从传统卷积到Transf…...

从零到一:Windows环境下Oracle19c的完整部署与实战配置

1. 环境准备:搭建Oracle19c的Windows温床 第一次在Windows上装Oracle数据库就像给新房子铺水电——基础没打好,后面全是坑。我见过太多人因为忽略环境检查,导致安装到一半报错重来的惨剧。这里分享几个实测有效的准备工作: 硬件配…...

如何快速将STL转换为STEP:5个高效转换技巧指南

如何快速将STL转换为STEP:5个高效转换技巧指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp STL到STEP格式转换是3D设计和工程制造领域的关键桥梁,而stltostp正是解决…...

Axure RP中文语言包技术深度解析:从键值对到国际化架构的工程实践

Axure RP中文语言包技术深度解析:从键值对到国际化架构的工程实践 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 在…...

避开这3个坑,你的MAX30102心率数据才更准(Arduino实测经验分享)

避开这3个坑,你的MAX30102心率数据才更准(Arduino实测经验分享) 当你在健康监测或可穿戴设备项目中使用MAX30102传感器时,是否遇到过心率数据忽高忽低、稳定性差的问题?这很可能不是传感器本身的问题,而是你…...

第八部分-企业级实践——37. 容器编排选型

37. 容器编排选型 1. 容器编排概述 容器编排平台负责管理容器的整个生命周期,包括部署、扩缩容、负载均衡、服务发现、滚动更新等。Docker Swarm 和 Kubernetes 是目前主流的容器编排方案。 ┌──────────────────────────────────…...

调幅无线传数据:避开这些坑,你的7kHz方波才能传得更远更稳

调幅无线传数据:避开这些坑,你的7kHz方波才能传得更远更稳 在业余无线电和嵌入式通信领域,调幅(AM)无线传输一直是低成本解决方案的热门选择。但许多工程师在尝试用7kHz方波调制高频载波时,总会遇到信号失真…...

通达信缠论插件:从复杂理论到直观可视化的技术革命

通达信缠论插件:从复杂理论到直观可视化的技术革命 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾被缠论的复杂图表和抽象概念困扰?是否在手工画线分析中耗费大量时间却…...

第八部分-企业级实践——36. CI/CD 集成

36. CI/CD 集成 1. CI/CD 概述 CI/CD(持续集成/持续部署)与 Docker 结合,可以实现代码提交后自动构建镜像、测试、部署的完整流程,大幅提升开发效率和发布质量。 ┌──────────────────────────────…...

生物 -- 神经系统(三)

1、髓鞘髓鞘是包裹在神经细胞轴突外层的绝缘膜,主要由脂质和蛋白质构成,起到加速神经信号传导、绝缘防漏电以及保护和修复神经的作用‌。你可以把它想象成电线外的绝缘皮,确保电流(即神经信号)高效、准确地传输。核心功…...

【零基础部署】Ubuntu 安装 Docker 保姆级教程

Docker 是当今最流行的容器化平台之一,它能让你把应用及其依赖打包到一个轻量级的容器中运行。无论你是想搭建开发环境、部署服务,还是学习云原生技术,Docker 都是必备技能。本文将手把手带你从零开始,在 Ubuntu 系统上完成 Docke…...

终极指南:5分钟免费解锁Cursor Pro全部功能的完整解决方案

终极指南:5分钟免费解锁Cursor Pro全部功能的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your…...

产品兼容性实战:硬件与软件设计的平衡艺术与工程策略

1. 产品兼容性:一个永恒的工程与商业困境在硬件开发,尤其是数据采集、测试测量这类领域里,产品经理和工程师们几乎每天都在面对一个看似无解的难题:新产品的功能要向前狂奔,但老用户的兼容性需求却像一根锚&#xff0c…...

终极矢量图标库完全指南:Remix Icon 3200+免费图标深度解析

终极矢量图标库完全指南:Remix Icon 3200免费图标深度解析 【免费下载链接】RemixIcon Open source neutral style icon system 项目地址: https://gitcode.com/gh_mirrors/re/RemixIcon Remix Icon 是一套开源的矢量图标库,包含超过3200个精心设…...

嵌入式处理器IP选型指南:从ARM到RISC-V的权衡与实战

1. 从一场早餐会聊起:为什么32位处理器IP依然是嵌入式开发的硬通货最近在整理资料时,翻到一篇十多年前的老新闻,说的是IP供应商CAST要在DesignCon 2012上办一场免费的早餐研讨会,主题是他们新推出的BA22 32位处理器IP核。新闻里笔…...

AI 搜索重新重视来源:内容平台的新机会不是被点击,而是被正确引用

生成式搜索刚出现时,很多内容创作者最担心的问题是:如果答案直接出现在搜索页,用户还会不会点进原文?这个担心并不多余。AI Overviews、AI Mode 和各类答案引擎,确实改变了“搜索结果页到网页”的传统路径。但现在更值…...

3分钟搞定Axure RP中文界面:全版本汉化终极指南

3分钟搞定Axure RP中文界面:全版本汉化终极指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文…...

Loop:Mac窗口管理的终极免费解决方案,告别杂乱桌面

Loop:Mac窗口管理的终极免费解决方案,告别杂乱桌面 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾为Mac上杂乱的窗口而烦恼?当多个应用同时打开时&#xff…...

百度网盘Mac版加速插件:突破下载限制的实用方案

百度网盘Mac版加速插件:突破下载限制的实用方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 对于经常使用百度网盘的Mac用户来说&#x…...

AI编程助手与代码质量守护:Trunk Cursor插件实战指南

1. 项目概述:当AI编程助手遇上代码质量守护者如果你和我一样,日常重度依赖Cursor这类AI编程助手来加速开发,那么你一定也遇到过类似的困扰:AI生成的代码片段虽然功能上“能用”,但在代码风格、格式一致性、甚至是潜在的…...

Erupt 七年最有诚意升级:官网、文档、脚手架更新,迈向工业级开源生态!

一、写在前面:为什么这次更新值得你重新认识 Erupt?过去几年,Erupt 一直被打上“功能强但太朴素”的标签。注解驱动、AI 模块、多 UI 模板、Cloud 集群、AI Agent,内核卷到飞起,但官网、文档、脚手架这“门面三件套”始…...

RevokeMsgPatcher实战指南:Windows微信QQ防撤回的终极秘籍

RevokeMsgPatcher实战指南:Windows微信QQ防撤回的终极秘籍 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcod…...

声明式数据转换利器:Refiner 实战指南与架构集成

1. 项目概述与核心价值最近在折腾一个老项目的数据清洗和转换,被一堆格式混乱、结构不一的JSON文件搞得焦头烂额。手动写脚本处理吧,每次需求一变就得重写,维护成本太高;用现成的ETL工具吧,又觉得过于笨重,…...

Python 3.14.5 发布:多项改进,垃圾回收器回滚,还有这些新特性!

Python 3.14.5 发布Python 3.14.5 现已发布,这是 3.14 的第五个维护版本。自 3.14.4 以来,包含约 154 项错误修复、构建改进和文档更改。垃圾回收器回滚值得注意的是,Python 3.14.5 中的垃圾回收器 (GC) 发生了变化。由于一些原因&#xff0c…...