目录
第一篇 生成式 AI 和 LlamaIndex 入门
第 1 章 大语言模型入门 2
1.1 生成式 AI 与大语言模型 3
1.1.1 什么是生成式 AI 3
1.1.2 什么是大语言模型 3
1.2 大语言模型在现代技术中的角色 5
1.3 大语言模型面临的挑战 7
1.4 使用 RAG 技术增强大语言模型 11
1.5 本章小结 13
第 2 章 LlamaIndex 生态概览 14
2.1 技术需求 14
2.2 优化语言模型—微调、RAG 和 LlamaIndex 的关系 15
2.2.1 RAG 是唯一的解决方案吗 16
2.2.2 LlamaIndex:构建可注入数据的大语言模型应用 17
2.3 渐进式揭示复杂性的优势 19
2.4 实践项目—个性化智能辅导系统 PITS 简介 21
2.5 配置开发环境 23
2.5.1 安装 Python 23
2.5.2 安装 Git 24
2.5.3 安装 LlamaIndex 25
2.5.4 注册 OpenAI 获取 API 密钥 25
2.5.5 Streamlit 快速构建和部署应用的理想工具 28
2.5.6 安装 Streamlit 29
2.5.7 完成环境配置 29
2.5.8 最终检查 30
2.6 熟悉 LlamaIndex 代码仓库的组织结构 31
2.7 本章小结 33
第二篇 LlamaIndex 从入门到实践
第 3 章 LlamaIndex 入门 36
3.1 技术需求 36
3.2 LlamaIndex 的核心构建块—文档、节点和索引 37
3.2.1 文档 37
3.2.2 节点 41
3.2.3 手动创建节点 42
3.2.4 从文档中提取节点 43
3.2.5 节点间的关系 45
3.2.6 为什么节点间的关系很重要 46
3.2.7 索引 47
3.2.8 检索和响应合成 49
3.2.9 查询引擎的工作原理 50
3.2.10 快速回顾关键概念 51
3.3 构建第 1 个交互式增强型大语言模型应用 52
3.3.1 借助 LlamaIndex 日志特性理解逻辑并调试应用 53
3.3.2 使用 LlamaIndex 定制大语言模型 54
3.3.3 三步完成大语言模型定制 55
3.3.4 Temperature 温度系数 56
3.3.5 如何使用 Settings 用于定制 58
3.4 动手实践—构建个性化智能辅导系统 PITS 59
3.5 本章小结 64
第 4 章 RAG 工作流中的数据整合 65
4.1 技术需求 65
4.2 通过 LlamaHub 导入数据 66
4.3 LlamaHub 概述 67
4.4 使用 LlamaHub 数据读取器导入内容 68
4.4.1 从网页导入数据 69
4.4.2 从数据库导入数据 70
4.4.3 从多种文件格式的数据源批量导入数据 72
4.5 将文档解析为节点 76
4.5.1 简单的文本切分器 76
4.5.2 高级的节点解析器 79
4.5.3 节点关系解析器 82
4.5.4 节点解析器和文本切分器的区别 83
4.5.5 理解 chunk_size 与 chunk_overlap 84
4.5.6 使用 include_prev_next_rel 包含关系 85
4.5.7 节点生成的三种实践方式 86
4.6 善用元数据优化上下文理解 88
4.6.1 摘要提取器 90
4.6.2 问答提取器 91
4.6.3 标题提取器 92
4.6.4 实体提取器 92
4.6.5 关键词提取器 94
4.6.6 Pydantic 程序提取器 95
4.6.7 Marvin 元数据提取器 95
4.6.8 自定义提取器 96
4.6.9 元数据越多越好吗 97
4.7 元数据提取的成本评估 98
4.7.1 遵循最佳实践以最小化成本 98
4.7.2 在真正运行前评估最大成本 99
4.8 通过元数据提取器保护隐私 101
4.9 通过数据导入流水线提高效率 104
4.10 处理包含文本和表格数据的文档 109
4.11 动手实践—将学习资料导入 PITS 项目 110
4.12 本章小结 112
第 5 章 LlamaIndex 索引详解 113
5.1 技术需求 113
5.2 索引数据概览 114
5.3 理解 VectorStoreIndex 116
5.3.1 VectorStoreIndex 使用示例 116
5.3.2 理解向量嵌入 118
5.3.3 理解相似度搜索 120
5.3.4 LlamaIndex 如何创建向量嵌入 124
5.3.5 如何选择合适的嵌入模型 125
5.4 索引持久化和重用 127
5.4.1 理解存储上下文 128
5.4.2 向量存储和向量数据库的区别 131
5.5 LlamaIndex 的其他索引类型 132
5.5.1 摘要索引 132
5.5.2 文档摘要索引 134
5.5.3 关键词表索引 136
5.5.4 树索引 139
5.5.5 知识图谱索引 143
5.6 使用 ComposableGraph 构建组合索引 146
5.6.1 ComposableGraph 的基本使用 147
5.6.2 ComposableGraph 的概念解释 148
5.7 索引构建和查询的成本评估 149
5.8 动手实践—为 PITS 项目的学习资料构建索引 154
5.9 本章小结 156
第三篇 索引数据的检索和使用
第 6 章 数据查询—上下文索引 158
6.1 技术需求 158
6.2 查询机制概述 159
6.3 基本检索器的原理 160
6.3.1 向量存储索引检索器 161
6.3.2 摘要索引检索器 163
6.3.3 文档摘要索引检索器 166
6.3.4 树索引检索器 168
6.3.5 关键词表索引检索器 172
6.3.6 知识图谱索引检索器 174
6.3.7 检索器的共同特点 178
6.3.8 检索机制的高效使用—异步操作 178
6.4 构建更高级的检索机制 179
6.4.1 朴素的检索方法 180
6.4.2 实现元数据过滤器 180
6.4.3 使用选择器实现更高级的决策逻辑 184
6.4.4 工具的重要性 186
6.4.5 转换和重写查询 188
6.4.6 生成更具体的子查询 190
6.5 密集检索和稀疏检索 193
6.5.1 密集检索 193
6.5.2 稀疏检索 194
6.5.3 在 LlamaIndex 中实现稀疏检索 196
6.5.4 探索其他高级检索方法 199
6.6 本章小结 200
第 7 章 数据查询—后处理和响应合成 201
7.1 技术需求 201
7.2 后处理器—对节点进行重排、转换和过滤 202
7.2.1 探索后处理器如何对节点进行过滤、转换和重排 203
7.2.2 相似度后处理器 205
7.2.3 关键词节点后处理器 207
7.2.4 前后节点后处理器 209
7.2.5 长文本记录后处理器 210
7.2.6 隐私信息屏蔽后处理器 211
7.2.7 元数据替换后处理器 212
7.2.8 句子嵌入优化后处理器 214
7.2.9 基于时间的后处理器 215
7.2.10 重排后处理器 217
7.2.11 关于节点后处理器的小结 222
7.3 响应合成器 222
7.4 输出解析技术 226
7.4.1 使用输出解析器提取结构化输出 227
7.4.2 使用 Pydantic 程序提取结构化输出 231
7.5 查询引擎的构建和使用 232
7.5.1 探索构建查询引擎的各种方法 232
7.5.2 查询引擎接口的高级用法 234
7.6 动手实践—在 PITS 项目中构建测验 241
7.7 本章小结 244
第 8 章 构建聊天机器人和智能体 246
8.1 技术需求 246
8.2 理解聊天机器人和智能体 247
8.2.1 聊天引擎 ChatEngine 249
8.2.2 不同的聊天模式 251
8.3 在应用中实现自主智能体 261
8.3.1 智能体的工具和 ToolSpec 类 261
8.3.2 智能体的推理循环 264
8.3.3 OpenAI 智能体 266
8.3.4 ReAct 智能体 271
8.3.5 如何与智能体互动 273
8.3.6 借助实用工具提升智能体 273
8.3.7 使用 LLMCompiler 智能体处理更高级的场景 278
8.3.8 使用底层智能体协议 API 281
8.4 动手实践—在 PITS 项目中实施对话追踪 284
8.5 本章小结 289
第四篇 定制化、提示工程与总结
第 9 章 LlamaIndex 项目定制与部署 292
9.1 技术需求 292
9.2 定制 RAG 组件 293
9.2.1 LLaMA 和 LLaMA 2 推动开源领域变革 294
9.2.2 使用 LM Studio 运行本地大语言模型 295
9.2.3 使用 Neutrino 或 OpenRouter 等服务智能路由大语言模型 302
9.2.4 自定义嵌入模型 304
9.2.5 利用 Llama Packs 实现即插即用 305
9.2.6 使用 Llama CLI 307
9.3 高级追踪和评估技术 309
9.3.1 使用 Phoenix 追踪 RAG 工作流 310
9.3.2 评估 RAG 系统 313
9.4 利用 Streamlit 进行部署 320
9.5 动手实践—部署指南 322
9.6 本章小结 328
第 10 章 提示工程指南和最佳实践 330
10.1 技术需求 330
10.2 为什么提示词是秘密武器 331
10.3 理解 LlamaIndex 如何使用提示词 334
10.4 自定义默认提示词 337
10.5 提示工程的黄金法则 342
10.5.1 表达的准确性和清晰度 342
10.5.2 提示的指导性 342
10.5.3 上下文质量 343
10.5.4 上下文数量 343
10.5.5 上下文排列 344
10.5.6 输出格式要求 344
10.5.7 推理成本 345
10.5.8 系统延迟 345
10.5.9 选择适合任务的大语言模型 345
10.5.10 创造有效提示词的常用方法 349
10.6 本章小结 352
第 11 章 结论与附加资源 353
11.1 其他项目和深入学习 353
11.1.1 LlamaIndex 示例集合 354
11.1.2 Replit 任务和挑战 357
11.1.3 LlamaIndex 社区的力量 358
11.2 要点总结、展望和勉励 359
11.2.1 生成式 AI 背景下 RAG 的未来展望 360
11.2.2 一段值得深思的哲理分享 363
11.3 本章小结 364