从环境安装,到快速入门,再到 Agent 进阶。不是“看懂文档”,而是“真的能跑起来、真的知道为什么这样设计”。如果你最近也在学 LangChain,大概率经历过这几个阶段:- 勉强跑通一个 demo,又不明白 Agent 到底比普通调用强在哪
- 听过工具调用、结构化输出、记忆、中间件、动态模型,但脑子里一直像一锅粥
我最近正好用 3 个 Notebook,把这条链路完整走了一遍:【具体代码后续推送公网】1.0.install.ipynb:先把环境装明白2.1.入门.ipynb:先跑通一个最小 LangChain 应用3.2.agent.ipynb:再去理解 Agent、工具、记忆、中间件、动态模型LangChain 真正难的不是 API,而是你是否建立了“从模型调用到 Agent 工作流”的整体认知。
这篇文章,我就按这个顺序,把这 3 份 Notebook 串起来讲清楚。
一、别急着写 Agent,先把环境这件事搞对
fromlangchain.agentsimportcreate_agent
- 明明装了包,Jupyter 还是 import 不到
所以 0.install.ipynb 做的第一件事很对:```python
import os
for key in ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY']:
os.environ.pop(key, None)
```
因为很多机器上默认挂了代理,结果 pip、API 请求、Jupyter 内核通信都可能被影响。你以为是 LangChain 有问题,实际上是网络链路在给你使绊子。
2. 安装 LangChain 和 OpenAI 集成!pip install -U langchain -i https://pypi.tuna.tsinghua.edu.cn/simple !pip install -U langchain-openai !uv add langchain !uv add langchain-openai |
如果你只是临时试验,pip 很快; 如果你希望这个项目能长期维护,uv 会更舒服。3. 一定要给虚拟环境单独注册 Jupyter KernelNotebook 中的做法是:
```python
!python -m venv learn-python
!./learn-python/bin/python -m pip install ipykernel
!./learn-python/bin/python -m ipykernel install --user --name learn-python --display-name "Python (learn-python)"
```
为什么这一步重要?
因为很多人嘴上说“我已经在 venv 里安装过了”,但 Notebook 实际运行的还是系统 Python。
结果就是:
学 LangChain 的第一步,不是写代码,而是把 Python 环境、依赖管理、Notebook 内核统一起来。不然你后面遇到的很多“LangChain 问题”,本质上都不是 LangChain 的问题。
二、快速入门:先跑一个最小可用的 Agent
到了 1.入门.ipynb,重点就从“装环境”切到了“让 LangChain 真正跑起来”。这部分最先做的事,是初始化模型。
1. 用 init_chat_model() 初始化模型```python
from langchain.chat_models import init_chat_model
model = init_chat_model(
model="gpt-4o-mini",
base_url="http://",
api_key="sk-",
temperature=0.5,
max_tokens=1000,
timeout=30,
)
```
这里有一个很实用的点:它不是死绑 OpenAI 官方接口,而是保留了:```python
defget_weather(city: str) -> str:
returnf"{city}阳光明媚,晴,东风1级!"
```
然后直接创建 Agent:
```python
from langchain.agents import create_agent
agent = create_agent(
model,
tools=[get_weather],
system_prompt="你是一个查询天气的助手",
)
```
```python
agent.invoke(
{"messages": [{"role": "user", "content": "北京的天气怎么样"}]}
)
```
LangChain 不是只包了一层模型调用,而是在“模型 + 工具 + 提示词”之上,给你一个可扩展的交互框架。
很多人第一次写 LangChain,会觉得它和直接调 OpenAI SDK 差别不大。其实差别在于:
·用 LangChain:你是在“搭一个可扩展的 AI 应用骨架”这个骨架一开始可能只是天气查询,后面却可以慢慢长成:所以“快速入门”的价值,不是做一个天气 demo,而是先把骨架搭起来。三、LangChain 不只是“能问问题”,还可以接上下文
在 1.入门.ipynb 里,后面开始往上叠能力了。这里最重要的一步是:引入运行时上下文。
1. 用 context_schema 传用户上下文```python
from dataclasses import dataclass
from langchain.tools import ToolRuntime
@dataclass
classUserInfo:
local_code: str
```
然后做了一个工具:
```python
@tool
defget_user_location(runtime: ToolRuntime[UserInfo]) -> str:
local_code = runtime.context.local_code
if local_code == "bj":
return"北京"
elif local_code == "sh":
return"上海"
return"北京"
```
创建 Agent 时加上:
```python
agent = create_agent(
model=model,
system_prompt="你是查询天气的助手,客户可以指定你的名字",
tools=[get_user_location, get_weather],
context_schema=UserInfo,
)
```
调用时再传:
```python
response = agent.invoke(
{"messages": [{"role": "user", "content": "今天的天气怎么样?"}]},
config={"configurable": {"thread_id": "1"}},
context=UserInfo(local_code="sh")
)
```
它意味着 Agent 的能力不再只是“看用户当前说了什么”,而是还能利用:这就让 AI 不再是一个“公共大喇叭”,而更像一个“带上下文意识的应用”。如果说前面的模型调用像是在跟一个陌生客服聊天, 那加了 context_schema 之后,就像客服系统里已经弹出了你的资料卡:四、结构化输出:别让模型只会“说人话”,要让它会“交数据”
模型回答了一大段,内容看起来很像你要的,但程序不好接。
比如你真正想要的是:
这时就需要结构化输出。
```python
@dataclass
classResponseFormat:
punny_response: str
weather_conditions: str | None = None
```
然后调用时加:
```python
response = agent.invoke(
{"messages": [{"role": "user", "content": "今天的天气怎么样?"}]},
config=config,
context=UserInfo(local_code="sh"),
response_format=ResponseFormat
)
让模型返回的结果更像后端接口,而不是一段散文。
这对于真实业务特别重要,因为你的程序后面可能要继续做:
这是我学 LangChain 之后一个很深的体会。五、记忆:Agent 到底怎样“记住你说过的话”?
到了 1.入门.ipynb 的后半段,开始进入很多人最感兴趣的一部分:记忆。```python
from langgraph.checkpoint.memory import InMemorySaver
memory = InMemorySaver()
```
创建 Agent 时带上:
```python
agent = create_agent(
model=model,
system_prompt="你是查询天气的助手,客户可以指定你的名字",
tools=[get_user_location, get_weather],
context_schema=UserInfo,
checkpointer=memory,
)
```
然后在调用时传入同一个 `thread_id`:
```python
config = {"configurable": {"thread_id": "two"}}
```
如果没有一致的 thread_id,Agent 根本不知道两次调用是不是同一个会话。
所以很多人说“为什么我加了 memory,模型还是记不住?”
答案往往是:
checkpointer 像聊天记录数据库, thread_id 像这个聊天窗口的会话编号。缺一个都不行。
4. 这也是 LangChain 和“裸模型调用”的一个关键区别普通模型调用,通常是“来一问答一问”; Agent + Memory,才开始有点像真正的助手:六、真正难的部分:Agent 到底是什么?
到了 2.agent.ipynb,整件事才真正进入“从会用,到理解”的阶段。这部分我最喜欢的一句话总结是:
Agent = 模型(Model) + 工具(Tools) + 循环(Loop)
很多人第一次接触 Agent,会把它想得特别神秘。
其实官方文档的核心意思非常朴素:
这个比喻特别适合初学者,因为它一下子把抽象概念落到了真实场景里。七、工具调用:为什么 Agent 比普通模型更像“能干活的人”
Agent 最大的意义,不是让模型更会聊天,而是让模型具备“行动能力”。在文档里,这种模式通常会被归纳为 ReAct:
比如:
如果不能调用工具,它就只能“猜”; 如果能调用工具,它才开始真正“查”。这也是为什么 Agent 更适合真实业务。
八、动态模型:这才是很多人真正想学的 Agent 进阶能力
2.agent.ipynb 里最进阶、也最值得反复体会的一部分,是动态模型。很多人以为动态模型是:
LangChain 官方的意思非常明确:
动态模型是在运行时,通过中间件改 request.model。
也就是说,它是代码层面的路由逻辑,不是提示词暗示。
这才像真实项目,而不是课堂上那种“消息数大于 10 就切换”。所以动态模型本质上是:
在质量、速度、成本之间做运行时权衡。
动态模型不是模型自己变聪明了,而是你在运行时决定该派谁上场。九、中间件:为什么 LangChain 的 Agent 不只是“能调工具”
在 Agent 这部分,另一个非常重要的概念是:中间件(Middleware)。中间件的作用,可以理解成“在流程节点之间插手”。
它能做的事包括:
调度器 + 审计员 + 安全员 + 交通警察
这也是 LangChain Agent 真正强大的地方:
它不是只让模型“更会回答”,而是让你可以把 AI 放进一个可控的工作流里。
十、把这 3 个 Notebook 串起来,你会发现真正的学习路径是这样的
回头看这 3 份 Notebook,它们其实对应了一条非常合理的学习路线。你要解决的是:
你要掌握的是:
·用 thread_id + checkpointer 做记忆把 LangChain 从“听说过”变成“本地能跑”。
你要建立的是:
·为什么 LangChain v1 本质是基于 LangGraph 的工作流系统把 demo 思维升级成系统思维。
十一、我学完之后,最大的三个收获
1. 别把 LangChain 学成“API 背诵”2. LangChain 的价值不是“替你调一次模型”Loop(循环)
因为 Agent 真正比普通模型调用多出来的,就是:
十二、如果你也想学 LangChain,我建议这样开始
更推荐下面这个顺序:
学 LangChain 最容易掉进的坑,不是“不会写代码”,而是“太早追求复杂”。先把安装跑顺, 再把最小 demo 跑通, 再把上下文、结构化输出、记忆这些基础能力叠上去, 最后再去理解 Agent、中间件和动态模型。
这样你学到的,不只是一个个零散功能点,而是一条真正能落到项目里的 AI 应用路线。
如果让我用一句话总结这 3 个 Notebook 的价值,那就是:
它们把 LangChain 从“文档上的概念”,变成了“可以一步步搭起来的 AI 应用实践”。