AI 基建
0%
第十一部分 · 实践与运营 · 第 85 章

智能体、框架与沙箱

作者Changkun Ou
阅读时长约 16 分钟

第 38 章 的智能体架构、第 41 章 的运行框架、第 56 章 的授权模型,在这里汇成一个工程决策:2026 年要发布一个智能体,运行时该选什么、怎样接入。关键不是给库排名,而是选定循环原型、工具协议、沙箱边界,以及一个不容易后悔的默认方案。

2026-06-22T11:57:21.201160 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0.0 0.2 0.4 0.6 0.8 1.0 任务自由度 0.0 0.2 0.4 0.6 0.8 1.0 隔离程度 仅浏览器 容器 临时虚拟机 高权限主机
图 85.1. 沙箱选择按任务自由度与隔离程度排列的示意图。危险区域是高自由度且弱隔离,而不只是高能力。理想化位置,非实测。

智能体运行时由三部分组成。2026 年的许多混乱,都来自把这三块搅在一起:

  1. 框架 / SDK 负责控制循环。模型本身只输出 token。要让它调工具、读结果、决定下一步、记住之前的轮次、把活儿交给另一个智能体、停下来等人类、崩溃后能恢复,就需要一个控制循环,以及它周围的那套管道。
  2. 模型上下文协议(MCP) 是工具的传输协议。它之于工具集成,正如 OpenAI Chat Completions 之于模型调用:一套公共接口,让一个工具服务器写一遍,就能被每个框架复用。
  3. 沙箱(sandbox) 是执行的载体。模型一旦开始跑代码,安全这件事就不再关乎模型,而关乎运行时。沙箱就是那台隔离的计算机,代码在里面跑。

有一条主线贯穿始终:框架、工具、沙箱都把密钥和模型访问留在外面,只通过受治理的接缝伸进来。模型走由网关(gateway)签发的虚拟密钥(virtual key),也就是短时效、限范围的模型密钥替身;对于提供商愿意按需铸造的凭据,走短时效的受限令牌;对于提供商不愿轮换的静态密钥,走出网替换(盒子里放占位符,代理在流量发往允许主机时换入真实值);网络走默认拒绝加允许列表的出网。把这套纪律做对了,具体选哪个产品就成了可以反悔的决定。

截至 2026 年年中

下文的一切都是一份带日期的快照(2026 年 6 月)。在这个品类里,版本号、价格和「最适合」的判断变动很快。把排名和具体数字当作有出处、可核验的信息,而非永恒的事实,在投入之前请到各项目自己的文档核对当前值。耐用的内容是类别与取舍,不是版本字符串。

框架:全景

功能清单会掩盖真正的决策点。核心轴是框架如何组织智能体循环,因为它决定了能表达什么、要写多少样板、控制权落在谁手里。五种原型覆盖了整个领域,并且直接对应 第 38 章 讲过的那些循环结构:

  1. 图 / 状态机(LangGraph、Google ADK、Pydantic AI 的 pydantic-graph)。声明节点和边,运行时遍历这张图,持久化一个有类型的 State,支持循环、并行分支、条件路由,以及从检查点崩溃恢复。表达能力最强,控制最细,样板也最多,也最适合直接表达「智能体 A 然后 B 再回 A」和「B 与 C 并行」这类拓扑。
  2. 线性交接链(OpenAI Agents SDK)。一小组原语,智能体通过交接对话来委派,接收方看到完整的会话记录。环形或并行的拓扑得手工建模。到第一个可用智能体最快。
  3. 运行框架 / CLI 引擎(Claude Agent SDK)。循环就是 第 41 章 里的 Claude Code 引擎:内置真实文件系统、bash、网页搜索和自动上下文压缩(把较早的对话轮次摘要或丢弃,好塞进上下文窗口),再用 hook、进程内 MCP 工具和 subagent 来扩展它。做「模型在仓库里干活」这类事,无人能及。
  4. 角色 / 团队编排(CrewAI)。定义专门的角色和目标,团队协作完成。当工作天然分解成角色时很顺手,粒度不如图细。
  5. 模型优先的自主循环(AWS Strands)。一段系统提示加上工具,由模型驱动。外围结构最少,确定性控制也最少。

工具和记忆的处理是第二条轴,MCP 已经把这块大部分抹平了。工具要么是原生函数工具(一个被装饰的函数,签名直接成为 schema),要么是 MCP 服务器(经 stdio/HTTP 外接,或进程内)。记忆这一头,从「框架每轮重放消息列表」(OpenAI Sessions,最简单)一直到「一个可回退、带检查点的 State」(LangGraph、Pydantic AI 的持久化执行)。决定性的问题是:是否必须在任务中途从一次重启中恢复。如果必须,要的就是检查点机制,而不是消息列表。

选手对比

下表的版本号和许可信息截至 2026 年 6 月,延伸阅读里附了出处。凡「最适合」属于业界松散共识而非厂商事实之处,请当作方向性参考来读。

名称 循环原型 许可 / 背后 何时选它 备注
LangGraph 图 / 状态机 MIT,LangChain Inc.;托管 Platform 收费 工作流确实是一张图:循环、并行分支、审批门、长时运行、必须从崩溃中恢复 已达 1.0 GA;控制最多,样板最多。「时间旅行」可把 State 回退到此前的检查点
OpenAI Agents SDK 线性交接链 MIT,OpenAI 想要到中等复杂度生产智能体的最短路径,并看重一组小而易学的原语,胜过追求极致控制 名字虽如此,却与提供方无关:经 Chat Completions / LiteLLM 支持 100+ 模型。环形/并行路由要手工搭
Claude Agent SDK 运行框架 / CLI 引擎 MIT,Anthropic;模型用量经 Claude API 计费 智能体本质上就是 Claude 在文件系统/CLI 上工作:编码智能体、仓库自动化、运维 2025 年底由 Claude Code SDK 改名。MCP 原生与生命周期 hook 这一块最强;进程内工具省去子进程开销
CrewAI 角色 / 团队 MIT,CrewAI Inc.;付费企业档 问题能干净地分解为专才角色,且想快速做出一个多智能体原型 独立于 LangChain。起步快,粒度不如图细
Pydantic AI 图 / 状态机 MIT,Pydantic Services Inc. 讲究类型的 Python 团队,想要经校验的结构化输出和持久化执行 校验与结构化输出是一等公民。持久化执行在重启间保住进度
LlamaIndex 数据 / RAG + 智能体层 MIT,LlamaIndex Inc.;付费 LlamaCloud 难点在检索和文档解析,不在编排 差异点在检索栈(见 第 86 章);常与另一个框架搭配来做编排
Mastra 确定性 TS 工作流 MIT/Apache(按包核实),Mastra(YC W25) 团队活在 TypeScript 里,想要一套开箱即用的栈,又不想跨进 Python 2026 年初发布,势头很快。工作流是显式的确定性流水线
Google ADK 图 / 状态机 Apache-2.0,Google;多语言 已在 Google Cloud/Gemini 上,或想要一个原生图引擎来做环形和并行路由 为 Gemini 优化,但与模型和部署无关
AWS Strands 模型优先循环 Apache-2.0,AWS 以 AWS 为中心,想要一个极简的、模型驱动的循环,不手写编排 以编排控制换简洁;靠模型来驱动
Microsoft Agent Framework 基于 SK 的图工作流 MIT,Microsoft 身为 .NET/Azure 企业,想要微软支持的、遥测丰富的栈 2026 年发布 1.0,是 Semantic Kernel + AutoGen 的合流。两个前身现已仅维护
AG2(前 AutoGen) 对话驱动的多智能体 Apache-2.0,ag2ai/ag2;志愿者维护 确实想要 AutoGen 的对话血统和人在环对话模式 创始团队离开微软后,社区接手了 AutoGen 的 PyPI 包;创新已放缓
图 85.2. 同样这些框架,按循环原型分组。按某个原型筛选,就能看到哪些框架落在它名下,也可以按名称搜索。这份对比能定下的是原型契合度,而不是一份排名。版本与许可截至 2026 年 6 月。
争议所在

2026 年有几篇对比博客发布过这些框架的有序「生产排名」(比如 LangGraph 第一、Claude Agent SDK 第二、CrewAI 第三)。这些是个别作者基于小样本的观点,不是测量出来的基准,也没经过独立核验。当方向性情绪看,永远别当证据用。立得住的说法关乎循环原型的契合,不是排行榜上的名次。

如何具体地选

  • LangGraph:工作流是一张图,有循环、并行分支、审批门、长时运行、必须从崩溃中恢复。为了换取控制,接受那些样板。
  • OpenAI Agents SDK:想要到中等复杂度生产智能体的最短路径,并看重一组小而好学的原语。
  • Claude Agent SDK:智能体就是 Claude 在文件系统或 CLI 上工作。论编码智能体的工程体验,无出其右。
  • CrewAI:问题能干净地分成专才角色,想快速搭一个多智能体原型。
  • Pydantic AI:想在 Python 里要类型安全、经校验的结构化输出和持久化执行。
  • LlamaIndex:价值在检索和文档解析;拿它做数据层,编排保持轻。
  • Mastra:团队以 TypeScript 为先。
  • Google ADKAWS Strands:已经押注对应云,想要第一方工具箱。
  • Microsoft Agent Framework:身为 .NET/Azure 企业;它是 AutoGen 和 Semantic Kernel 受支持的继任者,那两个现已仅维护。

一个稳妥的默认。 第一次构建正经智能体的产品团队,跟着循环原型走,别认品牌。如果是编码、运维或文件系统智能体,从 Claude Agent SDK 起步:它直接递上一个可用的循环,配真实工具、上下文压缩和 MCP,再用 hook 和 subagent 去扩展。如果是中等复杂度的通用任务/工具智能体,从 OpenAI Agents SDK 起步:那套原语一个下午就能学会,它与提供方无关,还内置了追踪。当工作流长到超出线性链,需要循环、并行分支、审批门或持久的崩溃恢复时,升级到 LangGraph。那次迁移是成长的标志,不是失败。

框架这层库并不是全部。它之上还有两个对比表没覆盖的控制点。一个是编排,也就是那份计划:把一个想法拆成有范围、人能驾驭的任务。另一个是治理,也就是那份记录:让每个智能体动作都可归因,让每次委派出去的权限只能收窄。第 75 章 把两者都当作头等的层来处理,并落到作者自己的 Wallfacer(编排)与 Topos(治理)上;二者都已披露为作者自己的,在那里只是这一模式的一个例证,而非中立之选。落到实处的一点是:所选的框架应当给它们留出位置,一份人可以审阅的计划,以及一个网关和沙箱,其日志日后可供一层治理取用。

下层约束

框架不可能比它下面的网关层和服务层更可靠(第 82 章第 88 章)。这正是「持久化执行」和「检查点」会成为 2026 年头牌特性的原因:它们让框架可以从下层故障中恢复。

MCP:万物之下的工具层

MCP 是这个故事的另一半。它提供一套协议,让一个工具服务器写一遍,就能供上面每个框架使用,所以「框架 X 支持哪些工具」成了一个不成立的问题:答案是「任何 MCP 服务器」。到 2026 年,它已经是表里几乎所有框架之下的默认工具层。

规范现状,截至 2026 年年中:

  • 稳定版:2025-11-25 有状态,带 initialize/initialized 握手以及每会话状态。传输是 stdio(本地子进程)和 Streamable HTTP(远程服务)。

  • 候选版 2026-07-28(2026 年 5 月 21 日发布),维护者称它是自发布以来最大的一次修订。重头戏是一个无状态内核:去掉了 init 握手和会话状态,把协议元数据放进 _meta,再加上路由头(Mcp-MethodMcp-Name),让负载均衡器不读消息体就能路由。意图是在普通 HTTP 基础设施上做横向扩展:任何服务器实例都能服务任何请求。它还把独立版本化的扩展正式化(随附用于服务端渲染 UI 的 MCP Apps 和用于异步工作的 Tasks),加上 12 个月的弃用政策和一套合规套件。相对 2025-11-25,这些是破坏性变更。在依赖无状态行为之前,先确认最终发布日期,以及自己的客户端/服务器是否支持。

  • 注册表与发现。 已有一个带命名空间验证的官方 MCP Registry,MCP Server Cards(一种 .well-known 元数据格式)让注册表和爬虫无需活连接就能发现服务器。常被引用的「500+ 个公开服务器」是一个变动的、二手来源的数字。

生产里,不会让每个智能体直接拨号任意 MCP 服务器,而是把 MCP 流量路由经过一个受治理的代理(「MCP 网关」,agentgateway 之类),由它做认证、允许列表和审计,正如模型网关治理 token 流量那样。无论哪种方式,框架说的都是 MCP;一个工具是本地子进程、远程 HTTP 服务还是进程内函数,对智能体代码几乎毫无影响。这种可移植性,正是 MCP 作为传输协议而非库 API 的全部意义。

进程内 MCP 工具模式的一个最小示意,用 Claude Agent SDK 的形态写出。确切的当前 API 请查 SDK 文档。

from claude_agent_sdk import tool, create_sdk_mcp_server, query, ClaudeAgentOptions

@tool("lookup_order", "Look up an order by id", {"order_id": str})
async def lookup_order(args):
    row = await db.fetch_order(args["order_id"])
    return {"content": [{"type": "text", "text": row.summary()}]}

server = create_sdk_mcp_server(name="ops-tools", version="1.0.0", tools=[lookup_order])

async for msg in query(
    prompt="Refund the late order for customer 4471 and explain why.",
    options=ClaudeAgentOptions(
        mcp_servers={"ops": server},
        allowed_tools=["lookup_order", "Read"],
        # 模型访问经由网关 base_url + 虚拟密钥解析,
        # 而非原始的提供方凭据
    ),
):
    print(msg)

同一个智能体也可以改为指向 MCP 网关后面、经 HTTP 接入的外部 MCP 服务器。框架代码几乎不用动。

沙箱:执行的载体

沙箱是一台一次性的、隔离的计算机,交给智能体在里面运行不受信任的代码。模型写下一段 Python、一条 shell 命令、一次 git 操作,或者一整套开发循环,这些代码跑在某个地方:不是开发者的笔记本,不是生产集群,也不与另一个租户的密钥共享内核。

安全理由很直接:智能体一旦能执行代码,网关上的越狱过滤器对 rm -rf、对挖矿程序、对模型被诱导吐出的外泄 curl,统统无能为力。2026 年的安全共识(Firecrawl 等)是:稳健防御依赖代码运行物理环境的隔离,而不是在系统提示里好言相劝。这是 第 56 章 的实战面:执行边界在运行时,而不在提示。

两种隔离模型占主导,二者间的取舍基本就是全部胜负手:

  • 微虚拟机隔离(Firecracker、Cloud Hypervisor、Kata)。每个沙箱都是一台真实的、最小化的虚拟机,有自己的来宾内核,靠硬件虚拟化(KVM)与主机隔开。这是对不受信任代码而言最强的常见部署边界,与 AWS Lambda 同一血脉。Firecracker 报告称可在低至约 125 毫秒内启动用户代码,每主机每秒最多创建约 150 个微虚拟机(项目文档,2026 年数据)。

  • 用户态内核 / gVisor 隔离。 一个用户态内核拦截系统调用,来宾从不直接和主机内核对话。生产级(Google Cloud Run 用的就是它),用微虚拟机硬件隔离的一丝,换自定义镜像更快的启动。Modal 用这个模型。

第三档更弱,是共享主机内核的普通容器,很常见,但对不受信任的代码应视为软边界,除非在下面垫上 gVisor 或微虚拟机来加固。第四档是 V8 isolate(Cloudflare Dynamic Workers),更快,但只能跑沙箱化的 JS/WASM,跑不了任意操作系统。在普通容器与毫无隔离之间,还有一层操作系统级沙箱:Anthropic 开源的 sandbox-runtime,也就是 Claude Code 底下的那层约束,在 Linux 上用 bubblewrap 加 seccomp、在 macOS 上用 sandbox-exec 把进程关在受限环境里,网络默认拒绝、须经代理放行。这一档适合开发者在自己机器上跑半受信的智能体,不适合多租户的不受信任代码。

选手对比

下表的所有延迟和价格数据截至 2026 年年中,来自厂商或第三方报告,未经独立核验。把这张表当作起点地图,而非价目表,投入前请到各厂商的定价页确认当前费率。

名称 隔离 计费模型(2026) 何时选它 备注
E2B Firecracker 微虚拟机 开源 SDK;托管含免费 Hobby + 额度、Pro 档、按秒计用量 想要一个流行的、智能体原生的、微虚拟机隔离的代码盒,带开源 SDK 和自托管出路,跑短时的 Python/JS 工具调用 官网称启动「低于 200ms」;流传的「p50 约 78ms」出自对比博客,不在 E2B 自己的页面上
Modal gVisor(用户态内核) 托管;Sandbox CPU 的计费高于 Function 费率;可选 GPU 智能体必须在同一个隔离盒里运行不受信任代码触及 GPU(推断、微调步骤) 与 Google Cloud Run 同隔离模型;自定义镜像启动更快,边界比完整微虚拟机略薄
Fly.io(Machines / Sprites) Firecracker 微虚拟机 托管;按秒计 CPU+RAM,空闲不计费 想要原始的微虚拟机控制权,或为干净可复现的评测运行做快照/恢复,且空闲零计费 Sprites「一秒内启动」(厂商)。10ms 内恢复与「28ms 启动」出自第三方,视为未核验
Vercel Sandbox Firecracker 微虚拟机 托管;按活跃 CPU 计费,内存按整次运行的预置量计费 应用在 Vercel 生态内,要跑生命周期最长约 45 分钟的智能体生成代码 按活跃 CPU 计费,但内存按预置量计费,留意空闲内存成本
Cloudflare Sandbox SDK 容器 + V8 isolate 档 托管;按活跃 CPU 计费,需 Workers Paid 已在 Cloudflare/Workers 上,想要带实时预览 URL 的边缘分布式执行 2026 年 4 月 GA。两档:V8 isolate(JS/WASM)和完整容器沙箱。核实含 Durable Objects 的成本
Daytona 容器底座 托管;按用量计费,含免费额度 想为短时的智能体代码运行做极快的沙箱创建 称创建「低于 90ms」,但底座是容器,所以请按自己的威胁模型核实隔离模型
Runloop 双层(VM + 容器) 托管;免费 + 用量、Pro 档、企业版 要构建一个编码智能体,想要可挂起/恢复的 devbox,外加内置的 SWE 式基准 差异点是评测/基准 + 挂起/恢复工具,而不只是隔离
Northflank 微虚拟机(按基础设施定 Kata/gVisor) 自助 + 企业;标称 vCPU/GB 费率更低 想要一个平台同时承担应用部署和智能体代码执行,且计算费率更低 隔离随底层基础设施而变;定位在成本 + 自带云
Browserbase(+ Anthropic Managed Agents) 被隔离的 headless Chromium 托管;按会话 / 按浏览器分钟计费 智能体的活儿在浏览器里(网页自动化、computer-use),而不在 shell 驱动 Anthropic 的 Managed Agents(beta,2026):Anthropic 跑循环,Browserbase 提供被隔离的浏览器
Firecracker(项目) 微虚拟机 VMM 本身 开源(Apache 2.0),源自 AWS 沙箱化本身就是核心业务,想运营自己的微虚拟机机队 不是直接使用的产品;它是 E2B、Fly、Vercel、Lambda 之下的隔离原语
Cella(latere.ai) 作者自有运行时 Latere 产品族;公开文档有限 Latere 栈,以及作为本书的一个实例(第 75 章 披露为作者自有基础设施;用于示例,不是中立推荐。 一次 API 调用即启动一个具名的临时或持久沙箱
争议所在

微虚拟机对 gVisor 这条线,是一个真实的取舍,不是已解决的问题。微虚拟机(Firecracker)给出最强的硬件边界,但历史上在冷启动和镜像构建灵活性上成本更高;gVisor 用略薄的边界,换自定义镜像更快的启动;普通容器用真实的隔离代价,换速度和密度。随着 gVisor 对微虚拟机的成本与延迟曲线在 2026 年一路移动,适合某个威胁模型的隔离层级也会跟着移动。较耐用的说法是:对真正对抗性的、模型生成的代码,共享内核的容器是软边界,硬件或用户态内核隔离才是可证明的那条线。

如何具体地选

决策由三条轴主导:隔离强度对启动延迟、临时对持久、以及智能体需要碰什么(shell、GPU,还是浏览器)。

  • 选 E2B:想要智能体原生、微虚拟机隔离的流行代码盒,带开源 SDK 和可选的自托管出路,跑短时的 Python/JS 工具调用。
  • 选 Modal:智能体既要运行不受信任代码,要在同一个隔离环境里命中 GPU。
  • 选 Fly Machines / Sprites:想要微虚拟机控制权、为可复现评测运行做快照恢复,且空闲零计费。
  • 选 Vercel 或 Cloudflare Sandbox:应用已经部署在对应平台里。把 Cloudflare 的边缘分布和 V8 快速路径,与 Vercel 的 Firecracker 盒子和预置内存计费放在一起掂量。
  • 选 Runloop:要构建一个编码智能体,想要可挂起/恢复的 devbox,外加内置的 SWE 式基准。
  • 选 Browserbase(或 Anthropic Managed Agents):智能体在浏览器里行动,而不在 shell。
  • 在 Firecracker 上自托管:仅当沙箱化本身就是核心业务。

价格对比很棘手。「仅活跃 CPU」的提供商,仍可能对预置内存按整个生命周期计费(Vercel),而平台最低费用或 Durable-Object 费用(Cloudflare)藏在标称 vCPU 费率之下。永远要对自己的运行形态建模(生命周期、空闲占比、并发),而不是看每小时的标价。

空闲占比会拉开两类账单的差距:一种只按活跃 CPU 收费,另一种还对整个生命周期收预置内存。

# 一个突发型智能体:在长时间等待模型的空闲之间,出现短促的 CPU 峰值。
lifetime_s = 600          # 10 分钟的盒子,整个任务期间都存活
cpu_price = 0.000040      # 每活跃 vCPU-秒的美元价
mem_price = 0.0000060     # 每预置 GB-秒的美元价(空闲时也照样计费)
mem_gb = 2.0
for idle in [0.0, 0.5, 0.8, 0.95]:
    active_s = lifetime_s * (1 - idle)
    cpu_cost = active_s * cpu_price
    mem_cost = lifetime_s * mem_gb * mem_price   # 整个生命周期,而非仅活跃时段
    total = cpu_cost + mem_cost
    mem_share = 100 * mem_cost / total
    print(f"idle={idle:>4.0%}  active-CPU=${cpu_cost:.4f}  "
          f"provisioned-mem=${mem_cost:.4f}  total=${total:.4f}  "
          f"mem={mem_share:.0f}% of bill")

结论:空闲占比越高(智能体越多地在等模型),预置内存这一行就越主导账单,哪怕是在一个「仅活跃 CPU」的提供商上也如此。

一个稳妥的默认。 2026 年要构建一个会跑代码的智能体的团队,默认用 E2B 做托管的、微虚拟机隔离的执行:智能体原生、有真正的开源 SDK、有自托管的退路、隔离强(Firecracker),按秒计费也适合突发的工具调用。如果智能体需要盒内 GPU,改默认为 Modal。如果特别想要为可复现评测做快照恢复第 87 章)且空闲零计费,默认用 Fly Machines / Sprites。对于 Latere 栈,内部的对应物是 Cella,已披露为作者自有基础设施,因而不是中立之选。

安全地接线在一起

智能体框架是消费者,不是枢纽。它经网关调用模型,从检索拉取接地信息,经 MCP 触及工具,在沙箱里跑代码,并发出评测层和可观测层去读的追踪。图 85.3 给出了在生产里站得住的形态。

user 用户 / 应用 agent 智能体框架 循环 + 记忆 + 交接 user->agent gw 模型网关 agent->gw OpenAI 形状 API 虚拟密钥 mcpgw MCP 网关 agent->mcpgw MCP stdio / HTTP / 进程内 sb 沙箱 microVM / gVisor agent->sb 运行不受信任代码 rag 检索 / 向量库 agent->rag 检索 ckpt Postgres / SQLite agent->ckpt 检查点 State obs 评测 + OTel + 成本 agent->obs 轨迹 human 人类批准 付款、生产写入 agent->human 敏感动作? serve 推断服务 / 托管 API gw->serve tools MCP 工具服务器: db, browser, GitHub, files mcpgw->tools net 互联网 / 已批准 API sb->net 默认拒绝出站 + 允许列表 snap 干净基线 用于评测重跑 sb->snap 快照 / 恢复
图 85.3. 生产智能体运行时。框架不持有提供方密钥、也不持有原始凭据;模型访问、工具访问、计算访问各自经一个受治理的接缝伸进来。

有三件事让它站得住:

  1. 框架从不持有提供方密钥或原始凭据。 它持有的是一个限定在模型允许列表和预算上的网关虚拟密钥,MCP 流量则经过一个掌管工具凭据和允许列表的网关。把一个模型换成另一个,或给失控的循环加封顶,都是一次服务端改动。

  2. 状态住在检查点里,不在进程内存里。 一个持久的 State(LangGraph 的检查点、Pydantic AI 的持久化执行),才能让长时运行的智能体承受一次重启,也才能让人类暂停、检查、再恢复。

  3. 沙箱把密钥、模型访问和网络都留在盒子外面。 它们只通过狭窄、可审计的通道伸进来:模型走网关虚拟密钥;提供商愿意铸造的凭据走短时效的受限令牌,它不愿轮换的静态密钥走出网替换(第 56 章);网络走默认拒绝的出网。

一个最小的安全用法配置示意。形态比确切的键名更重要,请按各自的沙箱提供商来调。

sandbox:
  isolation: microvm          # firecracker/gvisor; not a bare container for untrusted code
  lifetime: ephemeral         # destroy after the run: nothing persists, nothing leaks
  timeouts:
    per_tool_call: 30s
    per_task: 10m
    max_lifetime: 30m
  network:
    egress: deny              # default-deny
    allow: ["pypi.org", "api.internal.example.com"]
  secrets:
    inject: none              # no raw provider keys or static secrets in the box
    model_access_via: gateway # short-lived scoped virtual key only
    credentials_via: egress-substitution  # proxy swaps a placeholder for the real secret toward allowed hosts
  audit:
    log: [commands, network_requests, file_writes]   # immutable trail
  approval:
    require_human_for: [payments, production_writes]

这些安全实践在 2026 年的各类来源里反复出现,也以「能力、效率、信任」这一视角为本章收尾:最小权限、短时效凭据;把每个工具或浏览器的输出都当作不受信任的输入,把「思考」和「行动」分开;默认拒绝出网,再配显式允许列表;在工具、任务、沙箱生命周期各级设硬超时;不可变的审计日志;默认临时,好让状态和凭据不堆积;以及对不可逆操作设置人在环关卡。

延伸阅读

框架与 MCP,一手来源:

沙箱,一手来源:

二手对比(仅用于佐证;其中的排名与观点未经独立核验):QubitTool 2026 框架对决;TURION.AI 的 LangGraph vs OpenAI vs Claude Agent SDK;WorkOS 的「Everything your team needs to know about MCP in 2026」;Northflank 的最佳沙箱运行器(2026)。

评论

登录后评论