使用LangChain编写图检索查询实现RAG

大家好,检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种先进的人工智能技术,通过整合大型语言模型(LLM)的内部知识和外部权威数据源,来提升生成式AI模型的表现。

本文将介绍如何有效编写检索查询,进一步提升LLM的输出质量,使用Python和Langchain框架(专为与LLM互动而量身打造的平台)来详细阐述这一过程。通过这种方式,开发者能够更精确地从大量数据中提取所需信息,从而在各种应用场景中实现更高质量的AI生成内容。

1. 数据集

首先了解一下这里的数据集,使用来自EDGAR(电子数据收集、分析和检索系统)数据库的SEC(证券交易委员会)文件(https://corporatefinanceinstitute.com/resources/valuation/sec-filings/)。这些文件极为宝贵,详细记录了上市公司的财务状况、经营活动和关键信息,如财务报表和重要披露事项。

图片

来自EDGAR数据库的SEC文件的图形数据模型

具体来说,这些数据集包含了各公司提交给SEC的财务表格,如10K和13表格等。这些公司由不同的管理层持股,分布在多个不同的行业中。

为了便于处理,这里将这些财务表格中的文本内容细分为较小的块,并为每个文本块创建向量嵌入,这些嵌入存储在CHUNK节点中。在执行向量搜索查询时,会对比查询向量与CHUNK节点的向量,以此来定位和提取最为相似的文本块。这种方法能够有效地从大量复杂的财务信息中提取有价值的数据。

2. 构建检索查询

在构建检索查询的过程中,首先利用相似性搜索查询得到的结果,即每个相关节点(node)及其对应的相似度得分(score)。将这些结果作为输入,进一步执行检索查询。这一步骤目的是深入挖掘与这些节点相连的数据,从而获取更完整的信息。

为了实现这一目标,检索查询不仅要返回原始的节点和得分,还需要包含文本内容(text)和附加的元数据(metadata),这些元数据可以提供关于数据项的更多背景信息。通过这种方式,能够确保检索查询的结果既准确又有深度,为用户提供全面的数据视角。

retrieval_query = """WITH node AS doc, score as similarity# 这里还有一些查询RETURN <something> as text, similarity as score,{<something>: <something>} AS metadata
"""

框架已经建立,现在需要明确想要从中提取的信息。在相似性搜索过程中,数据模型会识别出CHUNK节点,这些节点在查询中以node AS doc的形式出现。由于单个文本块(CHUNK)本身并不包含丰富的上下文信息,我们的目标是获取与这些CHUNK节点相连接的Form、Person、Company、Manager和Industry等实体节点。为了更全面地理解文本内容,还希望包括与每个CHUNK节点相邻的文本块,即前一个和后一个文本块(通过NEXT关系连接)。

此外,计划提取每个块及其相应的相似性得分,但为了提高效率和针对性,决定只聚焦于相似度最高的前5个块。这样的策略可以帮助更精确地筛选出最相关的信息,同时减少不必要的数据处理。通过这种方法,能够构建一个既精确又高效的检索系统,为用户提供最有价值的数据。

retrieval_query = """WITH node AS doc, score as similarityORDER BY similarity DESC LIMIT 5CALL { WITH docOPTIONAL MATCH (prevDoc:Chunk)-[:NEXT]-->(doc)OPTIONAL MATCH (doc)-[:NEXT]-->(nextDoc:Chunk)RETURN prevDoc, doc AS result, nextDoc}RETURN coalesce(prevDoc.text,'') + coalesce(document.text,'') + coalesce(nextDoc.text,'') as text,similarity as score,{<something>: <something>} AS metadata
"""

我们的目标是筛选出与查询最为相似的五个文本块,并在子查询中提取这些块的前后文本。为了实现这一点,对RETURN语句进行了调整,以便将相邻的文本块内容合并到一个名为text的变量中。在这个过程中,利用了coalesce()函数来确保即使在缺少前一个或后一个文本块的情况下,也能够平滑地处理这些空值,仅返回一个空字符串,从而保证了查询结果的完整性和一致性。

来添加更多的上下文,以提取图中的其他相关实体。

retrieval_query = """WITH node AS doc, score as similarityORDER BY similarity DESC LIMIT 5CALL { WITH docOPTIONAL MATCH (prevDoc:Chunk)-[:NEXT]->(doc)OPTIONAL MATCH (doc)-[:NEXT]->(nextDoc:Chunk)RETURN prevDoc, doc AS result, nextDoc}WITH result, prevDoc, nextDoc, similarityCALL {WITH resultOPTIONAL MATCH (result)-[:PART_OF]->(:Form)<-[:FILED]-(company:Company), (company)<-[:OWNS_STOCK_IN]-(manager:Manager)WITH result, company.name as companyName, apoc.text.join(collect(manager.managerName),';') as managersWHERE companyName IS NOT NULL OR managers > ""WITH result, companyName, managersORDER BY result.score DESCRETURN result as document, result.score as popularity, companyName, managers}RETURN coalesce(prevDoc.text,'') + coalesce(document.text,'') + coalesce(nextDoc.text,'') as text,similarity as score,{documentId: coalesce(document.chunkId,''), company: coalesce(companyName,''), managers: coalesce(managers,''), source: document.source} AS metadata
"""

在执行第二个CALL {}子查询时,目标是获取与查询相关的Form、Company和Manager节点信息。使用OPTIONAL MATCH能够灵活地处理可能存在或缺失的节点。对于管理者信息,将其累积到一个列表中,并确保公司名称和管理者列表在返回结果时非空。

尽管目前没有利用得分来提供具体价值,但它可以作为一个有用的指标,记录文档被检索的频次。因此根据得分对结果集进行排序,以便对检索频率有一个直观的认识。

由于查询结果只返回textscoremetadata三个属性,需要将额外的信息,如documentIdcompanymanagers,整合到metadata字典中。这样,最终的RETURN语句将包含所有必要的信息,确保返回的数据既全面又结构化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全可靠!麒麟信安操作系统各版本均不受liblzma/xz漏洞影响!

近日&#xff0c;XZ Utils 5.6.0和5.6.1版本存在严重后门风险的消息披露后&#xff0c;麒麟信安立即展开全面排查&#xff0c;经分析验证&#xff0c;麒麟信安操作系统各版本均不受liblzma/xz漏洞影响。 关于liblzma/xz漏洞 漏洞描述 xz 5.6.0 与 5.6.1 版本的上游代码中发现…

ComplexHeatmap绘图:注释、图例、热图基础(自备)

目录 基础介绍 Heatmap绘图基础参数 数据 作图参数 Heatmap Annotations&#xff08;注释&#xff09; 基础注释设置 简单注释测试 anno_points散点注释 anno_lines连线注释 anno_barplot条形图 anno_boxplot箱线图 anno_histogram直方图 热图组合 基础组合 进行…

【热门话题】文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 文言一心与ChatGPT-4&#xff1a;一场跨时代智能对话系统的深度比较一、技术背景…

Maven--lib分离的打包方式

就是把lib包和source源码分开打包。优势就是&#xff0c;面对频繁更新的应用场景时&#xff0c;可以只更新源码包&#xff08;当然&#xff0c;前提是你的依赖没有增减&#xff09;。尤其是使用jenkins更新项目时&#xff0c;会省去很多时间吧&#xff1f; 不同项目的 lib之间不…

SQL语句生成器,支持MSSQL/MYSQL/SQLITE/ACCESS/EXCEL

经过7个月的艰苦开发&#xff0c;SQL语句生成器终于和各位见面了&#xff0c;因为工程量浩大&#xff0c;一度做到崩溃&#xff0c;差点烂尾&#xff0c;好在经过N次激烈思想斗争后还是坚持了下来累累累累累累累 本软件能够自动生成SQL语句及对应的易语言代码&#xff0c;还有相…

图片二维码如何制作生成?常规图片格式的二维码制作技巧

图片是展示信息很常用的一种方式&#xff0c;而现在查看图片很多人会通过二维码的形式来展现&#xff0c;这种方式优势在于更加的灵活&#xff0c;能够通过一个二维码展示大量的图片内容。那么图片二维码是如何制作生成的呢&#xff1f; 想要快速的将图片转二维码使用&#xf…

mapbox-gl扩展sprites图片

在mapbox-gl.js中&#xff0c;通过在styles中设置sprite和glyphs&#xff0c;实现样式图标和字体的加载。而一旦style加载完成&#xff0c;如果重置地图中的style&#xff0c;则会导致地图全部重新加载&#xff0c;图层的顺序&#xff0c;地图上的要素&#xff0c;都会丢失&…

智慧城市治理:构建全域覆盖的城市时空感知体系

TSINGSEE青犀AI算法中台是一款平台型产品&#xff0c;专注于提供各行业中小场景部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点&#xff0c;可提供丰富的视图接入能力和智能分析能力。 平台采用了多项IT高新技术&#xff0c;包括视频编解码技术、嵌入式…

成都直播基地出租:天府新区兴隆湖天府锋巢直播产业基地

天府新区兴隆湖天府锋巢直播产业基地&#xff0c;作为成都乃至西部地区的一颗璀璨明珠&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;吸引着越来越多的目光。这里不仅是成都直播产业的聚集地&#xff0c;更是传统企业转型升级的摇篮&#xff0c;是新媒体时代下的创新高…

多态--下

文章目录 概念多态如何实现的指向谁调谁&#xff1f;例子分析 含有虚函数类的大小是多少&#xff1f;虚函数地址虚表地址多继承的子类的大小怎么计算&#xff1f;练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…

RESTful规范总结

概念&#xff1a;RESTful&#xff08;Representational State Transfer 的缩写&#xff09;是一种广泛使用的API架构风格。 1.资源&#xff1a;在REST API的设计中&#xff0c;首先需要面向资源建模&#xff0c;其中每个节点是是一个简单资源或集合资源。 1.1一个集合包含相同…

基于Uni-app的体育场馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

如何操作RAID 0阵列的扩容?

正文共&#xff1a;1888 字 23 图&#xff0c;预估阅读时间&#xff1a;2 分钟 RAID&#xff08;Redundant Array of Independent Disks&#xff09;即独立磁盘冗余阵列&#xff0c;通常简称为磁盘阵列&#xff0c;在高级磁盘阵列中&#xff0c;部分物理存储空间会用来记录保存…

【性能调优】Java服务端性能优化与实战

一、背景 降本增效&#xff1a;随着公司业务的发展和用户规模的增加&#xff0c;当前服务的QPS已经远远不能满足业务需求&#xff0c;需要申请更多CPU资源&#xff0c;来提升QPS&#xff0c;满足业务发展&#xff0c;但是公司硬件资源有限&#xff0c;额外申请多余资源&#x…

OpenHarmony实战:小型系统器件驱动移植

本章节讲解如何移植各类器件驱动。 LCD驱动移植 移植LCD驱动的主要工作是编写一个驱动&#xff0c;在驱动中生成模型的实例&#xff0c;并完成注册。 这些LCD的驱动被放置在源码目录//drivers/hdf_core/framework/model/display/driver/panel中。 创建Panel驱动 创建HDF驱动…

vulnhub pWnOS v2.0通关

知识点总结&#xff1a; 1.通过模块来寻找漏洞 2.msf查找漏洞 3.通过网站源代码&#xff0c;查看模块信息 环境准备 攻击机&#xff1a;kali2023 靶机&#xff1a;pWnOS v2.0 安装地址&#xff1a;pWnOS: 2.0 (Pre-Release) ~ VulnHub 在安装网址中看到&#xff0c;该靶…

day10 java封装性

封装性 为什么有封装性&#xff1f; 为了保护数据不被随意修改&#xff0c;隐藏类的实现细节。增强了代码的安全性和可维护性。 该隐藏隐藏 该暴露暴露 封装性的实现&#xff1f; 让调用者只能通过方法操作属性。可以在方法中加入一些限制条件或数据检查的操作。 封装性的直…

计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程步骤

随着网络技术在企业中的不断应用&#xff0c;越来越多的企业离不开网络&#xff0c;网络为企业提供了极大便利&#xff0c;大大提升了生产运营效率&#xff0c;由此而产生的网络数据安全问题也成为了企业关心的主要话题。近期&#xff0c;云天数据恢复中心接到多家企业的求助&a…

jQuery(二)

文章目录 1.jQuery操作节点1.查找节点&#xff0c;修改属性1.基本介绍2.切换图片案例 2.创建节点1.基本介绍2.内部插入3.外部插入4.小结1.插入方法说明2.两种插入方法的区别 5.插入元素实例6.移动元素实例 3.删除节点1.基本介绍2.代码实例 4.复制节点1.基本介绍2.代码实例 5.替…

文心一言 VS 讯飞星火 VS chatgpt (227)-- 算法导论16.3 9题

九、证明&#xff1a;对于一个由随机生成的8位字符组成的文件&#xff0c;没有任何压缩方法可以望将其压缩、哪怕只是压缩一位。(提示&#xff1a;比较可能的文件数量和可能的编码文件数量。) 文心一言&#xff1a; 确实&#xff0c;对于一个由随机生成的8位字符组成的文件&a…