咖哥继AI Agent之后的又一力作,给程序员最实用的RAG实战课 从零始,一步步搭建个人和企业的知识库 不使用任何框架,深解析RAG的十大组件,纯手工造RAG系统 基于DeepSeek、LangChain、LlamaIndex、源嵌模型和Milvus的知识库构建指南
售 价:¥
纸质售价:¥76.70购买纸书
6.5
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

内容提要
推荐语 RECOMMENDATION
序 未来奔涌而来:从RAG、AI Agent到MCP和A2A
题记 EPIGRAPH
楔子 闹市中的古刹
开篇 RAG三问
一问 从实际项目展示到底何谓RAG
文档的导入和解析
文档的分块
文本块的嵌入
向量数据库的选择
文本块的检索
回答的生成
二问 如何快速搭建RAG系统
使用框架:LlamaIndex的5行代码示例
使用框架:LangChain的RAG实现
使用框架:通过LCEL链进行重构
使用框架:通过LangGraph进行重构
不使用框架:自选嵌入模型、向量数据库和大模型
使用coze、Dify、RAGFlow、FastGPT等工具
三问 从何处入手优化RAG系统
第1章 数据导入
1.1 用数据加载器读取简单文本
1.1.1 用LangChain读取TXT文件,以生成Document对象
1.1.2 LangChain中的数据加载器
1.1.3 用LangChain读取目录中的所有文件
1.1.4 用LlamaIndex读取目录中的所有文档
1.1.5 用LlamaHub连接Reader并读取数据库条目
1.1.6 用Unstructured工具读取各种类型的文档
1.2 用JSON加载器解析特定元素
1.3 用UnstructuredLoader读取图片中的文字
1.3.1 读取图片中的文字
1.3.2 读取PPT中的文字
1.4 用大模型整体解析图文
1.5 导入CSV格式的表格数据
1.5.1 使用CSVLoader导入数据
1.5.2 比较CSVLoader和UnstructuredCSVLoader
1.6 网页文档的爬取和解析
1.6.1 用WebBaseLoader快速解析网页
1.6.2 用UnstructuredLoader细粒度解析网页
1.7 Markdown文件标题和结构
1.8 PDF文件的文本格式、布局识别及表格解析
1.8.1 PDF文件加载工具概述
1.8.2 用PyPDFLoader进行简单文本提取
1.8.3 用Marker工具把PDF文档转换为Markdown格式
1.8.4 用UnstructuredLoader进行结构化解析
1.8.5 用PyMuPDF和坐标信息可视化布局
1.8.6 用UnstructuredLoader解析PDF页面中的表格
1.8.7 用ParentID整合同一标题下的内容
1.9 小结
第2章 文本分块
2.1 为什么分块非常重要
2.1.1 上下文窗口限制了块最大长度
2.1.2 分块大小对检索精度的影响
2.1.3 分块大小对生成质量的影响
2.1.4 不同的分块策略
2.1.5 用ChunkViz工具可视化分块
2.2 按固定字符数分块
2.2.1 LangChain中的CharacterTextSplitter工具
2.2.2 在LlamaIndex中设置块大小参数
2.3 递归分块
2.4 基于特定格式分块
2.5 基于文件结构或语义分块
2.5.1 利用Unstructured工具基于文档结构分块
2.5.2 利用LlamaIndex的SemanticSplitterNodeParser进行语义分块
2.6 与分块相关的高级索引构建技巧
2.6.1 带滑动窗口的句子切分
2.6.2 分块时混合生成父子文本块
2.6.3 分块时为文本块创建元数据
2.6.4 在分块时形成有级别的索引
2.7 小结
第3章 信息嵌入
3.1 嵌入是对外部信息的编码
3.2 从早期词嵌入模型到大模型嵌入
3.2.1 早期词嵌入模型
3.2.2 上下文相关的词嵌入模型
3.2.3 句子嵌入模型和SentenceTransformers框架
3.2.4 多语言嵌入模型
3.2.5 图像和音频嵌入模型
3.2.6 图像与文本联合嵌入模型
3.2.7 图嵌入模型和知识图谱嵌入模型
3.2.8 大模型时代的嵌入模型
3.3 现代嵌入模型:OpenAI、Jina、Cohere、Voyage
3.3.1 用OpenAI的text-embedding-3-small进行产品推荐
3.3.2 用jina-embeddings-v3模型进行跨语言数据集聚类
3.3.3 MTEB:海量文本嵌入基准测试
3.3.4 各种嵌入模型的比较及选型考量
3.4 稀疏嵌入、密集嵌入和BM25
3.4.1 利用BM25实现稀疏嵌入
3.4.2 BGE-M3模型:稀疏嵌入和密集嵌入的结合
3.5 多模态嵌入模型:Visualized_BGE
3.6 通过LangChain、LlamaIndex等框架使用嵌入模型
3.6.1 LangChain提供的嵌入接口
3.6.2 LlamaIndex提供的嵌入接口
3.6.3 通过LangChain的Caching缓存嵌入
3.7 微调嵌入模型
3.8 小结
第4章 向量存储
4.1 向量究竟是如何被存储的
4.1.1 从LlamaIndex的设计看简单的向量索引
4.1.2 向量数据库的组件
4.2 向量数据库中的索引
4.2.1 FLAT
4.2.2 IVF
4.2.3 量化索引
4.2.4 图索引
4.2.5 哈希技术
4.2.6 向量的检索(相似度度量)
4.3 主流向量数据库
4.3.1 Milvus
4.3.2 Weaviate
4.3.3 Qdrant
4.3.4 Faiss
4.3.5 Pinecone
4.3.6 Chroma
4.3.7 Elasticsearch
4.3.8 PGVector
4.4 向量数据库的选型与测评
4.4.1 向量数据库的选型
4.4.2 向量数据库的测评
4.5 向量数据库中索引和搜索的设置
4.5.1 Milvus向量操作示例
4.5.2 选择合适的索引类型
4.5.3 选择合适的度量标准
4.5.4 在执行搜索时度量标准要与索引匹配
4.5.5 Search和Query:两种检索方式
4.6 利用Milvus实现混合检索
4.6.1 浮点向量、稀疏浮点向量和二进制向量
4.6.2 混合检索策略实现
4.6.3 利用Milvus实现混合检索系统
4.7 向量数据库和多模态检索
4.7.1 利用Visualized BGE模型实现多模态检索
4.7.2 利用ResNet-34提取图像特征并检索
4.8 RAG系统的数据维护及向量存储的增删改操作
4.8.1 RAG系统中的数据流维护与管理
4.8.2 Milvus中向量的增删改操作
4.8.3 向量数据库的集合操作
4.9 小结
第5章 检索前处理
5.1 查询构建——以自然语言提问
5.1.1 Text-to-SQL——从自然语言到SQL的转换
5.1.2 Text-to-Cypher——从自然语言到图数据库查询
5.1.3 Self-query Retriever——自动从查询中生成元数据过滤条件
5.2 查询翻译——更好地阐释用户问题
5.2.1 查询重写——将原始问题重构为合适的形式
5.2.2 查询分解——将查询拆分成多个子问题
5.2.3 查询澄清——逐步细化和明确用户的问题
5.2.4 查询扩展——利用HyDE生成假设文档
5.3 查询路由——找到正确的数据源
5.3.1 逻辑路由——决定查询的路径
5.3.2 语义路由——选择相关的提示词
5.4 小结
第6章 索引优化
6.1 从小到大:节点-句子滑动窗口和父子文本块
6.1.1 节点-句子滑动窗口检索
6.1.2 父子文本块检索
6.2 粗中有细:利用IndexNode和RecursiveRetriever构建从摘要到细节的索引
6.3 分层合并:HierarchicalNodeParser和RAPTOR
6.3.1 利用HierarchicalNodeParser生成分层索引
6.3.2 利用RAPTOR递归生成多层级索引
6.4 前后串联:通过前向 / 后向扩展链接相关节点
6.5 混合检索:提高检索准确性和扩大覆盖范围
6.5.1 利用Ensemble Retriever结合BM25和语义检索
6.5.2 利用MultiVectorRetriever实现多表示索引
6.5.3 混合查询和查询路由
6.6 小结
第7章 检索后处理
7.1 重排
7.1.1 RRF重排
7.1.2 Cross-Encoder重排
7.1.3 ColBERT重排
7.1.4 Cohere重排和Jina重排
7.1.5 RankGPT和RankLLM
7.1.6 时效加权重排
7.2 压缩
7.2.1 Contextual Compression Retriever
7.2.2 利用LLMLingua压缩提示词
7.2.3 RECOMP方法
7.2.4 Sentence Embedding Optimizer
7.2.5 通过Prompt Caching记忆长上下文
7.3 校正
7.4 小结
第8章 响应生成
8.1 通过改进提示词来提高大模型输出质量
8.1.1 通过模板和示例引导生成结果
8.1.2 增强生成的多样性和全面性
8.1.3 引入事实核查机制以提升真实性
8.2 通过输出解析来控制生成内容的格式
8.2.1 LangChain输出解析机制
8.2.2 LlamaIndex输出解析机制
8.2.3 OpenAI的JSON模式和结构化输出
8.2.4 Pydantic解析
8.2.5 Function Calling解析
8.3 通过选择大模型来提高输出质量
8.4 生成过程中的检索结果集成方式
8.4.1 输入层集成
8.4.2 输出层集成
8.4.3 中间层集成
8.5 Self-RAG:自我反思式生成
8.6 RRR:动态生成优化
8.7 小结
第9章 系统评估
9.1 RAG系统的评估体系
9.1.1 RAG的评估数据集
9.1.2 检索评估和响应评估
9.1.3 RAG TRIAD:整体评估
9.2 检索评估指标
9.2.1 精确率
9.2.2 召回率
9.2.3 F1分数
9.2.4 平均倒数排名
9.2.5 平均精确率
9.2.6 P@K
9.2.7 文档精确率、页面精确率和位置文档精确率
9.3 响应评估指标
9.3.1 基于n-gram匹配程度的指标
9.3.2 基于语义相似性的指标
9.3.3 基于忠实度或扎实性的指标
9.4 RAG系统的评估框架
9.4.1 使用RAGAS评估RAG系统
9.4.2 使用TruLens实现RAG TRIAD评估
9.4.3 DeepEval:强大的开源大模型评估框架
9.4.4 Phoenix:交互式模型诊断分析平台
9.5 小结
第10章 复杂RAG范式
10.1 GraphRAG:RAG和知识图谱的整合
10.2 上下文检索:突破传统RAG的上下文困境
10.3 Modular RAG:从固定流程到灵活架构的跃迁
10.4 Agentic RAG:自主代理驱动的RAG系统
10.5 Multi-Modal RAG:多模态检索增强生成技术
10.6 小结
参考文献
后记 一期一会
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜