博客 · 指南 · 2026年10月28日

读懂 AEGIS 执行日志:一次封装的工具调用记录了什么

其他语言: English, Español, Português, 日本語, Deutsch, Français, 한국어, Italiano, हिन्दी · 全部中文指南

声明:AEGIS 由 100monkeys.ai 开发,因此请把这篇指南当作开发方的说明来读。它由我们的一个 AI 智能体根据公开的 AEGIS 文档(英文)起草,主要是 Deploying & Running Agents、CLI Reference、SEAL Protocol 页面以及网关的 Observability 页面,并经公司审阅;这个简体中文版是英文原版指南的译文。下面的日志行、字段和代码都是文档自己的示例,不是我们为本指南抓取的输出;引文保留英文原文,译文附在旁边。

AEGIS by 100monkeys.ai, in beta,让每个智能体在各自隔离的运行时中运行,并通过一个名为 SEAL 的签名协议发送它的工具调用。本指南由外而内地读一次运行:执行记录、迭代日志,然后是 SEAL 层对单次工具调用(无论被允许还是被拒绝)记录了什么。

为什么以执行为单位

Executions 页面说得很直白:"Each execution is the unit of observability and replay in AEGIS. Logs, tool calls, blackboard snapshots, and refinement trajectories are all anchored to an execution ID."(在 AEGIS 中,每次执行都是可观测和重放的单位。日志、工具调用、blackboard 快照和改进轨迹都锚定在一个执行 ID 上。)下面每一步都从这个 ID 出发。一次执行运行 "Execute, Evaluate, Refine"(执行、评估、改进)循环,并在 "when the agent produces output that satisfies its evaluation criteria, when the iteration budget is exhausted, or when an unrecoverable failure occurs."(智能体产出满足其评估标准的输出时、迭代预算用尽时,或发生不可恢复的故障时)结束。

第 1 步:找到执行 ID

aegis task execute 在开始时会打印它(Execution started: <id>)。不是你自己发起的运行,就列出来:

aegis task list
aegis task list --agent-id <AGENT_ID>
aegis task list --limit 20

定时运行的执行 ID 在该计划的 runs 列表中;工作流运行由 aegis workflow executions list 列出。

第 2 步:阅读执行记录

aegis task status <EXECUTION_ID> --output json

文档说它 "returns the execution record, including status, start/end timestamps, total iterations, and each iteration's status and validation scores."(返回执行记录,包括状态、开始和结束时间戳、总迭代次数,以及每次迭代的状态和验证分数。)先看迭代次数。一次就通过的迭代是一次干净的运行;多次迭代意味着输出未通过验证并被改进过,日志会显示原因。

第 3 步:阅读迭代日志

aegis task logs <EXECUTION_ID>

文档给出的运行输出示例,逐行原样:

[2026-02-23T10:00:01Z] Execution a1b2c3d4-1111-... Started
[2026-02-23T10:00:01Z] Iteration 1 Started
[2026-02-23T10:00:03Z] Tool: fs.write /workspace/solution.py (234 bytes)
[2026-02-23T10:00:04Z] Tool: cmd.run python /workspace/solution.py
[2026-02-23T10:00:05Z] Tool: fs.write /workspace/result.json (89 bytes)
[2026-02-23T10:00:06Z] Iteration 1 Completed
[2026-02-23T10:00:06Z] Validation: exit_code=PASS json_schema=PASS (score=1.0)
[2026-02-23T10:00:06Z] Execution a1b2c3d4-1111-... Completed (1 iteration, 5.2s)

把它读成三类行:生命周期(started、completed)、智能体每次调用对应的一行 Tool:,以及一行 Validation:,给出每个验证器的结论和分数。加上 --errors-only 只看失败,--verbose 看更多细节,--follow 观察正在进行的运行。对于工作流,aegis workflow logs <EXECUTION_ID> --transitions 只显示状态变化。

第 4 步:了解每一行 Tool 背后是什么

每一行 Tool: 都是一次经过 SEAL 的调用。"Every tool call is wrapped in a SealEnvelope"(每次工具调用都装在一个 SealEnvelope 中):协议(seal/v1)、security_token(在 attestation 时签发的 JWT)、Ed25519 signature、payload(对 MCP 风格的调用,是一个 JSON-RPC tools/call)、container_id 和整数 timestamp。

把调用和你的运行绑在一起的是令牌的声明:sub(调用者)、scp(安全上下文的名称)、wid(工作负载),以及 exec_id,它 "ties every call in a session to one audit chain"(把会话中的每次调用绑定到同一条审计链)。所以第 1 步的执行 ID 就是把日志行和它的信封连起来的键。

第 5 步:读出调用为何被允许

网关在转发调用之前要做九项检查:协议字段、令牌的签名和有效期、调用者已注册的密钥、对规范化消息的信封签名、30 秒以内的时间戳,最后是 scp 中指定的安全上下文。最后这项检查会拒绝拒绝列表上的任何东西,只有当某个 capability 与调用的工具、路径、域名或子命令以及速率限制相符时才允许,否则以 "(default deny)"(默认拒绝)拒绝。上下文在会话中途不能改变:"callers cannot widen their context, switch contexts, or impersonate a different one."(调用者不能扩大自己的上下文、切换上下文,或冒充另一个上下文。)

第 6 步:读懂一次拒绝

被拒绝的调用不是日志里一段无声的空白。在 SEAL Gateway 上,它会返回一个数字代码。最常遇到的有:

文档说要 "switch on error.code, not on the status"(按 error.code 分支,而不是按状态),并指出一个陷阱:编排器自己的 POST /v1/seal/invoke 在拒绝时返回的是 TOOL_NOT_ALLOWED 这样的字符串代码,而不是数字。

第 7 步:阅读审计记录

SEAL Protocol 页面列出了每次调用产生的事件,包括 ToolCallAuthorized 和 PolicyViolationBlocked,以及每个事件记录的内容:信封的签名、时间戳和 jti;令牌的 sub、scp、wid 和 exec_id;工具名称和 "payload digest (not the full payload, payloads are not logged by default)"(载荷摘要(不是完整载荷,默认不记录载荷));以及 "the policy decision (ALLOW or DENY plus the deciding rule, if any)"(策略决定(ALLOW 或 DENY,如有则附上起决定作用的规则))。提供不可否认性的是签名:"only the holder of the ephemeral private key could have produced a valid signature."(只有临时私钥的持有者才能产生有效的签名。)

在独立部署的 SEAL Gateway 上,这些行在 gateway_events 表中。目前还没有对应的 REST 端点;文档给出的是 SQL:

SELECT event_type, created_at, payload
  FROM gateway_events
  WHERE payload->>'execution_id' = 'exec-1234'   -- Postgres JSONB syntax
  ORDER BY created_at;

这张表只追加不修改,所以可以轮询比上次发送的 ID 更大的记录,把它们送到你的 SIEM。

文档尚未回答的问题

下一步

审阅者在这些日志之外还需要什么,请阅读生产环境中 AI 智能体的可追溯性清单。

从 100monkeys.ai 安装 AEGIS