LangChain — 架构与原理
30 秒导读: LangChain 是一个"搭 AI agent 的框架"。你给它一个模型名和一组工具,它就还给你一个能"想一步→调工具→看结果→再想"循环到底的 agent。它最核心的两个设计:(1) 这个循环不是一个 while 循环,而是被编译成一张状态图(底层是 LangGraph),天然带持久化/流式/断点续跑;(2) 所有想往这个循环里插的自定义行为(压缩历史、人工审批、出错重试、结构化输出),都被统一成一种叫 middleware(中间件) 的东西。
1. 这是什么(零基础也能懂)
一句话定义: LangChain 是用来搭建 LLM agent 和应用的 Python/JS 框架——它给"调用大模型"和"让大模型在循环里调用工具"这件事,提供了一套标准积木。
解决什么问题 / 给谁用。 假设你想做一个能"查天气、订机票、改代码"的助手。底层无非是反复做一件事:
- 把对话历史发给大模型;
- 模型说"我要调
check_weather('SF')"; - 你的代码真去执行这个函数,把结果塞回对话;
- 再发给模型,直到模型不再要调工具、直接给出答案。
这个循环(业界叫 agentic loop)谁都会写,但要把它做得可流式输出、可中途人工审批、可断点续跑、可换模型、可裁剪超长历史,就很费劲。LangChain 把这些都预置好了。
它能做什么(功能):
- 用一行
init_chat_model("openai:gpt-5.5")连上任意厂商的模型,换厂商不改代码。 - 用一行
create_agent(model, tools)得到一个完整的 agent。 - 用 middleware 往 agent 循环里插行为:压缩历史、人工审批工具调用、模型出错重试、限制调用次数、结构化输出……
- 底层基于 LangGraph,白送持久化(checkpointer)、流式、断点(interrupt)。
用起来什么样。 这是官方 docstring 里的最小示例(libs/langchain_v1/langchain/agents/factory.py:942-960):
from langchain.agents import create_agent
def check_weather(location: str) -> str:
"""Return the weather forecast for the specified location."""
return f"It's always sunny in {location}"
graph = create_agent(
model="anthropic:claude-sonnet-4-5-20250929",
tools=[check_weather],
system_prompt="You are a helpful assistant",
)
inputs = {"messages": [{"role": "user", "content": "what is the weather in sf"}]}
for chunk in graph.stream(inputs, stream_mode="updates"):
print(chunk)
注意返回值叫 graph——不是一个对象方法,而是一张可以 .stream() / .invoke() 的状态图。这是理解整个项目的钥匙。
一句话直觉/类比。 把 agent 想成一台流水线机器:create_agent 不是"造一个会跑的程序",而是画一张电路图(哪个节点连哪个节点、什么条件下分叉),然后"通电"(.invoke)让数据在图里流动。Middleware 就是你往这条流水线的特定工位上"插"的检查站。