LangChain,LangGraph,LangSmith,LangFlow的主要区别

2025-12-01 17:19:10
文章摘要
想做AI 应用却分不清 LangChain、LangGraph 等四个工具?本文讲清它们分工,给出选择指南,还附实战 Demo,帮你搞懂该用哪个,不用全学。

做 AI 应用开发的兄弟们,是不是总被这几个词绕晕?

做个智能体,网上推荐 LangChain;看个技术博客,又在推 LangGraph;还说要装个 LangSmith,甚至 LangFlow。

这些全家桶到底是什么? 我该用哪个?是不是得全学一遍?

别慌,很多老手也容易迷糊。其实,这四个东西虽然名字长得像,但分工相当明确。

今天我们就把这层窗户纸捅破,聊聊这个“Lang 家族”的四员大将,顺便带大家手搓两个小 Demo,彻底搞懂它们。

一张图看懂“Lang 家族”分工

在写代码之前,先把它们的关系理清楚。 图片描述

  1. LangChain :它是最基础的构建模块。你需要的提示词、模型接口、向量数据库、记忆组件,这些都是 LangChain 提供。适合盖个简单的小平房(简单问答 Bot)。
  2. LangGraph :它是编排者。当你需要复杂的 Agent 系统,涉及到多工种配合、重试、人工介入、循环作业时,光有基础不行,得靠 LangGraph 来指挥流程。
  3. LangSmith:它是观察者。系统搭建得得怎么样?哪里报错?Token 消耗多少?质量合不合格?全靠它来盯着。
  4. 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,申请个账号挂在后台就行,它会默默守护你的应用。

声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。