LangGraph 集成 MAREF:今天就能用的协议级治理
作者 MAREF Engineering
如果你在 2026 年做生产级 Agent,你的图大概率是 LangGraph 状态图。节点、边、条件路由——优雅、可测、以及在加上治理层之前——完全无人监管。这篇指南展示用 MAREF 治理 LangGraph 应用的两种方式,并且如实说明哪一种是今天就能用的。
一句话结论:协议级路径(MCP + A2A)已经上线并通过测试;quickstart 中记录的 LangGraphAdapter 原生适配器仍在 roadmap,AutoGen 的 sidecar 适配器已经发布。
先讲实话:现状
MAREF 的 快速上手 文档记录了一个 sidecar.adapters.langgraph.LangGraphAdapter,含三个方法——evaluate_node_safety、observe_transition 和 inject_governance。我们对你说实话:该适配器已定义但尚未合并。 AutoGen 适配器(sidecar.adapters.autogen.AutoGenAdapter)已经可用;LangGraph 的原生适配器正按同一契约开发中。
这意味着:你不必等适配器。下面这个协议级集成只用了已经发布、经过测试的代码路径,今天就能给你同样的治理保证。
路径一 —— 治理 LangGraph 节点内部的工具调用(MCP)
LangGraph 节点会调用工具,而工具正是爆炸半径所在。用 MCPBridge 把它们包起来,来自任意节点的每一次调用都会经过安全门——还能给你一条可接入审计日志的事件流:
from langgraph.graph import StateGraph
from maref.integration.mcp_client import MCPClient, MCPServerConfig
from maref.integration.mcp_bridge import MCPBridge
client = MCPClient()
conn = client.register_server(MCPServerConfig(
command=["npx", "-y", "@your/tool-server"],
transport_type="stdio",
server_name="tool-server",
))
bridge = MCPBridge(client) # 把调用包进安全门
def tool_node(state):
# 每个触达外界的节点都先过治理
return bridge.invoke_tool(
conn,
tool_name=state["tool"],
args=state["args"],
)
graph = StateGraph(dict)
graph.add_node("tools", tool_node)
graph.add_edge("__start__", "tools")
当判定是 DENY 时返回 {"error": "Tool blocked by security gate", ...}——外部服务器根本不会被调用,节点的 __error__ 边或兜底逻辑可以绕过它。你的 LangGraph 拓扑完全保持原样,MAREF 只是守在每个工具边界上。
路径二 —— 跨 Agent 治理整个任务(A2A)
对于多 Agent 的 LangGraph 部署——多张图,可能还有一个 supervisor——A2ABridge 让 MAREF 自己成为一个受 A2A 治理的 Agent,在整个联邦里创建、委派、中止任务:
from maref_lite.state_machine import GovernanceStateMachine
from maref.governance.audit import AuditLogger
from maref.integration.a2a_bridge import A2ABridge
bridge = A2ABridge(
state_machine=GovernanceStateMachine(),
audit_logger=AuditLogger(log_path="maref-audit.jsonl"),
agent_name="langgraph-supervisor",
)
task_id = bridge.create_task("Summarize Q3 report") # 受治理的生命周期
# 其他 Agent 可以委派进来:
bridge.delegate_task(task_id, "https://other-agent.local:8000")
# 任何授权的人类可以随时中止任务:
bridge.force_halt_task(task_id, reason="scope change")
每一次 create_task、委派和状态变更都用 HMAC 签名写入审计日志,并经过同一个治理状态机——OBSERVE → ANALYZE → EVALUATE → DECIDE → ACT → VERIFY → STABILIZE → REPORT,HALT 可由任何授权人类或熔断器触发。
结果就是:你的 LangGraph 图保留编排逻辑,而 MAREF 在每个边界上负责"这安全吗?"的决策——工具调用、Agent 间交接、任务生命周期。
该选哪条路径?
- 单图、少量工具 → 路径一(在工具调用上加 MCP bridge)。改动最小,立刻有审计追踪。
- 多图 / supervisor 模式 → 路径二(A2A)。你能获得任务生命周期治理、委派,以及跨整个集群的急停开关。
- 两条都要 → 它们可以组合。MAREF 同时治理工具调用和任务编排——这正是 8 层防御架构的设计。
🛡️ 来源:MAREF 源码 —— src/maref/integration/mcp_bridge.py(MCPBridge.invoke_tool)、src/maref/integration/a2a_bridge.py(A2ABridge.create_task / delegate_task / force_halt_task)、src/sidecar/adapters/autogen.py(已发布的 sidecar 适配器)。LangGraph 适配器契约定义在 docs/quickstart.md §3.3(roadmap——AutoGen 适配器已发布)。快速上手 · 集成。