返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

RAG知识库-文档过滤和检索

[复制链接]
链载Ai 显示全部楼层 发表于 3 天前 |阅读模式 打印 上一主题 下一主题

RAG完整流程

文档过滤检索阶段拆分为:检索前、检索时、检索后。

检索前

预检索阶段负责处理和优化用户的原始查询,以提高后续检索的质量。Spring AI提供了多种查询处理组件。Spring AI提供了多种查询处理组件。

查询转换-查询重写

当用户查询含糊不清或包含无关信息时,使用RewriteQueryTransformer大模型语言对用户的原始检查进行改写。

Queryquery=newQuery("啊,什么程序员呀呀呀?");
QueryTransformerqueryTransformer=RewriteQueryTransformer.builder() .chatClientBuilder(chatClientBuilder) .build();
QuerytransformedQuery=queryTransformer.transform(query);
查询转换-查询翻译

TranslationQueryTransformer将查询翻译成嵌入模型支持的目标语言。如果查询已经是目标语言,则保持不变。

QueryTransformerqueryTransformer=TranslationQueryTransformer.builder().chatClientBuilder(chatClientBuilder).targetLanguage("chinese").build();QuerytransformedQuery=queryTransformer.transform(query);
查询转换-查询压缩

CompressionQueryTransformer使用大语言模型将对话历史和后续查询压缩成一个独立的查询。

Queryquery=Query.builder().text("阿里云有什么作用?").history(newUserMessage("程序员是什么?"),newAssistantMessage("阿里巴巴创始人是谁?")).build();QueryTransformerqueryTransformer=CompressionQueryTransformer.builder().chatClientBuilder(chatClientBuilder).build();QuerytransformedQuery=queryTransformer.transform(query);
查询转换-查询扩展

MultiQueryExpander使用大语言模型将一个查询扩展为多个语言上不同的变体,有助于检索额外的上下文信息并增加找到相关结果的机会。

MultiQueryExpanderqueryExpander=MultiQueryExpander.builder().chatClientBuilder(chatClientBuilder).numberOfQueries(3).build();List<Query>queries=queryExpander.expand(newQuery("啥是程序员?程序会做啥?"));
检索

检索模块负责从存储中查询检索出最相关的文档。

文档检索

Spring AI提供了文档检索器。不同的存储方案都可能有自己的文档检索器实现类,比如VectorStoreDocumentRetriever,从向量存储中检索与查询语义相似的文档。它支持基于元数据的过滤、设置相似度阈值、设置返回的结果数。

DocumentRetrieverretriever=VectorStoreDocumentRetriever.builder().vectorStore(vectorStore).similarityThreshold(0.7).topK(5).filterExpression(newFilterExpressionBuilder().eq("type","web").build()).build();List<Document>documents=retriever.retrieve(newQuery("程序员会做啥?"));
文档合并

Spring AI内置了ConcatenationDocumentJoiner文档合并器,通过连接操作,将基于多个查询和来自多个数据源检索到的文档合并成单个文档集合。

Map<Query,List<List<Document>>>documentsForQuery=...DocumentJoinerdocumentJoiner=newConcatenationDocumentJoiner();List<Document>documents=documentJoiner.join(documentsForQuery);
检索后

检索后模块负责处理检索到的文档,以实现最佳生成结果。可以解决“丢失在中间”问题、模型上下文长度限制,以及减少检索信息中的噪音和冗余。包括:

  • 根据与查询的相关性对文档进行排序
  • 删除不相关或冗余的文档
  • 压缩每个文档的内容以减少噪音和冗余

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ