Agent 框架对比¶
一句话:Agent 框架分"代码范式"(LangChain/LangGraph/LangChain4j/Spring AI,用代码编排流程)和"编排范式"(Dify,可视化拖拽);选型决定可控性与上限,"只会 Dify 拖拽、不懂原理"在 2026 已被判经验落后。
概念¶
主流 Agent 框架可按"范式"和"语言生态"两个维度分类:
| 框架 | 语言/生态 | 范式 | 定位 |
|---|---|---|---|
| LangChain | Python | 代码(链式) | 最早最全的 LLM 应用框架,提供链、工具、检索等基础组件 |
| LangGraph | Python | 代码(图状态机) | LangChain 团队推出的有向图编排,显式状态节点/边/条件路由,适合复杂 Multi-Agent |
| LangChain4j | Java | 代码(链式 + 工具) | LangChain 理念的 Java 实现,与 Spring 生态融合,企业 Java 主力选型 |
| Spring AI | Java | 代码(Spring 风格) | Spring 官方 AI 抽象,统一模型/嵌入/工具/向量库接口,Spring Boot 应用天然集成 |
| Dify | 多语言 | 编排(可视化拖拽) | 低代码平台,可视化编排 Prompt/工具/工作流,上手快、适合非工程团队快速搭原型 |
核心分野是编排 vs 代码:
- 编排(Dify):用拖拽配置工作流,所见即所得,上线快,但流程是平台定义的,复杂分支、自定义状态机、深度可控性受限;
- 代码(LangGraph 等):用代码定义状态机、节点、边、条件路由,灵活度上限高,可精细控制每一步,但门槛高、要懂原理。
报告 §5.3 中彭超选 LangChain4j 自研模块化框架,赵立新/邓鹏/唐勇用 LangGraph,秦刚/汪俊用 SpringAI;而唐勇"经验已落后"的关键症状之一,正是停留在 Dify 编排 + 基础 RAG,缺框架原理与代码层掌控。
原理¶
LangGraph 与"普通链"的关键区别在于它把 Agent 建模为显式状态图:
- State:贯穿整个流程的共享状态(类型化 dict);
- Node(节点):每个节点是一个函数,读状态、改状态;
- Edge(边)+ 条件路由:节点间的跳转可带条件,支持循环(如 replan、重试、人机协同状态机)。
这正是 Multi-Agent、审核闭环、混合推理能落地的基础——循环和条件分支在普通"链"里很难表达,在图里是原生能力。
下面给出"同一份 Multi-Agent 逻辑"在代码范式(LangGraph / Spring AI)与编排范式下的对比骨架。
// Spring AI 风格:代码范式,自定义 Planner/Executor/Reviewer 流程
public class SpringAiAgent {
private final ChatClient chat; // Spring AI 统一 ChatClient
private final ReviewRuleEngine reviewer;
public String handle(String userQuery) {
// 规划者
String planJson = chat.prompt()
.system("你是规划者,把任务拆成步骤")
.user(userQuery)
.tools(tools)
.call().content();
// 执行者
String result = chat.prompt()
.system("你是执行者,按计划调用工具")
.user(planJson)
.tools(tools)
.call().content();
// 审核者:规则引擎(非 LLM)校验
ReviewDecision d = reviewer.review(userQuery, planJson, result);
if (d.isReplan()) {
return handle(userQuery + " 反馈:" + d.reason()); // 回退重规划
}
if (d.isHuman()) return "转人工:" + d.reason();
return result;
}
}
# LangGraph 风格:代码范式,显式状态图 + 条件路由 + 循环
from langgraph.graph import StateGraph, END
from typing import TypedDict, Literal
class S(TypedDict):
query: str
plan: dict
result: str
feedback: str
def planner(s): s["plan"] = planner_llm.invoke(s["query"], s.get("feedback")); return s
def executor(s): s["result"] = executor_llm.invoke(s["plan"], tools=tools); return s
def reviewer(s): s["feedback"] = rule_engine.review(s); return s
def route(s) -> Literal["planner", "done", "human"]:
if s["feedback"] == "pass": return "done"
if s["feedback"] == "human": return "human"
return "planner" # replan:条件路由 + 循环
g = StateGraph(S)
for n, fn in [("planner", planner), ("executor", executor), ("reviewer", reviewer)]:
g.add_node(n, fn)
g.set_entry_point("planner")
g.add_edge("planner", "executor")
g.add_edge("executor", "reviewer")
g.add_conditional_edges("reviewer", route,
{"planner": "planner", "human": END, "done": END})
graph = g.compile()
# 编排范式(Dify)的等价物:上述节点/边需在画布上拖拽配置,
# replan 循环受限于平台支持,深度定制需写自定义代码节点——这正是代码范式上限更高的根源。
实战要点¶
- 范式选型看可控性需求:快速原型/非工程团队用 Dify 编排无可厚非;但企业级、要精细控制分支/循环/审核/降级的平台,代码范式(LangGraph/LangChain4j/Spring AI)是更合适的底座。彭超、赵立新、邓鹏均走代码路线。
- "自研 vs Dify"是经验代际差的分水岭:报告把"停留在 Dify 拖拽、无框架原理"列为唐勇式"经验已落后"红旗。能讲清状态图、条件路由、节点编排原理,才不算"只会拖拽"。
- Java 生态两选:LangChain4j(组件全、贴近 LangChain 理念)与 Spring AI(Spring 官方抽象、与 Boot 融合)——前者灵活,后者工程一致性更好,常按团队栈二选一或并用。
- LangGraph 是复杂 Agent 的当下主力:显式状态图天然适配 Multi-Agent、审核闭环、人机协同状态机,是 2026 前沿基线要素之一。
- 不要堆框架名:列出 LangChain/LangGraph/Spring AI/Dify 却讲不出"在哪个项目用了哪种范式、为什么选它",是典型关键词堆砌红旗。
本节相关题目¶
| 难度 | 题目 | 链接 |
|---|---|---|
| 基础 | LangChain vs LangGraph 的区别 | → 题库 |
| 进阶 | 自研框架 vs Dify 编排的取舍 | → 题库 |
| 深度 | "经验已落后"如何用框架选型判断 | → 题库 |