LangChain,LangGraph,LangSmith,LangFlow的主要区别
做 AI 应用开发的兄弟们,是不是总被这几个词绕晕?
做个智能体,网上推荐 LangChain;看个技术博客,又在推 LangGraph;还说要装个 LangSmith,甚至 LangFlow。
这些全家桶到底是什么? 我该用哪个?是不是得全学一遍?
别慌,很多老手也容易迷糊。其实,这四个东西虽然名字长得像,但分工相当明确。
今天我们就把这层窗户纸捅破,聊聊这个“Lang 家族”的四员大将,顺便带大家手搓两个小 Demo,彻底搞懂它们。
一张图看懂“Lang 家族”分工
在写代码之前,先把它们的关系理清楚。

- LangChain :它是最基础的构建模块。你需要的提示词、模型接口、向量数据库、记忆组件,这些都是 LangChain 提供。适合盖个简单的小平房(简单问答 Bot)。
- LangGraph :它是编排者。当你需要复杂的 Agent 系统,涉及到多工种配合、重试、人工介入、循环作业时,光有基础不行,得靠 LangGraph 来指挥流程。
- LangSmith:它是观察者。系统搭建得得怎么样?哪里报错?Token 消耗多少?质量合不合格?全靠它来盯着。
- LangFlow :它是可视化工具。给不懂搭建系统的人准备的,拖拖拽拽就能搭个模型出来,适合快速验证想法,或者给产品经理演示。
简单粗暴的选择指南:
- 刚上手/写个脚本 用 LangChain。
- 做复杂 Agent/多轮对话/需要状态管? 必须上 LangGraph。
- Debug 困难/要上线监控 上 LangSmith。
- 给老板演示/快速原型 适合上 LangFlow。
1. LangChain:从这里开始
LangChain 是整个生态的基石。它的核心价值在于标准化。不管你是接 OpenAI、Claude 还是国内的文心一言、通义千问,代码写法都一样。

实战:翻译器
咱们直接看代码。假设我们要写个简单的工具,把用户的输入翻译成中文。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
记得配置你的 API Key,国内可以用中转或者国内模型
os.environ["OPENAI_API_KEY"] = "sk-…"
1. 定义模型
llm = ChatOpenAI(model="gpt-4o-mini")
2. 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的翻译助手,请将用户输入直接翻译成中文。"),
("human", "{text}")
])
3. 组装流水线:提示词 -> 模型 -> 字符串解析器
chain = prompt | llm | StrOutputParser()
4. 运行
result = chain.invoke({"text": "LangChain is a framework for developing applications powered by language models."})
print(result)
看到那个 | 了吗?这就是 LangChain 的精髓。它把复杂的调用过程变成了像流水线一样直观。
适用场景:简单的 RAG(检索增强生成)、单一任务的 Bot、数据处理脚本。
2. LangGraph:当事情变得复杂
LangChain 虽好,但当你需要搞循环或者条件分支(Branching)的时候,它就有点力不从心了。

比如这样一个场景:AI 写代码 > 运行代码 > 报错了 > AI 修改代码 > 再运行。这就形成了一个环。LangChain 的流水线是直的,做这种环状逻辑非常别扭。
这时候,LangGraph 登场了。它引入了 State (状态) 的概念,让你的应用拥有记忆和决策权。
实战:决策机器人
我们用 LangGraph 写一个稍微有点脑子的 Agent:它会先回答问题,如果觉得回答得太短(少于3个词),它会主动要求“再补充点细节”。
第一步:安装库
pip install langgraph langchain-openai
第二步:定义状态和节点
from typing import TypedDict, Annotated, List
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, AIMessage
1. 定义那个“背包” (State),用来装聊天记录
class State(TypedDict):
# add_messages 表示新消息会追加到列表里,而不是覆盖
messages: Annotated[List, add_messages]
llm = ChatOpenAI(model="gpt-4o-mini")
2. 定义节点:回答节点
def answer_node(state: State):
# 调用模型回答
return {"messages": [llm.invoke(state["messages"])]}
3. 定义节点:追问节点
def clarify_node(state: State):
# 既然太短了,就主动发个追问
return {"messages": [AIMessage(content="这点信息太少了,能不能再多说两句?")]}
4. 定义路由器:决定下一步走哪
def route(state: State):
# 拿到最后一条消息
last_message = state["messages"][-1]
# 如果是 AI 回复的,且内容少于 5 个字(这就很敷衍了)
if len(last_message.content) < 5:
return "clarify" # 走追问流程
return "end" # 结束
5. 组装图
graph = StateGraph(State)
graph.add_node("answer", answer_node)
graph.add_node("clarify", clarify_node)
graph.add_edge(START, "answer") # 开始直接进回答
添加条件边:根据 route 的结果决定去哪
graph.add_conditional_edges("answer", route, {"clarify": "clarify", "end": END})
graph.add_edge("clarify", END)
6. 编译成应用
app = graph.compile()
7. 测试一下
print("— 测试短回答 —")
假设 AI 回复了个 "好的" (会被 mock 或者真实调用返回)
这里为了演示逻辑,我们通常需要 mock 或者精心设计 prompt
但在真实场景中,LangGraph 会自动根据 LLM 的实际输出进行路由
LangGraph 的核心就是图(Graph)。它让你的 Agent 可以在节点之间跳来跳去,甚至原地打转(循环重试),直到任务完成。
适用场景:多智能体协作(Multi-Agent)、需要人工确认的流程、复杂的任务自动化。
3. LangSmith:监控神器
代码写完了,跑起来了,但效果咋样?
- 刚才那次回答为什么那么慢?
- 这个 Prompt 改完之后,准确率是升了还是降了?
- 上个月花了多少 Token 钱?
这些问题,LangChain 和 LangGraph 都回答不了你。你需要 LangSmith。

它不是一个 Python 库,而是一个平台(也有私有化部署版本)。使用它极其简单,甚至不需要改代码,只需要加环境变量:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=你的_LANGSMITH_API_KEY
一旦开启,你的每一次 LLM 调用、每一个 Chain 的执行步骤、每一个 Tool 的输入输出,都会被自动记录到 LangSmith 的后台。
核心功能:
- Tracing:像显微镜一样看清 Agent 思考的每一步。
- Evaluation:建立测试集,自动化给你的 Agent 打分。
- Prompt Hub:管理和版本化你的提示词。
4. LangFlow:可视化
最后说说 LangFlow。它是一个基于 Web 的 UI 界面,左边一排组件(OpenAI、Prompt、VectorStore...),拖到画布上,连连线,点击运行。

它有什么用? 对于程序员来说,可能觉得它不够灵活。但它的真正价值在于沟通。
当你和产品经理讨论 RAG 的逻辑时,画个流程图不如直接拖一个 LangFlow 出来跑给他看。而且,LangFlow 支持导出为 JSON 或 Python 代码。你可以用它快速搭建原型(Prototype),验证通了之后,再导出代码进行二次开发。
总结:该怎么选?
这四兄弟并不是互斥的,而是套娃关系:
- LangChain 是底座,必须得有。
- 要做复杂功能,就用 LangGraph 把 LangChain 的组件串起来。
- 为了保证质量和运维,外面得套上一层 LangSmith。
- 想快速验证或者给非技术人员用,就用 LangFlow 搭个架子。
技术路线建议: 先熟练掌握 LangChain 的 LCEL 语法,这是基本功。然后尽快上手 LangGraph,因为 Agent 是未来的大趋势,而 Graph 是构建 Agent 的最佳范式。至于 LangSmith,申请个账号挂在后台就行,它会默默守护你的应用。



