LLM - 白话RAG(Retrieval-Augmented Generation)

文章目录

  • Pre
  • 一、大模型的"幻觉"之谜
    • 1.1 何为"幻觉"现象?
    • 1.2 专业场景的致命挑战
  • 二、RAG技术解析:给大模型装上"知识外挂"
    • 2.1 核心原理:动态知识增强
    • 2.2 技术实现三部曲
  • 三、RAG vs 微调:技术选型指南
    • 3.1 核心差异对比
    • 3.2 黄金选择法则

在这里插入图片描述

Pre

LLM - 白话向量模型和向量数据库


一、大模型的"幻觉"之谜

1.1 何为"幻觉"现象?

大模型会以高度自信的姿态输出错误信息,犹如天才学生考试时"编造答案"。这种现象主要源于:

  • 知识缺陷:训练数据存在错误/过时信息(如2021年前的GPT模型)
  • 推理偏差:过度泛化语言模式(将"鸟类会飞"套用于企鹅)
  • 领域盲区:缺乏垂直行业知识(如企业私有产品数据)

1.2 专业场景的致命挑战

在医疗诊断、法律咨询等场景中,10%的错误率可能带来灾难性后果。


二、RAG技术解析:给大模型装上"知识外挂"

在这里插入图片描述

2.1 核心原理:动态知识增强

RAG(Retrieval-Augmented Generation)通过实时检索外部知识库,为生成过程提供精准参考。其创新之处在于:

传统大模型RAG增强模型
依赖静态训练数据动态整合最新知识
单一生成过程检索-生成双阶段流程
通用知识覆盖领域知识深度定制

2.2 技术实现三部曲

案例:构建智能客服系统

在这里插入图片描述

  1. 知识索引构建

在这里插入图片描述

  1. 智能检索阶段

  2. 增强生成阶段

在这里插入图片描述
在这里插入图片描述

// 使用LangChain4j实现电商智能客服的RAG流程
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.retriever.EmbeddingStoreRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;public class RagProductAssistant {// 1. 检索增强组件private final EmbeddingModel embeddingModel;private final EmbeddingStore<TextSegment> embeddingStore;// 2. 大模型组件private final ChatLanguageModel chatModel;public RagProductAssistant(EmbeddingModel embeddingModel, EmbeddingStore<TextSegment> embeddingStore,ChatLanguageModel chatModel) {this.embeddingModel = embeddingModel;this.embeddingStore = embeddingStore;this.chatModel = chatModel;}// 核心RAG处理流程public String answerQuestion(String userQuery) {// 阶段1:检索上下文List<TextSegment> relevantContexts = retrieveRelevantContext(userQuery);// 阶段2:增强生成return generateAugmentedResponse(userQuery, relevantContexts);}// 上下文检索方法private List<TextSegment> retrieveRelevantContext(String query) {// 生成查询向量Embedding queryEmbedding = embeddingModel.embed(query).content();// 向量数据库检索(取Top3)int maxResults = 3;List<EmbeddingMatch<TextSegment>> matches = embeddingStore.findRelevant(queryEmbedding, maxResults);// 提取文本片段return matches.stream().map(EmbeddingMatch::embedded).collect(Collectors.toList());}// 增强生成方法private String generateAugmentedResponse(String query, List<TextSegment> contexts) {// 构建增强提示词String promptTemplate = """基于以下产品信息回答用户问题:${contexts}用户问题:${query}要求:1. 使用中文回答2. 如果信息不足请明确说明3. 保持专业性""";// 拼接上下文String contextStr = contexts.stream().map(TextSegment::text).collect(Collectors.joining("\n\n"));// 填充模板String finalPrompt = promptTemplate.replace("${contexts}", contextStr).replace("${query}", query);// 调用大模型生成return chatModel.generate(finalPrompt);}
}// 使用示例
public class RagDemo {public static void main(String[] args) {// 1. 初始化组件EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();EmbeddingStore<TextSegment> embeddingStore = createProductEmbeddingStore();ChatLanguageModel chatModel = OpenAiChatModel.builder().apiKey("your_key").modelName("gpt-3.5-turbo").build();// 2. 创建RAG助手RagProductAssistant assistant = new RagProductAssistant(embeddingModel, embeddingStore, chatModel);// 3. 处理用户查询String question = "你们最新款手机支持多少倍光学变焦?";String answer = assistant.answerQuestion(question);System.out.println(answer);}// 初始化产品知识库private static EmbeddingStore<TextSegment> createProductEmbeddingStore() {// 实际场景中连接Redis/Elasticsearch等向量数据库InMemoryEmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>();// 加载产品文档(示例数据)List<String> productSpecs = Arrays.asList("型号X30 Pro: 支持100倍混合变焦,搭载潜望式镜头","型号X30: 支持30倍光学变焦,夜景拍摄增强");// 生成嵌入并存储productSpecs.forEach(text -> {Embedding embedding = embeddingModel.embed(text).content();store.add(embedding, TextSegment.from(text));});return store;}
}

三、RAG vs 微调:技术选型指南

3.1 核心差异对比

维度RAG微调
知识更新实时动态需重新训练
硬件需求CPU可运行需GPU资源
实施周期小时级部署周级准备
可解释性检索记录可溯源黑盒决策

3.2 黄金选择法则

  • 选择RAG:知识频繁更新、需要结果溯源、快速迭代场景
  • 选择微调:专业术语理解、特殊任务适配、长期稳定场景

典型案例

  • 医院病历系统:微调+医学知识库RAG
  • 法律咨询平台:法条库RAG+裁判文书微调

在这里插入图片描述

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

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

相关文章

探索现代 C++:新特性、工程实践与热点趋势

目录 一、现代 C 的关键特性与热点关联 二、精简代码示例解析 三、工程实践中的应用思考 四、总结与展望 近几年&#xff0c;人工智能、边缘计算与跨语言开发成为技术热点&#xff0c;而 C 作为高性能系统编程的主力军&#xff0c;也在不断进化。从 C11 到 C20&#xff0c;…

《HTML + CSS + JS 打造炫酷轮播图详解》

《HTML CSS JS 打造炫酷轮播图详解》 一、项目概述 本次项目旨在使用 HTML、CSS 和 JavaScript 实现一个具有基本功能的轮播图&#xff0c;包括图片自动轮播、上一张 / 下一张按钮切换、小圆点指示与切换等功能&#xff0c;以提升网页的交互性和视觉吸引力。 二、实现步骤…

257. 二叉树的所有路径(递归+回溯)

257. 二叉树的所有路径 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 思路&#xff1a;在叶子节点收割结果&#xff0c;如果不是叶子节点&#xff0c;则依次处理左右子树&a…

【架构差异】SpringとSpringBoot:Bean机制的深入剖析与自动配置原理

目录标题 SpringBoot框架中Bean机制的深入剖析与自动配置原理摘要1. 引言2. SpringBoot与Spring的架构差异2.1 从Spring到SpringBoot的演进2.2 SpringBoot中的Bean容器体系 3. SpringBoot的自动配置机制3.1 SpringBootApplication解析3.2 自动配置原理深度解析3.2.1 自动配置类…

CSDN博客:Markdown编辑语法教程总结教程(中)

❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定&#xff0c;高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…

ChebyKAN0、ChebyKAN1 网络阅读

目录 ChebyKAN0 Chebyshev Polynomial-Based Kolmogorov-Arnold Networks: An Efficient Architecture for Nonlinear Function Approximation 参考文献 文章内容 文章详细结构 5. Experiments and Results 5.1 Digit Classification on MNIST 5.2 Function Approximat…

RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比

目录 前言 1. 结果对比 1.1 时间对比 1.2 CPU和NPU占用对比 2. RGA实现YOLO前处理 2.1 实现思路 2.2 处理类的声明 2.3 处理类的实现 总结 前言 RK平台上有RGA (Raster Graphic Acceleration Unit) 加速&#xff0c;使用RGA可以减少资源占用、加速图片处理速度。因此…

破局者登场:中国首款AI原生IDE Trae深度解析--开启人机协同编程新纪元

摘要 字节跳动于2025年3月3日正式发布中国首款AI原生集成开发环境Trae国内版&#xff0c;以动态协作、全场景AI赋能及本土化适配为核心优势。Trae内置Doubao-1.5-pro与DeepSeek R1/V3双引擎&#xff0c;支持基于自然语言生成端到端代码框架、实时上下文感知与智能Bug修复&…

【PyCharm】Python和PyCharm的相互关系和使用联动介绍

李升伟 整理 Python 是一种广泛使用的编程语言&#xff0c;而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境&#xff08;IDE&#xff09;。以下是它们的相互关系和使用联动的介绍&#xff1a; 1. Python 和 PyCharm 的关系 Python&#xff1a;一种解释型、…

SNIPAR:快速实现亲缘个体的基因型分离与推断

SNIPAR&#xff1a;快速实现亲缘个体的基因型分离与推断 近日&#xff0c;英国剑桥大学研究团队在Nature Genetics上发表了最新研究成果——SNIPAR&#xff08;SNP-based Inference of Pedigree relationship, Ancestry, and Recombination&#xff09;。这一强大的工具可以帮助…

3.11记录

leetcode刷题&#xff1a; 1. 334. 递增的三元子序列 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;使用贪心算法求解 class Solution(object):def increasingTriplet(self, nums):first nums[0]second float(inf)for i in nums:if i>second:return Truee…

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测&#xff1a;国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展&#xff0c;企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具&#xff0c;正逐步成为企业高效管理…

大语言模型学习--向量数据库Milvus实践

Milvus是目前比较流行的开源向量数据库&#xff0c;其官网地址 Milvus 是什么&#xff1f; | Milvus 文档 1.Milvus简介 Milvus 是一种高性能、高扩展性的向量数据库。Milvus 提供强大的数据建模功能&#xff0c;能够将非结构化或多模式数据组织成结构化的 Collections。它支…

DeepSeek Kimi详细生成PPT的步骤

以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤&#xff0c;结合了两者的优势实现高效创作&#xff1a; 第一步&#xff1a;使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中&#xff0c;输入具体指令&#xff0c;要求生成 PPT 大纲或…

Visual Studio 安装及使用教程(Windows)【安装】

文章目录 一、 Visual Studio 下载1. 官网下载2. 其它渠道 二、Visual Studio 安装三、Visual Studio 使用四、Visual Studio 其它设置1. 桌面快捷方式2. 更改主题、字体大小 软件 / 环境安装及配置目录 一、 Visual Studio 下载 1. 官网下载 安装地址&#xff1a;https://vi…

Java多线程与高并发专题——阻塞和非阻塞队列的并发安全原理是什么?

引入 之前我们探究了常见的阻塞队列的特点&#xff0c;在本文我们就以 ArrayBlockingQueue 为例&#xff0c;首先分析 BlockingQueue &#xff0c;也就是阻塞队列的线程安全原理&#xff0c;然后再看看它的兄弟——非阻塞队列的并发安全原理。 ArrayBlockingQueue 源码分析 …

关于ngx-datatable no data empty message自定义模板解决方案

背景&#xff1a;由于ngx-dataable插件默认没有数据时显示的文案是no data to display&#xff0c;且没有任何样式。这里希望通过自定义模板来实现。但目前github中有一个案例是通过设置代码&#xff1a; https://swimlane.github.io/ngx-datatable/empty** <ngx-datatable…

Matlab 双线性插值(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 双线性插值是一种 二维插值方法,用于计算 栅格(Grid) 或 像素点 之间的插值值。它主要用于 图像缩放、旋转、变换 等操作,以在新像素位置估算灰度值或颜色值。 如上图所示,假设存在一个二维离散函数(如图像)…

coding ability 展开第二幕(双指针——巩固篇)超详细!!!!

文章目录 前言有效的三角形个数思路 查找总价格为目标值的两个商品思路 两数之和思路 三数之和思路 四数之和思路 总结 前言 本专栏的上篇&#xff0c;讲述了双指针的一些基础的算法习题 今天我们来学习更进一步的双指针用法吧 其实也是大相径庭&#xff0c;和前面的差不多&…

L1-056 猜数字

L1-056 猜数字 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 这道题要求&#xff1a;一群人坐在一起&#xff0c;每人猜一个 100 以内的数&#xff0c;谁的数字最接近大家平均数的一半就赢。现在需要编写程序来计算&#xff0c;其中需要存入玩家的名字&#xff08;字符串&a…