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

目录
相关文章
|
2月前
|
人工智能 NoSQL Redis
LangGraph 入门:用图结构构建你的第一个多智能体工作流
LangGraph 是面向多智能体系统的图编排框架,以有向状态图替代线性链式调用。通过节点(智能体)、边(条件/静态跳转)和类型化共享状态三者解耦,天然支持分支、循环、并行与汇合;内置检查点、原子状态更新与Reducer机制,保障一致性、可调试性与容错恢复能力。
2402 1
|
API
国外地区经纬度查询免费API接口教程
此接口用于查询国外地区的经纬度信息,支持POST和GET请求方式。需提供用户ID、用户KEY、省级名称及具体地点。返回数据包括地区名称(中英文)、国家代码及经纬度等详细信息。示例请求与响应数据详见文档。
814 29
|
2月前
|
JavaScript 搜索推荐 前端开发
从提示工程转向 上下文工程,6种让LLM在生产环境中稳定输出的技术
本文系统阐述“上下文工程”(Context Engineering)——生产级AI系统的核心能力。它不依赖提示词优化,而是通过选择性检索、上下文压缩、层次化布局、动态查询重构、记忆注入与工具感知六大技术,精准控制模型在运行时“看到什么、何时看、如何看”,从而根治幻觉、提升准确率、降低Token消耗,让小模型也能稳定输出高质量结果。
397 16
从提示工程转向 上下文工程,6种让LLM在生产环境中稳定输出的技术
|
2月前
|
JSON API 数据库
超越上下文窗口:CodeAct与RLM,两种代码驱动的LLM扩展方案
本文介绍CodeAct与RLM两大前沿范式:CodeAct让模型用可执行代码调用工具,缓解Context Rot,提升多工具任务成功率;RLM则通过递归分解超长上下文,将推理转化为编程式搜索。二者分别重构“动作空间”与“推理结构”,共同推动LLM从黑箱生成器迈向可编程智能体。
717 11
超越上下文窗口:CodeAct与RLM,两种代码驱动的LLM扩展方案
|
缓存
【SVN异常】svn更新时,出现不知道这样的主机的解决方案
svn更新时,出现不知道这样的主机的解决方案
2070 0
【SVN异常】svn更新时,出现不知道这样的主机的解决方案
|
1月前
|
存储 人工智能 监控
CoPaw是什么?与OpenClaw有什么区别?
2026年个人智能体爆发,阿里云CoPaw与开源OpenClaw成焦点。前者主打“协同工作台”,支持一键部署、长期记忆与开箱即用技能,面向职场人;后者是极客向AI实验平台,强调本地优先与高度定制。二者代表便捷性与自由度的路线之争。
3581 10
|
1月前
|
存储 机器学习/深度学习 缓存
KV Cache管理架构演进:从连续分配到统一混合内存架构
本文系统梳理KV Cache管理演进的5个时代(从无到统一内存架构),剖析vLLM、SGLang、TensorRT-LLM等框架在各阶段的技术取舍与实践效果,涵盖连续缓存、PagedAttention、异构/分布式/统一混合架构等关键突破,助你为不同场景(文本、多模态、长上下文、混合模型)选择最优方案。
464 8
|
2月前
|
数据库 Python
15 分钟用 FastMCP 搭建你的第一个 MCP Server(附完整代码)
Model Context Protocol(MCP)是一个轻量开放标准,让LLM能统一、可靠地调用外部工具。无需手写解析逻辑或维护胶水代码。核心仅三概念:Server(暴露工具)、Tool(带装饰器的函数)、Client(调用方)。FastMCP框架15分钟即可上手,支持stdio快速测试、HTTP生产部署,真正实现“写一次,随处调用”。
524 5
15 分钟用 FastMCP 搭建你的第一个 MCP Server(附完整代码)
|
1月前
|
人工智能 Ubuntu API
告别Token烧钱!1分钟OpenClaw无技术阿里云/本地部署+免费大模型API配置,低成本养 AI 大虾及避坑指南
2026年,OpenClaw(昵称“大龙虾”)已成为开发者与办公人群的核心AI工具,但“Token消耗过快”始终是用户痛点——复杂任务单次调用可能消耗数千甚至上万Token,长期使用成本居高不下。而白山智算推出的新用户福利,为这一问题提供了高效解决方案:注册实名认证即送150元体验金,首次调用API再赠300元,累计450元可直接抵扣模型调用费用,支持MiniMax-M2.5、GLM-5、DeepSeek-V3.2等多款高性价比模型,且兼容OpenAI API格式,无需额外开发即可对接OpenClaw。
1113 7
|
Kubernetes 调度 C++
Kubernetes vs Docker Swarm:容器编排工具的比较与选择
在当今云计算时代,容器技术的应用越来越广泛。而在众多容器编排工具中,Kubernetes和Docker Swarm是两个备受关注的竞争者。本文将深入比较这两个工具的特点、优势和劣势,帮助读者更好地选择适合自己的容器编排解决方案。

热门文章

最新文章

下一篇
开通oss服务