1.1 用生活比喻理解
想象你要组装一台电脑。CPU、显卡、内存、硬盘、电源......每个零件单独买都能买到,但接口不一样、安装方式不同、驱动还要自己装。如果你不懂硬件,组装一台电脑会非常痛苦。
LangChain 就是 AI 应用开发领域的"标准化积木"。大模型、提示词、工具、数据库、外部 API 这些零件,本来各家接口都不一样。LangChain 把它们统一成标准接口,让你可以像搭积木一样,快速拼出一个 AI 应用。
1.2 一句话定义
LangChain 是一个用"链"来编排 AI 工作流的框架。它提供了统一的模型接口、提示词模板、工具系统、RAG 组件,让你用很少的代码把大模型和外部能力组合起来,快速构建 AI 应用。
第二章:四个核心概念(必须记住)
LangChain 的核心概念比 LangGraph 多一些,但初学只需要记住四个:
| 概念 | 通俗解释 | 代码里长什么样 |
|---|---|---|
| Model(模型) | 大脑,负责理解和生成文字 | init_chat_model("openai:gpt-4o") |
| Prompt(提示词) | 给大脑的"指令",告诉它要干什么 | 字符串或模板 |
| Tool(工具) | 给大脑装上"手和脚",让它能查天气、搜网页 | 加了 @tool 装饰器的函数 |
| Agent(智能体) | 把模型、提示词、工具组装起来的"完整机器人" | create_agent(...) |
2.1 Model:统一的大脑接口
LangChain 最大的价值之一,就是抹平各家大模型的差异。不管你用的是 OpenAI、Anthropic、Google 还是国产模型,调用的代码都一样。
python
from langchain.chat_models import init_chat_model
# 一行代码切换模型,业务代码不用改
model = init_chat_model("openai:gpt-4o")
# model = init_chat_model("claude-sonnet-4-6") # Anthropic
# model = init_chat_model("google_genai:gemini-2.5-flash-lite") # Google
# model = init_chat_model("ollama:llama3") # 本地模型
调用方式有三种:
python
# 1. 一次性调用,等全部结果返回
resp = model.invoke("LangChain 是什么?")
# 2. 流式输出,边生成边返回
for chunk in model.stream("讲个故事"):
print(chunk.content, end="")
# 3. 批量调用
resps = model.batch(["问题1", "问题2", "问题3"])
2.2 Prompt:给大脑的指令
最简单的 Prompt 就是一个字符串:
python
response = model.invoke("用一句话解释什么是 AI")
但实际开发中,你需要更灵活的模板:
python
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的{role},用{style}的风格回答。"),
("human", "{question}")
])
# 填入变量
formatted = prompt.format(role="翻译官", style="简洁", question="什么是机器学习?")
2.3 Tool:让大脑能"动手"
大模型本身只能生成文字,不能查天气、不能搜网页。工具就是给模型装上的"手和脚"。
python
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
注意那个 """...""" 文档字符串非常重要。大模型就是通过读这句话来判断"什么时候该调用这个工具"的。你写得越清楚,模型用得越准。
2.4 Agent:完整的机器人
把模型、工具、提示词组装起来,就得到一个 Agent:
python
from langchain.agents import create_agent
agent = create_agent(
model="openai:gpt-4o",
tools=[get_weather],
system_prompt="你是一个乐于助人的助手",
)
create_agent 是 LangChain 1.0 中构建 Agent 的标准方式 ,取代了旧的 AgentExecutor 和 create_react_agent
第三章:环境搭建(手把手)
3.1 检查 Python 版本
LangChain 需要 Python 3.11 或更高版本。
bash
python --version
如果显示 Python 3.11.x 或更高,就可以。否则去 python.org 下载新版。
3.2 创建虚拟环境
bash
cd Desktop
mkdir my-langchain
cd my-langchain
python -m venv .venv
# 激活虚拟环境
# Windows:
.venv\Scripts\activate
# Mac/Linux:
source .venv/bin/activate
激活成功后,终端前面会出现 (.venv)。
3.3 安装 LangChain
bash
# 安装核心包
pip install -U langchain
# 安装模型集成包(按需选择)
pip install -U "langchain[openai]" # OpenAI
# pip install -U "langchain[anthropic]" # Claude
# pip install -U "langchain[google-genai]" # Gemini
3.4 配置 API Key
创建一个 .env 文件:
text
OPENAI_API_KEY=你的key
如果你用其他模型,对应的环境变量名也不同(如 ANTHROPIC_API_KEY、GOOGLE_API_KEY)。
3.5 验证安装
bash
python -c "from langchain.agents import create_agent; print('安装成功!')"
第四章:第一个完整示例(逐行讲解)
我们来写一个最简单的"天气助手 Agent":你问天气 → Agent 自动调用工具 → 返回答案。
4.1 完整代码
新建文件 first_agent.py:
python
from dotenv import load_dotenv
from langchain.agents import create_agent
load_dotenv()
# ---------- 1. 定义工具(给 Agent 装上手) ----------
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
# ---------- 2. 创建 Agent(组装机器人) ----------
agent = create_agent(
model="openai:gpt-4o",
tools=[get_weather],
system_prompt="You are a helpful assistant",
)
# ---------- 3. 运行 ----------
result = agent.invoke(
{"messages": [{"role": "user", "content": "What's the weather in San Francisco?"}]}
)
print(result["messages"][-1].content_blocks)
4.2 逐行解释
第 1-2 行 :导入 load_dotenv 用来读取 .env 文件,导入 create_agent 是构建 Agent 的核心函数。
第 4 行 :load_dotenv() 把 .env 里的 API Key 加载到环境变量中。
第 7-9 行:定义一个工具函数。注意:
-
参数类型注解
city: str和返回值注解-> str帮助模型理解怎么用这个工具。 -
文档字符串
"""Get weather for a given city."""是给模型看的说明书,告诉它"这个工具是查天气的"。
第 12-16 行 :调用 create_agent 创建 Agent:
-
model:用哪个大模型。 -
tools:这个 Agent 能用哪些工具。 -
system_prompt:系统提示词,设定 Agent 的角色。
第 19-21 行:运行 Agent。注意传入的格式:
python
{"messages": [{"role": "user", "content": "你的问题"}]}
这是一个消息列表 。role 表示是谁说的(user 是用户,assistant 是模型),content 是内容。
第 23 行 :打印最后一条消息的内容。result["messages"][-1] 取消息列表的最后一条(也就是模型的回答),.content_blocks 取回答内容。
4.3 运行结果
bash
python first_agent.py
你会看到类似这样的输出:
text
[{'type': 'text', 'text': "The weather in San Francisco is always sunny!"}]
4.4 背后发生了什么?
当你问"旧金山的天气怎么样"时,Agent 内部自动完成了这些步骤:
-
发送请求:把你的问题 + 工具说明一起发给大模型。
-
模型决定 :模型读懂了你的问题,看到有个
get_weather工具,决定调用它。 -
执行工具 :LangChain 自动帮你调用
get_weather("San Francisco"),得到结果"It's always sunny in San Francisco!"。 -
模型总结:把工具结果发回给模型,模型生成最终回答。
-
返回结果:最终回答就是你看的那句话。
你只写了 3 行核心代码,Agent 自动完成了"思考 → 调工具 → 再思考 → 回答"的完整循环。这就是 LangChain 的强大之处。
第五章:加上"记忆"(多轮对话)
5.1 问题
上面的 Agent 是"一次性"的。你问一句,它答一句,然后忘了。如果你接着问"那北京呢?",它不知道你在问天气。
5.2 解决方案:传入历史消息
LangChain 的 Agent 通过消息列表来记住上下文。你只需要把之前的对话也传进去:
python
from dotenv import load_dotenv
from langchain.agents import create_agent
load_dotenv()
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
agent = create_agent(
model="openai:gpt-4o",
tools=[get_weather],
system_prompt="You are a helpful assistant",
)
# 维护一个对话历史
messages = [
{"role": "user", "content": "What's the weather in San Francisco?"},
{"role": "assistant", "content": "It's always sunny in San Francisco!"},
{"role": "user", "content": "What about Beijing?"}, # 追问
]
result = agent.invoke({"messages": messages})
print(result["messages"][-1].content_blocks)
这次 Agent 知道你在追问天气,因为它看到了之前的对话历史。
5.3 真正的"记忆":Checkpointer
每次手动传历史消息太麻烦。LangChain 提供了 Checkpointer,自动帮你保存对话历史:
python
from langgraph.checkpoint.memory import MemorySaver
checkpointer = MemorySaver()
agent = create_agent(
model="openai:gpt-4o",
tools=[get_weather],
system_prompt="You are a helpful assistant",
checkpointer=checkpointer, # 加上这一行
)
config = {"configurable": {"thread_id": "user_001"}}
# 第一轮
agent.invoke(
{"messages": [{"role": "user", "content": "What's the weather in San Francisco?"}]},
config,
)
# 第二轮(不用手动传历史)
result = agent.invoke(
{"messages": [{"role": "user", "content": "What about Beijing?"}]},
config,
)
print(result["messages"][-1].content_blocks)
thread_id 就像会话 ID,同一个 ID 的多次调用自动共享历史。
第六章:RAG(让模型"知道"你的私有数据)
6.1 什么是 RAG?
大模型的知识来自训练数据,截止到某个时间点。如果你要问它"我们公司 2026 年的产品手册里写了什么",它根本不知道。
RAG(检索增强生成) 的思路很简单:
-
切块:把你的文档切成小段。
-
向量化:把每段文字转成一串数字(向量)。
-
存储:存进向量数据库。
-
检索:用户提问时,先找出最相关的几段文字。
-
生成:把"问题 + 相关文字"一起发给模型,让它基于这些文字回答。
6.2 最小 RAG 示例
python
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from langchain_core.vectorstores import InMemoryVectorStore
# 1. 准备文档
docs = [
Document(page_content="LangChain 是一个 AI 应用开发框架。"),
Document(page_content="LangGraph 是 LangChain 的底层编排引擎。"),
Document(page_content="RAG 是检索增强生成技术。"),
]
# 2. 向量化并存储
embeddings = OpenAIEmbeddings()
vectorstore = InMemoryVectorStore.from_documents(docs, embeddings)
# 3. 检索
query = "LangChain 和 LangGraph 什么关系?"
results = vectorstore.similarity_search(query, k=2)
for doc in results:
print(doc.page_content)
6.3 RAG + Agent
把向量库包装成一个工具,Agent 就能自己决定"什么时候该查资料":
python
from langchain_core.tools import tool
@tool
def search_docs(query: str) -> str:
"""搜索内部文档,回答用户关于公司产品的问题。"""
results = vectorstore.similarity_search(query, k=3)
return "\n".join([doc.page_content for doc in results])
agent = create_agent(
model="openai:gpt-4o",
tools=[search_docs],
system_prompt="你是一个知识库助手,回答问题前先搜索文档。",
)
第七章:常见报错和坑
坑 1:API Key 没配置
报 AuthenticationError 时,检查 .env 文件是否在项目根目录,以及 load_dotenv() 是否在创建 Agent 之前调用。
坑 2:工具函数没有文档字符串
python
# 错误:模型不知道这个工具是干什么的
@tool
def get_weather(city: str) -> str:
return f"晴天"
# 正确:加上文档字符串
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气。"""
return f"晴天"
坑 3:消息格式写错
agent.invoke() 必须传入 {"messages": [...]} 格式,不能直接传字符串。
坑 4:模型名称写错
model 参数必须用 "provider:model" 格式,比如 "openai:gpt-4o"。只写 "gpt-4o" 会报错。
坑 5:装了 langchain 但没装模型集成包
pip install langchain 只装核心包。用 OpenAI 还要装 pip install "langchain[openai]"。
第八章:LangChain 和 LangGraph 怎么选?
这是初学者最常问的问题。记住这张表:
| 场景 | 用哪个 | 原因 |
|---|---|---|
| 快速搭一个问答机器人 | LangChain | create_agent 几行代码搞定 |
| 做一个标准的 RAG 应用 | LangChain | 组件齐全,上手快 |
| 需要精确控制每一步流程 | LangGraph | 你手动画节点和边 |
| 需要循环、条件分支、人工介入 | LangGraph | 图结构天生支持 |
| 要做生产级、长时间运行的 Agent | LangGraph | 支持持久化、容错、流式 |
官方建议:用 LangChain 快速上手,需要更深层定制时再回到 LangGraph。
你之前学了 LangGraph,现在学 LangChain,学习顺序其实很理想:先学底层(LangGraph),再学上层(LangChain),这样你既知道"怎么快速搭",也知道"底层发生了什么"。
附录:速查表
python
# 最小 Agent 模板
from dotenv import load_dotenv
from langchain.agents import create_agent
load_dotenv()
def my_tool(param: str) -> str:
"""工具的说明(给模型看)。"""
return "工具执行结果"
agent = create_agent(
model="openai:gpt-4o",
tools=[my_tool],
system_prompt="你是一个助手",
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "你的问题"}]}
)
print(result["messages"][-1].content_blocks)
记住一句话:LangChain 帮你快速搭,LangGraph 让你精细控。模型是大脑,工具是手脚,Agent 把它们组装起来。