搭建RAG系统就这么简单:LangChain|RAG是什么?

图片

RAG是什么

“RAG”(Retrieval-Augmented Generation)是一种结合了检索(Retrieval)和生成(Generation)的人工智能技术,它在大模型中被需要的原因包括:

知识丰富性: 大模型通过RAG可以访问大量的外部知识库,这有助于提高模型回答问题的准确性和深度。

实时信息获取: 由于大模型通常是在大量数据上预训练的,它们可能不包含最新的信息。RAG可以通过检索最新的数据来弥补这一点。

减少偏见和错误: 通过检索可靠的信息源,RAG有助于减少模型生成的偏见或错误信息。

提高泛化能力: RAG可以使模型在面对未见过的问题或领域时,通过检索相关信息来提高其泛化能力。

应对长尾问题: 对于那些低频或非常规的问题,RAG可以通过检索来提供更加准确的答案,而不需要模型在训练数据中直接学习到。

RAG是一种强大的技术,它通过结合检索和生成的优势,使得大模型能够提供更加准确、丰富和及时的信息。随着技术的发展,RAG在大模型中的应用将继续扩展,以满足不断增长的复杂性和多样性需求。

基础的RAG任务包含以下模块,包括:数据读取处理,Index,检索,prompt拼接,大模型推理。如下图所示:

图片

环境搭建

在搭建RAG系统中,我们将使用到以下包:

pip install langchain_community tiktoken langchain-openai langchainhub chromadb langchain

数据读取

我们使用 WebBaseLoader模块处理数据,它采用urllib从 Web URL 加载 HTML 并使用BeautifulSoup解析出文本。

import bs4
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader(web_paths=("https://data.eastmoney.com/report/zw_stock.jshtml?encodeUrl=35LdZWW1ERIe7AWLlyVZFHptPNDUH2qN4gEfzUIhYsc=",               "https://data.eastmoney.com/report/zw_stock.jshtml?encodeUrl=OPw8X34UDWQq6g0u70KgHW6e5Ad8C5kc3TYV6t9BZsw=",               "https://data.eastmoney.com/report/zw_stock.jshtml?encodeUrl=OPw8X34UDWQq6g0u70KgHbx8/qX6gdD4f6j3/4IEWIA="    ),   bs_kwargs=dict(     parse_only=bs4.SoupStrainer(       class_=("detail-header", "newsContent")  # 根据网页信息不同调整需要保留的字段        )   ),
)
blog_docs = loader.load()  # 数据读取

文本切块

我们将文档拆分为 512 个字符的块,块之间有 128个字符的重叠。重叠有助于降低当前文本与其相关的上下文分离的概率。我们使用 RecursiveCharacterTextSplitter ,它将使用常用分隔符(如换行符)递归拆分文档,直到每个块的大小合适。

在这里插入图片描述

创建索引(Indexing)

这个模块首先创建一个向量模块向量模型可以随意选择,后面将介绍怎么选择向量模型,本篇采用了OpenAIEmbeddings();然后创建一个向量库,用于储存文本和文本向量:

在这里插入图片描述

创建检索器

构建一个检索器,用于通过向量相似度检索片段,检索召回是整个系统的关键,决定了结果的上限:

retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 6}))# 测试一下检索的片段
retrieved_docs = retriever.invoke("东方财富营收是多少")
len(retrieved_docs)

创建模型

在这个部分,我们将创建两个模块,一是PROMPT模板,这个是根据任务来确定,相同的模型一个好的prompt会得到更好的结果;二是大模型模块,这个是整个系统的中央大脑,决定着整个系统是否智能,例子中使用的gpt-3.5-turbo

在这里插入图片描述

RAG生成流程

前面已经构建好了索引、检索器、PROMPT模板和大模型,现在我们需要将整个过程组合起来:
在这里插入图片描述

至此,我们完成了一个简单的RAG系统搭建,根据PROMPT的不同,我们可以针对我们的知识库做不同的任务,可以是问答、也可以是创作;通过知识库的辅助,我们的结果会更加的精确。

如果对内容有什么疑问和建议可以私信和留言,也可以添加我加入大模型交流群,一起讨论大模型在创作、RAG和agent中的应用。

好了,这就是我今天想分享的内容。如果你对大模型应用感兴趣,别忘了点赞、关注噢~

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

探索数据结构与算法的奇妙世界 —— Github开源项目推荐《Hello 算法》

在浩瀚的编程与计算机科学领域中,数据结构与算法无疑是每位开发者攀登技术高峰的必经之路。然而,对于初学者而言,这条路往往布满了荆棘与挑战。幸运的是,今天我要向大家推荐一个令人振奋的项目——《Hello Algo》,它正…

ubuntu使用kubeadm搭建k8s集群

一、卸载k8s kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/# 自己选择性删除 坑点哦 rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cn…

Prometheus + alermanager + webhook-dingtalk 告警

添加钉钉机器人 1. 部署 alermanager 1.1 下载软件包 wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz 网址 :Releases prometheus/alertmanager (github.com) 1.2 解压软件包 mkdir -pv …

医日健集团技术力量体现测试的背后

医日健集团覆盖式更新 科技日新月异的时代,医日健集团始终走在行业的前列。近日,医日健集团外勤技术人员全面对市场点位投放的数智药房进行了新系统升级和机器测试,这是医日健对于科技创新的最新尝试。 以客户体验为核心优化新体验 医日健集团…

Js 前置,后置补零的原生方法与补字符串 padStart及padEnd

在工作中,遇到了需要将不满八位的一个字符串进行后补0的操作,所以就在网上学习了关于js原生补充字符串的方法,然后用这篇博客记录下来。 目录 前置补充字符串 String.prototype.padStart() 后置补充字符串String.prototype.padEnd() 前置补…

【超音速 专利 CN117710683A】基于分类模型的轻量级工业图像关键点检测方法

申请号CN202311601629.7公开号(公开)CN117710683A申请日2023.11.27申请人(公开)超音速人工智能科技股份有限公司发明人(公开)张俊峰(总); 杨培文(总); 沈俊羽; 张小村 技术领域 本发明涉及图像关键点检测…

数据库MySQL下载安装

MySQL下载安装地址如下: MySQL :: Download MySQL Community Server 1、下载界面 2、点击下载 3、解压记住目录 4、配置my.ini文件 未完..

Vue.js学习笔记(五)抽奖组件封装——转盘抽奖

基于VUE2转盘组件的开发 文章目录 基于VUE2转盘组件的开发前言一、开发步骤1.组件布局2.布局样式3.数据准备 二、最后效果总结 前言 因为之前的转盘功能是图片做的,每次活动更新都要重做UI和前端,为了解决这一问题进行动态配置转盘组件开发,…

STM32智能仓储管理系统教程

目录 引言环境准备晶智能仓储管理系统基础代码实现:实现智能仓储管理系统 4.1 数据采集模块 4.2 数据处理与决策模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:仓储管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓储管理系统…

7 月12日学习打卡--栈和队列的相互转换

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

什么是STM32?嵌入式和STM32简单介绍

1、嵌入式和STM32 1.1.什么是嵌入式 除了桌面PC之外,所有的控制类设备都是嵌入式 嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。 嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板,是一种专用的计算机系统。…

初阶数据结构速成

本篇文章算是对初阶数据结构的总结,内容较多,请耐心观看 基础概念部分 顺序表 线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构,常⻅的线性表:…

机器学习——关于极大似然估计法的一些个人思考(通俗易懂极简版)

最近在回顾机器学习的一些相关理论知识,回顾到极大似然法时,对于极大似然法中的一些公式有些迷糊了,所以本文主要想记录并分享一下个人关于极大似然估计法的一些思考,如果有误,请见谅,欢迎一起前来探讨。当…

单元测试实施最佳方案(背景、实施、覆盖率统计)

1. 什么是单元测试? 对于很多开发人员来说,单元测试一定不陌生 单元测试是白盒测试的一种形式,它的目标是测试软件的最小单元——函数、方法或类。单元测试的主要目的是验证代码的正确性,以确保每个单元按照预期执行。单元测试通…

合肥高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

合肥高校大学智能制造实验室近日迎来了一项重要时刻,数字孪生可视化系统平台建设项目顺利通过了验收。这一项目的成功实施,不仅标志着合肥高校在智能制造领域取得新的突破,为我国智能制造技术的发展注入新活力。 合肥高校智能制造实验室作为…

T972 切换至pdm 声音输入的方法

1.在hardware/amlogic/audio/audio_hal/audio_hw.c下,直接切换 在 static unsigned int select_port_by_device(struct aml_audio_device *adev) 中先强制切换为pdm 2.在device mk 配置文件中 #add fof fix the mic bug by jason 20230621 PRODUCT_PROPERTY_OVE…

MySQL 数据库基础概念

一、什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中&…

MSPM0G3507(三十六)——超声波PID控制小车固定距离

效果图: 波形图软件是VOFA,B站有教程 ,虽然有缺点但是非常简单。 视频效果: PID控制距离 之前发过只有超声波测距的代码,MSPM0G3507(三十二)——超声波模块移植代码-CSDN博客 SYSCFG配置&#…

用友NC Cloud blobRefClassSearch FastJson反序列化RCE漏洞复现

0x01 产品简介 用友 NC Cloud 是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,实现企业的数字化转型和业务流程优化。 0x02 漏洞概述 用友 NC Cloud blobRefClassSearch 接口处存在FastJson反序列…

开源PHP论坛HadSky本地部署与配置公网地址实现远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置)2.4 公网访问测试 总结 前言 今天和大家分享…