成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大模型之初識RAG 原創

發布于 2024-12-19 09:16
瀏覽
0收藏

前言

通過前幾章的學習,我們已經掌握連接一個第三方大模型,使用LangChain與大模型建立交互,并且通過Prompt進行提問,得到相應的回答。本章我們將開始了解RAG(檢索增強生成)技術,了解RAG的技術原理以及基本使用方法。

RAG概述

產生背景

隨著信息量的急劇增加,單純依靠模型內置的知識進行生成已無法滿足需求,比如:

  • 大模型的公共知識都是陳舊的!
  • 部分私有的知識大模型沒有學習過.....

??RAG??(檢索增強生成)技術的出現是為了應對傳統生成模型在處理大規模知識時的局限性,其結合了信息檢索與生成模型的優勢,能夠在生成過程中動態地從外部知識庫中檢索相關信息,從而提高生成內容的準確性和豐富性。

私有知識注入方式有兩種:

  • 方法一:(學習式)知識注入:模型微調(fine-tuning)
  • 方法二:(外掛式)知識注入:RAG system

技術原理

??RAG??? 的核心思想是:將??信息檢索???與??文本生成??結合起來。

RAG的本質

RAG(Retrieval Augmented Generation),其大量借鑒了推薦系統的一些基本思想。

  • R:Retrieval 檢索
  • A:Augmentated 增強
  • G:Generation 生成

RAG的使用工作流程

大模型之初識RAG-AI.x社區

  1. 用戶提出問題:用戶輸入查詢(??query??),例如一個問題或請求。
  2. 問題交給檢索器:系統將用戶的查詢發送給檢索模塊(??retriever??)。
  3. 檢索相關上下文:檢索器根據向量化比對,從知識庫中找到與查詢相關的上下文信息(??context??)。
  4. 聚合查詢和上下文:將用戶的查詢與檢索到的上下文信息結合,通過提示(??prompt??)進行聚合,形成新的輸入:??query?? +??context??。
  5. 交給大模型處理:將聚合后的結果輸入到大型語言模型(??LLM??)。
  6. 生成答案:大模型參考上下文信息,生成對用戶查詢的回答(??answer??)。

輸入/輸出概述

  • 輸入:??query??
  • 處理:??query?? -->??retriever?? -->??context??
  • 輸出:??query?? +??context?? -->??LLM?? -->??answer??

RAG的知識庫構建流程

大模型之初識RAG-AI.x社區

  1. LOAD:整理知識語料
  • 輸入格式:支持多種格式,包括 PDF、Word、文本文件、CSV、PPT、SQL 等。
  • 文本抽取:從輸入文件中抽取文本內容,去除所有圖表、音頻、視頻等多媒體元素,確保只保留純文本。
  1. SPLIT:文本分段
  • 分段邏輯:將文本劃分為語義相對獨立的段落,以便于后續處理。
  • 向量化要求:確保每個段落符合向量化模型的實際需求,避免過長或過短的文本段落。
  1. EMBED:向量化
  • 向量化模型:使用特定的向量化模型(如bge-large-zh-v1.5 或 BAAI)將文本段落轉換為向量表示。
  • 維度:生成的向量通常為1024 維度,便于后續的相似度計算和檢索。
  1. .STORE: 存儲至向量數據庫
  • 向量庫:Chroma 是一個開源的向量數據庫,支持向量檢索和向量相似度計算。
  • 數據庫架構:采用CS(Client-Server)架構,以支持高效的檢索和查詢,一般需要搭建集群。

所需物料概述

  • 向量數據庫
  • 向量化模型
  • 大語言模型
  • 大量知識語料

使用方法

安裝依賴

pip install bs4
pip install langchain_chroma

關于Langchain其他組件的安裝(如:langchain_community等),非本章內容重點,所以不做贅述。

具體使用

第一步:連接大模型

from utils import get_ernie_models
from utils import get_qwen_models

llm, chat, embed = get_qwen_models()

第二步:導入必要的庫和包

# 解析 Web 頁面的庫(用面向對象的方式來封裝 HTML 頁面)
import bs4
# hub 生態中心
from langchain import hub
# 引入 Chroma 向量庫
from langchain_chroma importChroma
# 在線加載網頁
from langchain_community.document_loaders importWebBaseLoader
# 輸出解析器
from langchain_core.output_parsers importStrOutputParser
# 可執行的占位符
from langchain_core.runnables importRunnablePassthrough
# 文檔切分器
from langchain_text_splitters import RecursiveCharacterTextSplitter

第三步:選擇爬取的頁面并加載數據

loader = WebBaseLoader(
    web_paths=("https://17aitech.com/?p=14624",),
    bs_kwargs=dict(
        parse_notallow=bs4.SoupStrainer(
            class_=("ast-breadcrumbs", "site-content", "md-post-toc")
        )
    ),
)

# 加載數據
docs = loader.load()

補充說明:

  • LangChain 官網提供的示例代碼是一篇英文博客,查看效果不太直觀,本例中的博客地址換成了我的博客文章。
  • 上述class的標簽,可以通過瀏覽器的開發者工具找到,例如:


大模型之初識RAG-AI.x社區

第四步:文本分割

# 遞歸式 字符級 文本 切分器
"""
    chunk_size: 建議段落大小
"""
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
splits

運行效果:

大模型之初識RAG-AI.x社區

第五步:向量化并入庫

batch_size = 6  # 每次處理的樣本數量
vectorstore = Chroma(embedding_functinotallow=embed)  # 初始化 Chroma 向量數據庫并提供嵌入函數

# 分批入庫
for i in range(0, len(splits), batch_size):
    batch = splits[i:i + batch_size]  # 獲取當前批次的樣本
    vectorstore.add_documents(documents=batch)  # 入庫

由于阿里提供的embed接口,一次只能處理6個樣本,所以需要分批入庫。

第六步:RAG系統搭建

# 把向量操作封裝為一個基本檢索器
retriever = vectorstore.as_retriever()

第七步:構造RAG系統的Prompt(核心部分)

from langchain_core.prompts import ChatPromptTemplate

# RAG系統經典的 Prompt (A 增強的過程)
prompt = ChatPromptTemplate.from_messages([
  ("human", """You are an assistant for question-answering tasks. Use the following pieces 
  of retrieved context to answer the question. 
  If you don't know the answer, just say that you don't know. 
  Use three sentences maximum and keep the answer concise.
  Question: {question} 
  Context: {context} 
  Answer:""")
])

第八步:構建RAG鏈

def format_docs(docs):
"""
    將檢索到的文檔列表格式化為一個大字符串。

    參數:
    docs (list): 包含文檔對象的列表,每個文檔對象應具有 `page_content` 屬性。

    返回:
    str: 一個由文檔內容組成的大字符串,文檔之間用兩個換行符分隔。
    """
return"\n\n".join(doc.page_content for doc in docs)

# RAG 鏈
rag_chain =(
{"context": retriever | format_docs,
"question":RunnablePassthrough()}
| prompt
| chat
|StrOutputParser()
)

第九步:提問問題,測試RAG系統

rag_chain.invoke(input="Prompt初步了解文章中,作者示例中的Langserve接口的IP地址是多少?")

運行結果:

大模型之初識RAG-AI.x社區

通過查看文章【課程總結】day25:大模型應用開發之Prompt初步了解中測試API接口章節,其中我部署到云服務器的IP地址的確為上述地址。

內容小結

  • RAG系統是一種基于大語言模型的問答系統,通過向量檢索和向量化技術,實現對海量知識資源的高效檢索和問答。
  • RAG的知識庫構建流程為:整理知識語料(??LOAD??)-> 文本分段(??SPLIT??)-> 向量化(??EMBED??) -> 存儲至向量數據庫(??STORE??)。
  • RAG的使用流程為:用戶提出問題(??query??) -> 問題交給檢索器(??retriever??)-> 檢索相關上下文(??context??) -> 聚合查詢和上下文(??query?? +??context??) -> 交給大模型處理(??LLM??) -> 生成答案(??answer??)
  • RAG的核心部分:即通過構建一個??Prompt??,該??Prompt?? 包含??{question}?? 用戶提出的問題 和??{context}?? 向量庫中檢索到的上下文,然后交給大模型,讓大模型根據上下文給出??Answer??。

?

本文轉載自公眾號一起AI技術 作者:熱情的Dongming

原文鏈接:??https://mp.weixin.qq.com/s/FHD-8levDzO0n7R3VA1-4A??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 久久精品视频在线观看 | 欧美一区免费在线观看 | 久久久久国产 | 成人av免费 | 精品久久久久久久久久久 | 精品久久99 | 成人美女免费网站视频 | 国产国拍亚洲精品av | www97影院 | 国产精品夜色一区二区三区 | 国产精品成人国产乱一区 | 日本一区二区三区四区 | 黑人性hd| 伊人在线 | 国产视频第一页 | 精品视频亚洲 | 黄色国产 | 国产精品久久久亚洲 | 香蕉视频黄色 | 91成人免费看片 | 久久久久九九九九 | 国产av毛片 | 黄色在线免费观看 | 99欧美精品| 精品美女视频在线观看免费软件 | 久久久久久国产精品三区 | 国产91黄色| 久久久国产精品一区 | 精品久久一区 | 日韩av美女电影 | 日韩欧美一区二区三区免费观看 | 北条麻妃一区二区三区在线观看 | 91人人视频在线观看 | 久久久精彩视频 | 中文字幕一区二区三 | 久久久久国产精品 | 亚洲精品9999| 亚洲码欧美码一区二区三区 | 免费观看一级视频 | 国产精品视频专区 | 成人在线免费电影 |