本书旨在用传统前后端开发过程中开发者熟悉的词汇与术语对AI应用开发的专业知识进行深入浅出的讲解,使开发者能够从0到1入门AI应用开发。本书不拘泥于讲解单一编程语言、单一模型和单一框架,而是尽可能完整地展现不同技术方案的优劣、技术选型时的考量和技术生态的全貌。书中涵盖当下多种热门类型AI应用的开发,从OpenAI API调用到RAG开发,从MCP服务器创建到智能体开发。本书的内容编排循序渐进,前半部分聚焦“入门”,通过控制代码复杂度及详细的基础知识讲解,帮助读者快速熟悉AI应用开发中的概念与常见模式;后半部分聚焦“进阶”,将向量数据库、第三方云服务等技术组件引入示例,并尝试通过构建完整的端到端应用将知识点串起来。此外,本书不仅包含业务代码,还涉及AI应用的调试、监控、部署乃至最佳实践,力求带给读者可工作的上线代码。
本书非常适合想用AI提升产品竞争力的前后端开发者、需要进行快速概念验证的技术经理与创业者,以及希望将大模型接入现有系统的架构师与运维工程师阅读。读者无须拥有与AI应用开发相关的经验,无须掌握Python或者Node.js编程语言,只要具有编程基础知识即可畅读本书。
这是一本面向开发者的AI应用开发实战指南:
- 扎根入门技术人群:无须读者提前拥有大模型应用的开发经验,甚至无须读者事先掌握Python和JavaScript语言,就可以从零开始学习并掌握满足市场需求的大模型应用开发技能。
- 满足常见业务需求:涵盖RAG应用开发、工作流制作等常见业务场景,注重端到端交付,力求帮助开发者体验真实开发环境中的约束和挑战。
- 注重开发实战:参考行业趋势与社区共识进行技术选型,试图弥补从开发环境到生产环境的鸿沟,不仅关注功能实现,而且会展示如何将其部署上线,对其进行运维。
- 拥有技术广度:采用不同技术框架来开发不同类型的大模型应用,力求展现大模型应用开发领域的全貌及各类实践,为读者提供全面的实践视角,避免局限于单一技术栈。
李光毅 曾就职于爱奇艺、百度、知乎等大型互联网公司,目前就职于Thoughtworks,
任高级咨询师。从事软件开发工作超过10年,具备丰富的大型系统架构设计和团队管理经验。著有《高性能响应式Web开发实战》,译有《编程原则》。现为播客“程序员新声”主播,其个人公众号为“技术圆桌”。
目 录
第 1章 理解模型 1
1.1 如何学习“魔法” 1
1.2 Teachable Machine 2
1.2.1 打造自己的模型 3
1.2.2 部署代码 6
1.3 线性模型 9
1.3.1 机器学习是如何工作的 9
1.3.2 代码实现 12
1.4 神经网络雏形 13
1.4.1 使用代码实现 14
1.4.2 为什么需要神经“网络” 17
第 2章 环境配置与基础语法 18
2.1 配置Python环境 18
2.1.1 安装Python 18
2.1.2 配置虚拟环境 21
2.1.3 类库管理 24
2.2 Python快速入门 25
2.2.1 运行Python脚本 25
2.2.2 数据类型 25
2.2.3 缩进 27
2.2.4 函数的定义和使用 27
2.2.5 模块的使用 27
2.2.6 推导式 28
2.2.7 类型注解 28
2.3 配置Node.js环境 29
2.3.1 在macOS系统和Windows系统中安装Node.js 29
2.3.2 在Ubuntu系统中安装Node.js 30
2.4 Node.js快速入门 31
2.4.1 运行Node.js脚本 31
2.4.2 动态类型语言 31
2.4.3 package.json文件 32
2.4.4 Node.js模块系统 32
2.4.5 类库管理 33
2.4.6 异步编程 34
2.5 其他应知内容 36
2.5.1 cURL 36
2.5.2 YAML 37
第3章 制作一款音频转录工具 40
3.1 区分OpenAI、ChatGPT与大模型 40
3.2 集成OpenAI SDK 41
3.2.1 创建API密钥 41
3.2.2 使用API密钥 43
3.2.3 使用API密钥的注意事项 45
3.3 初试OpenAI SDK 45
3.3.1 发送请求 45
3.3.2 返回结果解析 46
3.3.3 计算token数量 49
3.4 通过REST风格的API调用OpenAI API 50
3.5 使用OpenAI SDK转录音频 52
3.5.1 读取音频文件 52
3.5.2 标记转录文字的时间戳 54
3.6 安装自己的Whisper模型 58
3.6.1 在本地安装Whisper模型 58
3.6.2 以命令行的方式运行Whisper 58
3.6.3 在代码中使用Whisper模型 60
第4章 AI助手开发 61
4.1 AI助手 61
4.1.1 创建AI助手 61
4.1.2 函数是如何工作的 64
4.1.3 调用AI助手 65
4.1.4 通过第三方获取城市气温 69
4.2 打造播客摘要生成助手 71
4.2.1 什么是播客摘要生成助手 71
4.2.2 创建播客摘要生成助手 71
4.2.3 响应OpenAI的流式返回 73
4.2.4 使用助手 75
4.3 创建HTTP服务器 76
4.3.1 引入Express.js 76
4.3.2 实现文件上传 78
4.3.3 完善路由 81
4.3.4 提升代码的健壮性 84
4.4 使用代码管理AI助手 85
4.4.1 引入GitHub Actions 86
4.4.2 编写工作流 87
4.4.3 编写部署脚本 91
4.4.4 看懂工作流 93
4.5 部署上线 94
4.5.1 创建守护进程 95
4.5.2 准备服务器 97
4.5.3 通过GitHub Actions部署上线 101
4.5.4 验证服务 103
第5章 使用Haystack开发AI应用 108
5.1 重新认识框架 108
5.1.1 为什么需要框架 108
5.1.2 何谓好的框架 109
5.1.3 也许你不需要框架 110
5.2 为什么选择Haystack 112
5.2.1 为什么不推荐LangChain 112
5.2.2 其他框架 115
5.2.3 迎接Haystack 117
5.3 初试Haystack 119
5.3.1 基本概念 119
5.3.2 初试组件与流水线 119
5.3.3 自定义组件 122
5.4 使用Haystack重构播客助手 124
5.4.1 使用Haystack进行重构 125
5.4.2 使用Gemini替代GPT模型 128
5.5 启用Haystack日志 132
5.6 启用Haystack追踪 136
5.6.1 启用追踪 136
5.6.2 与OpenTelemetry集成 138
5.6.3 与Langfuse集成 142
第6章 RAG应用开发 148
6.1 初试RAG技术 148
6.1.1 使用Chroma实现语义化搜索 149
6.1.2 元数据过滤 151
6.1.3 与OpenAI配合 153
6.2 向量数据库原理 154
6.2.1 余弦相似度 154
6.2.2 文本嵌入 156
6.2.3 对Chroma进行嵌入配置 157
6.3 长文本处理 159
6.3.1 分割数据 160
6.3.2 固定大小的分块策略 160
6.3.3 基于文档结构的分块策略 162
6.3.4 递归式分块策略 166
6.4 使用Haystack实现流水线 168
6.4.1 索引流水线 168
6.4.2 查询流水线 170
6.4.3 简化流水线 172
6.5 拓展流水线 173
6.5.1 索引数据 173
6.5.2 优化数据检索 179
第7章 接入第三方AI服务 184
7.1 Hugging Face 184
7.1.1 注册Hugging Face 184
7.1.2 调用Hugging Face推理服务 187
7.1.3 与Haystack集成 189
7.1.4 Hugging Face的服务类型 189
7.2 Together AI 190
7.2.1 注册Together AI服务 191
7.2.2 访问推理服务 193
7.2.3 函数调用 194
7.3 Pinecone 198
7.3.1 注册Pinecone 199
7.3.2 使用Pinecone 200
7.4 Cohere 207
7.4.1 注册Cohere 208
7.4.2 调用Cohere推理服务 209
7.4.3 在Haystack中使用Cohere模型 212
7.5 Railway 214
7.5.1 需要解决的问题 214
7.5.2 使用Railway部署我们的服务 215
7.6 博客存储流水线 220
7.6.1 下载文章 220
7.6.2 组装流水线 223
7.6.3 部署服务 225
第8章 微调模型 228
8.1 在OpenAI中进行微调 228
8.1.1 准备训练数据 228
8.1.2 通过界面进行微调 229
8.2 使用Google AI进行微调 234
8.2.1 使用Vertex AI Studio进行微调 234
8.2.2 通过API进行微调 240
第9章 智能体开发入门 244
9.1 OpenAI智能体 244
9.1.1 第 一个简单的智能体 244
9.1.2 任务转移 245
9.1.3 调用工具 246
9.1.4 借用智能体对播客摘要生成助手进行重构 249
9.2 自定义智能体处理流程 251
9.3 利用Cohere的Command模型开发智能体 255
9.3.1 准备工作 255
9.3.2 编写智能体 258
9.4 护栏 262
9.4.1 输入护栏 262
9.4.2 输出护栏 264
9.4.3 第三方护栏 265
9.5 模型上下文协议 268
9.5.1 MCP架构 268
9.5.2 MCP工具 269
9.5.3 使用已有的MCP服务器 272
第 10章 使用LangGraph构建智能体 276
10.1 一个简单的LangGraph应用 276
10.1.1 创建图对象 277
10.1.2 添加节点 278
10.1.3 stream_mode 279
10.2 在LangGraph中使用工具 280
10.2.1 简单的工具调用 280
10.2.2 复杂的工具调用 283
10.3 子图机制 285
10.3.1 简单子图 285
10.3.2 参数不兼容的情况 288
10.3.3 使用LangSmith对数据流进行 追踪 289
10.4 任务转移 291
10.4.1 智能体间的任务转移 291
10.4.2 监督者模式 294
10.5 一个复杂的图 296
10.5.1 在向量数据库中搜索 298
10.5.2 在网络上搜索 300
10.5.3 连接图 303
10.6 添加前端界面 305
10.6.1 LangGraph服务 305
10.6.2 前端 308
10.7 实现人机交互 312
10.7.1 简单的人机交互 312
10.7.2 借助CopilotKit实现人机 交互 314