news 2026/4/23 10:44:32

检索增强生成_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/22 9:40:30

Lanelet2自动驾驶地图框架终极指南:从零基础到实战应用

Lanelet2自动驾驶地图框架终极指南&#xff1a;从零基础到实战应用 【免费下载链接】Lanelet2 Map handling framework for automated driving 项目地址: https://gitcode.com/gh_mirrors/la/Lanelet2 项目核心价值与定位 Lanelet2是一个专为自动驾驶设计的开源地图处理…

作者头像 李华
网站建设 2026/4/22 23:59:51

AI视频增强神器:3步让模糊视频秒变超清画质

AI视频增强神器&#xff1a;3步让模糊视频秒变超清画质 【免费下载链接】SeedVR-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR-7B 还在为手机拍摄的模糊视频而烦恼吗&#xff1f;那些珍贵的家庭聚会、孩子成长的瞬间&#xff0c;因为画质不佳…

作者头像 李华
网站建设 2026/4/22 6:02:14

投资组合建议生成模型训练

投资组合建议生成模型训练 在财富管理行业&#xff0c;一个典型的问题是&#xff1a;如何为成千上万的客户提供既个性化又合规的投资建议&#xff1f;传统方式依赖理财顾问人工分析客户画像与市场环境&#xff0c;效率低、成本高&#xff0c;且难以保证输出一致性。随着大语言模…

作者头像 李华
网站建设 2026/4/22 21:52:56

gtsummary:打造专业级数据摘要与分析表格的全能工具

gtsummary&#xff1a;打造专业级数据摘要与分析表格的全能工具 【免费下载链接】gtsummary Presentation-Ready Data Summary and Analytic Result Tables 项目地址: https://gitcode.com/gh_mirrors/gt/gtsummary 在当今数据驱动的时代&#xff0c;如何高效地将复杂的…

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

VDO.Ninja:3分钟掌握免费WebRTC直播视频源整合方案

VDO.Ninja&#xff1a;3分钟掌握免费WebRTC直播视频源整合方案 【免费下载链接】vdo.ninja VDO.Ninja is a powerful tool that lets you bring remote video feeds into OBS or other studio software via WebRTC. 项目地址: https://gitcode.com/gh_mirrors/vd/vdo.ninja …

作者头像 李华