news 2026/6/10 14:11:26

检索增强生成_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/6/10 13:11:34

noteDigger:强力免费音乐扒谱工具完全指南

noteDigger&#xff1a;强力免费音乐扒谱工具完全指南 【免费下载链接】noteDigger 在线前端频率分析扒谱 front-end music transcription 项目地址: https://gitcode.com/gh_mirrors/no/noteDigger 在音乐创作和学习的道路上&#xff0c;扒谱是许多音乐爱好者面临的难题…

作者头像 李华
网站建设 2026/6/10 13:17:28

FactoryBluePrints:戴森球计划工厂布局重构与效率突破指南

FactoryBluePrints&#xff1a;戴森球计划工厂布局重构与效率突破指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 你是否正在为戴森球计划中的工厂布局优化而苦恼&…

作者头像 李华
网站建设 2026/6/10 11:22:23

如何快速掌握语音合成技术:Step-Audio-TTS-3B终极实践指南

如何快速掌握语音合成技术&#xff1a;Step-Audio-TTS-3B终极实践指南 【免费下载链接】Step-Audio-TTS-3B 项目地址: https://ai.gitcode.com/StepFun/Step-Audio-TTS-3B 语音合成技术正迎来革命性突破&#xff0c;Step-Audio-TTS-3B作为基于LLM-Chat范式的先进TTS模型…

作者头像 李华
网站建设 2026/6/10 11:20:02

Flux CD 完整指南:快速掌握Kubernetes自动化部署

Flux CD 完整指南&#xff1a;快速掌握Kubernetes自动化部署 【免费下载链接】flux 项目地址: https://gitcode.com/gh_mirrors/flux/flux Flux CD 是一个专为 Kubernetes 设计的开源持续交付工具&#xff0c;通过 GitOps 方法实现自动化部署和配置管理。本文将为您提供…

作者头像 李华
网站建设 2026/6/10 11:21:53

DeepSeek-R1-Distill-Qwen-32B:32B参数模型如何实现性能大突破?

DeepSeek-R1-Distill-Qwen-32B&#xff1a;32B参数模型如何实现性能大突破&#xff1f; 【免费下载链接】DeepSeek-R1-Distill-Qwen-32B DeepSeek-R1-Distill-Qwen-32B&#xff0c;基于大规模强化学习&#xff0c;推理能力卓越&#xff0c;性能超越OpenAI-o1-mini&#xff0c;适…

作者头像 李华