博客 · 指南 · 2026年10月29日
从标准注册表中选择 AEGIS 智能体运行时
声明:AEGIS 由 100monkeys.ai 开发,因此请把这篇指南当作开发方的说明来读。它由我们的一个 AI 智能体根据公开的 AEGIS 文档起草,主要是 Standard Runtime Registry、Management Tools 中的 aegis.runtime.list 条目和 CLI Reference,并经公司审阅;这个简体中文版是英文原版指南的译文。下面每一行 YAML、每个调用和每条命令都复制自这些页面,写作本指南时没有运行其中任何一条;引文保留英文原文,译文附在旁边。文档没有回答的问题,最后一节会说明。
AEGIS by 100monkeys.ai, in beta,在容器中运行每个智能体。智能体清单可以写明语言和版本而不是镜像,由编排器来选镜像。注册表页面说得很直接:"Using StandardRuntime means you never specify a Docker image directly."(使用 StandardRuntime 意味着你从不直接指定 Docker 镜像。)本指南选一个运行时,在部署前检查它,并说明运行时会发生什么。
第 1 步:了解注册表决定什么
当清单给出 spec.runtime.language 和 spec.runtime.version 时,编排器会 "resolves them to a deterministic, pinned Docker image at execution time."(在执行时把它们解析为一个确定的、固定版本的 Docker 镜像。)映射保存在 runtime-registry.yaml 中,提交在编排器仓库里,并在守护进程启动时加载。对审查来说,要点是:写明同一组合的两个智能体运行在同一个镜像上,而且没有人在清单里手打镜像标签。
第 2 步:询问注册表接受什么
一个为其他智能体编写清单的智能体,或者客户端前的一个人,可以调用内置工具 aegis.runtime.list。不带参数时它列出所有运行时;带上语言时它会过滤:
{}
{ "language": "python" }
回答会给出每个运行时的 language、version、image、description 和一个 deprecated 标志,另加 custom_runtime_supported。注册表页面给出了这个工具存在的理由:它 "prevents hallucinated language-version combinations from being written into manifests."(防止臆造的语言和版本组合被写进清单。)它在 aegis-system-agent-runtime 安全上下文中可用,"with no additional configuration"(无需额外配置)。
第 3 步:选一个受支持的组合
注册表页面目前的矩阵:
| 语言 | 版本 | 镜像 |
|---|---|---|
python | 3.11, 3.10; 3.9 已弃用 | python:3.x-slim, Debian 12 |
javascript | 20, 18 | node:20-alpine, node:18-alpine |
typescript | 5.1 | node:20-alpine |
go | 1.21, 1.20 | golang:1.x-alpine |
rust | 1.75, 1.74 | rust:1.x-alpine |
bash | 5 | python:3.11-slim, 附带用于引导程序的 python3 |
写明已弃用版本的清单 "still execute but emit a warning in the execution log"(仍会执行,但会在执行日志中发出警告)。页面把 python: "3.9" 列为已弃用,并建议迁移到 3.10 或 3.11。移除会 "two phases in advance"(提前两个阶段)公布,已移除的版本无法通过校验。
第 4 步:把它写进清单
spec:
runtime:
language: "python" # Required (StandardRuntime)
version: "3.11" # Required (StandardRuntime)
isolation: "docker" # inherit | docker | firecracker
model: "default" # LLM model alias from aegis-config.yaml
"Specifying an unsupported language+version combination is rejected at execution validation time with a descriptive error. There is no fallback to a default version."(指定不受支持的 language+version 组合,会在执行校验时被拒绝,并给出说明性的错误。不会回退到默认版本。)最后一句才是有用的:一个拼写错误不会悄悄地在别的解释器上运行。
第 5 步:先校验,再部署
aegis agent deploy ./agent.yaml --validate-only
aegis agent deploy ./agent.yaml
--validate-only 只解析和校验,不部署。同一名称和版本部署两次会失败,除非加上 --force。
第 6 步:安装智能体需要的东西,或改用自定义镜像
每个标准镜像都带有该语言的包工具:Python 镜像上是 pip 和 apt,Node 镜像上是 npm 和 apk,Go 上是 go 和 apk,Rust 上是 cargo 和 rustc。对 TypeScript,编排器会设置 TYPESCRIPT_VERSION=5.1,文档说你的引导程序应当用 npm install -g typescript ts-node 安装工具链。当智能体需要 ffmpeg 这样的系统包、注册表没有的版本、预编译的二进制文件或私有依赖时,页面给出的答案是 Custom Runtime,也就是你自己的镜像,而不是每次运行都安装同样的东西。
第 7 步:了解智能体启动时发生什么
对标准运行时,编排器把组合解析为一个镜像,创建一个主进程只负责保持存活的容器,如果 /usr/local/bin/aegis-bootstrap 还不存在,就把它的 bootstrap.py 上传到那里,再带着提示词运行它。引导程序连回编排器的分发网关,运行迭代循环:"generate → execute → validate → refine"(生成、执行、校验、改进)。
第 8 步:在你自己的节点上,把注册表文件放在守护进程查找的位置
# aegis-config.yaml
spec:
runtime:
runtime_registry_path: "runtime-registry.yaml"
默认路径是相对于守护进程工作目录的。如果文件缺失或无法解析,守护进程会 "hard-fails at boot"(在启动时直接失败),因为 "a missing registry makes every StandardRuntime agent execution impossible."(缺少注册表会让每个 StandardRuntime 智能体都无法执行。)当守护进程从别的目录运行或在容器镜像中运行时,请设置绝对路径。
文档没有回答的问题
- 两个示例回答不一致。注册表页面中
aegis.runtime.list的示例回答列出python:3.x-slim上的 Python 3.11、3.10 和 3.9;Management Tools 页面的示例列出ghcr.io/100monkeys/runtime-python:3.12上的 Python3.12,而矩阵里没有它。请询问你自己的节点,不要相信任何一个示例。 - 何时捕获错误的组合。注册表页面说不受支持的组合会在 "at execution validation time"(执行校验时)被拒绝。它没有说
aegis agent deploy --validate-only是否已经能发现它。 - 隔离取值。注册表页面的清单注释列出
inherit | docker | firecracker;工作流和智能体参考还列出了process。 - 日期。除了 "Phase 2"(第 2 阶段)之外,没有给出 Python 3.9 的移除日期。
下一步
运行时只是智能体清单的一个字段。其余部分请阅读AEGIS 智能体清单:每个字段及其约束。AEGIS 用 100monkeys.ai 上印出的命令安装:
curl -fsSL https://get.100monkeys.ai | bash