做网站6000左右的电脑,营销网站大全,网站建设工程师工资,如何修改单页网站大家好#xff0c;检索增强生成#xff08;Retrieval-Augmented Generation#xff0c;简称RAG#xff09;是一种先进的人工智能技术#xff0c;通过整合大型语言模型#xff08;LLM#xff09;的内部知识和外部权威数据源#xff0c;来提升生成式AI模型的表现。
本文…大家好检索增强生成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能够灵活地处理可能存在或缺失的节点。对于管理者信息将其累积到一个列表中并确保公司名称和管理者列表在返回结果时非空。
尽管目前没有利用得分来提供具体价值但它可以作为一个有用的指标记录文档被检索的频次。因此根据得分对结果集进行排序以便对检索频率有一个直观的认识。
由于查询结果只返回text、score和metadata三个属性需要将额外的信息如documentId、company和managers整合到metadata字典中。这样最终的RETURN语句将包含所有必要的信息确保返回的数据既全面又结构化。