Rag流程分析
第一部分:數據處理與向量化
- 原始文檔進入系統,先經過格式識別,把 pdf、docx、pptx、掃描圖片等統一轉成文字流。
- 文字流丟進分段器,按固定長度或語義邊界切成若干文本塊,每個塊再生成唯一 id。
- 如果文檔里有表格或圖片,表格轉成 markdown 表格文本,圖片用 OCR 提文字后也并入相鄰文本塊。
- 每個文本塊先過一遍實體抽取,抽到人名、地名、產品名,再把這些實體寫進一張實體表備用。
- 同一塊文本再交給嵌入模型,模型輸出一串浮點數,這串數就是該塊的向量。
- 向量被寫到向量數據庫,數據庫里一條記錄包含:塊 id、原始文本、向量、實體列表、文件來源、頁碼。
- 實體表里的實體被寫進圖數據庫,形成“實體-關系-實體”三元組,便于以后做圖檢索。
- 全文搜索引擎也同步建索引,把每個塊的純文本做成倒排索引,支持關鍵字快速查找。
- 當所有文檔都完成 1-8 步,系統就得到一個“可檢索知識庫”,包含向量庫、實體圖、全文索引三份數據。
- 以后新文檔進來,只要重復 1-9 步即可增量更新,不需要重建全部索引。
第二部分:提問向量化然后返回結果
- 用戶在前端輸入自然語言問題,問題文本先進入查詢理解模塊。
- 查詢理解模塊用輕量模型判斷問題意圖,再把問題里的時間、地點、實體都抽取出來。
- 抽取后的結構化信息與原始問題一起被送入同型號的嵌入模型,生成問題的向量。
- 系統把問題向量發到向量數據庫做近似最近鄰搜索,召回最相似的 k 個文本塊。
- 同時,系統用抽取到的實體去圖數據庫做一跳或多跳查詢,拿到與這些實體直接相關的文檔 id 列表。
- 全文搜索引擎也用擴展后的關鍵詞做 BM25 搜索,召回另一批候選文檔 id。
- 三路召回結果合并后,用交叉編碼器重排模型給每條候選重新打分,保留分數最高的前 n 條文本塊。
- 這些文本塊按出現順序拼接成一段上下文,上下文長度超過大模型窗口時就按相關性截斷。
- 系統把上下文與原始問題一起塞進 prompt 模板,模板里明確要求大模型在回答中給出引用標記。
- 大模型生成答案文本,系統再解析答案里的引用標記,回鏈到原文位置,生成可點擊的參考鏈接。
- 最后,答案與參考鏈接一起回傳給前端,用戶即可看到回答并可逐條跳轉到原文驗證。