LangGraph vs Semantic Kernel:状态图与内核插件的两条技术路线对比

简介: 本文对比2026年最新版LangGraph(v1.0)与Semantic Kernel(v1.28.1),澄清过时认知:LangGraph已成为LangChain执行引擎,支持持久化状态机;SK则原生集成MCP协议,定位AI中间件。二者架构迥异——图编排vs插件组合,运行时托管状态vs开发者自主管理。附代码实操与选型指南。

多数关于 LangGraph 和 Semantic Kernel 的比较文章已经过时。过去六个月里,两个框架分别进行了重大的更新,所以本文将梳理的是实际发生的变化、当前的代码形态,以及如何进行技术选型。

2026 年构建 Python AI Agent 的现实状况是:都足够成熟的可选框架有两个,多数流行比较文章发布之后,两个框架都经历了重要更新:

  • LangGraph 在 2025 年 10 月发布 v1.0。
  • LangChain 1.0 的 create_agent 底层已经运行在 LangGraph 运行时之上,LangGraph 事实上成了 LangChain 生态的执行引擎。
  • Semantic Kernel 在 v1.28.1 中为 Python 加入了一等 MCP 支持,SDK 内原生兼任 MCP 客户端和服务端。

如果正在读的比较文章还在说 LangGraph"不稳定"或 Semantic Kernel"和 .NET 绑定太深",那它描述的已经不是当前现实。

本文依据 LangGraph 官方文档、Semantic Kernel 官方文档以及两个框架的变更日志写成。

一句话决策规则

有状态、持久、可恢复的 Agent 工作流,需要显式控制:LangGraph

协议优先、插件组合、可互操作的 Agent 平台:Semantic Kernel

两种架构有着截然不同的思维模型

LangGraph:图运行时

LangGraph 把 Agent 系统建模为一张有状态图,开发者可以显式定义其中的状态、节点与边。节点是 Python 可调用对象或子图,边是状态转换,状态本身则是一个类型化对象,在图的每一步流转并更新。这不是内部实现细节而是日常编程直接面对的核心抽象。

LangGraph v1 官方文档围绕三个核心概念组织整个框架的叙述:持久执行、可控性、人机协作。崩溃后从最近的检查点恢复工作流、在流程中插入人工审查步骤、将执行分支到并行子 Agent——这些都是一等操作,不是需要绕路才能实现的变通方案。

但是自 v1 起,LangChain 的

create_agent

运行在 LangGraph 运行时之上,技术栈有了明确的分层:用

create_agent

处理标准工具调用循环;当需要自定义工作流拓扑时,下沉到原始 LangGraph。

Semantic Kernel:内核-插件中间件

Semantic Kernel 的起点是 Kernel 抽象:一个容纳 AI 服务、插件和函数的容器。插件是暴露给模型和 Agent 的函数组,来源可以是原生 Python 代码、提示模板或外部导入的 schema。

SK 官方 agent-functions 文档的原话是:

"Any Plugin available to an Agent is managed within its respective Kernel instance — this enables each Agent to access distinct functionalities based on its specific role."

编排逻辑来自 Agent 自行选择函数、Planner 排列能力调用的顺序,而非开发者预先画好的图拓扑。

这种设计让 Semantic Kernel 更接近 AI 中间件的定位:开发者定义 Agent 的能力边界,具体的调用编排交给函数调用机制和 Agent 框架。

架构差异

🔷 主要抽象LangGraph → 类型化状态图(节点 + 边)Semantic Kernel → Kernel + 插件 + Agent

🔷 工作流控制LangGraph → 开发者显式定义拓扑Semantic Kernel → 由 Agent 函数调用涌现

🔷 状态管理LangGraph → 一等类型化状态 + 检查点Semantic Kernel → 外部化,由开发者自行管理

🔷 最佳思维模型LangGraph → Agent 的持久状态机Semantic Kernel → 具备可组合能力的 AI 中间件

同一个 Agent 在两个框架中的实现的代码示例

把架构差异落到代码层面最直观。下面用同一个场景——带记忆和系统提示的多轮天气助手——分别在两个框架中实现。

LangGraph——带检查点的天气 Agent

 pip install -U langgraph "langchain[openai]"
 from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import InMemorySaver
from langchain.chat_models import init_chat_model

# --- 工具:纯Python函数 ---
def get_weather(city: str) -> str:
    """Get the current weather for a given city."""
    # 在生产环境中替换为真实的API调用
    return f"It's sunny and 28°C in {city}."

# --- LLM ---
model = init_chat_model("openai:gpt-4o-mini", temperature=0)

# --- 检查点器启用持久的多轮记忆 ---
# 在生产环境中将InMemorySaver替换为SqliteSaver或PostgresSaver
checkpointer = InMemorySaver()

# --- 编译图Agent ---
agent = create_react_agent(
    model=model,
    tools=[get_weather],
    prompt="You are a helpful weather assistant.",
    checkpointer=checkpointer,
)

# --- thread_id将此对话绑定到持久检查点 ---
config = {"configurable": {"thread_id": "user-session-1"}}

# Turn 1
response = agent.invoke(
    {"messages": [{"role": "user", "content": "What is the weather in Mumbai?"}]},
    config=config,
)
print(response["messages"][-1].content)

# Turn 2 — Agent通过检查点器自动记住上下文
followup = agent.invoke(
    {"messages": [{"role": "user", "content": "How about Delhi?"}]},
    config=config,
)
 print(followup["messages"][-1].content)
create_react_agent

在底层编译出一个包含模型-工具循环的

StateGraph

checkpointer

在每一步持久化状态,相同的

thread_id

会自动从上次保存的位置恢复。如果进程在运行中崩溃用同一个

thread_id

重启即可从最后的检查点继续,持久性由运行时负责,不需要业务代码操心。

Semantic Kernel——带 Plugin 的天气 Agent

 pip install semantic-kernel
 import asyncio
from semantic_kernel import Kernel
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import (
    OpenAIChatCompletion,
    OpenAIChatPromptExecutionSettings,
)
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.functions import kernel_function
from semantic_kernel.contents import ChatHistory

# --- Plugin:带有@kernel_function装饰器的类 ---
class WeatherPlugin:
    @kernel_function(name="get_weather", description="Get the weather for a city.")
    def get_weather(self, city: str) -> str:
        # 在生产环境中替换为真实的API调用
        return f"It's sunny and 28°C in {city}."

# --- Kernel:持有服务和插件 ---
kernel = Kernel()
kernel.add_service(OpenAIChatCompletion(ai_model_id="gpt-4o-mini"))

# --- 执行设置:启用自动函数调用 ---
settings = OpenAIChatPromptExecutionSettings()
settings.function_choice_behavior = FunctionChoiceBehavior.Auto()

# --- 注册插件 ---
kernel.add_plugin(WeatherPlugin(), plugin_name="WeatherPlugin")

# --- Agent:kernel + 指令 ---
agent = ChatCompletionAgent(
    kernel=kernel,
    name="WeatherAssistant",
    instructions="You are a helpful weather assistant.",
)

async def run_agent():
    # ChatHistory需要在多轮之间自行维护
    history = ChatHistory()

    # Turn 1
    history.add_user_message("What is the weather in Mumbai?")
    async for message in agent.invoke(history):
        print(f"Agent: {message.content}")
        history.add_message(message)

    # Turn 2
    history.add_user_message("How about Delhi?")
    async for message in agent.invoke(history):
        print(f"Agent: {message.content}")
        history.add_message(message)

 asyncio.run(run_agent())
Kernel

充当依赖容器,集中管理 AI 服务与插件。

@kernel_function

装饰器让 Python 方法可被模型自动发现和调用。

FunctionChoiceBehavior.Auto()

指示模型按需触发函数。记忆存放在

ChatHistory

对象中,由调用方自行维护并在每次调用时传入,运行时不负责持久化。

最能揭示差异的 6 行代码

 # LangGraph — 运行时拥有持久性
 checkpointer=InMemorySaver()
 config= {"configurable": {"thread_id": "session-1"}}
 agent.invoke(messages, config)  # 自动从最后一个检查点恢复
 # Semantic Kernel — 开发者拥有状态
 history=ChatHistory()
 history.add_user_message("...")
 agent.invoke(history)  # 显式地传递和维护状态

LangGraph 中,持久性是运行时的职责;Semantic Kernel 中,状态管理是开发者的职责。两种取向无所谓对错它们对应的是不同的应用模型。

协议支持:MCP 和 A2A

协议层面是 Semantic Kernel 近期变化最大的方向。

Semantic Kernel——Python SDK 中的原生 MCP

SK 官方 MCP 公告的原话:

"Python support for MCP has arrived… SK Python can act as both an MCP Host and an MCP Server, support multiple transport methods (stdio, SSE, WebSocket), chain multiple MCP servers together, and expose SK functions or agents as MCP servers."

不是适配器,也不是社区插件,v1.28.1 开始已经是一等 SDK 支持。对于需要通过标准协议跨服务边界编排工具和 Agent 的团队来说,这是一次实质性的架构升级。

LangGraph——部署边缘的 MCP

LangGraph 的 MCP 思路侧重部署层面而非进程内集成。部署到 LangGraph Platform 后,每个 Agent 会自动在

/mcp

端点暴露为 MCP 可访问的服务,无需额外代码。自托管场景下则通过

langchain-mcp-adapters

包集成。

如果需要在 Python 进程内部使用 MCP 语义,SK 更合适;如果 Agent 的定位是被其他客户端通过 MCP 消费的已部署服务,LangGraph 更契合。

稳定性

看一下官方文档当前的说法。

LangGraph v1(2025 年 10 月):官方 v1 发布说明确认核心图 API 和执行模型未发生变化,主要的迁移事项是将

langgraph.prebuilt

中的

create_react_agent

标记为弃用转向 LangChain 的

create_agent

。LangGraph 1.0 公告明确承诺 2.0 之前不引入破坏性变更。

Semantic Kernel 1.x:大部分架构层面的断裂集中在 1.0 版本:命名空间重组、API 重命名、上下文变量变更。2025 年上半年 SK 路线图及后续版本呈现出增量式、累加式的演进模式,以定向修复为主,不再出现结构性断裂。

"LangGraph 每个版本都会破坏兼容性"的旧说法已不再成立。两个框架目前都处于稳定性优先的阶段。

何时选择哪个

✅ 选择 LangGraph :

  • Agent 逻辑涉及非简单的分支、重试、人工审查或审批步骤,这些场景受益于显式的图拓扑。
  • 工作流需要持久执行——在崩溃中存活、从检查点恢复,并保留可审计的步骤历史。
  • 团队已深入 LangChain 生态,希望沿着 create_agent → LangGraph 的技术栈获得清晰的升级路径。
  • 需要在节点级别观测执行流如何穿过工作流,要求细粒度的可观测性。

✅ 选择 Semantic Kernel 当:

  • 正在构建平台或 SDK,能力以插件形式组合,不同 Agent 各自消费不同的工具集合。
  • MCP 或 A2A 互操作性是核心需求,且希望在 Python SDK 中原生支持,而非依赖外部适配器。
  • 团队已采用 DI / 面向服务的架构,kernel-plugin 模型与既有设计天然契合。
  • 倾向于轻量部署,不想引入专用的编排运行时,状态交由外部系统管理。

总结

如果 Agent 需要表现得像一台持久状态机,用 LangGraph。如果 Agent 需要表现得像一个协议感知的平台组件,用 Semantic Kernel。

希望这篇有所帮助。

https://avoid.overfit.cn/post/06c77d333efe42b0817c37552dede26d

by TheProdSDE

目录
相关文章
|
3月前
|
人工智能 NoSQL Redis
LangGraph 入门:用图结构构建你的第一个多智能体工作流
LangGraph 是面向多智能体系统的图编排框架,以有向状态图替代线性链式调用。通过节点(智能体)、边(条件/静态跳转)和类型化共享状态三者解耦,天然支持分支、循环、并行与汇合;内置检查点、原子状态更新与Reducer机制,保障一致性、可调试性与容错恢复能力。
3263 1
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
39159 72
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
3月前
|
机器学习/深度学习 存储 自然语言处理
蚂蚁集团 Ling-2.5-1T 开源:万亿参数,重新定义"又快又强"
Ling-2.5-1T是蚂蚁集团inclusionAI推出的开源即时大模型(MIT协议),以“效率×效果”为核心:万亿参数、63B激活,首创混合线性注意力架构,支持百万token上下文;推理吞吐大幅提升,AIME任务仅需1/3 token即达前沿思考模型水平。ModelScope可下载。
836 4
蚂蚁集团 Ling-2.5-1T 开源:万亿参数,重新定义"又快又强"
|
1月前
|
存储 设计模式 缓存
为生产级 AI Agent 构建持久化记忆:五阶段流水线与四种设计模式
LLM Agent需持久化记忆以支撑连续对话、用户画像、知识沉淀与崩溃恢复。但满上下文方案成本高、延迟大、易出错。本文提出五阶段流水线(抽取→整合→存储→检索→遗忘)与四种记忆类型(工作/情景/语义/过程记忆),结合结构化状态+向量搜索等设计模式,实现高效、可控、可审计的生产级记忆系统。
635 9
为生产级 AI Agent 构建持久化记忆:五阶段流水线与四种设计模式
|
3月前
|
人工智能 监控 API
一个人=8人AI团队:阿里云1分钟部署OpenClaw全文件驱动多Agent实战指南(直通率优化)
在AI工具深度应用的今天,很多人都会遇到这样的困境:用一个全能Agent处理所有任务,结果它写文案写到一半被拉去审代码,上下文切换导致思路断裂、效率低下。BPO公司总监Jason的经历正是如此——他最初打造的通用AI助手Oscar因“身兼数职”频繁崩掉,最终他将其拆分为8个专职Agent,组成AI团队,两周内实现80%内容直通率(无需修改直接发布),用“一个人指挥一个AI团队”的模式彻底改变了工作流程。
2700 2
|
3月前
|
JavaScript 搜索推荐 前端开发
从提示工程转向 上下文工程,6种让LLM在生产环境中稳定输出的技术
本文系统阐述“上下文工程”(Context Engineering)——生产级AI系统的核心能力。它不依赖提示词优化,而是通过选择性检索、上下文压缩、层次化布局、动态查询重构、记忆注入与工具感知六大技术,精准控制模型在运行时“看到什么、何时看、如何看”,从而根治幻觉、提升准确率、降低Token消耗,让小模型也能稳定输出高质量结果。
596 16
从提示工程转向 上下文工程,6种让LLM在生产环境中稳定输出的技术
|
3月前
|
JSON API 数据库
超越上下文窗口:CodeAct与RLM,两种代码驱动的LLM扩展方案
本文介绍CodeAct与RLM两大前沿范式:CodeAct让模型用可执行代码调用工具,缓解Context Rot,提升多工具任务成功率;RLM则通过递归分解超长上下文,将推理转化为编程式搜索。二者分别重构“动作空间”与“推理结构”,共同推动LLM从黑箱生成器迈向可编程智能体。
870 11
超越上下文窗口:CodeAct与RLM,两种代码驱动的LLM扩展方案