生成式AI系列(二) LLM生成质量改善的方法——RAG检索增强生成
一、引子
我们需要通过一些手段来提升LLM生成内容质量,主要的有下面三项,本文将主要介绍RAG。
1. 提示工程(Prompt Engineering)
通过精心设计的提示(Prompt)来提升输出的质量
2. 模型微调(Fine-tune)
模型微调是指在已有的预训练模型(比如GPT-4o、Llama 3.3等)基础上,使用特定的数据集进行二次训练,以调整模型参数,使其能够在特定领域的任务上表现更好。
3. 检索增强生成(Retrieval-Augmented Generation,RAG)
检索增强生成是一种利用信息检索来优化LLM输出的技术,通过在生成结果之前引用训练数据之外的知识库,丰富了上下文,从而增强生成内容的准确性。RAG的好处既能保证时效性,又能避免高昂的微调成本
RAG的本质就是根据用户查询,从外部知识库(即使更新)中检索相关的知识,随后以附加内容的形式添加到提示中,增强LLM的生成内容。

二、RAG工作流
RAG的工作流分成索引、检索、生成两个阶段。

(一)索引阶段
索引阶段就是将外部知识按照特定的数据结构组织起来,实现更高效的检索。主要有以下几个步骤:
1、文本分块。原始文本往往都有冗长、信息量大等特点,比如一本书,这并不利于高效检索。一方面干扰信息太多,影响检索精度;另一方面检索过程计算开销很大。文本分块可以将长文本切分成多个粒度更细的文本块,能够更准确匹配用户查询意图的同时,计算和存储开销也更小。
2、Embedding。通过Embedding模型将文本块转换成向量(Embedding)。
3、索引。对向量按照特定的数据结构建立索引,比如基于图的HNSW、基于哈希桶的LSH、倒排索引IVF等。
4、存储。将原始向量和索引数据存储起来,可以使用专用的向量数据库,比如Milvus等,也可以使用传统数据库+向量索引插件,比如PostgreSQL+pgvector。
(二)检索阶段
检索阶段就是利用查询去检索相关的文本块的过程,主要有以下2个步骤:
1、Embedding。使用与索引阶段同样的Embedding模型,将原始查询转换成向量。
2、检索。利用向量相似性计算,找到与原始查询最匹配的TopN个相关文本块。
(三)生成阶段
生成阶段首先将相关文本块与原始查询组成新的提示,引导LLM基于相关文本块完成内容的生成。
参考:
快速了解生成式AI
《Generative AI in Action》,Amit Bahree快速了解生成式AI
相关文章:
生成式AI系列(二) LLM生成质量改善的方法——RAG检索增强生成
一、引子 我们需要通过一些手段来提升LLM生成内容质量,主要的有下面三项,本文将主要介绍RAG。 1. 提示工程(Prompt Engineering) 通过精心设计的提示(Prompt)来提升输出的质量 2. 模型微调(Fi…...
Visual studio + Qt 项目配置管理
Visual studio Qt 项目配置管理 1.本机顺利安装 vs 和 Qt 软件 并且设置好Qt 的环境变量比如 E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\bin E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\lib E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\include //这里是你电脑上Qt的路径,每台电脑不一样…...
直装永久授权,最新专业版集成VB7
无论是学生、教师还是职场工作人员,办公软件在日常工作和学习中都是不可或缺的重要工具。在众多办公软件中,微软的Microsoft Office和金山软件的WPS Office最常用的选择。对于许多使用要求不高的小伙伴而言,WPS Office因其易用性和免费版本的…...
AI数字人| Fay开源项目、UE5数字人、本地大模型
数字人实践教程 本教程主要是讲如何在本地UE部署Fay数字人的开源框架。 最终效果可以与人进行自然语言的对话,花了大概10个h的时间到,踩了很多坑,同样想实现的朋友可以作为参考 参考文档:Fay 数字人开源框架 - 飞书云文档 官方的教…...
【网络编程】同步和异步、阻塞和非阻塞,I/O和网络I/O
十、基于I/O模型的网络开发 10.1 同步和异步 对于多个线程而言,同步、异步就是线程间的步调是否要一致、是否要协调:要协调线程 之间的执行时机就是线程同步,否则就是异步。 对于一个线程的请求调用来讲,同步和异步的区别是是否…...
第本章:go 切片
注意: 切片必须要初始化 才能使用 ,切片是引用类型 a :[]int{} // 这上叫始化 此时并没有申请内存 // 如果要追加值的话: append ints : append(a, 1, 2, 3)a : make([]int,5) // 声明切片类型var a []string //声明一…...
VsCode导入时选择相对路径
自动导入时总是以db://开头了,而我们通常需要的是相对路径,对VsCode进行如下设置: 打开 VSCode 设置: 使用快捷键 Ctrl ,(Windows/Linux)或 Cmd ,(Mac)。 或者在菜单栏中选择 …...
CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划
25年2月来自浙大和菜鸟网络的论文“CarPlanner: Consistent Auto-regressive Trajectory Planning for Large-scale Reinforcement Learning in Autonomous Driving”。 轨迹规划对于自动驾驶至关重要,可确保在复杂环境中安全高效地导航。虽然最近基于学习的方法&a…...
Vue3:本地启动Vue3项目失败,报not found xxx moudel
一、情况描述 我这边是从git上下载的一份可用代码 是之前在公司上传的 于是,在加clone到本地。继续开发 get到项目后,我先进行了:npm install,也没显示报错。 启动的时候报错。 二、解决 rm -rf node_modules npm cache clean…...
nodejs去除本地文件html字符
说明:我希望用nodejs 写一个小工具,去除本地txt文件中的html字符,去除字符后生成新的文件,同样保存在桌面 文件的具体位置是C:\Users\Administrator\Desktop\file.txt step1:C:\Users\Administrator\WebstormProjects\untitled4\f…...
dify部署
https://github.com/langgenius/dify 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。Dify 内置了构建 LLM 应用所需的关键技…...
【Redis】常用命令汇总
Redis 作为高性能的键值存储数据库,提供了丰富的命令集,主要涵盖 字符串 (String)、哈希 (Hash)、列表 (List)、集合 (Set)、有序集合 (ZSet)、键 (Keys)、Geo(地理位置)、HyperLogLog(基数统计)、Bitmap&a…...
分析TCP三次握手与四次挥手
TCP(传输控制协议)通过三次握手建立连接,四次挥手终止连接,确保数据传输的可靠性。 TCP的三个控制标志位: SYN——用于建立连接,同步序列号。 ACK——用于确认收到的数据。 FIN——用于终止连接。 ISN…...
C++之序列容器(vector,list,dueqe)
1.大体对比 在软件开发的漫长历程中,数据结构与算法始终占据着核心地位,犹如大厦的基石,稳固支撑着整个程序的运行。在众多编程语言中,数据的存储与管理方式各有千秋,而 C 凭借其丰富且强大的工具集脱颖而出ÿ…...
网络安全技术和协议(高软43)
系列文章目录 网络安全技术和协议 文章目录 系列文章目录前言一、网络安全技术1.防火墙2.入侵检测系统IDS3.入侵防御系统IPS 二、网络攻击和威胁三、网络安全协议四、真题在这里插入图片描述 总结 前言 本节讲明网络安全技术和协议方面的相关知识。 一、网络安全技术 1.防火…...
LeetCode697
好的,根据你提供的代码和LeetCode题号(697),我将帮助你生成一个结构化的Markdown文档。首先,我们需要补充一些必要的信息,如题目描述、示例、思路分析等。如果你能提供这些信息会更好,否则我会基…...
js基本功(四)
ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,用于表示英文字符、数字、标点符号以及一些控制字符。 可以通过 charCodeAt() 方法获取字符的 ASCII 码,也可以通过 String.fromCharCode() 方法将 ASCII 码转…...
linux | Vim 命令快捷操作
注:本文为过去的 “vim 使用笔记”。 跳转命令 跳转命令 #:向前查找光标当前所在单词,并跳转到该单词的上一个出现位置。*:向后查找光标当前所在单词,并跳转到该单词的下一个出现位置。 行内跳转 0:跳转…...
开源订货系统哪个好 三大订货系统源码推荐
在数字化转型加速的今天,企业对订货系统的需求日益增长。一款优质的订货系统源码不仅能提升供应链效率,还能通过二次开发满足个性化业务需求。这里结合 “标准化、易扩展” 两大核心要求,为您精选三款主流订货系统源码,助您快速搭…...
跟着 Lua 5.1 官方参考文档学习 Lua (11)
文章目录 5.4.1 – PatternsCharacter Class:Pattern Item:Pattern:Captures: string.find (s, pattern [, init [, plain]])例子:string.find 的简单使用 string.match (s, pattern [, init])string.gmatch (s, pattern)string.gsub (s, pattern, repl [, n])例子&…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
