工具生态
前几部分讲的技术栈,最终要靠别人写好的软件来落地:训练框架、服务引擎、智能体框架,以及让它们彼此互通的标准。工具生态里的每一层都握着不同的控制点。一旦调用方不再是一个应用,而变成一个智能体,所有层都面临同一种转变:控制点必须被拉回到该层自身。
调用方变成智能体之后
一项能力不会跑在论文上,它跑在工具上,而工具生态分成几层,每一层负责本书一路追踪的生命周期中的一个阶段。训练框架把 FLOPs 转成权重,负责 第 10 章 的并行与内存。 服务引擎在延迟与吞吐预算下把权重转成词元,是 第 31 章 的主题。智能体框架把一个模型变成会规划、会调用工具、能跨多步行动的东西 (Yao et al. 2023),也就是 第 41 章 的运行 框架和 第 38 章 的架构。标准则让一个只写一次的工具,能被它们中的任何一个触及。
第一代这类工具假定了一个规整的调用方:一个应用服务器,长期存活,持有自己的凭证,每个请求调用一次模型,并记录结果。智能体打破了这个假定。它跑在沙箱里,调用 CLI,写脚本,派生助手, 把工作交给另一个智能体,并在启动它的聊天窗口关掉之后继续运行。关键调用方不再只是应用,而可能是智能体挑中的一个进程、它派生出的一个后台任务、一段比请求活得更久的会话。
调用方一旦这样移动,原先坐落在应用里的每个控制点都到了错误的位置。配置文件里的一把服务商密钥,就是一把模型读得到的密钥。被编译进应用里的一项权限,就是一项没有任何复核者看得见的 权限。住在聊天记录里的一份计划,就是一份没有人能编辑的计划。正因如此,这几层需要放在一起处理,而不是寄居在用到它们的各章里:调用方身份的变化,会同时重塑这四层。问题就在于:调用方变成智能体后, 每一层工具各自把控制点放到哪里。
控制点外移
四层的回应相同:把控制点从调用方里拉出来,放进一个调用方绕不过去的层。该层必须拥有自己的控制点,因为调用方已经不再可信、不能再托它持有这个控制点(图 75.2)。
协议把生态边界分开
新的工具生态不只是一串框架清单。它正在变成两条协议边界。Model Context Protocol(MCP)规范了 AI 应用或智能体如何触及外部数据、工具、提示与工作流 (Anthropic 2024)。MCP 于 2024 年 11 月诞生于 Anthropic,相继被 OpenAI、Google、Microsoft 的智能体主机采纳,并自 2025 年 12 月起交由 Linux Foundation 旗下的 Agentic AI Foundation 中立治理 (Anthropic 2025),这条边界从此不属于任何单一厂商。它是主机到工具的边界:这个智能体需要日历、数据库查询、代码搜索,或某个工作流。Agent2Agent 规范的是另一条边界:一个智能体如何发现另一个智能体的能力,如何在既有企业协议栈上通信,如何协调长时间任务,以及如何跨厂商或框架交换产物 (Google Cloud 2025)。它是智能体到智能体的边界,由 Google 发起,自 2025 年 6 月起同样归入 Linux Foundation 治理 (The Linux Foundation 2025)。
这个区分避免了一个错误抽象。工具不是智能体。工具暴露一个有边界的操作;智能体则有自己的任务状态、能力与策略表面。把每个协作者都当作工具,会遮住委托与问责。把每个工具都当作智能体,又会在一个简单调用足够的地方引入协调开销。
我们用 Latere 技术栈作为贯穿全章的案例,因为它的四个产品清楚地对应到面向智能体的工具层的四个原语:模型访问、执行沙箱、治理与编排。这些产品只是实现该模式的一种方式,并非唯一方式。接下来的四节, 是同一个外移落在四个不同的控制点上,而每一个都要付一份相称的成本,才换来相应的控制性质。
四个原语的共同形状
模型访问:一道有范围的前门
一个网关把调用路由到 OpenAI、Anthropic、Gemini、OpenRouter 或 Ollama,记录用量,并给支出封顶。第一代到此为止。面向智能体的版本,以 Latere Lux 为例,多加一条规则:真实的服务商密钥 住在网关里,永远不抵达调用进程。智能体连的是网关,而不是服务商,于是模型选择变成了配置,每次调用都能归到组织、人、产品、会话与模型上。要停掉一个跑偏的任务,吊销或收窄网关凭证就够了, 不必轮换服务商密钥。控制点是模型访问本身,而不是文件里的一把密钥。
代价是用一跳换控制。把每次调用都路由过网关,会多一次网络跳转,也让网关成了关键路径上的一个依赖。它换来的是:服务商密钥永远不抵达进程,支出也能按会话归属。对调用方不可信的智能体 流量,这一跳值得;对单个可信的应用服务器,它可能就是纯开销。
执行:一个可持久或可丢弃的沙箱
云算力卖的是两种不适配智能体工作的形态:一种是一返回就消失的函数,一种是得有人照看的机器。沙箱原语,以 Latere Cella 为例,落在两者之间,办法是把想留下的和可以丢掉的分开。状态持久化 在一个具名工作区里;算力一闲置就停,半秒内就能恢复,丢了也不可惜。密钥保存在上了锁的仓库里:工作区看到的只是一个不透明的占位符,一个终止 TLS 的出网代理只在流量发往某个密钥所限定的主机时,才把真实值换到 线上,于是真实密钥从不进入盒子,泄露占位符也毫无用处(第 56 章)。网络出口默认拦截,挡在同一个代理、跟着工作区走的许可名单后面;而每条命令、每次密钥使用、每次启动与停止,都 按引发它的人记录下来。这一点,正是治理层稍后要使用的东西。
代价是用成本换持久。把一个具名工作区保温到能在半秒内恢复,有明确成本;默认拦截的许可名单和密钥注入,也加上了一次性函数无需付出的摩擦。这笔权衡恰好在工作长、有状态、或接触真实密钥时成立, 而对一个无状态的一次性任务则是浪费,那类工作本该交给一个普通函数。
治理:以「智能体即文档」为基座
一旦同时跑着不止一个智能体,自主就把可见性换走了:到手的是一个答案和一张账单,中间的步骤却没了。治理原语,以 Latere Topos 为例,不接受这笔交易,办法是让智能体成为一份文档:名字、人类所有者、 模型、工具、预算,再加上审批环节,全部以受版本控制的纯文本写出来,复核者在运行前后都读得到。每个动作都是一条只追加的日志行,带时间戳和执行者,于是一段铺开成十几个智能体的会话,能还原成一棵 调用树。两条规则给这份文档提供约束力。权限在工作向下交接时只会衰减:一个子智能体继承父智能体的权限,减去被撤回的部分,并且永远没法把失去的部分重新授予自己。而人可以被放在任何决策要紧的 步骤上,于是智能体会暂停,直到签字落定。
代价是拿开销换可审计。智能体即一份文档,再加一份只追加的日志,代价是写放大和回路里多出的一个复核步骤。回报是:一个从没看过代码的合规复核者也能读到全貌,而且没有任何被拒的请求会不被记录。这笔代价要等到 同时跑着不止一个无人值守的智能体时,才被证明值得;对单个有人监督的智能体,它大多只是走个过场。
编排:一份能操控的计划
一个跨多步规划与行动的模型,需要在请求与代码之间垫一层结构。编排原语,以 Latere Wallfacer 为例,把这层结构做成一件显式的产物:把想法变成计划,把计划变成范围明确的任务,把任务变成智能体执行,再把产出变成可审阅的变更。
人要阅读、编辑、提出异议的对象,是这份计划,而不是聊天记录;它底下的任务也都不超出计划所描述的范围。每一个箭头,都是一个人可以停下来调整方向的位置(图 75.5)。
代价是拿返工换规划延迟。在请求与代码之间插一份计划,比一个直接跳到代码的写代码智能体出第一份结果要慢。它的收益在于:交给人修改的是一件产物,而不是一段聊天记录或大段 diff, 任务也被框在一个复核过的范围里。对一行的改动,计划是开销;对多步的工作,它是唯一可控的对象。
四个原语共享同一种形状。每一个都取一个原先坐落在调用方里的控制点(一把密钥、一个运行时、一项权限、一份计划),把它移进一个调用方绕不过去的层。标准则是让这些层保持可组合的东西:通过 模型上下文协议(MCP) (Anthropic 2024) 这种连接模型与工具服务器的公共协议暴露一次的工具,可被任何运行框架触及,于是智能体框架不必为每个模型重新实现这个工具。
层的演化
每一层都是靠取代一个更早的版本,才到达它当下的形态,而这段演进值得追一追,因为它显示出同一个调用方转变正在驱动它们全部。
训练框架最先出现,也最成熟。Megatron-LM 在原生 PyTorch 中确立了层内张量并行(把一层拆开分散到多个设备上) (Shoeybi et al. 2019),而 ZeRO,也就是 DeepSpeed 背后的优化器,移除了数据并行训练(把整个模型复制到每个设备上)的内存冗余,让模型规模能随设备数扩展 (Rajbhandari et al. 2019)。它们的内部属于 第 10 章; 在这里,它们重要是因为这一层的调用方从未移动。一次训练仍由运维者来启动,所以这一层受智能体转变影响最小。
服务引擎其次移动。决定性的一步,是把 KV 缓存(模型为会话中每个已处理词元保留的注意力状态)当作操作系统内存来对待:PagedAttention,也就是 vLLM 背后的算法,把缓存存进映射到非连续物理内存的定长块,从而消掉了封顶吞吐的碎片 (Kwon et al. 2023)。那段故事在 第 31 章 与 第 32 章。服务层的调用方正在转变,从一个发送一次提示的应用,转向一个持有长而分叉会话的智能体,这就是 为什么会话感知的路由与归属正在成为服务的关切,而不只是网关的关切。
面向智能体的几层更直接地暴露出这种转变,因为它们够新,第一代仍清晰可见。网关起步时是一个成本与路由工具:为一张杂乱的多服务商账单提供一个连接地址。这解决的是一个软件问题,并且它假定 密钥可以安全地躺在配置文件里,因为调用方是一个应用。Lux 是第二代,是在调用方变成智能体、密钥不再能托付给调用方之后才建起来的。沙箱从无服务器与虚拟机的二分,演化出一个保留状态、丢弃 算力的中间地带。而智能体编排走过的,是一段更尖锐的实证弯路,记录在 Wallfacer 背后的 goalless-agents 实验里 (Ou 2026):一支由角色专门化智能体组成的结构化团队一直在交付,却停止了发现,只在自己的小圈子里打磨琐碎,而一个拥有完全自由的无目标单一智能体,则把项目膨胀过 60,000 行而崩溃。 最后的解法既不是更多规矩、也不是更少,而是一种刻意的节奏:约 80% 改进已有,20% 探索,并在每次转向时都有人在场。
智能体框架到底该施加多少结构,并无定论,而两极都是真实的。一派构建刚性编排:一张固定的工作流图、带类型的步骤、每次转移都被指定,这清晰且安全,但正如 goalless-agents 实验所发现的,它会压制发现, 直到智能体只在自己的小圈子里打磨。另一派运行开放式的智能体回路,自由度很宽,发现更多,但越过某个点会崩溃成无法维护的蔓生。80/20 的改进对探索节奏是一个实证数据点,而不是已成定论的法则, 而同样的张力在 第 43 章 中又以脚本化流水线与自主集群之间的取舍重现。把恰当的结构量当作取决于任务的选择,而不是框架能一次性定死的常数。
边界为何成立
这些原语之间的边界,本身就是一个设计选择。Lux 被有意与 Cella 和 Wallfacer 分开:模型访问既不是运行时生命周期,也不是任务编排,于是服务商密钥、路由与支出策略住在同一个地方,而不是堆进沙箱或 任务运行器。正是清楚的层边界,才让 Model Context Protocol 这样的标准能连接各层,而不至于让每一层把其他层都吞进去。它们也创造了新的攻击表面。工具描述符现在成了模型会读取的类提示环境的一部分。 MCPTox 显示,藏在 MCP 工具元数据中的恶意指令,可以在真实服务器上诱导不安全的工具使用 (Wang et al. 2025);后续工作则把工具投毒、工具遮蔽和描述符 rug pull 归纳为协议层风险,需要签名、语义审查与运行时护栏来约束 (Jamshidi et al. 2025)。互操作降低了集成成本,但也意味着不可信工具可以通过一扇标准门进入。标准并不免除身份、来源、权限与审计的需要,它只让这些控制更便于移植。
来自 第 56 章 的那条安全规则,即服务商密钥必须永不抵达智能体进程,正是它强制出了智能体框架调用路径的形状。因为密钥不能和调用方同住,框架就不能直接调用服务商:它必须路由过一个 持有密钥、只暴露有范围访问的网关。于是下层的一项授权约束,决定了上层的架构。同一条约束也从沙箱指向治理:审计日志只能记录运行时呈现出来的东西,所以 第 55 章 能复核的范围,被执行层 选择记录什么所界定。
这些层如何组合
实现层面的现实是:这些层会组合,而价值就在组合处。一个在 Topos 之下的智能体,跑在一个 Cella 工作区里,通过 Lux 触及模型,并由一个真实身份所拥有,于是单段会话就串起一份权限文档、一份运行时日志、
一条模型用量轨迹,以及一个具名所有者(图 75.6)。每一层都引用它下面的一层:治理使用沙箱的审计日志(Cella 的启停与密钥使用记录),而网关的归属写入治理日志所索引的同一个会话 id。
要实现其中任何一层,两条不变量都必须成立。其一,控制点留在该层,绝不落到调用方手里:密钥在网关,密钥在出网代理之后,权限在文档,范围在计划。其二,每个特权动作都在它发生的当下、按一个 执行者被记录下来,因为正是一份只追加的记录,让事后的监督成为可能。能力衰减是唯一值得用代码措辞来陈述的规则:一个被交接出去的上下文,是父的减去一次撤回,绝不会是一个超集。
child.permissions = parent.permissions - withdrawn
assert child.permissions <= parent.permissions # can only shrink
下面这段程序展示两条衰减规则:权限沿交接链逐级收缩,而后代无法把上游撤回过的权限重新授予自己。
parent = {"read_fs", "write_fs", "net", "spend", "spawn"}
def delegate(perms, withdraw):
return perms - withdraw # 子继承父的权限,减去一次撤回
child = delegate(parent, {"spend", "net"})
grandchild = delegate(child, {"write_fs"})
# 一个后代试图把已在上游撤回的 "spend" 重新授予自己。
wanted = grandchild | {"spend"}
granted = wanted & child # 钳制到父的集合:不能超出
print("parent :", sorted(parent))
print("child :", sorted(child))
print("grandchild :", sorted(grandchild))
print("re-grant spend ->", sorted(granted), "blocked:", "spend" not in granted)
for ctx in (child, grandchild, granted):
assert ctx <= parent # 每一步都只会收缩
print("invariant holds: every delegated context is a subset of its parent")
案例之外,这里对下层的覆盖范围很窄。训练框架与服务引擎在这里只作为生态类别被点名,深入的部分留到 第 10 章 与 第 31 章 专门展开。这里的深度落在面向智能体的几层 与绑定它们的标准上,因为那里才是调用方转变正在发生之处,也是案例有东西可展示之处。
把四个原语放进一套运行中的栈里,各自的责任会自然分开。模型访问与沙箱是效率层:它们让智能体算力易于归属、易于丢弃。治理与人在回路的交接是信任层:它们让自主可被复核。编排则是能力所在之处,是让一个智能体能往深里做而不失控的那种节奏。工具生态让能力、效率与信任不再只是章节主题,而成为一个团队真正运行的软件。
延伸阅读
- Shoeybi et al., “Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism,” 2019. arXiv:1909.08053
- Rajbhandari et al., “ZeRO: Memory Optimizations Toward Training Trillion Parameter Models” (DeepSpeed), 2019. arXiv:1910.02054
- Kwon et al., “Efficient Memory Management for Large Language Model Serving with PagedAttention” (vLLM), 2023. arXiv:2309.06180
- Yao et al., “ReAct: Synergizing Reasoning and Acting in Language Models,” 2023. arXiv:2210.03629
- Anthropic, “Model Context Protocol” (工具与数据连接的开放标准), 2024. modelcontextprotocol.ioMCP 是一个开放标准,通过通用集成层把 AI 应用和智能体连接到外部数据源、工具与工作流。
- Anthropic, “Donating the Model Context Protocol and Establishing the Agentic AI Foundation” (MCP 移交 Linux Foundation 之下的中立治理), 2025. anthropic.comAnthropic 将 MCP 捐赠给 Agentic AI Foundation,这是 Linux Foundation 下由 Anthropic、Block 与 OpenAI 共同发起,并获 Google、Microsoft、AWS、Cloudflare 与 Bloomberg 支持的定向基金,旨在让智能体 AI 标准保持中立、由社区驱动。
- Google Cloud, “Announcing the Agent2Agent Protocol (A2A)” (面向智能体互操作的开放协议), 2025. developers.googleblog.comGoogle 将 A2A 定义为开放协议,使不同厂商或框架构建的智能体能够通信、协同行动,并支持长时间运行的多智能体工作流。
- The Linux Foundation, “Linux Foundation Launches the Agent2Agent Protocol Project to Enable Secure, Intelligent Communication Between AI Agents” (Google 于 2025 年 6 月将 A2A 捐赠给 Linux Foundation), 2025. linuxfoundation.orgGoogle 将 A2A 协议捐赠给 Linux Foundation,使智能体互操作标准处于厂商中立的治理之下,并获得 100 多家技术公司的支持。
- Wang et al., “MCPTox: A Benchmark for Tool Poisoning Attack on Real-World MCP Servers” (真实 MCP 服务器上的工具投毒基准), 2025. arXiv:2508.14925MCPTox 在 45 个真实 MCP 服务器和 353 个工具上评估工具投毒,显示藏在工具元数据中的恶意指令会诱导不安全的工具调用。
- Jamshidi et al., “Securing the Model Context Protocol: Defending LLMs Against Tool Poisoning and Adversarial Attacks” (工具投毒、工具遮蔽与 rug pull 防御), 2025. arXiv:2512.06556该文研究 MCP 的语义攻击,包括工具投毒、遮蔽和 rug pull,并提出描述符签名、语义审查与运行时护栏。
- Ou, “Goalless Agents” (Wallfacer 的改进对探索节奏背后的实验), 2026. changkun.de实验表明,无目标 AI 智能体(Claude 与 Codex)展现出由训练塑造的稳定先验偏好,而 80/20 的探索与利用节奏能使系统产生有方向的纵深演进,这是刚性流水线和完全自由均无法实现的。
评论
登录后评论