RAG實戰課

RAG實戰課

《RAG實戰課》是2025年人民郵電出版社出版的圖書。

基本介紹

  • 中文名:RAG實戰課
  • 出版時間:2025年5月1日
  • 出版社:人民郵電出版社
  • ISBN:9787115671851
內容簡介,圖書目錄,

內容簡介

在大模型逐漸成為智慧型系統核心引擎的今天,檢索增強生成(RAG)技術為解決模型的知識盲區以及提升回響準確性提供了關鍵性的解決方案。本書圍繞完整的RAG系統生命周期,系統地拆解其架構設計與實現路徑,助力開發者和企業構建實用、可控且可最佳化的智慧型問答系統。
首先,本書以“數據導入—文本分塊—信息嵌入—向量存儲”為主線,詳細闡述了從多源文檔載入到結構化預處理的全流程,並深入解析了嵌入模型的選型、微調策略及多模態支持;其次,從檢索前的查詢構建、查詢翻譯、查詢路由、索引最佳化,到檢索後的重排與壓縮,全面講解了提高召回質量和內容相關性的方法;接下來,介紹了多種生成方式及RAG 系統的評估框架;最後,展示了複雜RAG範式的新進展,包括GraphRAG、Modular RAG、 Agentic RAG和Multi-Modal RAG的構建路徑。
本書適合AI研發工程師、企業技術負責人、知識管理從業者以及對RAG系統構建感興趣的高校師生閱讀。無論你是希望快速搭建RAG系統,還是致力於深入最佳化檢索性能,亦或是探索下一代AI系統架構,本書都提供了實用的操作方法與理論支持。

圖書目錄

楔子 鬧市中的古剎 001
開篇 RAG三問 003
一問 從實際項目展示到底何為RAG 003
文檔的導入和解析 005
文檔的分塊 005
文本塊的嵌入 006
向量資料庫的選擇 006
文本塊的檢索 007
回答的生成 008
二問 如何快速搭建RAG系統 008
使用框架:LangChain的RAG實現 011
使用框架:通過LCEL鏈進行重構 016
使用框架:通過LangGraph進行重構 018
不使用框架:自選Embedding模型、向量資料庫和大模型 020
使用coze、Dify、FastGPT等可視化工具 023
三問 從何處入手最佳化RAG系統 025
第 1章 數據導入 028
1.1 用數據載入器讀取簡單文本 030
1.1.1 藉助LangChain讀取TXT檔案,以生成Document對象 030
1.1.2 LangChain中的數據載入器 031
1.1.3 用LangChain讀取目錄中的所有檔案 032
1.1.4 用LlamaIndex讀取目錄中的所有文檔 034
1.1.5 用LlamaHub連線Reader並讀取資料庫條目 036
1.1.6 用Unstructured工具讀取各種類型的文檔 038
1.2 用JSON載入器解析特定元素 040
1.3 用UnstructuredLoader讀取圖片中的文字 042
1.3.1 讀取圖片中的文字 042
1.3.2 讀取PPT中的文字 043
1.4 用大模型整體解析圖文 044
1.5 導入CSV格式的表格數據 048
1.5.1 使用CSVLoader導入數據 048
1.5.2 比較CSVLoader和UnstructuredCSVLoader 050
1.6 網頁文檔的爬取和解析 051
1.6.1 用WebBaseLoader快速解析網頁 051
1.6.2 用UnstructuredLoader細粒度解析網頁 052
1.7 Markdown檔案標題和結構 054
1.8 PDF檔案的文本格式、布局識別及表格解析 057
1.8.1 PDF檔案載入工具概述 057
1.8.2 用PyPDFLoader進行簡單文本提取 059
1.8.3 用Marker工具把PDF文檔轉換為Markdown格式 060
1.8.4 用UnstructuredLoader進行結構化解析 063
1.8.5 用PyMuPDF和坐標信息可視化布局 069
1.8.6 用UnstructuredLoader解析PDF頁面中的表格 072
1.8.7 用ParentID整契約一標題下的內容 073
1.9 小結 075
第 2章 文本分塊 082
2.1 為什麼分塊非常重要 083
2.1.1 上下文視窗限制了塊最大長度 084
2.1.2 分塊大小對檢索精度的影響 086
2.1.3 分塊大小對生成質量的影響 088
2.1.4 不同的分塊策略 088
2.1.5 用ChunkViz工具可視化分塊 089
2.2 按固定字元數分塊 090
2.2.1 LangChain中的CharacterTextSplitter工具 090
2.2.2 在LlamaIndex中設定塊大小參數 092
2.3 遞歸分塊 092
2.4 基於特定格式(如代碼)分塊 093
2.5 基於檔案結構或語義分塊 095
2.5.1 使用Unstructured工具基於文檔結構分塊 095
2.5.2 使用LlamaIndex的SemanticSplitterNodeParser進行語義分塊 096
2.6 與分塊相關的高級索引構建技巧 097
2.6.1 帶滑動視窗的句子切分 097
2.6.2 分塊時混合生成父子文本塊 098
2.6.3 分塊時為文本塊創建元數據 100
2.6.4 在分塊時形成有級別的索引 101
2.7 小結 103
第3章 嵌入生成 104
3.1 嵌入是對外部信息的編碼 104
3.2 從早期詞嵌入模型到大模型嵌入 107
3.2.1 早期詞嵌入模型 108
3.2.2 上下文相關的詞嵌入模型 108
3.2.3 句子嵌入模型和SentenceTransformers框架 109
3.2.4 多語言嵌入模型 111
3.2.5 圖像和音頻嵌入模型 112
3.2.6 圖像與文本聯合嵌入模型 112
3.2.7 圖嵌入模型和知識圖譜嵌入模型 113
3.2.8 大模型時代的嵌入模型 114
3.3 現代嵌入模型:OpenAI、Jina、Cohere、Voyage 114
3.3.1 用OpenAI的text-embedding-3-small進行產品推薦 114
3.3.2 用jina-embeddings-v3模型進行跨語言數據集聚類 116
3.3.3 MTEB:海量文本嵌入基準測試 118
3.3.4 各種嵌入模型的比較及選型考量 120
3.4 稀疏嵌入、密集嵌入和BM25 121
3.4.1 利用BM25實現稀疏嵌入 122
3.4.2 BGE-M3模型:稀疏嵌入和密集嵌入的結合 124
3.5 多模態嵌入模型:Visualized_BGE 125
3.6 通過LangChain、LlamaIndex等框架使用嵌入模型 126
3.6.1 LangChain提供的嵌入接口 127
3.6.2 LlamaIndex提供的嵌入接口 127
3.6.3 通過LangChain的Caching快取嵌入 128
3.7 微調嵌入模型 129
3.8 小結 133
第4章 向量存儲 134
4.1 向量究竟是如何被存儲的 135
4.1.1 從LlamaIndex的設計看簡單的向量索引 135
4.1.2 向量資料庫的組件 141
4.2 向量資料庫中的索引 144
4.2.1 FLAT 144
4.2.2 IVF 145
4.2.3 量化索引 146
4.2.4 圖索引 147
4.2.5 哈希技術 148
4.2.6 向量的檢索(相似度度量) 148
4.3 主流向量資料庫 149
4.3.1 Milvus 150
4.3.2 Weaviate 150
4.3.3 Qdrant 150
4.3.4 Faiss 151
4.3.5 Pinecone 151
4.3.6 Chroma 151
4.3.7 Elasticsearch 151
4.3.8 PGVector 152
4.4 向量資料庫的選型與測評 152
4.4.1 向量資料庫的選型 152
4.4.2向量資料庫的測評 154
4.5 向量資料庫中索引和搜尋的設定 155
4.5.1 Milvus向量操作示例 155
4.5.2 選擇合適的索引類型 159
4.5.3 選擇合適的度量標準 167
4.5.4 在執行搜尋時度量標準要與索引匹配 171
4.5.5 Search和Query:兩種搜尋方式 172
4.6 利用Milvus實現混合檢索 173
4.6.1 浮點向量、稀疏浮點向量和二進制向量 174
4.6.2 混合檢索策略實現 175
4.6.3 使用Milvus實現混合檢索系統 176
4.7 向量資料庫和多模態檢索 180
4.7.1 用Visualized BGE模型實現多模態檢索 181
4.7.2 使用ResNet-34提取圖像特徵並檢索 186
4.8 RAG系統的數據維護及向量存儲的增刪改操作 189
4.8.1 RAG系統中的數據流維護與管理 189
4.8.2 Milvus中向量的增刪改操作 190
4.8.3 向量資料庫的集合操作 191
4.9 小結 192
第5章 檢索前處理 194
5.1 查詢構建——Text-to-SQL和Text-to-Cypher 196
5.1.1 Text-to-SQL——自然語言到SQL的轉換 196
5.1.2 Text-to-Cypher——從自然語言到圖資料庫查詢 206
5.1.3 Self-query Retriever——自動從查詢中生成元數據過濾條件 210
5.2 查詢翻譯——更好地闡釋用戶問題 216
5.2.1 查詢重寫——將原始問題重構為合適的形式 216
5.2.2 查詢分解——將查詢拆分成多個子問題 218
5.2.3 查詢澄清——逐步細化和明確用戶的問題 221
5.2.4 查詢擴展——利用HyDE生成假設文檔 226
5.3 查詢路由——找到正確的數據源 229
5.3.1 邏輯路由——決定查詢的路徑 231
5.3.2 語義路由——選擇相關的提示詞 232
5.4 小結 234
第6章 索引最佳化 236
6.1 從小到大:節點-句子滑動視窗和父子文本塊 237
6.1.1 節點-句子滑動視窗檢索 238
6.1.2 父子文本塊檢索 240
6.2 粗中有細:利用IndexNode和RecursiveRetriever構建從摘要到細節的索引 243
6.3 分層合併:HierarchicalNodeParser和RAPTOR 246
6.3.1 使用HierarchicalNodeParser生成分層索引 247
6.3.2 使用RAPTOR遞歸生成多層級索引 249
6.4 前後串聯:通過前向/後向擴展連結相關節點 252
6.5 混合檢索:提高檢索準確性和擴大覆蓋範圍 255
6.5.1 使用Ensemble Retriever結合BM25和語義搜尋 255
6.5.2 使用MultiVectorRetriever實現多表示檢索 259
6.5.3 混合查詢和查詢路由 261
6.6 小結 262
第7章 檢索後處理 263
7.1 重排 264
7.1.1 RRF重排 264
7.1.2 Cross-Encoder重排 269
7.1.3 ColBERT重排 271
7.1.4 Cohere重排和Jina重排 273
7.1.5 RankGPT和RankLLM 276
7.1.6 時效加權重排 277
7.2 壓縮 279
7.2.1 Contextual Compression Retriever 280
7.2.2 利用LLMLingua壓縮提示詞 281
7.2.3 RECOMP方法 285
7.2.4 Sentence Embedding Optimizer 287
7.2.5 通過Prompt Caching記憶長上下文 288
7.3 校正 288
7.4小結 296
第8章 回響生成 298
8.1 通過改進提示詞來提高模型輸出質量 299
8.1.1 通過模板和示例引導生成結果 299
8.1.2 增強生成的多樣性和全面性 300
8.1.3 引入事實核查機制以提升真實性 301
8.2 通過輸出解析來控制生成內容的格式 302
8.2.1 LangChain輸出解析機制 302
8.2.2 LlamaIndex輸出解析機制 302
8.2.3 Pydantic解析 303
8.2.4 Function Calling解析 304
8.3 通過選擇大模型來提高輸出質量 304
8.4 生成過程中的檢索結果集成方式 306
8.4.1 輸入層集成 308
8.4.2 輸出層集成 309
8.4.3 中間層集成 309
8.5 Self-RAG 310
8.6 RRR:動態生成最佳化 312
8.7 小結 315
第9章 系統評估 316
9.1 RAG系統的評估體系 317
9.1.1 RAG的評估數據集 317
9.1.2 檢索評估和回響評估 318
9.1.3 RAG TRIAD:整體評估 319
9.2 檢索評估指標 320
9.2.1 精確度 321
9.2.2 召回率 321
9.2.3 F1分數 322
9.2.4 平均倒數排名 322
9.2.5 平均精確度 322
9.2.6 逆文檔頻率加權精確度 323
9.2.7 文檔精確度和頁面精確度 323
9.3 回響評估指標 325
9.3.1 基於n-gram匹配程度的指標 325
9.3.2 基於語義相似性的指標 327
9.3.3 基於忠實度或紮實性的指標 328
9.4 RAG系統的評估框架 329
9.4.1 使用RAGAS評估RAG系統 329
9.4.2 使用TruLens實現RAG TRIAD評估 332
9.4.3 DeepEval:強大的開源大模型評估框架 333
9.4.4 Phoenix:互動式模型診斷分析平台 335
9.5 小結 335
第 10章 複雜RAG範式 337
10.1 GraphRAG:RAG和知識圖譜的整合 338
10.2 上下文檢索:突破傳統RAG的上下文困境 339
10.3 ModularRAG:從固定流程到靈活架構的躍遷 340
10.4 AgenticRAG:自主代理驅動的RAG系統 343
10.5 Multi-Modal RAG:多模態檢索增強生成技術 344
10.6 小結 345
參考文獻 346
後記 一期一會 348

相關詞條

熱門詞條

聯絡我們