一、 Retrieval 的本質(zhì)
Retrieval是什么?
LangChain通過(guò)其Retrieval(檢索)組件,簡(jiǎn)化了檢索增強(qiáng)生成(RAG)過(guò)程中外部數(shù)據(jù)的檢索與管理,為大型語(yǔ)言模型 (LLM)應(yīng)用高效地提供了用戶(hù)特定的數(shù)據(jù)。
高效檢索 :快速準(zhǔn)確地從大量數(shù)據(jù)中檢索出相關(guān)信息。
靈活集成 :適應(yīng)不同數(shù)據(jù)源和數(shù)據(jù)格式的檢索需求。
可擴(kuò)展性 :能夠應(yīng)對(duì)不斷增長(zhǎng)的數(shù)據(jù)量和查詢(xún)負(fù)載。
Retrieval
Many LLM applications require user-specific data that is not part of the model's training set. The primary way of accomplishing this is through Retrieval Augmented Generation (RAG). In this process, external data is retrieved and then passed to the LLM when doing the generation step.
LangChain provides all the building blocks for RAG applications - from simple to complex. This section of the
documentation covers everything related to the retrieval step - e.g. the fetching of the data. Although this sounds simple, it can be subtly complex. This encompasses several key modules.
Retrieval 由幾個(gè)部分組成。
Document loaders :負(fù)責(zé)從各種數(shù)據(jù)源加載數(shù)據(jù),并將其格式化為“文檔”(包含文本和相關(guān)元數(shù)據(jù))。
Text Splitters :用于對(duì)加載的文檔進(jìn)行轉(zhuǎn)換,以適應(yīng)應(yīng)用程序的需求。
Text embedding models :用于將文本轉(zhuǎn)換為向量 表示,這使得可以在向量空間中進(jìn)行語(yǔ)義搜索等操作。
Vector stores :負(fù)責(zé)存儲(chǔ)嵌入向量,并執(zhí)行向量搜索。
Retrievers :是一個(gè)接口,它根據(jù)非結(jié)構(gòu)化查詢(xún)返回文檔。
Indexing :索引API 允許您從任何數(shù)據(jù)源加載并保持文檔與向量存儲(chǔ)的同步。
Retrieval 組成部分
Retrieval能干什么?
Retrieval能夠高效地處理用戶(hù)查詢(xún)并從多個(gè)數(shù)據(jù)源中檢索相關(guān)信息。
LangChain的數(shù)據(jù)索引是一個(gè)將原始數(shù)據(jù)轉(zhuǎn)化為可高效檢索格式的過(guò)程。
數(shù)據(jù)提取 :從各類(lèi)數(shù)據(jù)源中收集并整理出關(guān)鍵信息。
向量化(Embedding) :將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)值向量 ,以捕獲其語(yǔ)義信息。
創(chuàng)建索引 :使用向量構(gòu)建高效索引結(jié)構(gòu),支持快速查詢(xún)和檢索。
數(shù)據(jù)索引-檢索-生成
許多大型語(yǔ)言模型 (LLM)應(yīng)用需要用戶(hù)特定的數(shù)據(jù),這些數(shù)據(jù)并不是模型訓(xùn)練集的一部分。實(shí)現(xiàn)這一點(diǎn)的主要方法是通過(guò)檢索增強(qiáng)生成(RAG)。
檢索增強(qiáng)生成(RAG)的工作流程,從用戶(hù)的查詢(xún)開(kāi)始,經(jīng)過(guò)向量 數(shù)據(jù)庫(kù)的檢索,到提示填充,最后生成回應(yīng)。
檢索(Retrieval) :
目的 :從大量文檔或知識(shí)庫(kù)中檢索與用戶(hù)查詢(xún)或任務(wù)最相關(guān)的信息。
方法 :使用信息檢索技術(shù),如倒排索引、向量 搜索(如基于BERT的句向量搜索)或密集向量檢索等,來(lái)查找與用戶(hù)輸入最相似的文檔或段落。
輸出 :一組與用戶(hù)查詢(xún)高度相關(guān)的文檔或段落。
增強(qiáng)(Augmentation) :
目的 :將檢索到的信息有效地整合到生成過(guò)程中,以豐富模型 的輸出。
方法 :可以通過(guò)多種方式實(shí)現(xiàn)增強(qiáng),包括簡(jiǎn)單的拼接、注意力機(jī)制(如交叉注意力)、記憶網(wǎng)絡(luò)或更復(fù)雜的融合策略。
輸出 :一個(gè)結(jié)合了原始輸入和檢索到的信息的增強(qiáng)表示,用于后續(xù)的生成步驟。
生成(Generation) :
目的 :基于增強(qiáng)后的信息,生成符合用戶(hù)意圖和查詢(xún)條件的自然語(yǔ)言輸出。
方法 :使用條件語(yǔ)言模型(如Transformer架構(gòu)中的解碼器)來(lái)生成文本。生成過(guò)程可以是自回歸的(即逐個(gè)詞或逐個(gè)標(biāo)記地生成文本),也可以是其他生成策略。
輸出 :最終生成的文本,它結(jié)合了用戶(hù)特定的數(shù)據(jù)和模型 的生成能力。
檢索增強(qiáng)生成 (RAG)的工作流程
二、Retrieval 的原理
Retrieval的工作流程:從指定來(lái)源獲取并讀取文檔,經(jīng)過(guò)預(yù)處理和向量 化后,將文檔存儲(chǔ)并索引化,最終根據(jù)用戶(hù)查詢(xún)進(jìn)行高效搜索并返回相關(guān)結(jié)果。
Retrieval流程包含以下六個(gè)核心步驟:
Source(來(lái)源)
關(guān)鍵詞:獲取 ,表示從各種來(lái)源獲取文檔或數(shù)據(jù)。
Load(加載)
關(guān)鍵詞:讀取 ,代表從來(lái)源中加載并讀取文檔或數(shù)據(jù)的過(guò)程。
Transform(轉(zhuǎn)換)
關(guān)鍵詞:預(yù)處理 ,表示對(duì)加載的文檔或數(shù)據(jù)進(jìn)行清洗、格式化和轉(zhuǎn)換,以適應(yīng)后續(xù)步驟。
Embed(嵌入)
關(guān)鍵詞:向量化 ,代表將文檔或數(shù)據(jù)轉(zhuǎn)換為向量 表示,以捕捉其語(yǔ)義信息。
Store(存儲(chǔ))
關(guān)鍵詞:索引化 ,表示將嵌入后的向量存儲(chǔ)在數(shù)據(jù)庫(kù)中,并建立索引以?xún)?yōu)化檢索性能。
Retrieve(檢索)
關(guān)鍵詞:搜索 ,代表根據(jù)用戶(hù)查詢(xún)從存儲(chǔ)的向量數(shù)據(jù)庫(kù)中檢索相關(guān)文檔或數(shù)據(jù)的過(guò)程。
Retrieval的工作流程
Retrieval的核心組件:Retrieval的六個(gè)核心組件共同協(xié)作,實(shí)現(xiàn)文檔的高效加載、精確拆分、語(yǔ)義嵌入、向量 存儲(chǔ)、智能檢索及優(yōu)化索引,為各類(lèi)應(yīng)用場(chǎng)景提供強(qiáng)大且靈活的文檔處理與檢索能力。
LangChain文檔檢索和處理組成部分:
一、文檔加載 (Document Loaders)
功能:從多種來(lái)源加載文檔。
特性:支持100+加載器,與AirByte、Unstructured等集成。
應(yīng)用:加載HTML、PDF、代碼等,來(lái)源包括私有S3桶、公共網(wǎng)站等。
二、文本拆分 (Text Splitting)
功能:將大文檔拆分為小片段,以便更精確地檢索相關(guān)內(nèi)容。
特性:提供多種拆分算法,優(yōu)化特定文檔類(lèi)型(如代碼、Markdown)。
三、文本嵌入模型 (Text Embedding Models)
功能:為文檔創(chuàng)建語(yǔ)義嵌入,以快速找到相似文本。
特性:支持25+嵌入提供商和方法,包括開(kāi)源和專(zhuān)有API 。
優(yōu)點(diǎn):標(biāo)準(zhǔn)接口,方便模型 切換。
四、向量存儲(chǔ) (Vector Stores)
功能:高效存儲(chǔ)和搜索文檔嵌入。
特性:支持50+向量 存儲(chǔ)解決方案,包括開(kāi)源和云托管選項(xiàng)。
優(yōu)點(diǎn):標(biāo)準(zhǔn)接口,輕松切換存儲(chǔ)方案。
五、檢索器 (Retrievers)
功能:從數(shù)據(jù)庫(kù)中檢索文檔。
特性:支持多種檢索算法,包括語(yǔ)義搜索和高級(jí)算法(如父文檔檢索器、自查詢(xún)檢索器、集成檢索器)。
應(yīng)用:提高檢索性能和準(zhǔn)確性。
六、索引 (Indexing)
功能:將數(shù)據(jù)源同步到向量 存儲(chǔ),避免重復(fù)和冗余。
特性:LangChain索引API ,優(yōu)化存儲(chǔ)和檢索過(guò)程。
優(yōu)點(diǎn):節(jié)省時(shí)間和成本,改善搜索結(jié)果質(zhì)量。
三、Retrieval 的應(yīng)用
LangChain使用RAG技術(shù)構(gòu)建問(wèn)答 (Q&A) 聊天機(jī)器人的介紹和說(shuō)明,包括其架構(gòu)、組件以及一些構(gòu)建和使用這些應(yīng)用程序的指南。
架構(gòu):?jiǎn)柎穑≦&A)聊天機(jī)器人的架構(gòu)通常包括兩個(gè)主要部分:索引和檢索與生成。
一、索引 :
數(shù)據(jù)加載:首先,需要從各種源加載數(shù)據(jù)。這些數(shù)據(jù)可以是文本文件、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)等。加載數(shù)據(jù)的過(guò)程需要使用適當(dāng)?shù)募虞d器(如DocumentLoaders),以便將數(shù)據(jù)以適合后續(xù)處理的形式讀入系統(tǒng)。
數(shù)據(jù)拆分:加載后的數(shù)據(jù)通常需要被拆分成較小的塊或段落。這是因?yàn)榇笮臀臋n難以直接搜索,并且可能無(wú)法適應(yīng)模型的有限上下文窗口。拆分可以使用文本拆分器(Text Splitters)完成,它們將文檔分割成更易于管理和搜索的小塊。
存儲(chǔ)與索引:拆分后的數(shù)據(jù)需要存儲(chǔ)在可以高效檢索的地方。通常,這涉及使用向量存儲(chǔ)(VectorStore)和嵌入模型 (Embeddings)。向量 存儲(chǔ)允許將數(shù)據(jù)表示為高維空間中的點(diǎn),而嵌入模型則用于將這些點(diǎn)映射到向量空間中,以便進(jìn)行相似性搜索和檢索。
檢索與生成
組件 : 問(wèn)答 (Q&A) 聊天機(jī)器人 的關(guān)鍵組件包括:
DocumentLoaders :用于從各種源加載數(shù)據(jù)的組件。
Text Splitters :將大型文檔拆分為較小塊的組件。
VectorStore 和 Embeddings :用于存儲(chǔ)和索引拆分后的數(shù)據(jù),并支持相似性搜索和檢索的組件。
Retriever :根據(jù)用戶(hù)輸入檢索最相關(guān)數(shù)據(jù)塊的組件。
ChatModel / LLM :使用檢索到的數(shù)據(jù)和用戶(hù)問(wèn)題生成答案的模型 。
構(gòu)建和使用指南
快速入門(mén) :建議從快速入門(mén)指南開(kāi)始,以了解如何設(shè)置和使用問(wèn)答聊天機(jī)器人的基本功能。這通常涉及安裝必要的庫(kù)、配置索引和檢索組件以及運(yùn)行示例代碼。
返回源文檔 :了解如何在生成答案時(shí)返回使用的源文檔。這對(duì)于提供答案的上下文和驗(yàn)證答案的準(zhǔn)確性非常有用。
流式處理 :學(xué)習(xí)如何流式傳輸最終答案以及中間步驟。這對(duì)于處理大型數(shù)據(jù)集或需要逐步構(gòu)建答案的復(fù)雜查詢(xún)特別有用。
添加聊天歷史 :了解如何將聊天歷史添加到問(wèn)答應(yīng)用程序中。這可以提高用戶(hù)體驗(yàn),允許用戶(hù)在對(duì)話(huà)中引用先前的問(wèn)題和答案。
每個(gè)用戶(hù)的檢索 :如果每個(gè)用戶(hù)都有自己的私有數(shù)據(jù),需要了解如何為每個(gè)用戶(hù)執(zhí)行獨(dú)立的檢索操作。這涉及在索引和檢索過(guò)程中考慮用戶(hù)身份和權(quán)限。
使用代理 :了解如何使用代理來(lái)增強(qiáng)問(wèn)答功能。代理可以提供額外的上下文、執(zhí)行更復(fù)雜的任務(wù)或與其他系統(tǒng)進(jìn)行交互。
使用本地模型 :對(duì)于需要更高性能或隱私要求的應(yīng)用程序,了解如何使用本地模型 進(jìn)行問(wèn)答操作。這涉及在本地環(huán)境中部署和運(yùn)行模型,而不是依賴(lài)于云服務(wù)或外部API 。
本文章轉(zhuǎn)載微信公眾號(hào)@架構(gòu)師帶你玩轉(zhuǎn)AI
我們有何不同?
API服務(wù)商零注冊(cè)
多API并行試用
數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率
查看全部API→
??
熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API