临时劫案在线观看国语高清免费,av免费亚洲,国产一级久久大片,国产精品一区影院

/ EN
13922884048

資訊中心

information centre
/
/

RAG框架,知識庫開發(fā)和知識庫應用

發(fā)布時間:2025-03-03作者來源:薩科微瀏覽:1055

一、什么是RAG?

檢索增強生成(Retrieval Augmented Generation),簡稱 RAG。結合向量檢索(Retrieval)與內容生成(Generation)的AI框架。


二、為啥需要RAG?


原因是通用的基礎大模型基本無法滿足我們的實際業(yè)務需求。

1、有以下有幾方面原因:
1)知識的局限性:(缺企業(yè)私有知識庫)
模型自身的知識完全源于它的訓練數(shù)據(jù),而現(xiàn)有的大模型的訓練集基本都是構建于網(wǎng)絡公開的數(shù)據(jù),對于一些實時性的、非公開的或離線的數(shù)據(jù)是無法獲取到的,這部分知識也就無從具備。
2)幻覺問題:(沒有私有知識庫,幻覺無法抑制)
所有的AI模型的底層原理都是基于數(shù)學概率,其模型輸出實質上是一系列數(shù)值運算,大模型也不例外,所以它有時候會一本正經(jīng)地胡說八道,尤其是在大模型自身不具備某一方面的知識或不擅長的場景。而這種幻覺問題的區(qū)分是比較困難的,因為它要求使用者自身具備相應領域的知識。
3)數(shù)據(jù)安全性:
對于企業(yè)來說,數(shù)據(jù)安全至關重要,沒有企業(yè)愿意承擔數(shù)據(jù)泄露的風險,將自身的私域數(shù)據(jù)上傳第三方平臺進行訓練。這也導致完全依賴通用大模型自身能力的應用方案不得不在數(shù)據(jù)安全和效果方面進行取舍。
4)利用RAG框架可以構建企業(yè)的私有知識庫,是解決上述問題的一套有效方案。

三、RAG架構


1、知識庫

1)治理企業(yè)的私有化數(shù)據(jù),包括結構化/非結構化數(shù)據(jù)(文檔、數(shù)據(jù)庫、網(wǎng)頁等),利用向量數(shù)據(jù)庫的高效存儲和檢索能力,可實現(xiàn)檢索,和數(shù)據(jù)召回。

2)完善數(shù)據(jù)的治理,可實現(xiàn)數(shù)據(jù)的可持續(xù)更新。


2、RAG的核心是數(shù)據(jù)的檢索+提示詞的生成


1)前者主要是利用向量數(shù)據(jù)庫的高效存儲和檢索能力,召回目標知識;

2)后者則是利用大模型和Prompt工程,將召回的知識合理利用,合并生成Prompt

3)再調用大模型生成目標答案。

4)重復以上過程,直到理想的結果。

3、RAG應用流程主要包含兩個階段:

1)知識庫構建:

數(shù)據(jù)提取——>文本分割——>向量化(embedding)——>數(shù)據(jù)入庫

2)知識庫應用:

用戶提問——>數(shù)據(jù)檢索(召回)——>注入Prompt——>LLM生成答案

四、知識庫建設:

1、數(shù)據(jù)準備階段:

數(shù)據(jù)準備一般是一個離線的過程,主要是將私域數(shù)據(jù)向量化后構建索引并存入數(shù)據(jù)庫的過程。主要包括:數(shù)據(jù)提取、文本分割、向量化、數(shù)據(jù)入庫等環(huán)節(jié)。

1)數(shù)據(jù)提取

數(shù)據(jù)加載:包括多格式數(shù)據(jù)加載、不同數(shù)據(jù)源獲取等,根據(jù)數(shù)據(jù)自身情況,將數(shù)據(jù)處理為同一個范式。

數(shù)據(jù)處理:包括數(shù)據(jù)過濾、壓縮、格式化等。

元數(shù)據(jù)獲?。禾崛?shù)據(jù)中關鍵信息,例如文件名、Title、時間等 。

2)文本分割:

文本分割主要考慮兩個因素:1)embedding模型的Tokens限制情況;2)語義完整性對整體的檢索效果的影響。一些常見的文本分割方式如下:

句分割:以”句”的粒度進行切分,保留一個句子的完整語義。常見切分符包括:句號、感嘆號、問號、換行符等。

固定長度分割:根據(jù)embedding模型的token長度限制,將文本分割為固定長度(例如256/512個tokens),這種切分方式會損失很多語義信息,一般通過在頭尾增加一定冗余量來緩解。

3)向量化(embedding):

向量化是一個將文本數(shù)據(jù)轉化為向量矩陣的過程,該過程會直接影響到后續(xù)檢索的效果。目前常見的embedding模型如表中所示,這些embedding模型基本能滿足大部分需求,但對于特殊場景(例如涉及一些罕見專有詞或字等)或者想進一步優(yōu)化效果,則可以選擇開源Embedding模型微調或直接訓練適合自己場景的Embedding模型。

4)數(shù)據(jù)入庫:

數(shù)據(jù)向量化后構建索引,并寫入數(shù)據(jù)庫的過程可以概述為數(shù)據(jù)入庫過程,適用于RAG場景的數(shù)據(jù)庫包括:FAISS、Chromadb、ES、milvus等。一般可以根據(jù)業(yè)務場景、硬件、性能需求等多因素綜合考慮,選擇合適的數(shù)據(jù)庫。

五、應用知識庫階段:

在應用階段,我們根據(jù)用戶的提問,通過高效的檢索方法,召回與提問最相關的知識,并融入Prompt;大模型參考當前提問和相關知識,生成相應的答案。關鍵環(huán)節(jié)包括:數(shù)據(jù)檢索、注入Prompt等。

1)數(shù)據(jù)檢索

常見的數(shù)據(jù)檢索方法包括:相似性檢索、全文檢索等,根據(jù)檢索效果,一般可以選擇多種檢索方式融合,提升召回率。

相似性檢索:即計算查詢向量與所有存儲向量的相似性得分,返回得分高的記錄。常見的相似性計算方法包括:余弦相似性、歐氏距離、曼哈頓距離等。

全文檢索:全文檢索是一種比較經(jīng)典的檢索方式,在數(shù)據(jù)存入時,通過關鍵詞構建倒排索引;在檢索時,通過關鍵詞進行全文檢索,找到對應的記錄。

2)注入Prompt

Prompt作為大模型的直接輸入,是影響模型輸出準確率的關鍵因素之一。在RAG場景中,Prompt一般包括任務描述、背景知識(檢索得到)、任務指令(一般是用戶提問)等,根據(jù)任務場景和大模型性能,也可以在Prompt中適當加入其他指令優(yōu)化大模型的輸出。

Prompt的設計只有方法、沒有語法,比較依賴于個人經(jīng)驗,在實際應用過程中,往往需要根據(jù)大模型的實際輸出進行針對性的Prompt調優(yōu)。


六、舉例,偽代碼示例

1、選擇如下開源組件

向量數(shù)據(jù)庫:FAISS
NLP框架:  Hugging Face Transformers, LangChain,DeepSeekR1
部署框架  FastAPI, 

2、階段1:知識庫建設
1. 數(shù)據(jù)準備
- 數(shù)據(jù)源:PDF文檔、數(shù)據(jù)庫、API、網(wǎng)頁爬蟲等
- 格式處理:
  python
   示例:PDF文本提取
  from PyPDF2 import PdfReader
 
  def extract_pdf_text(file_path):
      reader = PdfReader(file_path)
      text = ""
      for page in reader.pages:
          text += page.extract_text()
      return text

2. 數(shù)據(jù)預處理
- 清洗:去除特殊字符、停用詞、重復內容
- 分塊策略:
  - 固定長度分塊(適合通用場景)
  - 語義分塊(按段落/主題劃分)
  python
   使用LangChain文本分割
  from langchain.text_splitter import RecursiveCharacterTextSplitter
 
  text_splitter = RecursiveCharacterTextSplitter(
      chunk_size=512,
      chunk_overlap=50
  )
  documents = text_splitter.split_text(text)

3. 向量化存儲
嵌入模型選擇:sentence-transformers/all-mpnet-base-v2 或自定義模型
向量數(shù)據(jù)庫選型:
  python
   使用FAISS存儲
  from langchain.embeddings import HuggingFaceEmbeddings
  from langchain.vectorstores import FAISS
 
  embeddings = HuggingFaceEmbeddings(model_name="all-mpnet-base-v2")
  vectorstore = FAISS.from_texts(documents, embeddings)
  vectorstore.save_local("knowledge_base")

3、階段2:RAG系統(tǒng)搭建
1. 檢索模塊
檢索策略:
  python
  def retrieve_docs(query, vectorstore, top_k=3):
  docs = vectorstore.similarity_search(query, k=top_k)
      return doc.page_content for doc in docs

2. 生成模塊
模型選擇:DeepSeek
提示工程:
  python
  def build_prompt(query, context):
      return f"""基于以下上下文回答用戶問題:
      {context}
     
      問題:{query}
      答案:"""

3. 系統(tǒng)集成
python
from transformers import pipeline

class RAGSystem:
    def __init__(self, vectorstore_path):
        self.vectorstore = FAISS.load_local(vectorstore_path, embeddings)
        self.generator = pipeline("text-generation", model="DeepSeekR1")

    def query(self, question):
        context = retrieve_docs(question, self.vectorstore)
        prompt = build_prompt(question, context)
        return self.generator(prompt, max_length=500)0'generated_text'

4、階段3:評估優(yōu)化
評估指標
1)檢索召回率優(yōu)化:

  混合檢索(語義+關鍵詞)
  查詢擴展(同義詞替換)

2)生成答案相關性

python
   添加系統(tǒng)提示
  SYSTEM_PROMPT = "你是一個嚴謹?shù)念I域專家,只根據(jù)提供的事實回答問題。"
 
  def improved_prompt(query, context):
      return f"{SYSTEM_PROMPT}\n已知信息:{context}\n問題:{query}\n答案:"
3)人工評估準確度
評估結果,不斷調整,達到可接受成果。

4)增量更新:實現(xiàn)知識庫實時更新
   python
   class UpdateableFAISS(FAISS):
       def add_documents(self, new_docs):
           self.add_texts(new_docs)
           self.save_local("updated_knowledge_base")


免責聲明:本文來源于“數(shù)字化轉型分享”公眾號,本文僅代表作者個人觀點,不代表薩科微及行業(yè)觀點,只為轉載與分享,支持保護知識產權,轉載請注明原出處及作者,如有侵權請聯(lián)系我們刪除。


企業(yè)咨詢和陪跑請掃碼聯(lián)系

beead8abd6ef2d8fc6ead2ac0d426f1.jpg

服務熱線

0755-83044319

霍爾元件咨詢

肖特基二極管咨詢

TVS/ESD咨詢

獲取產品資料

客服微信

微信客服號