使用RAG構(gòu)建高質(zhì)量知識庫
在AI技術(shù)飛速發(fā)展的當下,RAG(檢索增強生成)作為實用的前沿技術(shù),正助力高效構(gòu)建高質(zhì)量知識庫。本文深入淺出地解析RAG的定義、優(yōu)勢、技術(shù)原理,從知識入庫到檢索的全流程,并結(jié)合公司考勤管理制度實例演示其應(yīng)用,助你輕松掌握RAG技術(shù)。
在AI應(yīng)用領(lǐng)域,各種新技術(shù)新名詞層出不窮,但最實用的技術(shù)莫過于RAG了。
相信稍微接觸過AI的同學(xué)都不會陌生,但要想用好RAG,還是有一定門檻。
今天咱們就來聊一聊RAG。
RAG是什么?
檢索增強生成
Retrieval-Augmented Generation
一般用戶在使用大模型的時候,其實只需要使用自然語言問問題,大模型就會返回相應(yīng)的答案。
普通人使用大模型的方式
所以只要掌握好提示詞工程,大多數(shù)場景就已經(jīng)可以讓大模型乖乖給你干活了。想了解提示詞的同學(xué),可以去看上一篇文章。
你真的會寫提示詞嗎?高質(zhì)量提示詞指南來了!
但是大模型能回答的僅限于公域知識。如果你有一個私域文檔,希望大模型根據(jù)文檔的內(nèi)容回答問題。要怎么搞?
也很簡單,只要把文檔丟給大模型讓他參考就可以了。
帶知識庫的交互方式
比如,你有一個文檔《公司考勤管理制度》,只需要把文檔的內(nèi)容全部復(fù)制粘貼到提示詞中,并要求大模型參考知識回答問題即可。
但是,如果文檔非常長,比如是一本書,沒辦法一次性丟給大模型參考,該怎么辦?
這個時候就需要用到我們的 RAG(檢索增強生成)技術(shù)了。
RAG
核心是把知識進行模塊化存儲,使用時按需召回最匹配的知識并作為上下文提供給大模型。
RAG的好處
- 提高準確性:通過引用外部知識庫,RAG能夠彌補LLM在特定領(lǐng)域知識或最新信息方面的不足,從而提高生成響應(yīng)的準確性。
- 更新鮮的信息:RAG能夠訪問實時更新的外部數(shù)據(jù)源,使得模型生成的響應(yīng)更加及時和符合最新情況。
- 降低成本:與重新訓(xùn)練LLM相比,RAG是一種更具成本效益的方式來增強LLM的能力,因為它無需對模型進行大規(guī)模的重新訓(xùn)練。
- 增強可解釋性:RAG可以提供生成響應(yīng)所依據(jù)的外部來源,增強了響應(yīng)的可解釋性和可信度。
- 消除幻覺:基于確定性的知識能夠讓大模型的回答更加穩(wěn)定,大幅度降低胡編亂造的可能性。
RAG的技術(shù)原理
RAG技術(shù)入門非常簡單,現(xiàn)在市面上很多的AI開發(fā)框架和智能體開發(fā)平臺都內(nèi)置了知識庫能力,輕輕松松就可以搞出一個企業(yè)知識庫,并且知識庫的檢索也能達到及格水平。
但AI技術(shù)的特點往往就是上手容易但深入困難,想要進一步優(yōu)化你的私域知識庫,就得適當了解RAG的技術(shù)原理,根據(jù)自己的實際情況選擇更好的技術(shù)路徑。
RAG的技術(shù)路徑有很多種,但總體來說,可以劃分為“知識入庫”和“知識檢索”兩個大的板塊。
知識入庫
知識入庫質(zhì)量的好壞,決定了知識檢索的效果。
知識入庫環(huán)節(jié)說明數(shù)據(jù)清洗去除無效數(shù)據(jù),例如:外部鏈接、重復(fù)數(shù)據(jù)、特殊符號、無效信息等。數(shù)據(jù)分塊針對不同的文檔類型進行分塊處理。比如按段落分塊、按固定長度分塊等。向量化把分塊后的數(shù)據(jù)轉(zhuǎn)化成向量并存儲在向量數(shù)據(jù)庫。
這里每一個步驟都足夠復(fù)雜,咱們后面的系列文章會逐步進行講解。
知識檢索
從向量數(shù)據(jù)庫中查找對應(yīng)的知識并作為上下文輸入到大模型中。
知識檢索環(huán)節(jié)說明向量檢索把要檢索的內(nèi)容轉(zhuǎn)化成向量,通過全文檢索、稀疏向量檢索、稠密向量檢索等方式獲得最相關(guān)的TopK個結(jié)果。重排通過對向量檢索中召回的TopK歌結(jié)果進行二次精排和加工,最終找出最符合的幾個結(jié)果。
舉個例子
現(xiàn)在有一個私域知識庫文件”公司考勤管理制度.pdf”
<html>
<body>
<div>
XXX公司考勤管理制度
# 第一條 目的
為規(guī)范員工考勤管理,維護正常工作秩序,保障企業(yè)和員工的合法權(quán)益,根據(jù)《中華人民共和國勞動法》及相關(guān)法律法規(guī),結(jié)合公司實際情況,制定本制度。
# 第二條 適用范圍
本制度適用于公司全體正式員工、試用期員工及兼職員工。
# 第三條 標準工作時間
公司實行標準工時制,工作日為周一至周五,每日工作時間為:
上午 09:00-12:00
下午 13:00-18:00(含1小時午休)
特殊崗位或因工作需要調(diào)整工作時間的,需經(jīng)人力資源部審批后執(zhí)行。
# 第四條 考勤方式
員工需通過 指紋打卡/人臉識別/企業(yè)微信簽到 等方式記錄考勤,每日上下班各打卡一次。
因公外出或出差需提前提交<a href=”http://xxx.erp.cn”>《外出申請單》</a>,經(jīng)部門負責人審批后備案。
</div>
<div>
…
附件:
<a href=”http://xxx.erp.cn”>《外出申請單》</a>
人力資源部
XXXX年XX月XX日
</div>
</body>
</html>
1. 數(shù)據(jù)清洗
刪除文檔中多余的鏈接、無效的文本、鏈接等。 并且進行結(jié)構(gòu)化的分段。方便后續(xù)分塊。
清洗后的文檔:
XXX公司考勤管理制度
# 第一條 目的為規(guī)范員工…
# 第二條 適用范圍…
# 第三條 標準工作時間…
# 第四條 考勤方式員工需通過 指紋打卡/人臉識別/企業(yè)微信簽到 等方式記錄考勤,每日上下班各打卡一次。
因公外出或出差需提前提交《外出申請單》,經(jīng)部門負責人審批后備案。
…
人力資源部
XXXX年XX月XX日
2. 數(shù)據(jù)分塊
咱們采用根據(jù)段落分塊,既每個段落作為一個獨立的分塊。
# block_01
XXX公司考勤管理制度
# block_02
第一條 目的
為規(guī)范員工…
# block_03
第二條 適用范圍
本制度適用于…
# block_04
第三條 標準工作時間
公司實行標準工時制,工作日為周一至周五,每日工作時間為:
上午 09:00-12:00
下午 13:00-18:00(含1小時午休)。
…
# block_05
…
3. 向量化
使用嵌入模型(Embedding Model)把文檔中的每個分塊(block)轉(zhuǎn)化成向量,并存儲在向量數(shù)據(jù)庫中。
轉(zhuǎn)化后的向量大概長這樣:
# block_01
{
context: ‘XXX公司考勤管理制度’,
vector: [
0.11878310581111173, 0.9694947902934701, 0.16443679307243175,
0.5484226189097237, 0.9839246709011924, 0.5178387104937776,
0.8716926129208069, 0.5616972243831446,
…
]
}
# block_02
…
到這一步,我們的向量數(shù)據(jù)庫中已經(jīng)存儲了完整的文檔信息。
4. 向量檢索
現(xiàn)在用戶問了一個問題:
公司的上班時間是?
首先需要把”公司的上班時間是?”也轉(zhuǎn)化成向量:
{
context: ‘公司的上班時間是?’,
vector: [
0.24878310581111173, 0.5694947902934701, 0.58943679307243175,
0.2354226189097237, 0.4469246709011924, 0.3138387104937776,
0.6786926129208069, 0.4436972243831446,
…
]
}
然后去向量數(shù)據(jù)庫檢索,得到如下結(jié)果:
[{
id: “block_01”,
context: “XXX公司考勤管理制度”,
score: “0.7843”
},{
id: “block_05”,
context: “公司考勤方式…”,
score: “0.334”
}, {
id: “block_04”,
context: “第三條 標準工作時間…”,
score: “0.103”
}
]
其中score是當前分塊與待查詢值的距離,值越小,語義上越接近。
5. 重排
其實經(jīng)過第四步,就已經(jīng)可以找到我們想要的數(shù)據(jù)了,但很多時候文檔會召回大量非常相似的內(nèi)容。
向量數(shù)據(jù)庫檢索的時候,為了性能會犧牲部分檢索的精度,也就意味著可能會召回許多完全不相關(guān)的內(nèi)容,那么這個時候就需要用到重排。
重排簡單來說就是優(yōu)中選優(yōu),從之前召回的內(nèi)容中,選擇更加符合要求的TopK個結(jié)果。
重排后的結(jié)果:
[{
id: “block_04”,
context: “第三條,標準工作時間…”
}]
6. 大模型回答
有了知識庫的篩選結(jié)果,那么只需要把結(jié)果返回給大模型,由大模型進行回復(fù)即可。
# Data
第三條 標準工作時間
公司實行標準工時制,工作日為周一至周五,每日工作時間為:
上午 09:00-12:00
下午 13:00-18:00(含1小時午休)。
# Source
《XXX公司考勤管理制度》
# Question
公司上班時間是?
# Answer
工作日為周一至周五
上午 09:00-12:00
下午 13:00-18:00
午休1小時。
數(shù)據(jù)來源于XXX公司考勤管理制度。
結(jié)語
以上只是展示了最常見的RAG技術(shù)路徑。雖然RAG技術(shù)的入門非常的簡單,但達到一定的效果之后,想要再提升,就會遇到很多的問題和阻力。
本期文章只是開篇介紹,后續(xù)將深入介紹RAG的每個技術(shù)環(huán)節(jié)。
本文由人人都是產(chǎn)品經(jīng)理作者【葉小釵】,微信公眾號:【葉小釵】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
get
通俗易懂,期待后續(xù)更新~
寫的非常好,會有后續(xù)嘛,想知道如何提高召回準確率?