news 2026/3/27 12:23:36

检索增强生成_RAG

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
检索增强生成_RAG

检索增强生成_RAG介绍

什么是检索增强生成?

RAG是一种 AI 框架,它将传统信息检索系统(例如数据库)的优势与生成式大语言模型 (LLM) 的功能结合在一起。

大模型LLM的局限性?

  • LLM的知识不是实时的,不具备知识更新
  • LLM可能不知道你私有的领域/业务知识
  • LLM有时会在回答中生成看似合理但实际上是错误信息

为什么检索增强生成很重要?

  1. 提高准确性: 通过检索相关信息,RAG可以提高生成文本的准确性。
  2. 减少训练成本: 与需要大量数据来训练的大型生成模型相比,RAG可以通过检索机制来减少所需的训练数量,从而降低训练成本。
  3. 适应性强: RAG模型可以适应新的或不断变化的数据。由于它们能够检索最新的消息,因此在出现新数据和事件出现时,它们能够快速适应并生成相关的文本。

GPT3.5训练一次600万美金,GPT4.0训练一次1000万美金。

RAG工作流程

通过检索增强技术,将用户查询与索引知识融合,利用大语言模型生成准确回答。

  • 知识准备:收集并转换知识文档为文本数据,进行预处理和索引。
  • 嵌入与索引:使用嵌入模型将文本转换为向量,并存储在向量数据库中。
  • 查询检索:用户查询转换为向量,从数据库中检索相关知识。
  • 提示增强:结合检索结果构建增强提示模版。
  • 生成回答:大语言模型根据增强模版生成准确回答。

检索增强生成_RAG快速入门

导入依赖

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
</dependency>

配置存储和Ai service

/** * 嵌入存储 (简易内存存储) * * @return {@link InMemoryEmbeddingStore }<{@link TextSegment }> */ @Bean public InMemoryEmbeddingStore<TextSegment> embeddingStore() { return new InMemoryEmbeddingStore<>(); } @Bean public ChatAssistant assistant(ChatLanguageModel chatLanguageModel, EmbeddingStore<TextSegment> embeddingStore) { return AiServices.builder(ChatAssistant.class) .chatLanguageModel(chatLanguageModel) .chatMemory(MessageWindowChatMemory.withMaxMessages(10)) .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore)) .build(); }

向量存储文档

@SpringBootTest public class RagTest { @Autowired InMemoryEmbeddingStore<TextSegment> embeddingStore; @Autowired IChatAssistant iChatAssistant; @Test public void save(){ // RAG 2个阶段: 索引和检索 // 1、导入文档 Document document = FileSystemDocumentLoader.loadDocument("C:\\Users\\Administrator\\Desktop\\test\\合同.doc"); String text = document.text(); System.out.println(text); // 2、存储 EmbeddingStoreIngestor.ingest(document,embeddingStore); // 3、检索 String chat = iChatAssistant.chat("合同总金额?"); System.out.println(chat); } }

测试提问

String result = assistant.chat("合同总金额");

检索增强生成_文档解析器

文件解析的终极工具

Apache Tika是一个开源的、跨平台的库,用于检测、提取和解析各种类型文件的元数据。它支持多种文件格式,包括文档、图片、音频和视频。Tika是一个底层库,经常用于搜索引擎、内容管理系统、数据分析任务等领域,无缝地集成到其他应用或服务中以增强对文件内容处理的能力。

Apache Tika 主要特性

  • 跨平台:Tika可以在多种操作系统上运行,包括WindowsLinuxMac OS
  • 支持多种格式:Tika支持多种文件格式,包括常见的文档、图片、音频和视频格式。
  • 可扩展性:Tika的设计是模块化的,允许开发者添加新的解析器来支持新的文件格式。
  • 安全性:Tika提供了防止文件注入攻击的机制,确保在处理用户上传的文件时保持安全性。

Apache Tika 应用场景

  • 文档管理Tika可以用于提取文档中的元数据,如标题、作者和关键词,以便进行文档分类和检索。
  • 安全审计Tika可以用于检测潜在的恶意文件,如宏病毒或恶意脚本,以防止安全威胁。
  • 内容分析Tika可以用于提取文件内容,以便进行文本分析、情感分析或自然语言处理。

文档加载

  • Amazon S3
  • Azure Blob Storage
  • Google Cloud Storage
  • File System
  • GitHub
  • Selenium
  • Tencents COS
  • URL

本地文件加载

InputStream inputStream3 = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\test-file.ppt");

URL

String url = "https://raw.githubusercontent.com/langchain4j/langchain4j/main/langchain4j/src/test/resources/test-file-utf8.txt";
Document document = UrlDocumentLoader.load(url, new TextDocumentParser());
System.out.println(document.text());

解析文件

DocumentParser parser = new ApacheTikaDocumentParser();
InputStream inputStream1 = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\test-file.docx");
InputStream inputStream2 = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\test-file.pdf");
InputStream inputStream3 = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\test-file.ppt");
InputStream inputStream4 = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\test-file.xls");


Document parse = parser.parse(inputStream4);
System.out.println(parse.text());

检索增强生成_文档切割

!!!关键要点包括!!!!:

  • 文档加载:根据数据类型创建不同的 Loader,返回文档对象。
  • 文档分割:因数据量大需分割成块后存储。
  • 向量存储:文档块经嵌入操作转换成向量存储在向量数据库。
  • 向量查找:用户问题转换成向量与数据库中的向量比较,找出相关的 n 个向量。
  • 答案生成:相关向量还原成文本发送给 LLM 生成答案。

为什么要进行文档分割

  • 优化资源利用
  • 提高检索效率
  • 提升生成质量

我们可以通过将知识库拆分成更小、更易于理解的部分来解决这些问题。

文档切分方法

  • 基于规则的切分方法
  • 基于语义聚类的切分方法
  • 基于机器学习模型的方法
  • 基于代理的切分方法

文档切分

LangChain4j有一个DocumentSplitter接口,有几个现成的实现:

  • DocumentByParagraphSplitter按段落拆分
  • DocumentByLineSplitter按行差分
  • DocumentBySentenceSplitter按句子拆分
  • DocumentByWordSplitter按单词拆分
  • DocumentByCharacterSplitter按字符拆分
  • DocumentByRegexSplitter按正则表达式拆分

代码示例

/** * 文档转换器 */ @Test public void transformer() throws FileNotFoundException { DocumentParser documentParser = new ApacheTikaDocumentParser(); // 读取word FileInputStream word = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\面试宝典.doc"); Document parse = documentParser.parse(word); /** * DocumentByParagraphSplitter: 按段落拆分 * DocumentBySentenceSplitter: 按句子拆分 * DocumentByWordSplitter: 按单词拆分 * DocumentByCharacterSplitter: 按字符拆分 * DocumentByRegexSplitter: 按正则表达式拆分 */ // 按段落拆分 DocumentSplitter documentSplitter = new DocumentByParagraphSplitter(20,3); DocumentBySentenceSplitter documentBySentenceSplitter = new DocumentBySentenceSplitter(20, 3); DocumentByWordSplitter documentByWordSplitter = new DocumentByWordSplitter(10,2); List<TextSegment> split = documentByWordSplitter.split(parse); for (TextSegment segment : split) { /** * TextSegment.text()返回文本TextSegment * TextSegment.metadata()返回Metadata的TextSegment * TextSegment.from(String, Metadata)创建一个TextSegment来自文本并Metadata * TextSegment.from(String)创建TextSegment来自文本为空Metadata */ System.out.println("拆分后:" + segment.text()); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 7:38:13

Amadeus:将动画中的AI助手带入现实

Amadeus&#xff1a;将动画中的AI助手带入现实 【免费下载链接】Amadeus A side project that aims to replicate the Amadeus App shown in Steins;Gate 0. 项目地址: https://gitcode.com/gh_mirrors/am/Amadeus 你是否曾幻想过与科幻作品中的虚拟助手进行真实对话&am…

作者头像 李华
网站建设 2026/3/13 2:46:53

Qwen3-0.6B终极指南:智能双模式重塑轻量级AI边界

Qwen3-0.6B终极指南&#xff1a;智能双模式重塑轻量级AI边界 【免费下载链接】Qwen3-0.6B Qwen3 是 Qwen 系列中最新一代大型语言模型&#xff0c;提供全面的密集模型和混合专家 (MoE) 模型。Qwen3 基于丰富的训练经验&#xff0c;在推理、指令遵循、代理能力和多语言支持方面取…

作者头像 李华
网站建设 2026/3/22 8:20:56

如何让AutoHotkey脚本运行更快:实用性能优化技巧

如何让AutoHotkey脚本运行更快&#xff1a;实用性能优化技巧 【免费下载链接】AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/autohotke/AutoHotkey 你是否曾经遇到过AutoHotkey脚本运行缓慢的情况&#xff1f;明明编写了高效的自动化程序&#xff0c;却因为性…

作者头像 李华
网站建设 2026/3/27 0:50:48

HiGHS高性能线性优化求解器:从入门到实战的完整指南

HiGHS高性能线性优化求解器&#xff1a;从入门到实战的完整指南 【免费下载链接】HiGHS Linear optimization software 项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS HiGHS是一款开源的线性优化求解器&#xff0c;专门用于解决大规模线性规划(LP)、二次规划…

作者头像 李华
网站建设 2026/3/22 18:56:26

FaceFusion人脸融合实战指南:从入门到精通的完整解决方案

FaceFusion人脸融合实战指南&#xff1a;从入门到精通的完整解决方案 【免费下载链接】facefusion Next generation face swapper and enhancer 项目地址: https://gitcode.com/GitHub_Trending/fa/facefusion 还在为人脸融合的边缘毛边和背景干扰而烦恼吗&#xff1f;&…

作者头像 李华
网站建设 2026/3/19 14:37:35

智能助手如何轻松实现支付宝生态自动化管理

智能助手如何轻松实现支付宝生态自动化管理 【免费下载链接】Sesame-TK 芝麻粒-TK 项目地址: https://gitcode.com/gh_mirrors/ses/Sesame-TK 清晨七点&#xff0c;闹钟响起&#xff0c;小王习惯性地打开手机准备收取支付宝能量。突然他意识到&#xff0c;今天不必再手动…

作者头像 李华