構建 LLM 應用:介紹(第一部分)

作者:Vipra Singh

編譯:ronghuaiyang

導讀

在系列博客中,我們通過檢索增強生成(RAG)應用的視角來學習大規模語言模型(LLM)。

即使是一個簡單的檢索增強生成(RAG)應用也涉及到調整衆多不同的參數、組件和模型

在我最近對語言模型(LLM)應用的探索中,我被檢索增強生成(RAG)所扮演的重要角色深深吸引。從概念構想到雲上部署,全面理解端到端的 RAG 架構是一項相當具有挑戰性的任務。

爲了解決這一難題,我非常興奮地宣佈即將推出一系列詳細博客,我將在其中通過 RAG 應用的視角來剖析 LLM 的複雜細節,提供對 RAG 流程每個階段的全面理解及實際操作經驗。

我的目標是讓複雜的 LLM 世界更加平易近人,確保每個環節都得到詳盡的闡述。

請與我一同踏上這段啓迪之旅,隨着我們通過深入研究 RAG 來探索 LLM 應用的無限潛力。

  1. 什麼是檢索增強生成?

如果你曾經在向量存儲或其他數據庫中查找數據,並在生成輸出時將相關信息作爲上下文傳遞給大型語言模型(LLM),那麼你已經在進行檢索增強了生成(Retrieval Augmented Generation,簡稱 RAG)。RAG 是一種架構,於 2020 年由 Meta 公司推廣普及,旨在通過在問題 / 任務詳情之外向模型傳遞相關信息來提升大型語言模型的性能。這一方法簡化了智能自然語言處理模型的創建過程,提高了它們的效率和響應質量。

  1. 爲何選用 RAG?

大型語言模型(LLMs)基於大量數據語料庫進行訓練,能夠利用其參數化的記憶回答各類問題或完成任務。這些模型的知識截止日期取決於它們最後一次訓練的時間。當被問及超出其知識庫範圍的問題或關於知識截止日期之後發生的事件時,模型有很高的概率會產生錯誤的虛構信息。Meta 的研究人員發現,通過提供有關當前任務的相關信息,模型完成任務的性能會顯著提高。

例如,如果模型被問及截止日期後發生的事件,先提供關於該事件的信息作爲上下文,然後再提問,將有助於模型正確回答問題。鑑於 LLMs 上下文窗口長度的侷限性,我們只能傳遞與當前任務最相關的知識。我們在上下文中添加的數據質量直接影響模型生成響應的質量。機器學習從業者在 RAG 流程的不同階段使用多種技術來提升 LLM 的表現。

  1. RAG 的高級架構

LangChain 提供了一個檢索增強生成(RAG)的最小形式示例(儘管不是最簡單的):

一個典型的 RAG 應用包含兩個主要組成部分:

索引構建:從數據源獲取數據並對其進行索引的流程。這通常在離線狀態下完成。

檢索與生成:實際的 RAG 鏈,在運行時接收用戶查詢,從索引中檢索相關數據,然後將這些數據傳給模型。

從原始數據到答案的最常見完整流程如下所示:

索引構建

  1. 加載:首先需要加載數據。這是通過DocumentLoaders完成的。

  2. 分割:文本分割器將大的文檔分解成較小的塊。這對於索引數據和將其傳入模型都非常有用,因爲較大的塊搜索起來更困難,且無法適應模型有限的上下文窗口。

  3. 存儲:我們需要一個地方來存儲和索引這些分割好的數據塊,以便後續搜索。這通常通過使用VectorStore和嵌入模型來實現。

檢索:根據用戶輸入,使用檢索器從存儲中檢索相關的數據塊。

生成:通過包含問題和檢索到的數據的提示,ChatModel/LLM 產生一個答案。

from langchain.document_loaders import WebBaseLoader from langchain.indexes import VectorstoreIndexCreator loader = WebBaseLoader("https://www.promptingguide.ai/techniques/rag") index = VectorstoreIndexCreator().from_loaders([loader]) index.query("What is RAG?")

通過這五點概述,我們瞭解了 RAG 的工作原理,但代碼高度抽象,因此很難理解具體發生了什麼:我們抓取網頁內容(本例中作爲知識庫)。

  1. 我們處理源內容,並將其存儲在知識庫中(本例中爲向量數據庫)。

  2. 我們輸入一個提示,LangChain 從知識庫中找到相關信息片段,並將提示與知識庫的結果一併傳遞給 LLM。

雖然這個腳本對於原型設計和理解使用 RAG 的主要步驟很有幫助,但在超越這個階段時用處不大,因爲你無法進行太多控制。接下來,讓我們討論實施的具體內容。

  1. 結論

在 LLM 應用系列的第一部分中,我們剖析了檢索增強生成(RAG)在加強大型語言模型(LLMs)方面所起的關鍵作用。從理解 RAG 背後的動機到探索 LLM 應用架構的組成部分,我們揭示了驅動這些應用運轉的各層次細節。

我們深入瞭解了知識庫檢索的複雜性,強調了 ETL 管道和諸如 Unstructured、LlamaIndex 及 LangChain 的文檔加載器等工具的重要性。維護一個更新的知識庫的重要性被突出強調,並提到了高效文檔索引過程。

請繼續關注後面的博客,我們將繼續穿越 RAG 流程的剩餘階段。從用戶查詢處理到前端開發,我們將提供實戰洞察,揭開 LLM 應用的神祕面紗。讓我們共同努力,釋放 LLM 的全部潛能,讓自然語言理解和生成的複雜領域變得觸手可及。敬請期待更多精彩內容!

英文原文:https://medium.com/@vipra_singh/building-llm-applications-introduction-part-1-1c90294b155b#4d28

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/8f2999CULQ0YS-_9YUtD2A