Agent 框架怎么选:LangGraph、MAF、Claude Code 横向评测
生命不息,折腾不止。做 Agent 前花十分钟搞清三大框架各自的定位,能帮你省下后面无数个抓狂的夜晚。
一、先别急着装:这三个其实不是一个层面的东西
很多人一张嘴就问「LangGraph、Claude Code、微软 MAF 到底哪个更强」,这问题本身问岔了。它们三个虽然都叫「Agent 框架」,但站在栈的不同位置上:
- LangGraph:一个编排运行时(orchestration runtime)。它不在乎你的模型是谁,只管把你的工作流画成「有向图」——节点是步骤、边是走向——然后帮你管状态、管持久化、管中断恢复。
- Microsoft Agent Framework(MAF):微软的统一全家桶,AutoGen 和 Semantic Kernel 的继任者。它把「自主 Agent」和「确定性 Workflow」分成两层,想要生产级的编排、可观测、安全护栏走它就对了,Azure 生态尤其顺。
- Claude Code / Claude Agent SDK:这俩其实是同一台发动机——Anthropic 把 Claude Code 的 agent loop、内置工具、权限系统打包成了库。一个面向终端(CLI),一个面向代码(SDK)。它更偏「给 Claude 装上手脚真去干活」,而不是画图编排。
一句话先记牢:LangGraph 和 MAF 是「搭系统」的,Claude Agent SDK 是「雇一个能干活的 Claude」的。 这一层定位决定了你后面选型的整个逻辑。
(下文每家都配一个能跑的最小例子,代码均来自官方文档,具体版本差异请以官方文档为准。)
二、LangGraph:状态图 + 人工审批,长任务的老法师
LangGraph 是 LangChain 团队出的低层编排框架。核心理念就仨词:状态(State)、节点(Node)、边(Edge)。
先把环境装起来:
1 | pip install langgraph |
下面是一个「先问人工要不要继续、再往下走」的审批流最小例子:
1 | from typing import TypedDict |
有几个点务必记牢:
- 状态是显式的。
TypedDict(或 Pydantic 模型)一写,整个图里流动的数据长什么样就一目了然,别人接你的代码不用猜。 - checkpoint 是灵魂。
checkpointer挂InMemorySaver只能本地玩,生产环境要换成 SQLite / PostgreSQL / Redis,这样图跑到一半断了也能接着跑。 interrupt()就是「人在回路」的本体。在节点里调一下,执行就停下来等你;拿到Command(resume=...)后从原节点继续往下走。- 条件边(add_conditional_edges)管分流。上面例子我偷懒连了直线,真实场景里「拒绝走 cancel、同意走 proceed」就靠它写个路由函数搞定。
适合谁:工作流明确、要多步、要过人工审批、要能恢复的场景——内容审核、数据清洗流水线、多步写作/评审这类。学习曲线是「前重后轻」:状态 schema、reducer、checkpointer、条件边这四五个概念头一回有点绕,一旦吃透就一通百通。
三、MAF:Agent 与 Workflow 分层,微软生态的当家花旦
MAF 全称 Microsoft Agent Framework,是微软把 AutoGen 和 Semantic Kernel 收编、2025 年 10 月官宣、2026 年 4 月 Python 和 .NET 双双 1.0 GA 的统一框架。招牌设计是把两件事分开:
- Agent:自主的、让 LLM 自己拿主意的单元;
- Workflow:确定性的执行路径,你规定它先干啥后干啥、怎么分流。
装一把(Python 3.10+):
1 | pip install agent-framework azure-identity |
最小 Agent(接微软 Foundry,用 az login 免明文密钥):
1 | import asyncio |
要串多步任务,就用 WorkflowBuilder + Executor:Executor 相当于 LangGraph 的「节点」,WorkflowBuilder 把它们用「边」连起来,顺序、并发、交接(handoff)、群聊、Magentic-One 这些编排模式都现成。想加人工审批,用 builder 的 request/response 机制把某一步的输出抛出来等人确认再往下推进。
MAF 的几处硬实力:
- 多模型 provider 开箱:文档列了不下六家——微软 Foundry、Azure OpenAI、OpenAI、Anthropic、Amazon Bedrock、Google Gemini,外加本地 Ollama,换 provider 不用大改架构。
- 可观测性原生:内置 OpenTelemetry,每一步工具调用、编排动作都能下钻,配 Foundry 后台看板看得很清楚。
- 安全护栏:走 Foundry 部署还能叠任务聚焦、PII(敏感个人信息)保护、prompt 注入防御这些「负责任 AI」能力。
- MCP 原生支持;A2A(Agent 对 Agent 协议)走独立包
agent-framework-a2a,目前仍是 beta。
适合谁:已经在 Azure/.NET 栈里、或者正从 AutoGen/Semantic Kernel 迁过来的团队,想一步到位拿生产级编排 + 可观测 + 安全护栏。它上手是三者里最「平滑」的——单个 Agent 几行代码就起来,Workflow 还能循序渐进去叠复杂度;但「Agent + 审批 + 长流程」组合起来时,你要在两个抽象层之间穿针引线,这块的坑一般来得比较晚。
四、Claude Agent SDK:把 Claude Code 的发动机塞进你自己代码
Claude Code 要是你在命令行里耍过,那 Agent SDK 就是同一个 agent loop 的「库化版」——读文件、跑命令、改代码、上网搜,全都不需要你自己写工具调度,Claude 自己看着办。
装一把(Python 3.10+ 或 Node 18+):
1 | pip install claude-agent-sdk # Python |
最小例子(让 Claude 自己找 bug 并修掉):
1 | import asyncio |
它最值钱的是那一打内置工具:Read / Write / Edit / Bash / Glob / Grep / WebSearch / WebFetch / AskUserQuestion,外加一个 Monitor 盯后台进程。靠 allowed_tools 精确限权——只读的 Agent 就别给它 Bash,爆炸半径最小。再配上:
- 权限模式(permission_mode):
auto让 AI 分类器替你拦危险操作,最适合自动化场景; - Hooks:
PreToolUse/PostToolUse在生命周期埋点,做审计日志最省事; - 子 Agent(AgentDefinition):把专职小工(代码审查、写测试)定义成对象,主 Agent 一键派活;
- MCP 服务器:
mcp_servers参数一传,数据库、浏览器这些外部工具直接挂进来。
说到模型接入:Claude 是国外模型,官方那条要绑卡的 ANTHROPIC_API_KEY 对个人折腾不太友好。好在 Agent SDK 认 ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN 这类环境变量——把它们指向支持 Anthropic 协议的中转站(很多中转站同时兼容 OpenAI/Anthropic 协议,比如峰哥一直在用的 ai.aklibk.com),就能做到国内直连、免绑卡、人民币按量付费,这个月跑多少结多少,比直接绑外币卡省心多了(具体接入方式以中转站文档为准)。
适合谁:不画复杂编排图,而是「让 AI 直接在真实机器/代码库上动手」——自动化修 bug、跑 CI、批量处理文件、给自己做开发助手。注意它跟前两家不是竞争关系:你甚至可以直接用 Claude Code 帮你写 LangGraph / MAF 的代码,各干各的活。
五、上手成本与选型:一张表收尾
| 维度 | LangGraph | MAF | Claude Agent SDK |
|---|---|---|---|
| 定位 | 低层编排运行时 | 生产级统一框架 | 单 Agent 动手能力 |
| 语言 | Python 为主(含 JS) | Python / .NET / Go | Python / TypeScript |
| 核心抽象 | StateGraph(状态图) | Agent + Workflow 分层 | query() + 内置工具 |
| 人工审批 | interrupt / resume 原生 | request / response 模型 | permission_mode / hooks |
| 可观测 | 配 LangSmith | OpenTelemetry 原生 | Anthropic 工具链 |
| 上手曲线 | 前重后轻 | 平滑、坑后置 | 最轻,几乎零配置 |
选型一句话总结:
- 要有状态的多步长任务 + 人工审批,还想自己掌控全局 → LangGraph;
- 在微软 / Azure 栈,要带着可观测和安全护栏上生产 → MAF;
- 只想雇一个能真干活的 Claude,读文件、跑命令、改代码 → Claude Agent SDK。
三者并不互斥。我的实际玩法通常是:用 Claude Agent SDK 当「手」,用 LangGraph / MAF 当「调度器」——前者负责具体执行,后者负责流程和状态。架构这层理解对了,选型其实没那么难。
生命不息,折腾不止。下一篇我们直接上手第一个:用 LangGraph 从零搭一个带人工审批(interrupt + checkpointer)的多步 Agent,跑通之后你就彻底明白「状态契约」到底是个啥、它凭什么值这个学习成本。