news 2026/4/15 22:20:19

检索增强生成_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/4/14 23:28:46

字节码增强工具跨版本兼容性深度解析

字节码增强工具跨版本兼容性深度解析 【免费下载链接】cglib cglib - Byte Code Generation Library is high level API to generate and transform Java byte code. It is used by AOP, testing, data access frameworks to generate dynamic proxy objects and intercept fie…

作者头像 李华
网站建设 2026/4/9 10:44:55

如何快速掌握VeighNa量化交易框架:面向新手的完整教程

如何快速掌握VeighNa量化交易框架&#xff1a;面向新手的完整教程 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy VeighNa&#xff08;vnpy&#xff09;是一款基于Python的开源量化交易系统开发框架&#xff0c;…

作者头像 李华
网站建设 2026/4/14 9:59:55

Redpill Recovery:群晖NAS系统修复终极指南

Redpill Recovery&#xff1a;群晖NAS系统修复终极指南 【免费下载链接】rr Redpill Recovery (arpl-i18n) 项目地址: https://gitcode.com/gh_mirrors/rr2/rr 还在为群晖NAS突然死机而焦虑吗&#xff1f;系统崩溃、数据无法访问、重装系统又担心丢失重要文件——这些问…

作者头像 李华
网站建设 2026/4/11 12:27:02

5分钟玩转Web AR:从零打造你的第一个增强现实应用

5分钟玩转Web AR&#xff1a;从零打造你的第一个增强现实应用 【免费下载链接】AR.js Efficient Augmented Reality for the Web - 60fps on mobile! 项目地址: https://gitcode.com/gh_mirrors/ar/AR.js 你是否想象过&#xff0c;只需一个浏览器就能让虚拟世界与现实完…

作者头像 李华
网站建设 2026/4/14 18:44:47

跨平台开发进阶指南:8个创新工具助你高效构建原生级应用

跨平台开发进阶指南&#xff1a;8个创新工具助你高效构建原生级应用 【免费下载链接】free-for-dev free-for-dev - 一个列出了对开发者和开源作者提供免费服务的软件和资源的集合&#xff0c;帮助开发者节省成本。 项目地址: https://gitcode.com/GitHub_Trending/fr/free-f…

作者头像 李华