SpringAI框架中的RAG知识库检索与增强生成模型详解

SpringAI框架中的RAG知识库检索与增强生成模型详解

一、RAG简介

RAG(Retrieval-Augmented Generation)可以通过检索知识库,克服大模型训练完成后参数冻结的局限性,携带知识让大模型根据知识进行回答。

二、SpringAI框架支持的RAG模块

SpringAI框架提供了模块化的API来支持RAG,主要包括:

  • QuestionAnswerAdvisor
  • RetrievalArgumentAdvisor

1. QuestionAnswerAdvisor

提供简单便捷的RAG流功能,只需指定简单参数即可进行知识库检索。 示例代码:

QuestionAnswerAdvisor questionAnswerAdvisor = QuestionAnswerAdvisor.builder(vectorStore).searchRequest(SearchRequest.builder().similarityThreshold(0.5)  // 只返回相似度高于0.5的结果.topK(3)                  // 只返回前三个结果.filterExpression(newFilterExpressionBuilder().eq("a","b").build())  // 只检索a==b的文档.build()).build();ChatClient chatClient = ChatClient.builder(openAiChatModel).defaultOptions(OpenAiChatOptions.builder().model("gpt-3.5-turbo").build()).build();ChatResponse response = chatClient.prompt().advisors(questionAnswerAdvisor).user(u -> u.text("你好")).call().chatResponse();

动态添加过滤条件示例:

chatClient.prompt().user(u -> u.text("hello")).advisors(a -> a.param(QuestionAnswerAdvisor.FILTER_EXPRESSION, "a==b")).call().chatResponse();

这里的lambda表达式中的aAdvisorContext.Builder实例,param()用于共享参数,advisor自动完成检索和拼接。

2. RetrievalArgumentAdvisor

提供更丰富功能,支持自定义检索前预处理、检索、检索后处理及生成。

简单RAG实现示例:
Advisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder().documentRetriever(VectorStoreDocumentRetriever.builder().similarityThreshold(0.50).vectorStore(vectorStore).build()).build();String answer = chatClient.prompt().advisors(retrievalAugmentationAdvisor).user(question).call().content();
检索前预处理
  • CompressionQueryTransformer:压缩用户提问,适合长对话上下文。

    Query query = Query.builder().text("And what is its second largest city?").history(newUserMessage("What is the capital of Denmark?"),newAssistantMessage("Copenhagen is the capital of Denmark.")).build();QueryTransformer transformer = CompressionQueryTransformer.builder().chatClientBuilder(chatClientBuilder).build();Query transformedQuery = transformer.transform(query);
    

    也可让advisor自动完成:

    CompressionQueryTransformer compressionQueryTransformer = CompressionQueryTransformer.builder().chatClientBuilder(ChatClient.builder(openAiChatModel)).build();RetrievalAugmentationAdvisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder().documentRetriever(VectorStoreDocumentRetriever.builder().build()).queryTransformers(compressionQueryTransformer).build();ChatClient.builder(openAiChatModel).build().prompt().user(u -> u.text("中国第二大的城市是哪里")).messages(newUserMessage("中国首都城市是哪里")).messages(newAssistantMessage("北京")).advisors(retrievalAugmentationAdvisor).call().chatResponse();
    
  • RewriteQueryTransformer:重写用户输入以优化检索。

    QueryTransformer queryTransformer = RewriteQueryTransformer.builder().chatClientBuilder(chatClientBuilder).build();
    
  • TranslationQueryTransformer:翻译查询为目标语言。

    QueryTransformer transformer = TranslationQueryTransformer.builder().chatClientBuilder(chatClientBuilder).targetLanguage("english").build();
    
  • MultiQueryExpander:生成多个查询拓展以获取更多相关结果。

    MultiQueryExpander expander = MultiQueryExpander.builder().chatClientBuilder(chatClientBuilder).numberOfQueries(3).includeOriginal(false).build();
    
检索阶段
  • VectorStoreDocumentRetriever:向量库检索相似文档。
    VectorStoreDocumentRetriever vectorStoreDocumentRetriever = VectorStoreDocumentRetriever.builder().vectorStore(vectorStore).topK(4).filterExpression(newFilterExpressionBuilder().eq("a","b").build()).similarityThreshold(0.4).build();List<Document> documents = vectorStoreDocumentRetriever.retrieve(newQuery("What is the main character of the story?"));
    

    也可以交给advisor自动完成。

检索后处理
  • 重新排序文档
  • 删除无关或重复文档
  • 压缩文档内容减少干扰
生成阶段
  • ContextualQueryAugmenter:将检索到的内容拼接到用户提问中。
    ContextualQueryAugmenter contextualQueryAugmenter = ContextualQueryAugmenter.builder().allowEmptyContext(false) // 不允许空内容.build();
    

    主要功能:

    • 检查检索结果是否为空
    • 非空时拼接检索结果注入提示模板
    • 空且不允许空上下文时,设置空变量并指示模型不根据知识回答
    • 允许空上下文时直接放行

以上即为SpringAI框架中RAG功能的详细介绍及示例代码,涵盖了从简单到复杂的知识库检索与增强生成流程。

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

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

相关文章

Delphi12安装Android开发的配置

Delphi12如果要开发android和Linux系统,需要在安装的时候安装这两个选项,否则,就找不到开发平台。 1、Adroid开发三剑客必须是指: JDK,SDK,NDK三洋,其中JDK是必须要安装的,最好使用Installer安装,否则自解压的免安装版在安装过程中会退出。 2、开始安装Delphi12. …

OpenHarmony launcher开发——删除dock栏

开发环境 OpenHarmony 5.0.0 代码修改 效果

FreeRTOS如何实现100%的硬实时性?

实时系统在嵌入式应用中至关重要&#xff0c;其核心在于确保任务在指定时间内完成。根据截止时间满足的严格程度&#xff0c;实时系统分为硬实时和软实时。硬实时系统要求任务100%满足截止时间&#xff0c;否则可能导致灾难性后果&#xff0c;例如汽车安全系统或医疗设备。软实…

微软推动智能体协同运作:支持 A2A、MCP 协议

今日凌晨&#xff0c;微软宣布 Azure AI Foundry 和 Microsoft Copilot Studio 两大开发平台支持最新 Agent 开发协议 A2A&#xff0c;并与谷歌合作开发扩大该协议&#xff0c;这一举措对智能体赛道意义重大。 现状与变革意义 当前智能体领域类似战国时代&#xff0c;各家技术…

从“山谷论坛”看AI七剑下天山

始于2023年的美国山谷论坛(Hill and Valley Forum)峰会,以“国会山与硅谷”命名,寓意连接科技界与国家安全战略。以人工智能为代表的高科技,在逆全球化时代已成为大国的致胜高点。 论坛创办者Jacob Helberg,现在是华府的副国务卿,具体负责经济、环境和能源事务。早先曾任…

Docker封装深度学习模型

1.安装Docker Desktop 从官网下载DockerDesktop&#xff0c;安装。&#xff08;默认安装位置在C盘&#xff0c;可进行修改&#xff09; "D:\Program Files (x86)\Docker\Docker Desktop Installer.exe" install --installation-dir"D:\Program Files (x86)\Do…

Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析

引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…

工业与协议融合篇:如何将多个协议集成进一个系统?

🏭 本文为《嵌入式通信协议全解析》第六篇,深入探讨如何在工业或物联网系统中同时集成 BLE、CAN、LoRa、MQTT、RS485 等多种通信协议,实现一个高效、可控、稳定运行的嵌入式通信架构。 🧭 一、为什么需要多协议融合? 在真实产品中,单一通信协议往往无法满足所有业务需…

手撕红黑树的 左旋 与 右旋

一、为什么需要旋转&#xff1f; 在红黑树中&#xff0c;插入或删除节点可能会破坏其五条性质&#xff0c;比如高度不平衡或连续红节点。 为了恢复红黑性质&#xff0c;我们采用局部旋转来“调整树形结构”&#xff0c;保持平衡。 二、旋转本质是“局部变形” 左旋和右旋不会…

不用官方EDA怎么开发FPGA?

目前FPGA的开发和官方的EDA工具是高度绑定的&#xff0c;用哪家的芯片只能用其配套的EDA工具进行开发&#xff08;综合可选工具&#xff0c;布局布线没有可选的工具&#xff09;&#xff0c;那么有没有其他的开发方式呢&#xff1f;今天就介绍一个使用开源工具链来开发FPGA的方…

QuecPython+Aws:快速连接亚马逊 IoT 平台

提供一个可接入亚马逊 Iot 平台的客户端&#xff0c;用于管理亚马逊 MQTT 连接和影子设备。 初始化客户端 Aws class Aws(client_id,server,port,keep_alive,ssl,ssl_params)参数&#xff1a; client_id (str) - 客户端唯一标识。server (str) - 亚马逊 Iot 平台服务器地址…

44.辐射发射整改简易摸底测试方法

辐射发射整改简易摸底测试方法 1. 正式摸底预测试2. 简易方法预测试3. 分析频谱4. 探查传播路径5. 施加措施6. 与简易方法预测试效果对比 1. 正式摸底预测试 去正式实验室做一次预测试&#xff0c;取得频谱图&#xff1b;确定超标频点和超标量&#xff08;备用&#xff09;。 …

OpenCV中适用华为昇腾(Ascend)后端的逐元素操作(Per-element Operations)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 针对华为昇腾&#xff08;Ascend&#xff09;后端的逐元素操作&#xff08;Per-element Operations&#xff09;&#xff0c;这些操作通常用于图…

Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)

Web前端—VSCode如何解决打开html页面中文乱码的问题&#xff08;方法2&#xff09; 1.打开VScode后&#xff0c;依次点击 文件 >> 首选项 >> 设置 2.打开设置后&#xff0c;依次点击 文本编辑器 >> 文件&#xff08;或在搜索框直接搜索“files.autoGuessEnc…

【UltralyticsYolo11图像分类完整项目-04】代码重构

经过上一篇博客,我们实现 了一个cpp文件,可以预测单个图像和多个图像。为了更加简化代码,方便部署,我们需要对代码进行重构:将功能模块化到头文件中。 完整代码下载链接:点击这里 重构的优点 模块化设计:将不同功能分离到不同的类中,每个类有明确的职责更好的可维护性:…

Debezium RelationalSnapshotChangeEventSource详解

Debezium RelationalSnapshotChangeEventSource详解 1. 类的作用与功能 1.1 核心功能 RelationalSnapshotChangeEventSource是Debezium中用于关系型数据库快照的核心抽象类,主要负责: 数据快照:对数据库表进行全量数据快照模式捕获:捕获数据库表结构事务管理:确保快照过…

DeepInjectSQL - 基于 AI 生成对抗网络(GAN)的下一代 SQL 注入自动化漏洞猎手

概述 SQLMap本身是一个成熟的自动化SQL注入工具&#xff0c;可以与GAN结合起来&#xff0c;让GAN生成的Payload替代传统的手工或规则生成的测试用例&#xff0c;从而提高检测的覆盖率和效率。 分析可行性 GAN通常用于生成类似真实数据分布的数据&#xff0c;例如图片、文本等。…

Python 爬虫之 XPath 元素定位

XPath 简介 XPath (XML Path Language) 最初是为了在 XML 文档中进行导航而设计的语言&#xff0c;后来被广泛应用于 HTML 文档的解析。与 BeautifulSoup 相比&#xff0c;XPath 有以下特点&#xff1a; 语法强大&#xff1a;可以通过简洁的表达式精确定位元素跨平台性&#…

聊聊自动化办公未来趋势

1. 自动化办公未来趋势 1.1 智能化与AI融合加深 随着人工智能技术的不断成熟&#xff0c;其在自动化办公中的应用将更加广泛和深入。未来&#xff0c;办公软件将具备更强的智能交互能力&#xff0c;能够理解自然语言指令&#xff0c;自动完成复杂的任务&#xff0c;如文档编辑…

智慧工会服务平台建设方案Word(23页)

1. 引言 随着信息技术的快速发展&#xff0c;传统工会服务模式面临挑战&#xff0c;智慧工会服务平台应运而生。该平台旨在通过数字化手段&#xff0c;整合工会资源&#xff0c;优化服务流程&#xff0c;提高工作效率&#xff0c;为会员提供更加便捷、高效、个性化的服务体验。…