从 LLM 连调到智能体闭环:深度拆解 LangChain、LangGraph 与 LangSmith
前言:AI 应用开发的“三驾马车”
在 LLM(大语言模型)爆火的初期,开发者只需调个 OpenAI 的 API 就能做一个简单的对话 Demo。但当我们要构建一个生产级别、具备私有知识库(RAG)、能够自我纠错(Agent)且可监控的系统时,简单的 API 调用就显得捉襟见肘。
这时,LangChain 生态系统应运而生。今天,我们将深度探讨这个生态中的“三驾马车”:
-
LangChain:基础组件库,AI 的“武器库”。
-
LangGraph:循环流程调度器,AI 的“指挥部”。
-
LangSmith:全生命周期观测平台,AI 的“监控室”。
一、 LangChain:大模型应用的基石
1. 背景:消除“适配焦虑”
早期的 AI 开发面临两大痛点:一是模型供应商接口不一(OpenAI, Anthropic, Google 各写一套);二是缺乏对数据处理、Prompt 管理的标准流程。LangChain 的出现,通过高度抽象,让开发者可以用一套逻辑切换不同模型,像搭积木一样组合功能。
2. 核心 Demo:构建一个简单的 RAG 问答链
我们来看一个最经典的使用场景:基于私有文档的问答(Chain 模式)。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 1. 定义模型
model = ChatOpenAI(model="gpt-4o")
# 2. 定义 Prompt 模板
prompt = ChatPromptTemplate.from_template("请根据以下背景知识回答问题:\n背景:{context}\n问题:{question}")
# 3. 使用 LCEL (LangChain Expression Language) 组装链
chain = prompt | model | StrOutputParser()
# 4. 运行
response = chain.invoke({
"context": "LangChain 是一个用于构建 LLM 应用的框架。",
"question": "LangChain 是做什么的?"
})
print(response)
解析:这里使用了 LangChain 标志性的管道操作符 |,将 Prompt、模型和解析器串联起来。这种线性逻辑非常简洁。
二、 LangGraph:构建有“灵魂”的智能体(Agent)
1. 背景:跳出“线性”的诅咒
LangChain 的普通 Chain 是单向的:输入 -> A -> B -> 输出。
但在实际业务中,AI 需要循环:
-
AI 搜索了信息 -> 发现信息不全 -> 返回再搜一次。
-
AI 写了代码 -> 运行报错 -> 返回修改代码再试。
这种带有“回退”和“状态保存”的复杂逻辑,普通的 Chain 很难胜任。LangGraph 引入了“状态机”和“图”的概念,完美解决了这个问题。
2. 核心 Demo:一个具备“自我修正”逻辑的 Agent
想象一个场景:AI 生成一段回答,如果长度不够,就必须重写。
from langgraph.graph import StateGraph, END
from typing import TypedDict
# 定义状态对象
class AgentState(TypedDict):
content: str
count: int
# 节点1:生成内容
def generator(state: AgentState):
return {"content": "LangGraph 让 Agent 更有序。", "count": state.get("count", 0) + 1}
# 节点2:检查逻辑(判断是否需要循环)
def check_length(state: AgentState):
if len(state["content"]) < 20:
return "re_generate" # 长度不够,回到生成节点
return "end"
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("generate_node", generator)
# 设置逻辑连线
workflow.set_entry_point("generate_node")
workflow.add_conditional_edges(
"generate_node",
check_length,
{
"re_generate": "generate_node", # 循环
"end": END
}
)
app = workflow.compile()
# 运行后,它会不断循环直到满足 check_length 的条件
解析:LangGraph 将 AI 的思考过程拆解为“节点(Node)”和“边(Edge)”,支持循环往复,是目前开发复杂 Agent 的首选。
三、 LangSmith:让 AI 不再是“黑盒”
1. 背景:解决“生产恐惧症”
AI 应用上线后,最怕用户反馈:
-
“AI 刚才胡说八道了,但我不知道 Prompt 哪里出错了。”
-
“这一条请求怎么用了 30 秒?哪个环节卡住了?”
LangSmith 就是为了解决这些问题。它不需要你写复杂的业务逻辑,而是一个调试和评估平台。
2. 如何使用
你不需要修改业务代码,只需在环境变量中开启:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY="你的key"
开启后,你的每一次 chain.invoke 都会被自动记录在 LangSmith 的网页后台。
你能看到什么?
-
Trace(追踪):清晰显示每一层调用。你可以看到原始 Prompt 发给 OpenAI 之前到底长什么样。
-
Annotation(标注):你可以给 AI 的回答打分,建立测试集。
-
Evaluation(评估):当你修改了 Prompt,LangSmith 可以自动跑 100 个案例,告诉你准确率是上升了还是下降了。
四、 深度对比:它们之间的关系
| 维度 | LangChain (核心) | LangGraph | LangSmith |
| 角色 | 基础砖块 | 架构设计图 | 质检与监控 |
| 逻辑流 | 线性 (A -> B -> C) | 循环 (可回退、可跳转) | N/A (记录所有流) |
| 解决痛点 | 快速对接各种模型和工具 | 解决 Agent 逻辑混乱和循环问题 | 解决 AI 不可观测、难调试问题 |
| 开发阶段 | 原型开发阶段 | 复杂逻辑设计阶段 | 测试与生产运行阶段 |
| 比喻 | 各种功能的乐高零件 | 能够指挥乐高机器人动的程序逻辑 | 记录机器人运行日志的记录仪 |
五、 总结:如何选择?
-
如果你只是想给自己的应用加一个简单的问答功能或 RAG,LangChain 足够了。
-
如果你想开发一个可以自主决策、自我纠错、多步推理的 Agent(比如自动编程助手、复杂客服),那么 LangGraph 是必修课。
-
如果你打算将应用交付给客户或上线运营,为了保证质量和排查错误,LangSmith 是必须接入的设施。
LangChain 负责“能跑”,LangGraph 负责“跑得聪明”,LangSmith 负责“跑得稳”。 掌握了这三者,你就掌握了当前大模型应用开发的全套武功秘籍。
结语
AI 的开发范式正在从“玄学”转向“工程化”。通过 LangChain 生态,我们可以像构建传统软件一样,严谨地构建、调度和优化 AI 应用。希望这篇分享能帮你理清思路,开启你的 AI 开发者之旅!
(注:代码为简化示例,实际使用需安装对应库:pip install langchain langgraph langsmith)
更多推荐


所有评论(0)