搭建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.pswp.cn/web/44650.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44650.shtml
英文地址,請注明出處:http://en.pswp.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…

C# Winform 自定義事件實戰

在C#的WinForms中,自定義事件是一種強大的工具,它允許你創建自己的事件,從而在特定條件下通知訂閱者。自定義事件通常用于封裝業務邏輯,使代碼更加模塊化和易于維護。下面我將通過一個實戰例子來展示如何在WinForms中創建和使用自…

多線程編程中的條件變量及其優化

本套課在線學習視頻(網盤地址,保存到網盤即可免費觀看): 鏈接:https://pan.quark.cn/s/7220b198cf00 在多線程編程中,條件變量是一種用于線程間通信和同步的機制。通過使用條件變量,可以有效地…

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 …

醫日健集團技術力量體現測試的背后

醫日健集團覆蓋式更新 科技日新月異的時代,醫日健集團始終走在行業的前列。近日,醫日健集團外勤技術人員全面對市場點位投放的數智藥房進行了新系統升級和機器測試,這是醫日健對于科技創新的最新嘗試。 以客戶體驗為核心優化新體驗 醫日健集團…

NCNN源碼學習(1):Mat詳解

前言:最原始的發行版本代碼比較簡潔,我們從2017年ncnn第一次開源的版本閱讀mat的源碼。閱讀源碼味如嚼蠟,下面就開始吧! 目錄 構造函數 內存分配 數據成員 申請和釋放內存 引用計數 輔助函數 填充函數fill 參考 構造函數 ncnn提供了8種構造函數的方式。 // emptyM…

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

在工作中,遇到了需要將不滿八位的一個字符串進行后補0的操作,所以就在網上學習了關于js原生補充字符串的方法,然后用這篇博客記錄下來。 目錄 前置補充字符串 String.prototype.padStart() 后置補充字符串String.prototype.padEnd() 前置補…

將獨熱碼應用到神經網絡中

引言 接上回,本文繼續說如何用TensorFlow將獨熱編碼應用到一個簡單的神經網絡中,以實現從一段隨機文本到另一段隨機文本的轉換。 步驟一:導入庫 import tensorflow as tf import numpy as np import random import string步驟二&#xff1…

【超音速 專利 CN117710683A】基于分類模型的輕量級工業圖像關鍵點檢測方法

申請號CN202311601629.7公開號(公開)CN117710683A申請日2023.11.27申請人(公開)超音速人工智能科技股份有限公司發明人(公開)張俊峰(總); 楊培文(總); 沈俊羽; 張小村 技術領域 本發明涉及圖像關鍵點檢測…

數據庫MySQL下載安裝

MySQL下載安裝地址如下: MySQL :: Download MySQL Community Server 1、下載界面 2、點擊下載 3、解壓記住目錄 4、配置my.ini文件 未完..

C語言課程回顧:九、C語言之預處理命令

9 預處理命令 9 預處理命令9.1 概述9.2 宏定義9.2.1 無參宏定義9.2.2 帶參宏定義 9.3 文件包含9.4 條件編譯9.5 本章小結9.6 擴展 10種軟件濾波方法的示例程序1、限副濾波2、中位值濾波法3、算術平均濾波法4、遞推平均濾波法(又稱滑動平均濾波法)5、中位…

Vue.js學習筆記(五)抽獎組件封裝——轉盤抽獎

基于VUE2轉盤組件的開發 文章目錄 基于VUE2轉盤組件的開發前言一、開發步驟1.組件布局2.布局樣式3.數據準備 二、最后效果總結 前言 因為之前的轉盤功能是圖片做的,每次活動更新都要重做UI和前端,為了解決這一問題進行動態配置轉盤組件開發,…

【jvm】字符串常量池問題

目錄 一、基本概念1.1 說明1.2 特點 二、存放位置2.1 JDK1.6及以前2.2 JDK1.72.3 JDK1.8及以后 三、工作原理3.1 創建字符串常量3.2 使用new關鍵字創建字符串 四、intern()方法4.1 作用 五、優點六、字節碼分析6.1 示例16.1.1 代碼示例6.1.2 字節碼6.1.3 解析 6.2 示例26.2.1 代…

STM32智能倉儲管理系統教程

目錄 引言環境準備晶智能倉儲管理系統基礎代碼實現:實現智能倉儲管理系統 4.1 數據采集模塊 4.2 數據處理與決策模塊 4.3 通信與網絡系統實現 4.4 用戶界面與數據可視化應用場景:倉儲管理與優化問題解決方案與優化收尾與總結 1. 引言 智能倉儲管理系統…

7 月12日學習打卡--棧和隊列的相互轉換

hello大家好呀,本博客目的在于記錄暑假學習打卡,后續會整理成一個專欄,主要打算在暑假學習完數據結構,因此會發一些相關的數據結構實現的博客和一些刷的題,個人學習使用,也希望大家多多支持,有不…

什么是STM32?嵌入式和STM32簡單介紹

1、嵌入式和STM32 1.1.什么是嵌入式 除了桌面PC之外,所有的控制類設備都是嵌入式 嵌入式系統的定義:“用于控制、監視或者輔助操作機器和設備的裝置”。 嵌入式系統是一個控制程序存儲在ROM中的嵌入式處理器控制板,是一種專用的計算機系統。…

初階數據結構速成

本篇文章算是對初階數據結構的總結,內容較多,請耐心觀看 基礎概念部分 順序表 線性表( linear list )是n個具有相同特性的數據元素的有限序列。 線性表是?種在實際中?泛使 ?的數據結構,常?的線性表:…

C語言 錯題本

C語言 錯題本 文章目錄 C語言 錯題本77月11號整數求逆--掌握 7月12號求符合給定條件的整數集水仙花數打印九九口訣表--掌握統計素數并求和--掌握 7月13號湊硬幣前n項和(一加一減)最大公約數 7月14號正序整數分解 7月17號簡單計算器 217月26號求符合給定條件的整數集水仙花數 旨…

【安全設備】上網行為管理

一、什么是上網行為管理 上網行為管理是對企業內部員工使用互聯網行為的監視和管理,旨在規范網絡使用者的上網行為,提高網絡安全性,保護企業信息安全,同時提高員工的工作效率。上網行為管理通過對員工的上網行為進行監控、記錄和…