大型語(yǔ)言模型懂很多東西,但它們不會(huì)自動(dòng)知道我們私有文件、公司文檔、筆記或最近寫(xiě)的文章里有什么。這正是檢索增強(qiáng)生成(RAG)派上用場(chǎng)的時(shí)候。在這個(gè)項(xiàng)目里,我搭了一個(gè)小型的 RAG 應(yīng)用,它能讀入文本文檔,把文檔拆成更小的段落,將這些段落轉(zhuǎn)化為一種叫“嵌入”的數(shù)值表示,然后存入 Pinecone。當(dāng)用戶(hù)提問(wèn)時(shí),它會(huì)找到最相關(guān)的段落,把它們交給 AI 模型,讓模型給出一個(gè)“有根據(jù)”的答案——也就是基于檢索到的源材料來(lái)回答。
我用了 Python 來(lái)寫(xiě)這個(gè)應(yīng)用,用 LangChain 連接各個(gè)步驟,用 OpenAI 的嵌入模型把文字變成數(shù)字,用 Pinecone 存儲(chǔ)和搜索這些嵌入,還用 uv 管理整個(gè) Python 項(xiàng)目和依賴(lài)。這篇文章我會(huì)解釋這個(gè)應(yīng)用是怎么運(yùn)作的,各個(gè)組件怎么配合,以及我在調(diào)試過(guò)程中學(xué)到了什么。
想象一下你在參加一場(chǎng)開(kāi)卷考試。沒(méi)有書(shū)的時(shí)候,你只能憑記憶作答。你可能知道答案,但也可能忘掉點(diǎn)什么,或者給出錯(cuò)誤的信息。有了開(kāi)卷資格,你可以先讀題,翻到相關(guān)的那一頁(yè),然后用那上面的內(nèi)容來(lái)寫(xiě)答案。RAG 應(yīng)用的工作原理與此類(lèi)似:語(yǔ)言模型就是答題的人,向量數(shù)據(jù)庫(kù)就像一本可以搜索的書(shū)。在回答之前,應(yīng)用會(huì)找到最相關(guān)的信息交給模型,模型不需要記住整份文檔,它只收到那些可能包含答案的片段。
一個(gè)基本的 RAG 應(yīng)用有兩個(gè)階段。第一階段是“攝取”,也就是把文檔準(zhǔn)備好,讓它們以后能被搜索到。流程是:加載文檔,切成小塊,每塊轉(zhuǎn)成一個(gè)嵌入,然后把這些嵌入存進(jìn) Pinecone。這個(gè)過(guò)程通常在添加或更新文檔時(shí)運(yùn)行。第二階段是“檢索與答案生成”,在用戶(hù)提問(wèn)時(shí)觸發(fā):先把問(wèn)題轉(zhuǎn)成嵌入,到 Pinecone 里搜出相似的文檔塊,把這些塊放進(jìn)提示詞里,最后讓語(yǔ)言模型作答。把這兩個(gè)階段分開(kāi),整個(gè)應(yīng)用就更容易理解——攝取負(fù)責(zé)整理知識(shí),檢索負(fù)責(zé)用上這些知識(shí)。
計(jì)算機(jī)不能像人那樣直接比較句子之間的意思。嵌入模型的作用就是把文字轉(zhuǎn)換成一串?dāng)?shù)字,也就是向量。比如“如何重置我的密碼”和“我忘了密碼該怎么辦”意思很接近,它們對(duì)應(yīng)的向量在數(shù)值空間中也會(huì)挨得很近。這樣,通過(guò)比較向量,系統(tǒng)就能找到語(yǔ)義上相關(guān)的段落,哪怕用詞不完全一樣。
調(diào)試的時(shí)候我用上了 LangSmith,它能讓我看到每個(gè)步驟的輸入輸出,幫我定位問(wèn)題。比如,有一次我發(fā)現(xiàn)檢索到的段落和問(wèn)題根本不沾邊,通過(guò)追蹤才發(fā)現(xiàn)是文檔切分的粒度不對(duì),導(dǎo)致關(guān)鍵信息被切散。改了切分策略之后,檢索質(zhì)量明顯提升。RAG 確實(shí)能減少?zèng)]有根據(jù)的回答,但它并不能保證每一次回復(fù)都正確。模型仍然可能誤解上下文,或者把檢索到的信息拼湊得看似合理卻偏離事實(shí)。這就是這個(gè)應(yīng)用留下的一個(gè)需要持續(xù)留意的地方。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.