跳转至

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 编排的取舍 → 题库
深度 "经验已落后"如何用框架选型判断 → 题库