chunks: 塊
trunks : 樹干
“RAG”通常指?檢索增強生成(Retrieval-Augmented Generation)
主要框架:用戶提query,找到和它相關的,先把問題轉換為向量,和向量數據庫的數據做比較,檢索相似的向量,返回 對應向量的原始文本,構建prompt,給模型回答問題。
一 文檔交互
1.1 生成和檢索的區別
“RAG”通常指?檢索增強生成(Retrieval-Augmented Generation)
二 金融智能客服系統
2.1 傳統架構 (通過檢索的方式)
1 提前設計FAQ庫(業務人員整理)
<q, a> <q, a><q, a>
2 用戶提問,和FAQ 問題做比較,看哪個問題相近,就使用這個答案
3 好處,結果可控。
2.2 傳統問答方式2 (使用生成的方式)
1 提前設計FAQ庫(業務人員整理)
<q, a> <q, a><q, a>
2 訓練一個模型,問題做輸入,答案做輸出,訓練模型?
3 使用模型,將問題作為模型的輸入,使用模型的輸出作為結果。
4 結果不可控,準確率比較低。
傳統方式通常使用方式一?
2.3 檢索 + 生成
大模型 問答系統 2.0
1 不用維護知識庫,從文檔抽出來關鍵問題
2 直接把原始的知識庫就行,【doc, PDF, EXCEL, TXT 】都可以做知識庫
3 用戶提問,先做檢索把相關文檔提取出來,答案可能在文檔里面
4 構建prompt,檢索結果放在prompt 【上下文】, query【Input】 也放在prompt 里面,還要歷史聊天記錄 【上下文】,統一放入模型做輸入得到一個response.?
三 基于大模型技術的Agent 框架搭建
1 技術棧?
項目架構梳理
1 用戶提出 query(string)
2 構造知識庫,企業知識【txt, pdf, html, doc, excel, ppt】 做轉換
2.1 把文章做trunk【樹干】,不能把整個文章放到prompt, 拆分章節,把適合的章節放進去就行。
文檔 拆分-> Trunk ,放入【知識庫】,需要做一定的數據清洗,特殊符號清洗啥的
2.2 把數據轉換為向量,用于和query 比較。
3 用戶提 query , 在知識庫找出對應的Trunk,一起放入prompt中,【基于如下的上下文回復用戶的上下文】,然后進模型,然后回復。
2 向量數據庫的搭建
1 trunk 和query 比較,比較兩個string 做比較,把string 轉換為向量。
用戶提query,找到和它相關的,先把問題轉換為向量,和向量數據庫的數據做比較,檢索相似的向量,返回 對應向量的原始文本,構建prompt。
prompt {instructing, context,inputs} -> model = response?
2 相似度怎么計算??
(vec1, vec2) -> 相似度
向量數據庫,解決搜索效率的問題。
難點:
1 怎么比較query 和 trunk 的向量?
2 怎么做文檔切割?
3 怎么轉換為向量數據??
3 怎么解決 hallucination(亂說)
4 拆分文本
1 最好按段落進行區分
2 fixed + 語義做分割【遞歸方法,來自 langchain】
后面的方法需要跑機器學習模型,比較慢,常見使用第一和第二種,直接拆分句子和字符數。
4.1 split? by sentence
每個塊都是完整的一句話。
4.2 fixed length chunks?
4.3 chunks with overlapping window
4.4 recursiveCharacterTextSplitter from langchain
fixed + 語義做分割
5 拆分中文
四 文本向量化
4.1 opai embedding (向量化模型)
?
4.2 相似度計算
4.3 向量數據庫 qdrant
?