相關主題
商品描述
在大模型逐漸成為智能系統核心引擎的*,檢索增強生成(RAG)技術為解決模型的知識盲區以及提升響應*性提供了關鍵性的解決方案。本書圍繞完整的RAG系統生命周期,系統地拆解其架構設計與實現路徑,助力*和企業構建實用、可控且可優化的智能問答系統。 *,本書以“數據導入—文本分塊—信息嵌入—向量存儲”為主線,詳細闡述了從多源文檔加載到結構化預處理的全流程,並深入解析了嵌入模型的選型、微調策略及多模態支持;其次,從檢索前的查詢構建、查詢翻譯、查詢路由、索引優化,到檢索後的重排與壓縮,*講解了提高召回質量和內容相關性的方法;接下來,介紹了多種生成方式及RAG 系統的評估框架;*,展示了覆雜RAG範式的新進展,包括GraphRAG、Modular RAG、 Agentic RAG和Multi-Modal RAG的構建路徑。 本書適合AI研發工程師、企業技術負責人、知識管理從業者以及對RAG系統構建感興趣的高校師生閱讀。無論你是希望快速搭建RAG系統,還是致力於深入優化檢索性能,亦或是探索下一代AI系統架構,本書*提供了實用的操作方法與理論支持。
作者簡介
黃佳,筆名咖哥,現任新加坡科技研究局Lead Research Engineer,曾擔任埃森哲新加坡公司*顧問,擁有*過二十年的工作經驗。主導並實施了涵蓋政府部門、金融、醫療、電商及能源等領域的大型項目,積累了豐富的人工智能與大數據項目的實戰經驗。近年來,他的研究主要集中在NLP預訓練大模型及FinTech應用方向。 著有《大模型應用開發 動手做AI Agent》《GPT圖解 大模型是怎樣構建的》《數據分析咖哥十話 從思維到實踐促進運營增長》《*基礎學機器學習》和《SAP程序設計》等多部*圖書,其中,《大模型應用開發 動手做AI Agent》入選京東圖書“2024年度好書”,《GPT圖解 大模型是怎樣構建的》則被CSDN評為“2023中國*影響力年度IT圖書”。 同時,咖哥還在極客時間開設了“大模型RAG進階實戰訓練營”。該訓練營以案例為導向,強調實踐教學,並通過緊密的群組互動學習方式獲得了學員們的廣泛認可和好評。
目錄大綱
楔子 鬧市中的古剎 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