
本网站不提供下载链接,喜欢看书的朋友请关注公众号:【lennylee的碎碎念】(lennyleede),首页回复:授人以渔,自动获取搜索资源的方法。
内容简介:
本书以实战为导向,系统性地讲解了RAG技术的构建与优化。全书内容从数据导入、文本分块、向量嵌入到向量存储、检索优化、响应生成,再到复杂RAG范式的探索,层层递进,帮助读者全面掌握RAG技术的核心知识点和实践技巧。首先聚焦于RAG系统的基础构建,包括数据加载、文本分块、信息嵌入和向量存储;其次深入探讨检索前处理、索引优化、检索后处理和响应生成等关键环节;随后提供了一套完整的RAG系统评估体系,帮助读者量化系统的性能;最后展望RAG技术的未来,介绍了GraphRAG、上下文检索、Modular RAG、Agentic RAG和Multi-Modal RAG等前沿范式。
在推进具身智能落地的实践中,RAG技术正在重构机器人的知识处理范式。本书既有手把手的代码级指导,又包含架构设计的顶层思考,可作为AI工程师的案头工具书,也可作为CTO规划技术栈的决策参考。相信每一位追求智能系统实用价值的读者,都能从本书中获得跨越技术鸿沟的桥梁。
——宇树科技创始人兼CEO 王兴兴
本书系统构建了RAG技术的完整实施框架,涵盖从数据预处理、文本分块到向量存储与检索优化的全流程技术架构。书中深入解析了RAG核心组件的运行机制,并结合可落地的性能评估体系,为开发者提供了构建智能知识系统的全周期方法论。同时,本书还展望了GraphRAG、Multi-Modal RAG等新一代知识引擎的发展趋势。无论是希望了解大模型相关知识的专业人士,还是探索AI应用创新的实践者,都能从本书中获得兼具理论与实践的指导。
——新浪微博首席科学家,AI研发部负责人 张俊林
RAG是一种非通用的实验性技术范式。在实际应用中,通常是为了满足具体业务需求而采用RAG,而非围绕RAG来设计业务。这意味着需要针对不同的场景和问题进行专门的调整、优化,甚至定制化处理。《大模型应用开发 RAG实战课》一书从实现原理到代码实践,全面介绍了RAG技术的应用方法,涵盖了数据导入、文本分块、信息嵌入、向量存储、检索、系统评估及复杂范式等全链路知识,非常适合初级者入门学习。理解这些原理是进行有效优化的基础,读者可以以本书为起点,通过大量实践来深化理解,一定会有所收获。
——360人工智能研究院资深算法专家,老刘说NLP社区作者 刘焕勇
对大多数企业来说,要从大模型中获得生产力与提升运营效率,“招募”成千上万的数字员工是关键途径。然而,管理如此规模的数字员工队伍,即使对有管理万人团队经验的管理者来说,也是一个全新的挑战。企业不仅要借助大模型和流程编排工具,还需将这些技术与自身知识体系深度融合,具备幻觉对抗、权限控制、知识重构与解耦、自动更新以及过程可溯等能力,而实现这些目标的核心技术正是RAG。《大模型应用开发 RAG实战课》一书给我留下了深刻印象,尤其是咖哥精心绘制的技术图解。全书内容紧密贴合企业级RAG的实施路径,非常适合希望在企业中落地AI能力的朋友细读参考。
——杭州萌嘉(TorchV)创始人兼CEO 卢向东(@土猛的员外)
将大模型的通用智能与特定领域知识有效结合,是AI应用落地的核心挑战。RAG为此提供了重要的工程框架。本书深入浅出地剖析了RAG的技术栈与实践要点,对致力于构建高性能、可信赖AI应用的工程师和架构师而言,极具参考价值。
——谷歌AI开发者专家,极客时间“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
· · · · · · (收起)
原文摘录: