聊聊大模型 RAG 探索之路的血泪史,一周出Demo,半年用不好

大家好,今天我们来继续看看 RAG 落地的一些有趣的事儿,从技术社群早上的讨论开始,喜欢技术交流的可以文末加入我们

在这里插入图片描述

一、从一周出Demo、半年用不好说起

最近读了读2024-傅盛开年AI大课,其中有讲到RAG环节,三张片子比较有趣。

首先,用检索的方法配合大模型进行任务处理,可以很好的使用企业数据进行知识问答

这是继是当前为大家所熟知的RAG问答范式了。

图片

其次,RAG开源框架很多,可现实很骨感

片子里的那句话说的很现实,一周出Demo,半年用不好

图片

例如,目前已经开源的RAG框架包括12种【还不全面】,其中,排在前5的为大家所熟知:

1)LangChain: https://github.com/langchain-ai/langchain/

2)QAnything: https://github.com/netease-youdao/QAnything/tree/master

3)LlamaIndex: https://github.com/run-llama/llama_index/

4)langchainchat: https://github.com/chatchat-space/Langchain-Chatchat/releases/tag/v0.2.8

5) FastGPT :https://github.com/labring/FastGPT

6)langchain4j :https://github.com/langchain4j/langchain4j

7)Unstructured :https://github.com/Unstructured-IO/unstructured

8)GPT-RAG :https://github.com/Azure/GPT-RAG

9)Quivr :https://github.com/StanGirard/quivr

10)Dify :https://github.com/langgenius/dify

11)Verba :https://github.com/weaviate/Verba

12)danswer:https://github.com/danswer-ai/danswer

最后,给出的高级套件,其中涉及到知识预处理、语义理解和改写、混合检索引擎、自动化质量评估体系、微调效果校准等多个例子。

图片

二、现实实践优化探索与真实反馈

最近技术社群,一个小伙伴分享了一个工作《RAG探索之路的血泪史及曙光》,读了一下,讲的也很不错,推荐给大家读一读。

agent的技术发展流程:

图片

朴素RAG的实现方式:

图片

针对文本切割的一些经验:

图片

此外,在chatglm金融问答比赛中的一些方案

图片

在总结侧,可以同时结合正则、关键词抽取、文档问答、ICL、分块文本信息加入标题等,提升效果。

图片

当然,方案是方案,其中一些有趣的讨论:

Q:我对于RAG相当没有信心。两个问题实在让我跪了:1)Retrieval明明是对的。但是LLM根据Retrieval结果回答问题出错。睁眼说瞎话的几率还是明显大于用户可以接收的概率(用户一般只能接受0.1%的错误率);2)多跳逻辑无法通过Retrieval来做。比如查询Elon musk的兄弟叫什么名字,可能资料里只有Elon的妈妈是谁,Elon妈妈生了几个孩子。需要合成这个逻辑。优化prompt template+使用GPT4+使用CoT+使用reference generation+使用NLI,都没办法让错误率到1%以下。还是会偶尔胡编……

A: reasoning 还是有存在价值的,用 llm 推理是一条路径。不过也不唯一。好问题。第一个我们遇到过,最后通过优化 prompt template 和自定义答复模板解决;第二个建议试试用graph database 用来召回,特别适合解决多度和多跳关系。rag 使用 embedding 我只能说局限太大。

Q:第二个问题,不是graph能解决的。我刚才举的例子能用graph。实际上没法用Graph的例子海量。比如一些客服机器人在回答优惠券的组合使用的问题。

图片

Q:提到的普通文本上下文检索优化中转为html方式后优化检索的方式我非常感兴趣,请问您知道是否有这方面的论文或者公开数据集吗?

A: 数据源有以下几种形式:Markdown。直接使用 Python-Markdown转化到 Html。pdf。可以找相关库转化为 Markdown,再转化为 Html,有些包也支持直接转。Html。拿来用即可。关于 Html 检索,是我自己实现的逻辑,主要阶段有两个:分片入库。

主要思路是,识别 html 中的 header,paragraph和 ol,ul 等标记。并将其转化为元数据,连同 embedding 的结果一同保存到vector store 中。

元数据应该包含:分片来自的源文件分片 id,应该符合源文件中出现的原始顺序递增。这个挺重要,会用于后面上下文检索。分片的 html tag,特别是需要通过 header 体现自己隶属于哪个层级。

检索。如果命中某个分片,则获取分片的元数据。然后根据所属的层级信息进行处理上下文补全:vector store 中当前层级的所有分片都找到。这里就不是基于 vector similarity 检索了,一个小技巧是将层级直接体现在字段中,按字段直接索引。如果发送给 llm context 还有剩余,可以再找兄弟平行层级;如果还有剩余可以找父层级。

技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了大模型技术交流群,本文相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:来自CSDN + 技术交流

通俗易懂讲解大模型系列

  • 做大模型也有1年多了,聊聊这段时间的感悟!

  • 用通俗易懂的方式讲解:大模型算法工程师最全面试题汇总

  • 用通俗易懂的方式讲解:我的大模型岗位面试总结:共24家,9个offer

  • 用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战

  • 用通俗易懂的方式讲解:一文讲清大模型 RAG 技术全流程

  • 用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?

  • 用通俗易懂的方式讲解:ChatGPT 开放的多模态的DALL-E 3功能,好玩到停不下来!

  • 用通俗易懂的方式讲解:基于扩散模型(Diffusion),文生图 AnyText 的效果太棒了

  • 用通俗易懂的方式讲解:在 CPU 服务器上部署 ChatGLM3-6B 模型

  • 用通俗易懂的方式讲解:使用 LangChain 和大模型生成海报文案

  • 用通俗易懂的方式讲解:ChatGLM3-6B 部署指南

  • 用通俗易懂的方式讲解:使用 LangChain 封装自定义的 LLM,太棒了

  • 用通俗易懂的方式讲解:基于 Langchain 和 ChatChat 部署本地知识库问答系统

  • 用通俗易懂的方式讲解:在 Ubuntu 22 上安装 CUDA、Nvidia 显卡驱动、PyTorch等大模型基础环境

  • 用通俗易懂的方式讲解:Llama2 部署讲解及试用方式

  • 用通俗易懂的方式讲解:基于 LangChain 和 ChatGLM2 打造自有知识库问答系统

  • 用通俗易懂的方式讲解:一份保姆级的 Stable Diffusion 部署教程,开启你的炼丹之路

  • 用通俗易懂的方式讲解:对 embedding 模型进行微调,我的大模型召回效果提升了太多了

  • 用通俗易懂的方式讲解:LlamaIndex 官方发布高清大图,纵览高级 RAG技术

  • 用通俗易懂的方式讲解:为什么大模型 Advanced RAG 方法对于AI的未来至关重要?

  • 用通俗易懂的方式讲解:使用 LlamaIndex 和 Eleasticsearch 进行大模型 RAG 检索增强生成

  • 用通俗易懂的方式讲解:基于 Langchain 框架,利用 MongoDB 矢量搜索实现大模型 RAG 高级检索方法

  • 用通俗易懂的方式讲解:使用Llama-2、PgVector和LlamaIndex,构建大模型 RAG 全流程

总结

本文主要介绍了RAG现有的一些开源框架以及后续实践环节中大家真实的感受。实际上,RAG作为一个技术方案,目前已经有很多,大家都大差不差。

目前,大模型和RAG等技术方案的开源,极大地拉开了大家的门槛,这是好事情,对推动技术和业务发展。但这个有不是好事情,这加剧了公司的竞争。

丢掉幻想,打磨细节。

参考文献

1、傅盛2024开年AI大课PPT

2、https://zhuanlan.zhihu.com/p/664921095

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

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

相关文章

2023.1.23 关于 Redis 哨兵模式详解

目录 引言 人工恢复主节点故障 ​编辑 主从 哨兵模式 Docker 模拟部署哨兵模式 关于端口映射 展现哨兵机制 哨兵重新选取主节点的流程 哨兵模式注意事项 引言 人工恢复主节点故障 1、正常情况 2、主节点宕机 3、程序员主动恢复 先看看该主节点还能不能抢救如果不好定…

统一异常处理

统一异常处理 统一异常处理创建一个类定义方法ControllerAdvice和ExceptionHandler注意事项 统一异常处理 创建一个类 首先,我们来创建一个类,名字随意,这里我们取名ERHandler 定义方法 在ERHandler中,我们可以定义几个类,参数用来接收各种异常,这里的异常可以是任意的,返回…

面试官:你可以说一说你对Jmeter元素的理解吗?下

面试官:你可以说一说你对Jmeter元素的理解吗?下 监听器配置元素CSV数据集配置HTTPCookie管理器HTTP请求默认值登录配置元素 监听器 Listeners:显示测试执行的结果。它们可以以不同的格式显示结果,例如树、表、图形或日志文件 图…

LLM大语言模型(五):用streamlit开发LLM应用

目录 背景准备工作切记streamlit开发LLM demo开一个新页面初始化session先渲染历史消息接收用户输入模拟调用LLM 参考 背景 Streamlit是一个开源Python库,可以轻松创建和共享用于机器学习和数据科学的漂亮的自定义web应用程序,用户可以在几分钟内构建一…

DNS欺骗

DNS(域名系统)作为当前全球最大 、最复杂的分布式层次数据库系统,具有着开放、庞大、复杂的特性。它为全球用户提供域名解析服务,是互联网的重要基础设施。但由于其在设计之初未考虑安全性、人为破坏等因素 ,DNS系统在互联网高度发达的今天面…

Ubuntu下APT下载工具(Ubuntu 下最常用的下载和安装软件方法)

前言 本篇文章记录我学习Ubuntu 下用的最多的下载工具: APT 下载工具, APT 下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。 APT 下载工具和我们前面一篇文章讲解的“install”命令结合在一起构成了 Ubuntu 下最常用的下载和安装软件方…

【代码随想录】LC 242. 有效的字母异位词

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 242. 有效的字母异位词 2、题目描述 二、解题…

刘知远团队大模型技术与交叉应用L5-BMSystem

为什么需要BMTrain? PLM越来越大。为了使训练更高效和廉价。我们有必要 1.分析GPU的显存去哪了? 2.理解GPU间的合作模式是如何的? 显存都去了哪里? CPU vs GPU CPU适合复杂逻辑运算。GPU适合大量重复的数值运算。 显存成分 1.前…

csp----寻宝!大冒险!

题目描述&#xff1a; AC代码如下&#xff1a; /*思路&#xff1a; 把A变成小块 因为B是A里的一部分 通过把A变成小块 去寻找B这样速度更快 如果AB,BA&#xff0c;说明找到了。 */#include <iostream> #include <cstring> #include <algorithm> #include …

【Java】初识Spring Mvc

SpringMVC_day01 今日内容 理解SpringMVC相关概念完成SpringMVC的入门案例学会使用PostMan工具发送请求和数据掌握SpringMVC如何接收请求、数据和响应结果掌握RESTful风格及其使用完成基于RESTful的案例编写 1&#xff0c;SpringMVC简介 看到SpringMVC这个名字我们会发现其中…

【人工智能】主要人工智能技术及深度学习及传统机器学习区别与联系

主要人工智能技术的基本概念和应用场景 机器学习英文简称ML是一门涉及统计学、系统辨识、逼近理论、优化理论、计算机科学、脑科学等诸多领域的交叉学科&#xff0c;主要研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识…

【GAMES101】Lecture 10 几何表示

目录 隐式表示 代数曲面&#xff08;Algebraic surfaces&#xff09; CSG&#xff08;Constructive solid geometry&#xff09; 距离函数&#xff08;Distance Functions&#xff09; 水平集&#xff08;Level set methods&#xff09; 分形&#xff08;Fractals&#x…

【Android】MediaCodec学习

在开源Android屏幕投屏代码scrcpy中&#xff0c;使用了MediaCodec去获取和display关联的surface的内容&#xff0c;再通过写fd的方式&#xff08;socket等&#xff09;传给PC端&#xff0c; MediaCodec的处理看起来比较清楚&#xff0c;数据in和数据out 这里我们做另外一个尝试…

AI嵌入式K210项目(19)-安装CanMV IDE开发软件

文章目录 前言一、软件下载安装二、软件简介三、设备连接四、在线模拟五、开机运行程序附录&#xff1a;MicroPython固件烧录总结 前言 前几章我们介绍K210使用C语言裸机开发方法&#xff0c;大家对K210内部的硬件和各种加速器有了初步的了解&#xff0c;但是开发人工智能相关…

TypeScript(四) 运算符

1. 运算符 1.1. 描述 运算符用于执行程序代码运算。 1.2. 运算符主要包括&#xff1a; &#xff08;1&#xff09;算术运算符 &#xff08;2&#xff09;逻辑运算符 &#xff08;3&#xff09;关系运算符 &#xff08;4&#xff09;按位运算符 &#xff08;5&#xff09;赋值…

内部类 --java学习笔记

内部类 是类中的五大成分之一&#xff08;成员变量、方法、构造器、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff0c;那么这个类就是内部类当一个类的内部包含了一个整体的事务&#xff0c;且这个事务没必要单独设计时&#xff0c;就可以把…

(十三)centos7案例实战——用户、用户组及用户权限管理

前言 对于完备的centos系统来说&#xff0c;创建一套规范的账户权限系统是十分必要的。针对不同的用户提供不同的操作权限&#xff0c;避免直接使用root账号&#xff0c;造成系统的误操作&#xff0c;导致一些不必要的损失&#xff0c;将删库跑路扼杀在摇篮中。本节内容会从用…

基于springboot校园台球厅人员与设备管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括校园台球厅人员与设备管理系统的网络应用&#xff0c;在外国管理系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。校园台球厅人员与设备管理系统具…

Fastbee物联网项目新手快速入门

一&#xff0c;前提条件 后端环境准备如下&#xff1a; 正式环境推荐硬件资源最低要求4c8G&#xff0c;硬盘40G。JDK 1.8.0_2xx (需要小版本号大于200) 。Maven3.6.3。&#xff08;IDEA启动时使用IDEA默认自带的版本即可&#xff09;。 启动fastbee之前&#xff0c;请先确定…

课时6:编程语言逻辑

1.2.2 编程语言逻辑 学习目标 这一节&#xff0c;我们从 语言分类、编程逻辑、小结 三个方面来学习。 语言分类 语言分类 低级编程语言&#xff1a;机器&#xff1a;- 二进制的0和1的序列&#xff0c;称为机器指令。- 一般人看不懂汇编&#xff1a;- 用一些助记符号替代机…