LangChain实战派:大语言模型+LangChain+向量数据库
  • 推荐0
  • 收藏0
  • 浏览21

LangChain实战派:大语言模型+LangChain+向量数据库

  • 书  号:9787121490682
  • 出版日期:2024-11-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:博文小编
《LangChain实战派:大语言模型+LangChain+向量数据库》采用“知识点+实战”的编写方式,共包含28个基础实战和1个综合性实战,旨在深入解析大语言模型应用开发的核心知识。每个知识点的介绍均遵循清晰的逻辑脉络:介绍概念、阐述应用原理、说明使用方法、探讨选择该方法的理由、提供优化建议,并且分享最佳实践案例。
《LangChain实战派:大语言模型+LangChain+向量数据库》适合对LangChain感兴趣的读者阅读。
介绍的是LangChain首个稳定版本,采用“知识点+实战”的编写形式,确保理论与实践相结合。
龙中华
10多年来一直在某一线互联网公司担任技术负责人,在大模型应用落地方面有丰富的经验,著有多本畅销书。
写作初衷
为满足本公司人工智能团队的培训需求,笔者曾编写了若干个培训文档,但这些文档多为应对临时需求而编写,内容较为零散,不便于新同事系统学习。虽然官网文档质量上乘,但其知识点的递进与串联不够理想,不易被新同事理解。鉴于当时市场上缺乏关于大语言模型应用开发和向量数据库的图书,笔者决定对这些培训文档进行整理,反复推敲章节逻辑、知识点串联及实例实用性,编写本书。
本书特色
版本新:本书介绍的是LangChain首个稳定版本。
体例科学:采用“知识点+实战”的编写形式,确保理论与实践相结合。
实例丰富:包含28个基础实战和1个综合性实战,实战性强。
可在本地运行:所有实战的代码均可在本地运行,无须担心网络问题,方便学习与测试。
技术全面:详细介绍了LangChain的Model I/O、Chain、Retrieval、Memory、Agent和Callback模块,讲解了向量数据库和大语言模型的基础知识,介绍了 LangSmith、LangGraph和LangServe。
适用读者
阅读本书无须掌握人工智能或大语言模型的理论背景,也无须掌握向量、预训练、微调等专业知识。但你应具备一定的Python/JavaScript基础。
本书面向具有 Python/JavaScript基础的开发者、对人工智能及应用开发感兴趣的人士,以及想了解LangChain或大语言模型应用开发的读者。对于探索人工智能应用开发的团队,本书亦具有参考价值。
致谢
感谢吴宏伟老师及电子工业出版社的各位老师对本书的付出。
也要感谢 LangChain 开发团队和所有开源贡献者的努力,LangChain 开发团队提供了丰富的官方文档和注释详尽的开源代码,为本书的撰写提供了重要参考。
人工智能领域技术深舆,本书受限于篇幅和笔者能力,难免存在疏漏之处,敬请广大读者批评指正,笔者将虚心接受并不断改进。
联系笔者请发E-mail到363694485@qq.com。

龙中华
2024年5月

目录

入 门 篇
第1章 认识LLM应用开发 2
1.1 LLM 2
1.1.1 LLM的分类 2
1.1.2 发展历程 3
1.1.3 应用领域 4
1.1.4 面临的挑战 4
1.2 LLM应用开发 5
1.2.1 LLM应用开发前景 6
1.2.2 LLM应用开发的技术方向 7
1.3 LangChain 8
1.3.1 认识LangChain 8
1.3.2 LangChain的价值 9
1.3.3 其他开发框架 10
第2章 搭建环境并实现简单的应用 12
2.1 搭建环境 12
2.1.1 搭建开发环境 12
2.1.2 搭建LLM环境 13
2.2 【实战】实现问答应用——基于基础模型 14
2.3 【实战】实现翻译应用——基于聊天模型和指令模板 15

基 础 篇
第3章 LangChain基础 20
3.1 认识LangChain 20
3.1.1 LangChain的架构 20
3.1.2 LangChain的库 20
3.1.3 LangChain的模块 21
3.2 LangChain的调试 21
3.2.1 跟踪工具LangSmith 22
3.2.2 【实战】调试LLM应用 22
3.3 LangChain的回退 25
3.3.1 【实战】处理LLM调用API的错误 26
3.3.2 【实战】处理序列的回退 28
3.3.3 【实战】处理长输入 30
3.3.4 回退到更好的模型 31
3.4 LangChain的回调 32
3.4.1 认识回调处理程序 32
3.4.2 认识异步回调 33
3.4.3 认识标签 35
3.4.4 【实战】自定义回调 35
3.4.5 【实战】使用回调记录日志 36
3.4.6 【实战】处理多个回调 36
3.5 隐私保护 38
第4章 管理LLM的接口和解析输出 41
4.1 认识LLM的接口 41
4.1.1 认识基础模型的接口 41
4.1.2 认识聊天模型的接口 43
4.1.3 使用异步API 45
4.1.4 认识流式处理 46
4.1.5 跟踪令牌的使用情况 47
4.1.6 认识缓存 50
4.1.7 【实战】缓存LLM生成的内容 50
4.1.8 序列化LLM配置 52
4.2 认识OpenAI适配器 54
4.3 认识ModelLaboratory 56
4.4 认识输出解析器 57
4.4.1 列表解析器 58
4.4.2 日期时间解析器 59
4.4.3 枚举解析器 59
4.4.4 JSON解析器 60
4.4.5 输出修正解析器 62
4.4.6 重试解析器 62
4.4.7 XML解析器 64
4.5 【实战】自定义输出解析器 67
4.5.1 在LCEL中使用RunnableGenerator类 67
4.5.2 继承解析器的基类来自定义输出解析器 68
第5章 指令——激活LLM能力的钥匙 72
5.1 认识指令 72
5.1.1 指令的概念 72
5.1.2 指令的构成要素 73
5.2 编写指令的18个策略 73
5.3 防御恶意攻击 81
第6章 指令模板和示例选择器 84
6.1 指令模板 84
6.1.1 认识指令模板 84
6.1.2 聊天消息指令模板的类型 86
6.2 指令模板的应用 88
6.2.1 格式化指令模板 88
6.2.2 自定义指令模板 90
6.2.3 验证指令模板 90
6.2.4 序列化指令模板 91
6.2.5 分隔指令模板 92
6.2.6 使用指令管道组合指令 93
6.2.7 【实战】组合指令 95
6.3 示例选择器 97
6.4 少样本指令模板 97
6.4.1 认识少样本指令模板 97
6.4.2 在聊天模型中使用少样本指令模板 103
第7章 使用外部数据 108
7.1 文档加载器 108
7.1.1 认识文档加载器 108
7.1.2 【实战】使用文档加载器 109
7.2 文本拆分器 114
7.2.1 认识文本拆分器 114
7.2.2 拆分文本和代码 116
7.3 检索器 118
7.4 索引 121
第8章 集成向量数据库,实现对向量的操作 123
8.1 向量数据库 123
8.1.1 认识向量数据库 123
8.1.2 向量数据库的发展机遇 125
8.1.3 常见的向量数据库 127
8.2 文本嵌入模型和缓存向量 128
8.2.1 文本嵌入模型 128
8.2.2 缓存向量 130
8.2.3 【实战】伪造嵌入模型 131
8.3 开源的向量数据库Chroma 132
8.3.1 支持的嵌入模型 133
8.3.2 认识客户端 135
8.3.3 数据操作方法 138
8.3.4 使用集合 141
8.4 【实战】使用LangChain和Chroma操作向量 148
8.4.1 使用Chroma存储和查询向量 148
8.4.2 将向量保存到磁盘上 149
8.4.3 使用Chroma客户端 150
8.4.4 更新和删除向量 151
8.4.5 使用OpenAIEmbeddings嵌入向量 151
8.4.6 使用带分数的相似性搜索 152
8.4.7 使用MMR优化搜索结果 153
8.4.8 根据元数据筛选集合 153

进 阶 篇
第9章 使用内存保持应用状态 156
9.1 认识内存和聊天消息历史记录 156
9.1.1 认识内存 156
9.1.2 认识聊天消息历史记录类 157
9.2 内存的类型 157
9.2.1 会话内存 157
9.2.2 滑动窗口会话内存 158
9.2.3 实体内存 159
9.2.4 知识图谱会话内存 161
9.2.5 会话摘要内存 163
9.2.6 会话摘要缓冲内存 165
9.2.7 会话令牌缓冲内存 166
9.2.8 向量存储检索内存 167
9.3 【实战】自定义会话内存 169
9.4 【实战】组合多个内存类 172
第10章 使用链构造调用序列 175
10.1 【实战】使用链接入LLM 175
10.2 链 176
10.2.1 认识链 176
10.2.2 基础链 180
10.2.3 文档链 181
10.2.4 chain_type参数 182
10.2.5 链的调用方法 183
10.2.6 链的安全 184
10.3 链的序列化和反序列化 185
10.4 在链中使用内存 188
10.4.1 了解在链中使用内存 188
10.4.2 【实战】为会话链添加内存 189
10.4.3 【实战】为LLMChain添加内存 190
第11章 使用和自定义工具 195
11.1 认识工具 195
11.2 认识、使用和自定义内置工具 197
11.2.1 认识内置工具 197
11.2.2 使用内置工具 198
11.2.3 自定义内置工具 199
11.3 自定义工具 200
11.3.1 使用@tool装饰器 201
11.3.2 继承BaseTool类 202
11.3.3 使用StructuredTool类 204
11.3.4 处理工具错误 206
11.4 【实战】实现人工验证工具 207
11.5 【实战】实现多输入工具 209
第12章 使用代理串联工具 212
12.1 代理 212
12.2 代理类型和工具调用代理 214
12.2.1 代理类型 214
12.2.2 【实战】实现工具调用代理 215
12.3 自定义代理操作和配置 216
12.3.1 处理解析错误 216
12.3.2 处理代理运行超时 217
12.3.3 处理流式处理的输出 217
12.3.4 访问中间步骤 219
12.3.5 返回结构化的内容 219
12.3.6 限制最大迭代次数 220
第13章 使用LCEL将原型直接投入生产 224
13.1 LCEL 224
13.1.1 认识LCEL 224
13.1.2 LCEL的优势 225
13.1.3 【实战】使用LCEL链接指令模板、模型和输出解析器 225
13.1.4 Runnable接口 226
13.1.5 流式处理 229
13.1.6 基于输入的动态路由逻辑 229
13.2 LCEL链 229
13.3 消息历史和存储聊天消息 230
13.3.1 消息历史 230
13.3.2 【实战】存储聊天消息 232
13.4 基本体 235
13.4.1 链接可运行对象 235
13.4.2 输入与输出格式化 238
13.4.3 附加运行时参数 240
13.4.4 运行自定义函数 241
13.4.5 数据传递 244
13.4.6 向链状态添加值 244
13.4.7 运行时配置链 244
13.5 【实战】检查可运行对象 244
第14章 使用LangChain全家桶 247
14.1 LangSmith 247
14.2 LangServe 248
14.3 使用LangGraph构建有状态、多角色应用 249
14.3.1 认识LangGraph 249
14.3.2 认识流式处理 250
14.3.3 【实战】创建可视化执行图 251
14.3.4 【实战】创建节点和边,设置图的入口点和结束点 252

项目实战篇
第15章 【实战】使用RAG构建问答智能体 256
15.1 整体架构 256
15.1.1 项目介绍 256
15.1.2 核心组件 256
15.2 实现索引和检索 257
15.2.1 实现索引 257
15.2.2 实现检索 258
15.3 生成回答 258
15.3.1 创建指令模板 259
15.3.2 定义链 259
15.4 实现溯源 260
15.5 实现流式传输最终输出 261
15.6 实现结构化数据的检索和生成 261
15.6.1 连接数据库 261
15.6.2 将问题转换为SQL查询语句 262
15.6.3 执行SQL查询 262
15.6.4 生成最终答案 263

读者评论