一步一步构建RAG智能问答系统

news/2025/1/5 14:56:22/文章来源:https://www.cnblogs.com/rickie/p/18649757
虽然LLM(大语言模型)非常强大,但它们对于它们未经训练的信息一无所知。如果想使用LLM来回答它未经训练的文档相关问题,我们需要向其提供这些文档的信息。最常用的方法是通过"检索增强生成"( Retrieval Augmented Generation,RAG)。
检索增强生成的思想是,在给定一个问题时,首先进行检索步骤以获取任何相关文档。然后将这些文档与原始问题一起传递给语言模型,并让它生成一个回答。然而,为了做到这一点,首先需要将文档以适合进行此类查询的格式呈现。
 
本专栏介绍了这两个步骤的核心思想:
(1)将文档摄入到向量数据库Milvus中进行存储
为了使用语言模型与数据进行交互,首先需要将文档转换为合适的嵌入格式。通过将文档转换为嵌入向量,并存储到向量数据库中,可以让后续的检索操作更加快捷方便。
 
将文档摄入到向量数据库中可以参考如下几个步骤来完成:
  • 加载文档(使用文档加载器)
  • 分割文档(使用文本分割器)
  • 为文档创建嵌入(使用文本嵌入模型)
  • 将文档和嵌入存储到向量数据库中(Milvus向量数据库),并构建索引
 
(2) 进行检索增强生成链
现在我们有了一个向量数据库和索引,如何使用它进行生成呢?可以将此过程分为以下步骤:
  • 接收用户提问(Question)
  • 在向量数据库和索引中查找与问题相关的文档
  • 使用问题和相关文档构建一个提示词 Prompt
  • 将Prompt 传递给语言模型
  • 获取结果并返回给用户
 
 

专栏大纲

在过去的一个月中,我有幸参与了数场研讨会,其中一个不言而喻的共识是,检索增强生成(Retrieval Augmented Generation,简称RAG)技术在过去一年里已迅速成为人工智能界的宠儿,并被众多AI团队广泛应用。
 
所谓RAG,是指一种借助检索外部信息来增强大型语言模型(LLM)的能力,从而提升模型应答品质的技术。
 
RAG之所以风头正劲,是因为它将语言模型与外部知识库巧妙结合,从而能够生成更为精准、更具事实依据的内容。RAG模型通过无缝融合检索与生成过程,能够实时从庞大的数据库中提取相关信息并融入所生成的文本之中,有效避免了模型输出中可能出现的虚假或错误信息。目前,许多AI团队正把RAG视为研究重点,众多工具如向量数据库、LLM接口及其编排工具等也应运而生,旨在简化RAG的实施流程。
 
尽管RAG的巨大潜力不言自明,但关于如何最佳运用这一技术的实践仍在不断演进之中。要部署一个高效的RAG系统,需要对各个构成要素进行大量实验和优化,包括数据集、模型嵌入、分块策略等方面。
在本专栏中,我们将利用LangChain框架和Milvus向量数据库,逐步搭建一个RAG智能问答系统。内容将涵盖RAG的基础知识、技术选型、准备HTML文档数据、应用嵌入模型和sentence-transformers库、构建和索引Milvus向量数据库、文档的加载与分割、向量数据及元数据的存储、近似最邻近(ANN)向量搜索、上下文和元数据的整合、提示语的拼接,以及基于LLM的大型语言模型生成回复。
 
 
这一系列内容旨在为读者提供一条从入门到精通的RAG技术之路。 

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

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

相关文章

VSCode开发uni-app环境搭建

为什么选择VS Code?1, HbuilderX对TS类型支持暂不完善2, 前端程序员最熟悉的编辑器3, 支持各种AI插件(比如国内的阿里云通义灵码、百度comate、豆包MarsCode等,国外的也有很多)。安装uni-aap插件(快速创建页面、uni-app代码提示、鼠标悬停查看文档)1, uni-create-vie…

函子

函子在C#中,函数式编程的函子(Functor)是一种实现特定接口或模式的结构,它能够将函数应用于数据结构中的值。函子的核心概念源自数学中的范畴理论,但在编程中更倾向于实际操作。 函子的特点包装一个值:函子是一个容器,能够存储某种类型的值。 提供一个方法来应用函数:它…

【前端开发】前端接口防止重复请求实现方案

#薅羊毛 前言 前段时间老板心血来潮,要我们前端组对整个的项目都做一下接口防止重复请求的处理(似乎是有用户通过一些快速点击薅到了一些优惠券啥的)。。。听到这个需求,第一反应就是,防止薅羊毛最保险的方案不还是在服务端加限制吗?前端加限制能够拦截的毕竟有限。可老板…

小辰讲故事哄娃神器

点击上方蓝字睿共享关注我 前言 我给大家安利一款哄娃软件,无论是车机还是安卓手机都能轻松驾驭。这款软件简直就是孩子们的欢乐宝库,首页上五大板块一目了然:精彩故事、知识小站、儿歌乐园、英语启蒙,还有家长加油站。家里有小朋友的家长们,这款软件绝对值得一试,保证大…

MySQL优化--插入数据优化和主键优化

一、插入数优化(insert) 平时我们插入数据的时候一般都是一个语句插一个数据,如下所示:insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry);如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行…

推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate

今天给大家推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate 。项目介绍: 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/Docker 。 项目亮点:基于 AI 布局分析和 PDF 指令流分析实现对文档排版的完整保…

delphi 协程 doroutine 协程作用域

简介 一个协程可以支持多个作用域,比如:.scopes([form1, form2, form3]),作用域关闭,则这个作用域下面的所有协程都会被取消并关闭; 若一个作用域下,挂载一个协程A,这个协程A 又会衍生成百上千的子协程,此时只需要给这个协程A设置一下作用域就可以了,没有必要 A衍生的…

安装windows和debian双系统

安装windows和debian双系统软件工具下载 必要下载Debian系统iso镜像: https://mirrors.tuna.tsinghua.edu.cn/debian-cd/current-live/amd64/iso-hybrid/我下载的是debian-live-12.8.0-amd64-cinnamon.iso镜像,自己可根据喜好下载其它版本Ventoy启动盘制作工具: https://www.v…

促销系统:促销活动、优惠券、优惠规则概念模型设计

大家好,我是汤师爷~ 概念模型设计是促销系统开发的关键环节,我们需要基于之前的功能分析,将复杂的促销业务拆解成清晰的领域概念,这些概念之间的关系界定和边界划分,将直接决定系统的可维护性和扩展性。 促销系统核心概念模型通过对促销业务的分析,我们可以抽象出促销系统…

黑风山-哒哒版

1-进入副本地图后队伍散队,各自开启哒哒,各自用哒哒做完3个NPC的单人任务 2-做完单人任务后对话玄奘",开始拦截鬼魂 3-这里建议4个号开启哒哒去拦截就够了,一个号手动捡花,击杀哒哒漏掉的鬼魂 备注:也有攻略说可以5个号都开启哒哒,不过我没有试过,感兴趣的梦友可以…

element-plus 引入本地图片

方法1<img src="src/assets/default_cover.jpg">如果写成:../assets/default_cover.jpg就会失效方法2vite 官网:静态资源处理vue2 + webpack<img :src="require(@/assets/default_cover.jpg)">vue3 + vite方式1:import image from "@/…

Elasticsearch专题精讲——Kibana中提示“No cached mapping for this field”的解决方案

Kibana中提示“No cached mapping for this field”的解决方案在使用Kibana进行数据分析和可视化时,有时可能会遇到“No cached mapping for this field”的提示。这个提示通常意味着Kibana无法在当前索引模式中找到指定字段的缓存映射信息。本文将详细解释这一错误的原因,并…