AI大模型企业应用实战(18)-“消灭”LLM幻觉的利器 - RAG介绍

news2024/12/26 20:53:06

大模型在一定程度上去改变了我们生活生工作的思考的方式,然后也越来越多的个人还有企业在思考如何将大模型去应用到更加实际的呃生产生活中去,希望大语言模型能够呃有一些更多企业级别生产落地的实践,然后去帮助我们解决一些业务上的问题。目前

1 LLM的问题

1.1 幻觉

LLM因为是一个预训练模型,它已有一些知识储备,我们提的问题跟他的知识储备不相符时,会产生一些幻觉问题,看上去正确的回答

1.2 新鲜度

LLM预训练出来之后,不能感知到我们实时更新的工业数据,还有企业内部的一些私域数据

1.3 数据安全

LLM训练依赖很多训练数据集,然后为了保证大语言模型的效果更好,训练集的质量以及数据量越多对于大语言模型的一个训练。最终的一个效果会更好,但我们又期望LLM想要去帮我们解决一些垂类的问题,然后又是希望在数据安全这儿会有一些防范,就比如说像企业的一些内部的敏感数据以及敏感文档是一定不能够暴露出去,让公有的大语言模型去进行训练。

2 RAG是啥?

为解决单元模型刚刚提到问题,提出RAG,将企业内部私域数据以及实时更新的一些公域数据,通过一些处理之后,变成可进行相似性搜索的向量数据,然后存储到向量数据库。

在我们跟大约模型交互时,用户提问。首先在我们的相同数据库中去进行相似性检索,检索出与这个提问相关的知识内容,然后检索后交给LLM,连同用户的提问一起让 LLM 去生成回复。

RAG帮助我们个人及用户去把企业内部的一些知识数据,很快构建出一个庞大知识库,然后结合目前已有LLM能力,可快速制作智能问答机器人应用。

为LLM提供来自外部知识源的额外信息的概念。这允许它们生成更准确和有上下文的答案,同时减少幻觉

  • 检索:外部相似搜索
  • 增强:提示词更新
  • 生成:更详细的提示词输入LLM

2 rag应用咋构建的?

使用到RAG的这条链路之后,用户会先去构建好的知识库,也就是我们向量数据库里面去进行相似性检索,然后带出一部分的知识知识文档。这部分知识文档会跟用户的query结合。

然后我们通过prompt 技术组装成一个最终完成的一个输入给到LLM。然后让LLM生成回复。

最关键一点就是知识库生成这一步,因为主要涉及把我们的知识文档去做内容的提取及拆分。还要进行量化,存入数据库。

2.1 RAG步骤

  1. 知识切片成Chunk

  2. 向量化Chunk入库

    前两步都是去知识库生成。

  3. Query检索知识Chunk

  4. 构建Prompts

  5. 调用LLM生成回答

    后三步都是知识库生成后,在检索方面需要做的。

2.2基于开源框架构建 RAG 应用

像LangChain快速构建一个RAG应用。Langchain中RAG的实现:

各种文档 - 各种 loader - 文本切片 - 嵌入向量化 - 向量存储 - 各种检索链。

思想就是把那五个步骤拆成不同组件,然后由每个不同节点做相应处理。让用户去编写自己的业务逻辑的代码,然后去把这整个过程串起来。

优点和痛点都非常明显。

优势主要是:

  • 可以快速构建一个demo起来,帮助我们的开发者去理解RAG应用
  • 庞大的一个社区支持,如一些插件或它的一个版本更新迭代都会非常快

痛点也明显:通过开源框架构建出来的一个RAG应用,其实本质上它的通用性是非常强。为保证强通用性,它在效果层面不一定做到最好,就需要企业或个人投入比较大精力,较多研究去把这一个整体的RAG在召回层面的一个效果给提升到最佳。

3 bad case

介绍一下在整体构建整个RAG应用过程中会遇到的一些问题和解决方案。

3.1 第一个

用户提问:请问A产品分析报告多久分析一次?

然后我们召回的相关知识是:A产品的分析报告信息近30天的数据分析结果。

原因是我们用户的问题,在相关知识中没有明确提到,只是有一定相似度。但跟我们用户问题不直接相关。这样的相关知识以及用户的问题。组装之后交给LLM回答,本质上是人为搞干扰。

对此,有一个工程化实践叫拒答。

3.2 第二个

提问的A课程适合多大年龄小孩。

知识库里会召回来两条数据,然后其中一条数据是我们期望的一个知识。就在A课程文档。会有一段话跟提问相关,但还会召回其他的一个干扰知识。如其他文档里一些内容,像该课程适合3到7岁的小孩,适合6到8岁的女孩。这种知识内容也会被召回。

主要是期望的召回内容携带一部分干扰信息,这干扰信息没有A课程这个关键字,然后也不会召回回来。在这两个知识内容交给大源模型处理,他也无法理解哪个字内容是正确。

我们更希望在召回层面,就能有较好手段处理。工程化的实践里面,会对用户的进行改写,去增强query的一个效果。

然后也用到类似BM25这种倒排索引,提升关键字的权重。比如干扰知识里没生成这一个关键字,那它的相似度分数较低,就召不回来。

3.3 最后一个

可能有用户的提问是类似:服务器连接不上,应当如何解决?

现在给知识库里面注入的文档,都是类似连接服务器应该有哪些步骤。

  • 第一个问题其实将这些知识内容召回,然后交给LLM也能引导用户。但并不能去直切要害,用户更希望,我现在连接不上了,我有什么样的一个排查手段。更好的还是通过提供一些专门QA文档,去增强整个知识召回内容准确性
  • 第二个问题,用户可能会问一些跟他实例相关的问题。如CPU占用变高或内存变高,然后实际响应可能是我们支持文档里面的一些处理方案,就是我现在内存变更咋处理。但用户想知道为啥变高。有一个意图识别模型,判断我们现在用户他想要的问题具体是一个什么类的,需不需要用到RG,也是会去判断他是不是需要用到诊断引擎。类似问题2,需要用到诊断引擎的那我们会调用其他RCG无关的诊断相关技术为用户排查问题,并且给用户反馈一个结果。

4 如何提升RAG应用的效果

整体效果 = 文档处理效果 * Embedding效果 * Retrieval效果 * LLM效果。

demo易,但上手难的主要原因是因为像LangChain和 LLamIndex这种框架盛行。很快接入就是初级的一个状态,可能只能做到35%。如提高整体一个准确率,可通过在拆分那儿会拆更合理、提取内容时,把整个内容提取更好。做向量化时,去选择我们的向量,更好的一个embedding模型。在最终我们去跟LLM交流时,选择效果更好的LLM,然后把这个效果给提升到更高。但实际上60%的一个准确率还是达不到我们生产环境落地的一个期望值。希望准确率90%,在RAG应用构建的各个阶段,我们都会有很多工程化的一些手段实现。

可优化的效果的方式比较多,然后在整个课程里面我们也会去挑选一些核心关键的及怎么去把这个效果给做的更高。

目前RAG整体应用在界内的比较关注的一个地方就是在召回。因为涉及知识文档,思考方向:

  • 优先保护保证这个召回率
  • 优先保证这个精度

RAG召回回来是希望获得更多的跟用户提问相关的知识内容,还是说我只需要更关键的知识内容排在最顶。腾讯相关数据库的AI套件是选择前面这路,期望是召回回来更多跟用户相关的提问的内容。

精度尽量保证召回内容在top3、top5位置出现,因为召回的一些内容确实会有一部分干扰信息。但目前LLM 能力还可以,对这种干扰性信息的一个排除能力较好。

5 总结

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化

  • 活动&券等营销中台建设

  • 交易平台及数据中台等架构和开发设计

  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

  • LLM应用开发

    目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

  • 编程严选网

    本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

大模型续写评测

环境准备 通过remote-ssh连接云AI服务器,配置文件如下,供参考 # Read more about SSH config files: https://linux.die.net/man/5/ssh_config Host deepseekv1HostName rootconnect.bjc1.seetacloud.comUser rootPort 52984Password xxx # 密码从申请…

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter 今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件&#x…

JWT介绍及其基本使用

JWT介绍及其基本使用 官网:https://jwt.io/ 什么是JWT 全称:JSON Web Token(JSON Web令牌) 一个开放标准(RFC 7519) ,它定义了一种紧凑和自包含的方式, 用于作为 JSON 对象在各方之间安全地传输信息。此信…

捷云等保一体机 产品服务一站式等保合规交付解决方案

等保2.0的变化 2019 年 5 月 13 日,网络安全等级保护制度 2.0 国家标准(简称“等保 2.0”)正式发布,将等保 2.0 基本要求、测评要求、安全设计技术要求框架统一为安全管理中心支持下的三重防护结构框架。定级对象在按照等保 2.0 …

任务5.1 初识Spark Streaming

实战概述:使用Spark Streaming进行词频统计 1. 项目背景与目标 背景: Spark Streaming是Apache Spark的流处理框架,用于构建可伸缩、高吞吐量的实时数据处理应用。目标: 实现一个实时词频统计系统,能够处理流式数据并统计文本中的单词出现频…

DP:二维费用背包问题+似包非包

二维费用的背包问题&#xff1a;大多以01背包为基础&#xff0c;存在两个限制条件&#xff01; 一、一和零 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public: //需要满足两个条件的我们称之为二位费用的背包问题int findMaxForm(vector<string>&…

在 IntelliJ IDEA 中使用 Java 和 Selenium 模拟 Chrome 浏览器教程

在 IntelliJ IDEA 中使用 Java 和 Selenium 模拟 Chrome 浏览器教程 1. 前言2. 环境准备3. 关闭谷歌自动更新通过服务禁用更新服务通过任务计划程序禁用更新任务 4. 项目添加 Maven 依赖项5. 编写自动化脚本6. 项目运行效果7. 代码示例8.常用方法示例页面请求定位标签获取内容操…

Python低溫半导体电子束量子波算法计算

&#x1f3af;要点 &#x1f3af;任意维度求解器&#xff0c;绘制三维投影结果 | &#x1f3af;解二维静电场、静磁场 | &#x1f3af;狄利克雷、诺依曼条件几何矩阵算子 | &#x1f3af;算法模拟低溫半导体材料 | &#x1f3af;计算曲面达西流 | &#x1f3af;电子结构计算和…

学习VXLAN -- 报文结构、原理和配置

目录 VXLAN背景什么是VXLANVXLAN的优势VXLAN报文结构一些特定名词BDVBDIFVAPVSIVSI-InterfaceAC VXLAN的实现原理图VXLAN MAC地址表项MAC地址动态学习 VXLAN隧道VXLAN隧道工作模式L2 GatewayIP Gateway VXLAN隧道的建立与关联VXLAN隧道建立的方式VXLAN对到与VXLAN关联的方式 配…

系统思考与创新解决

圆满结束了为期两天的《系统思考》课程。在这次学习中&#xff0c;大家积极使用系统环路图来分析并呈现跨部门的业务协同问题&#xff0c;以及探讨了推动成长环路背后的限制因素。这不仅增强了团队之间的理解和合作&#xff0c;也帮助我们一起识别阻碍组织发展的关键挑战。期待…

obsidian中用check list 打造待办清单

背景 在快节奏的现代生活中&#xff0c;有效管理个人时间和任务成为提升生活与工作效率的关键。 Obsidian&#xff0c;作为一款强大的知识管理和笔记应用&#xff0c;通过其丰富的插件生态&#xff0c;为我们提供了高度自定义的任务管理解决方案。本文旨在详细介绍如何在Obsid…

AI应用带你玩系列之SadTalker

前段时间我刷微信视频&#xff0c;我无意间点开了一个&#xff0c;画面缓缓展开&#xff0c;是一幅精致的水墨画&#xff0c;画中人物皆是古代装束&#xff0c;衣袂飘飘&#xff0c;仿佛能闻到墨香。然而&#xff0c;这宁静的画面突然被打破了&#xff0c;画中的人物开始动了起…

自动驾驶仿真Carla -ACC功能测试

我将详细说明如何使用Carla进行ACC&#xff08;自适应巡航控制&#xff09;测试&#xff0c;确保每个步骤贴合实际的Carla自动驾驶仿真标准&#xff0c;并提供相应的代码示例。 使用Carla进行ACC测试的步骤&#xff1a; 1. 环境设置和启动Carla 首先&#xff0c;确保你已经安装…

在vue项目中集成cesium

首先创建一个新的vue项目 安装vite中cesium插件 https://github.com/nshen/vite-plugin-cesium 安装插件 npm i cesium vite-plugin-cesium vite -D配置插件 注释原有样式 修改代码 效果

重学java 79.JDK新特性 ⑤ JDK8之后的新特性

别怕失败&#xff0c;大不了重头再来 —— 24.6.20 一、接口的私有方法 Java8版本接口增加了两类成员: 公共的默认方法 公共的静态方法 Java9版本接口又新增了一类成员: 私有的方法 为什么IDK1.9要允许接口定义私有方法呢? 因为我们说接口是规范&#xff0c;规范是…

AI 大模型企业应用实战(08)-LangChain用prompts模板调教LLM的输入输出

超越chatGPT:学习使用prompts模板来调教LLM的输入输出&#xff0c;打造自己版本的"贾维斯" 1 Model I/O&#xff1a;LLM的交互接口 任何语言模型应用程序的核心要素都是......模型。LangChain 为您提供了与任何语言模型连接的构件。 即 Prompts -> Language mod…

免费ddns工具,快解析DNS解析使用教程

DDNS&#xff08;Dynamic Domain Name Server&#xff09;,中文叫动态域名解析&#xff0c;主要用于没有固定公网ip的网络环境下&#xff0c;使用一个固定的域名&#xff0c;解析动态变化的ip地址&#xff0c;达到远程访问的目的。 众所周知&#xff0c;目前公网ip资源非常紧缺…

昇思25天学习打卡营第6天|使用静态图加速

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 背景介绍 AI编译框架分为两种运行模式&#xff0c;分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行&#xff0c;但也支持手工切换为静态图模式。两种运行模式的详细介…

MySQL数据库(三):读取数据库数据

上一节&#xff0c;我们介绍了数据库的基本操作&#xff0c;以及最后演示了如何使用库来连接数据库&#xff0c;在实际应用中&#xff0c;我们通常需要按照指定的条件对数据库进行操作&#xff0c;即增删改查操作&#xff0c;这是非常重要的&#xff01;这一节我们继续通过一个…

【电源专题】案例:电量计遇到JEITA充电芯片,在高温下无法报百怎么办?

在使用电量计芯片时,我们期望的是在产品工作温度下、在产品最低和正常充电电流下都要能报百。 所谓报百,就是电量计RSOC(电量百分比)能到达100%。这看起来简单,如果是常规的操作的话,那么电压达到充电截止要求、电流达到充电截止要求、容量累积变化满足要求,RSOC=100%肯…