> ## Documentation Index
> Fetch the complete documentation index at: https://www.yuan111.asia/doc/llms.txt
> Use this file to discover all available pages before exploring further.

# 小林学 LangChain：从"能说话"到"会干活"的冒险

> 小林学 LangChain：沉浸式叙事教程，从第一次对话到能做出会记住、会调工具、会自主决策的 Agent。

# 小林学 LangChain：从"能说话"到"会干活"的冒险

> 这是一套**沉浸式叙事教程**：跟着小林，一起踩坑、一起顿悟、一起把 LangChain 从零学到能做出"会记住、会调工具、会自主决策"的 Agent。 所有技术细节都是真的（代码可运行、数据来自实测），只有小林这个人是虚构的——或者说，他就是你。

***

## 这套教程怎么读

1. 按编号顺序读（01 → 18），每篇 20\~40 分钟。
2. 每篇都跟着小林的**验证步骤**亲手跑一遍代码——看到同样的输出，知识才是你的。
3. 每篇末尾都有"边界"和"复现信号"，回答"什么时候不适用"和"换个场景怎么认出来"。
4. 配套代码：在 `narrative-course/code/`（按篇号编号，与教程一一对应），运行环境 `learn-langchain`。

## 故事线（小林从哪来，要到哪去）

小林是公司的后端工程师，老板让他做一个"基于公司文档自动回答问题"的知识库机器人。他一开始以为这是"调个接口就能搞定的事"，直到他发现：

* 他花了一个周末读 API 文档、拼 JSON、处理各种报错——结果换一个模型供应商，代码全废。
* 模型的"记忆"是个天大的谎言——它每次都是金鱼脑。
* 让它"干活"（调工具）不是给它写 if-else，是给它一副鞍具。
* 最后他发现，自己手搓的所有东西，一个叫 LangGraph 的框架早就内置了。

这一路，他经历了 18 次顿悟。这套教程就是他那 18 次顿悟的现场回放。

## 目录

> 逻辑顺序 = 认知依赖：先懂"模型返回什么 / 怎么构造输入"（01~~03），再学对话能力（04~~06）、知识库（07~~09）、助手与编排（10~~11），然后源码总览（14~~16）、实战与上线（17~~18）。

| 篇  | 标题                                                                                  | 小林学会了什么                                                 | 配套代码（code/）                                               |
| -- | ----------------------------------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------- |
| 00 | [环境准备](/doc/doc/narrative-course/00-环境准备)                                               | Miniconda + learn-langchain 环境 + langchain 包拆分哲学 + .env | `00_env_setup.py`                                         |
| 01 | [第一次对话](/doc/doc/narrative-course/01-对话)                                                | 为什么所有模型都长一个样                                            | `01_first_chat.py`                                        |
| 02 | [AIMessage 与三协议](/doc/doc/narrative-course/02-AIMessage与三协议)                            | 模型返回的统一信封                                               | —                                                         |
| 03 | [模板与多轮历史](/doc/doc/narrative-course/03-模板与多轮历史)                                         | ChatPromptTemplate、MessagesPlaceholder、为什么 append       | —                                                         |
| 04 | [金鱼脑的真相](/doc/doc/narrative-course/04-记忆)                                               | 模型没有记忆，记忆在你手里                                           | `04_ai_memory.py`                                         |
| 05 | [打字机与结构化](/doc/doc/narrative-course/05-流式与结构化)                                          | 流式输出 + 让模型交出 JSON                                       | `05_streaming.py` `05_structured.py`                      |
| 06 | [看得见的思考](/doc/doc/narrative-course/06-思考模式)                                             | 打开模型的思考过程                                               | `06_thinking.py`                                          |
| 07 | [把文档切成小块](/doc/doc/narrative-course/07-文档切分)                                            | Document + TextSplitter                                 | `07_load_split.py`                                        |
| 08 | [让机器懂"意思相近"](/doc/doc/narrative-course/08-向量化与向量库)                                      | Embedding + Chroma                                      | `08_embed_search.py`                                      |
| 09 | [知识库问答](/doc/doc/narrative-course/09-RAG)                                               | RAG 完整链路（老板要的东西）+ 重排序                                   | `09_rag.py` `09_rag_rerank.py`                            |
| 10 | [会记住、会干活的助手](/doc/doc/narrative-course/10-记忆工具Agent)                                    | Memory + Tools + Agent                                  | `10_memory.py` `10_tools.py` `10_agent.py`                |
| 11 | [从流水线到会转弯的图](/doc/doc/narrative-course/11-LangGraph)                                    | LangGraph：状态、节点、边                                       | `11_langgraph.py` `11_chat_cli.py` `mm11_memory_store.py` |
| 12 | [手搓 create\_agent](/doc/doc/narrative-course/12-手搓create_agent)                         | 模型↔工具循环画成图                                              | —                                                         |
| 13 | [记忆、暂停与进度](/doc/doc/narrative-course/13-记忆暂停与进度)                                        | checkpointer / interrupt / stream                       | —                                                         |
| 14 | [并发与网络模型](/doc/doc/narrative-course/14-并发与网络模型)                                         | 线程池 / 事件循环 / httpx：LangChain 怎么调度                       | —                                                         |
| 15 | [LangGraph 怎么利用 langchain\_core](/doc/doc/narrative-course/15-LangGraph与langchain_core) | 图踩在 core 肩膀上：Runnable/消息/序列化                            | —                                                         |
| 16 | [langchain\_core 全地图](/doc/doc/narrative-course/16-langchain_core地图)                    | 地基长什么样                                                  | —                                                         |
| 17 | [实战：给真实政策文件做问答](/doc/doc/narrative-course/17-十五五实战)                                     | 把学的一切用在一份真文件上                                           | `07_load_split.py` `08_embed_search.py`                   |
| 18 | [后端接口：把链变成 API](/doc/doc/narrative-course/18-后端接口)                                      | FastAPI + uvicorn 暴露 API：同步/异步/桥接                       | `18_api.py`                                               |

***

## 小林的人生信条（也是这套教程的方法论）

1. **不背结论，背过程**——"我当时以为……试了发现不对……后来才明白"比"结论是 X"有用一百倍。
2. **每个知识都要能验证**——不能跑出结果的"知识"是幻觉。
3. **先要能用，再问原理**——先把代码跑通，再回来看它为什么这么设计。

现在，翻到[第一篇：第一次对话](/doc/doc/narrative-course/01-对话)。小林的第一行代码，就是从一段让他血压升高的 curl 开始的。
