Google ADK vs LangGraph 2026: 亲手安装两个框架并对比

Google ADK vs LangGraph 2026: 亲手安装两个框架并对比

我在沙盒环境中实际安装了Google ADK v1.32.0和LangGraph v1.1.10,对代码模式、依赖数量、状态管理、条件分支 和部署CLI进行了全面比较。根据实验结果,告诉你在什么场景下该选哪个。

每次出现新的AI智能体框架,我的第一反应都是安装它,弄清楚到底有什么不同。Google开源ADK(Agent Development Kit)时也不例外。这个周末我专门搭建了一个沙盒环境,把Google ADK v1.32.0和LangGraph v1.1.10并排安装,实际运行了代码。这篇文章是实验结果的整理。

ADK与LangGraph沙盒执行日志对比

两种不同的设计哲学

Google ADK的核心理念是”将软件开发原则应用于AI智能体”。实际用了之后,这句话的含义就清晰了。ADK用Python类和函数直接定义智能体,内置了SequentialAgentParallelAgentLoopAgent等编排器,可以在代码中自然地声明流程。

from google.adk.agents import Agent, SequentialAgent

weather_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash",
    instruction="使用get_weather工具获取天气数据",
    tools=[get_weather],
)

analysis_agent = Agent(
    name="analysis_agent",
    model="gemini-2.5-flash",
    instruction="分析天气数据并给出预报",
)

# 顺序执行: weather → analysis
pipeline = SequentialAgent(
    name="weather_pipeline",
    sub_agents=[weather_agent, analysis_agent],
)

不需要单独定义图,也不需要声明边。Python代码本身就表达了流程。

LangGraph的方向截然不同。它将智能体工作流建模为显式图。节点代表处理阶段,边定义节点间的转换。先设计图,再在图上添加逻辑。

from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from langchain_core.messages import AIMessage

class State(TypedDict):
    messages: Annotated[list, add_messages]

def greet_node(state):
    return {"messages": [AIMessage(content="Hello from LangGraph!")]}

builder = StateGraph(State)
builder.add_node("greet", greet_node)
builder.add_node("analyze", analyze_node)
builder.set_entry_point("greet")
builder.add_edge("greet", "analyze")
builder.add_edge("analyze", END)

graph = builder.compile()

在我看来:ADK是”用代码组装管道”,LangGraph是”设计状态机”。不是哪个更好,而是哪个对你的问题更自然。

依赖数量差异令人吃惊

pip install google-adk langgraph

两者都能安装,但pip show一看依赖数量差距相当大:

Google ADK v1.32.0 直接依赖:45个

google-cloud-aiplatform, google-cloud-bigquery,
google-cloud-spanner, google-cloud-speech,
google-cloud-storage, opentelemetry-exporter-gcp-*,
fastapi, uvicorn, sqlalchemy, mcp ... (共45个)

LangGraph v1.1.10 直接依赖:6个

langchain-core, langgraph-checkpoint,
langgraph-prebuilt, langgraph-sdk,
pydantic, xxhash

整整差了39个。ADK这么重的原因很明确——它从一开始就包含了整个Google Cloud栈(BigQuery、Spanner、Pub/Sub、Speech等)。如果不使用Google Cloud,这39个额外依赖全是死重。

LangGraph的哲学是”按需取用”——自己注入LLM客户端,自己选择检查点后端。更轻量,但配置的事也更多。

多智能体模式对比——条件分支是决定性差异

ADK的并行执行(我实际运行的代码):

parallel_research = ParallelAgent(
    name="parallel_research",
    sub_agents=[google_researcher, arxiv_researcher],
)

pipeline = SequentialAgent(
    name="research_pipeline",
    sub_agents=[parallel_research, synthesizer],
)

执行流程:research_pipeline (SequentialAgent)parallel_research (ParallelAgent)synthesizer。直观、可读性强。

LangGraph的条件边(ADK没有的功能):

def should_retry(state: State) -> str:
    if state.get("quality_score", 0) < 80:
        return "generate"  # 质量不足 → 重新生成
    return END              # 质量通过 → 结束

builder.add_conditional_edges("evaluate", should_retry)

实际运行结果:

=== 条件边执行结果 ===
  [evaluate] iteration=1, score=60 → 路由到: generate
  [evaluate] iteration=2, score=80 → 路由到: END
最终分数: 80, 总迭代次数: 2

智能体自动重试,直到质量通过。ADK的LoopAgent也支持迭代,但终止条件依赖max_iterations。“如果满足此条件就走这里,否则走那里”的动态分支逻辑,LangGraph的条件边要强大得多。对于生成-验证-重试循环、路由智能体、多判断分支这类场景,LangGraph明显占优。

ADK的杀手锏:CLI和内置评估框架

安装ADK时,adk CLI也会一起安装。这个意外地好用:

$ adk --help
Commands:
  api_server   为智能体启动FastAPI服务器
  create       创建带示例代码的新应用
  deploy       将智能体部署到托管环境
  eval         使用评估集对智能体进行评估
  eval_set     管理评估集
  run          运行智能体的交互式CLI
  web          启动带Web UI的FastAPI服务器

adk web特别实用——指定智能体代码路径,FastAPI服务器自动启动,可以可视化测试本地智能体。adk eval可以定义评估集文件,自动对智能体进行回归测试。LangGraph没有这样的内置CLI。

adk deploy支持直接部署到Google Cloud Run或Vertex AI Agent Builder。对于GCP用户,开发到部署都在同一个工具链内完成。

不过,这个CLI完全绑定在Google生态系统内是个遗憾。用AWS或Azure的团队根本用不上adk deploy。内置的追踪也是输出到GCP的Cloud Trace,想接入其他可观测性栈需要额外配置。

这方面,像Langfuse这样的独立LLM追踪工具与LangGraph的结合会更自然、更灵活。

状态管理对比:会话 vs 检查点

ADK的状态管理基于会话:

from google.adk.runners import InMemoryRunner
from google.adk.sessions import InMemorySessionService

session_service = InMemorySessionService()
runner = InMemoryRunner(agent=root_agent, app_name="my_app")

ADK通过session_id维护多轮对话状态。生产环境可以换用VertexAiSessionService实现持久化。

LangGraph的状态管理基于TypedDict + 检查点:

from langgraph.checkpoint.memory import MemorySaver

checkpointer = MemorySaver()
graph = builder.compile(checkpointer=checkpointer)

config = {"configurable": {"thread_id": "user-123"}}
result = graph.invoke({"messages": [HumanMessage(content="你好")]}, config)

LangGraph的检查点系统更灵活。可以把MemorySaver换成PostgreSQL、Redis或SQLite后端,还支持时间旅行调试(回退到过去的检查点)。

只需要换个检查点后端,开发环境和生产环境就能用完全相同的代码运行。不绑定特定云厂商。这点上我认为LangGraph更强。

ADK在MCP工具服务器集成方面胜过LangGraph。MCPToolset开箱即用,与MCP服务器的集成简单得多。LangGraph用MCP还需要额外的包和适配代码。

核心对比表

对比项Google ADK v1.32.0LangGraph v1.1.10
直接依赖数量45个6个
编排方式Sequential/Parallel/LoopAgent(代码声明)StateGraph+节点/边(显式图)
条件分支LoopAgent max_iterations(有限)conditional_edges(强大)
默认LLMGemini(支持其他模型)模型无关(注入任意LLM)
CLIadk create/run/web/eval/deploy ✓
内置Web UIadk web ✓
内置评估框架adk eval ✓无(需要外部工具)
MCP支持MCPToolset内置 ✓需要额外包
状态管理会话(VertexAI后端)TypedDict+Checkpoint(后端可替换)
部署目标Google Cloud Run / Vertex AI云平台无关
OpenTelemetryGCP导出器内置需手动配置
时间旅行调试
多语言SDKPython, Go, Java, TypeScriptPython(主要)
许可证Apache 2.0MIT

哪类团队适合哪个框架

Google ADK适合

  • 已有Google Cloud基础设施投入的团队
  • 以Gemini为主力模型
  • 希望从原型到部署在一个工具链内完成
  • 不想单独构建智能体评估管道
  • 团队有Go、Java或TypeScript成员的混合情况

LangGraph适合

  • 需要复杂分支逻辑的智能体工作流
  • AWS、Azure或多云环境
  • 混合使用OpenAI、Anthropic、Mistral等多种LLM
  • 已有基于LangChain的代码库
  • 需要时间旅行调试或特定检查点重放的开发流程
  • 边缘部署需要最小化依赖

如果今天要开一个新项目,我倾向于选LangGraph。理由很实际:条件分支和检查点灵活性最终是生产级智能体必需的功能,如果之后再加,往往意味着重新设计整体结构。用ADK的LoopAgent开始,后来发现需要动态路由,可能就得大改。

话说回来,对于已经在GCP上的团队,ADK工具链是真的好用。adk deploy到Cloud Run加上adk eval回归测试,在LangGraph生态里复现这套体验要花不少力气。

我的结论:设计哲学决定选择

2026年,两个框架都达到了生产可用的水平。区别在于各自优化的方向不同。

ADK优化的是”快速构建智能体系统并部署到GCP”,LangGraph优化的是”精细控制智能体的状态转换”。

比较框架时常见的错误是按功能数量排名。ADK有CLI、有eval、还能部署,所以更好?不对。我认为关键问题是:这个框架的扩展方向是否与我的智能体复杂度增长方向一致?

如果简单管道会进化成复杂分支,就从一开始选LangGraph。如果目标是在Google Cloud生态内快速交付,ADK能省掉很多麻烦。

关于ADK出现之前的LangGraph、CrewAI、Dapr三者比较,可以参考这篇生产KPI对比文章,有助于拓宽LangGraph的选择背景。

阅读其他语言版本

这篇文章有帮助吗?

您的支持能帮助我创作更好的内容。请我喝杯咖啡吧。

关于作者

jw

Kim Jangwook

AI/LLM专业全栈开发者

凭借10年以上的Web开发经验,构建AI代理系统、LLM应用程序和自动化解决方案。分享Claude Code、MCP和RAG系统的实践经验。

返回博客列表