加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 大模型應用開發(fā)-什么是RAG
    • 大模型應用開發(fā)-RAG的技術框架
    • 大模型應用開發(fā)-為什么要使用RAG
    • 大模型應用開發(fā)-RAG 的應用場景
    • 大模型應用開發(fā)-構(gòu)建RAG應用的關鍵挑戰(zhàn)
    • 大模型應用開發(fā)-使用RAG構(gòu)建問答系統(tǒng)
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

大模型應用開發(fā)-走進 RAG 的世界

11/21 10:10
616
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大模型的快速發(fā)展中,許多人被 ChatGPT、Claude 等對話模型驚艷得目瞪口呆。

然而,我們稍微深挖就會發(fā)現(xiàn),大模型的“超能力”并不總是那么穩(wěn)定,有時候它可能信心滿滿地生成錯誤答案。

于是,一個叫 RAG(Retrieval-Augmented Generation) 的技術應運而生,為大模型的應用開發(fā)帶來了一次質(zhì)的飛躍。

大模型應用開發(fā)-什么是RAG

RAG,全稱是 檢索增強生成(Retrieval-Augmented Generation),是一種結(jié)合信息檢索(IR)和生成式模型的技術框架。簡單來說,RAG 的核心思想是“不會就查,不懂別瞎說”。

RAG 的基本邏輯是:

檢索階段:從一個外部知識庫中獲取相關的文檔或信息。

生成階段:利用檢索到的信息,結(jié)合大模型生成最終回答。

這樣做的好處是顯而易見的:

信息更準確:避免模型靠“幻覺”胡編亂造。

靈活性強:可以根據(jù)特定任務,接入不同類型的知識庫,比如企業(yè)文檔、產(chǎn)品手冊等。

大模型應用開發(fā)-RAG的技術框架

RAG 的工作流程通常包含以下幾個模塊:

01、數(shù)據(jù)預處理

首先需要一個知識庫,可以是公司內(nèi)部的文檔數(shù)據(jù)庫、網(wǎng)絡爬取的數(shù)據(jù)、甚至客戶提供的資料。將這些文檔處理成可搜索的格式是第一步,通常會:

轉(zhuǎn)為文本格式(如果是 PDF、圖片等需要 OCR 技術)。

通過分句或分段,將文本切分為粒度適中的片段。

使用嵌入模型(如 OpenAI 的 text-embedding 模型或 Sentence-BERT)將片段轉(zhuǎn)換為向量,存入向量數(shù)據(jù)庫(如 Pinecone、Weaviate)。

02、信息檢索

接下來,當用戶提出一個問題時,系統(tǒng)會:

對問題生成向量表示。

在向量數(shù)據(jù)庫中,通過相似度檢索找到最相關的文檔片段。

檢索效率和準確性在這一階段至關重要,通常會選擇高效的檢索工具,如 FAISS、Milvus。

03、生成回答

檢索到的信息作為上下文,輸入到大模型中。大模型通過結(jié)合檢索結(jié)果和自身的推理能力,生成符合語義邏輯的回答。這一步驟通常使用 OpenAI 的 GPT-4 或 Hugging Face 的開源模型。

大模型應用開發(fā)-為什么要使用RAG

克服大模型的“幻覺”

大模型有個很大的短板,就是它們的回答并非基于真實的事實,而是基于訓練數(shù)據(jù)的統(tǒng)計規(guī)律。RAG 在回答中引入了明確的外部知識來源,大幅減少了“張冠李戴”的情況。

動態(tài)更新知識

大模型的訓練數(shù)據(jù)通常有時效性,而通過 RAG,你的系統(tǒng)可以連接到實時更新的知識庫,無需每次更新都重新訓練模型。

降低開發(fā)成本

直接訓練一個覆蓋廣泛知識的大模型代價高昂。而利用 RAG,開發(fā)者可以用一個小而通用的模型,通過接入特定領域的知識庫,輕松實現(xiàn)定制化應用。

大模型應用開發(fā)-RAG 的應用場景

智能客服

很多公司在構(gòu)建客服機器人時,都遇到一個問題:機器人總是答非所問。通過 RAG,機器人可以從公司知識庫中檢索最相關的信息,結(jié)合大模型生成專業(yè)且貼切的回答。

醫(yī)療問診

醫(yī)療領域需要嚴謹?shù)幕卮?。RAG 可以從醫(yī)學文獻數(shù)據(jù)庫中獲取最新的研究資料,確保問診系統(tǒng)不會因為“幻覺”提供錯誤的健康建議。

法律咨詢

律師事務所的知識庫包含大量條文和案例,通過 RAG 技術,可以為客戶提供精準的法律支持,避免錯漏。

教育輔導

RAG 能在教育領域大展拳腳,比如結(jié)合教材和題庫,提供個性化的學習建議和習題解析。

大模型應用開發(fā)-構(gòu)建RAG應用的關鍵挑戰(zhàn)

在數(shù)據(jù)質(zhì)量方面,如果知識庫的內(nèi)容有誤,生成的回答同樣會出錯。因此,知識庫的構(gòu)建需要嚴格的質(zhì)量把控。

而且知識庫規(guī)模越大,檢索的時間成本越高。采用高效的向量檢索算法,如 HNSW,可以顯著提升性能。

將檢索結(jié)果與生成模型高效結(jié)合并非易事。檢索到的信息是否足夠準確、模型是否能理解檢索到的上下文,這些都是需要優(yōu)化的細節(jié)。

大模型應用開發(fā)-使用RAG構(gòu)建問答系統(tǒng)

本次我們使用haystack構(gòu)建一個產(chǎn)品說明書的問答系統(tǒng):

haystack github地址:?https://github.com/deepset-ai/haystack

Haystack 是一個開源框架,用于構(gòu)建端到端的 檢索增強生成(RAG) 系統(tǒng)和問答(QA)應用。它由 deepset 開發(fā),旨在幫助開發(fā)者快速實現(xiàn)復雜的知識管理和問答功能,如基于文檔的 QA 系統(tǒng)、聊天機器人、搜索引擎等。

示例代碼:

# 安裝?haystackpip install farm-haystack[all]
#?準備資料?產(chǎn)品手冊??product_manual.txt產(chǎn)品名稱: 超能智能手表 X1功能: 支持心率監(jiān)測、睡眠跟蹤、GPS 跟蹤、語音助手。電池續(xù)航: 正常使用續(xù)航 7 天,重度使用續(xù)航 2 天。充電時間: 2 小時可充滿。兼容性: 適配 Android 6.0 及以上,iOS 11.0 及以上。注意事項: 請勿將手表暴露在超過 50°C 的環(huán)境中。
#?示例代碼from haystack.document_stores import FAISSDocumentStorefrom haystack.nodes import EmbeddingRetriever, FARMReaderfrom haystack.pipelines import ExtractiveQAPipelinefrom haystack.schema import Document
# 初始化向量數(shù)據(jù)庫document_store = FAISSDocumentStore(embedding_dim=768)
# 加載產(chǎn)品說明書數(shù)據(jù)def load_manual(file_path):    """讀取產(chǎn)品說明書并格式化為 Haystack 文檔"""    with open(file_path, "r", encoding="utf-8") as f:        content = f.read()    return [Document(content=content)]
docs?=?load_manual("product_manual.txt")
# 將文檔寫入向量數(shù)據(jù)庫document_store.write_documents(docs)
# 初始化檢索器retriever = EmbeddingRetriever(    document_store=document_store,    embedding_model="sentence-transformers/all-mpnet-base-v2",  # 使用 Sentence-BERT    use_gpu=True)
# 更新向量數(shù)據(jù)庫中的嵌入document_store.update_embeddings(retriever)
# 初始化閱讀器(生成模型)reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=True)
# 構(gòu)建問答管道pipeline = ExtractiveQAPipeline(reader, retriever)
# 進行問答query = "這款手表有什么要注意的嗎?"result = pipeline.run(    query=query,    params={        "Retriever": {"top_k": 3},  # 檢索最相關的 3 條文檔        "Reader": {"top_k": 1}  # 生成最優(yōu)答案    })
# 輸出答案answer = result["answers"][0]print(f"Question: {query}")print(f"Answer:?{answer.answer}")
# 輸出Batches:?100%?1/1?[00:00<00:00,??4.00it/s]Inferencing Samples: 100%|██████████| 1/1 [00:02<00:00,  2.22s/ Batches]Question: 這款手表有什么要注意的嗎?Answer: 注意事項: 請勿將手表暴露在超過 50°C

相關推薦

電子產(chǎn)業(yè)圖譜

致力于分享最前沿、最實用的人工智能(AI)技術,包括深度學習(DL)、自然語言處理(NLP)、機器學習(ML)、計算機視覺(CV)等領域的最新發(fā)展及應用。