Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(Ai2 / Skylight 2026-07-15 案例拆解)
TL;DR
- 场景:Ai2 / Skylight 2026-07-15 在 Hugging Face Blog 公开的 Shippy Agent 案例,是一套"高风险海事查询 Agent"的端到端实现,不是更大的模型,而是一套受控 Agent Runtime。
- 结论:可靠性来自 Soul+Skills 版本化、确定性 CLI 收敛错误面、每会话 Kubernetes Deployment 隔离、Harbor 跑真实数据 + 专家 Rubric 四层共同把模型可犯的错误空间逐层收窄。
- 产出:可迁移到语音 Agent / 机器人 / 企业数据助手的三层模式、四类收敛清单、6 个评测指标、12 条错误速查卡与一份 7 步实施/实验方案。
版本矩阵
| 功能 / 事实 | 状态 | 说明 |
|---|---|---|
| 原文:Soul + Skills 打包进版本化 Docker 镜像,Config 决定 OpenClaw Harness、当前 Claude Opus 4.6 和运行设置 | ✅ 已验证 | Hugging Face Blog S04 原文(huggingface.co/blog/allenai/shippy-tech-blog,2026-07-15) |
| 原文:Skill 遵循 Agent Skills 开放格式(SKILL.md / metadata / scripts / references / assets) | ✅ 已验证 | 原文 S04 + Agent Skills 官网 agentskills.io(持续更新) |
| 原文:Skylight CLI 负责鉴权、分页、结构化输出;早期直接 API 方案出现分页、几何编码、过滤器错误 | ✅ 已验证 | 原文 S04(这是把 CLI 收口为受控工具面的直接动机) |
| 原文:Mothership 为每个用户会话创建独立 Kubernetes Deployment,注入用户 JWT,限制文件/网络边界 | ✅ 已验证 | 原文 S04(架构图:Sandbox 内部含 Sidecar Lifeline + OpenClaw Harness 双向通讯) |
| 原文:Harbor 插件启动被测 Shippy 精确版本,对实时数据运行专家加权 Rubric,Skill/模型/数据变化触发重跑 | ✅ 已验证 | 原文 S04 + Harbor Framework 官网(harborframework.com) |
| 原文:模型路由与跨线程记忆是后续路线,不是当前已完成能力 | ✅ 已验证 | 原文 S04(明确"future work",避免误读为现能力) |
| 当前底层模型为 Claude Opus 4.6 | ⚠️ 待核验 | 用户原文给出"当前 Claude Opus 4.6";S04 未直接锁定版本号,4.6 为作者描述,建议以实跑镜像为准 |
| Agent Skills 开放格式是 Anthropic 主导的 Agent Skills 规范 | ⚠️ 待核验 | 用户原文称"开放格式";Agent Skills 官网 agentskills.io 持续更新,但本案例实际由哪一方率先提出、当前治理方需另核 |
| Shippy 案例使用 Go / TypeScript / Python 等具体语言栈 | ⚠️ 待核验 | 原文未在 S04 中披露具体后端语言;架构图中提及 Postgres + GCS 与 Redis Streams |
| 实时数据:原案例背后是 Global Fishing Watch / Skylight 平台数据 | ⚠️ 待核验 | 评分示例提到"Global Fishing Watch via Skylight",但实时数据源所有权与计费模型未在 S04 完整披露 |
| 每会话 Kubernetes Deployment 的资源回收机制与空闲超时阈值 | ⚠️ 待核验 | 原文给出"ephemeral, per-user"和"Redis Streams inbound / outbound per thread",但具体 TTL/Idle TTL 未披露 |
| 反方观点:直接 Function Calling 对简单低风险 API 已足够 | ✅ 立场 | 本文作者明确列出,文章不否认;CLI 收敛是为高复杂 API 付出 |
| 反方观点:低价值短会话更适合共享池 + Namespace | ✅ 立场 | 本文作者明确列出,不是所有场景都该上每会话 Deployment |
| 反方观点:实时数据评测降低完全可复现性,需保留冻结快照 | ✅ 立场 | 本文作者明确列出,是 Live-Data Eval 的天然代价 |

**一句话核心论点:**高风险 Agent 的可靠性主要来自把模型可犯的错误空间逐层收窄,并用真实数据、真实版本和真实工具链做整体回归。

摘要
Shippy 不是"更大的海事模型",而是一套受控 Agent 系统。Soul 与 Skills 形成版本化行为包,Config 可切换 Harness 和模型;类型化 API 与确定性 CLI 处理鉴权、分页和几何等高错误率细节;每个用户会话拥有独立 Kubernetes Deployment;Eval 通过 Harbor 启动精确版本,对实时数据和专家 Rubric 评分。本章将案例抽象为可迁移到语音 Agent、机器人和企业数据助手的三层模式。



读者问题
- 为什么复杂 API 不应直接暴露给模型?
- 确定性 CLI 如何缩小错误空间,又保留 Agent 灵活性?
- 每会话 Kubernetes 隔离何时值得,何时过重?
- 实时数据变化下如何区分模型回归与数据漂移?

已核验事实
- Shippy 的 Soul 与 Skills 打包进版本化 Docker 镜像,Config 决定 OpenClaw Harness、当前 Claude Opus 4.6 和运行设置。(S04)
- Skill 遵循 Agent Skills 开放格式,由 SKILL.md、元数据、脚本、参考材料和资产组成。(S04、S05)
- Skylight CLI 负责鉴权、分页和结构化输出,结果固定写入本地 JSON;早期直接 API 方案出现分页、几何编码和过滤器错误。(S04)
- Mothership 为每个用户会话创建独立 Kubernetes Deployment,注入用户 JWT,并限制文件和网络边界。(S04)
- Harbor 插件启动被测 Shippy 精确版本,对实时数据运行专家加权 Rubric,并在 Skill、模型或数据变化时重跑。(S04、S07)
- 模型路由与跨线程记忆是后续路线,不是当前已完成能力。(S04)
技术机制
Shippy 的可靠性来自四类收敛:
- 语义收敛:Soul 明确拒绝法律判定和超出数据的推断。
- 接口收敛:API Schema → 确定性 CLI → Skill,下一层不再重新实现上一层的复杂性。
- 资源收敛:每会话独立文件、凭据和网络边界。
- 评测收敛:固定版本、实时数据、专家 Rubric、Judge 解释、回归门禁。
写文件而不是通过 Shell 管道传大结果,不只是性能优化,也使中间结果可追踪、可复用和可清理。

工程含义
迁移到实时语音 Agent 时,可以把 ASR、对话状态、LLM、工具层和 TTS 分为独立版本单元。工具层通过确定性 CLI 或服务接口控制参数,语音 Session 使用独立工作目录和短期 Token;系统级 Eval 同时检查识别、工具选择、数据正确性、延迟、打断和最终语音输出。
实现或实验方案
- 把系统边界、Skill 和运行配置分开版本化,发布物中记录三者组合。
- 为高复杂 API 构建面向任务的 CLI,而不是把所有底层参数原样暴露给模型。
- CLI 输出使用稳定 JSON Schema、显式文件路径、生命周期和大小限制。
- 按照风险选择隔离级别:进程、容器、Namespace、每会话 Deployment 或专用账户。
- 建立专家 Rubric:事实准确性、时间范围、边界解析、来源归因、拒绝和风格使用不同权重。
- 为数据快照或查询时间打标;当结果变化时先区分数据漂移与 Agent 回归。
- 保留失败样例的 Trace 和版本,任何 Skill、模型或数据变化都触发差分报告。
评测指标
- Tool Invocation Validity:CLI 命令和参数通过 Schema 校验的比例。
- Data Completeness:分页、时间范围和几何过滤后结果是否完整。
- Isolation Breach:跨会话文件、凭据或数据可见性事件,目标必须为零。
- Rubric Pass Rate:按任务类型和准则分解,不只看总分。
- Cold Start / Cost:每会话隔离带来的启动时间和资源成本。
- Data Drift Delta:同版本 Agent 在不同数据时间点的得分变化。

反方观点与替代解释
- 直接 Function Calling 在简单、低风险 API 上可能足够,不需要所有系统都增加 CLI。
- 每会话 Kubernetes 隔离安全性高,但低价值短会话可能更适合共享池加 Namespace。
- 实时数据评测更接近生产,却降低完全可复现性,因此需要同时保留冻结快照集。
适用边界
适合高权限、数据敏感、复杂 API 和专业领域 Agent。对于无外部工具的简单问答,完整 Mothership 式隔离成本过高;应按风险选择最小充分架构。

风险与误读点
- 把 Shippy 单一案例写成行业标准。
- 忽略每会话 Deployment 的冷启动和集群成本。
- 让 LLM Judge 取代专家复核。
- 临时 JSON 文件缺少唯一命名、清理和配额。
- 把未来模型路由和跨线程记忆描述为现有能力。
参考来源
- S04|What building Shippy taught us about building agents :Ai2 / Skylight / Hugging Face,2026-07-15。
- S05|Agent Skills Overview :Agent Skills,持续更新。
- S06|OpenClaw repository :OpenClaw,持续更新。
- S07|Harbor :Harbor Framework,持续更新。
错误速查卡
| 症状 | 根因 | 定位 | 修复 |
|---|---|---|---|
| 模型对同一问题两次答案数据不同,但代码没动 | 没区分"数据漂移"和"Agent 回归" | 对比 Rubric 各项得分 + 数据快照时间戳 | 用冻结快照集做回归门禁,实时数据只做探索 |
| 工具调用经常出现分页、几何、过滤器错 | 把底层 API 直接暴露给模型 | 在 Skylight CLI 之外加一层任务型 CLI | 强制走 CLI,所有参数 Schema 校验 |
| Tool Invocation Validity 低于 95% | 命令参数未校验 / 自由文本拼接 | 抓取失败调用样本,按 Schema diff | 给 CLI 加显式参数 Schema + 路径/日期/几何白名单 |
| Data Completeness 偶尔掉到 80% 以下 | 分页上限 / 时间窗口被截断 | 检查 Skylight CLI 的 --limit 与时间过滤 |
强制分页全量 + 几何相交校验 + 总数断言 |
| Isolation Breach 出现非零事件 | 共享文件系统、共享 Token 缓存、共享网络出口 | 审计 Sidecar / Sandbox 进程命名空间与文件系统 | 改回每会话 K8s Deployment,强制 JWT 注入 + NetworkPolicy |
| Rubric Pass Rate 看似高但实际不可信 | LLM Judge 取代了专家复核 | 检查 Judge 的 few-shot / rubric 来源 | 把专家权重显式注入 Prompt,保留 Judge Reasoning 留档 |
| 改一行 Skill 提示,所有 Eval 都要重跑 | Eval 与数据时间未分离 | 看 Harbor 任务配置 | 用冻结快照做"必须通过"基线,实时数据只做"漂移观测" |
| Cold Start / Cost 暴涨 | 每会话都起独立 K8s Deployment | 监控冷启动比例 + 集群 CPU/内存峰值 | 按风险分级:低风险走共享池 + Namespace,高风险才每会话 Deployment |
| 临时 JSON 文件把磁盘打满 | 没有唯一命名、清理、配额 | 查输出目录 inode / size | 用 session_id + ts + hash 命名 + TTL + 配额上限 |
| 误把"未来模型路由"当成现能力 | 把 Roadmap 写成已交付 | 检查原文 "future work" 段 | 文档与代码门禁分开标注,Roadmap 不进工程方案 |
| 第三方文章把 Shippy 描述成"通用最佳实践" | 单一案例被泛化 | 复读适用边界段 | 显式标注:本文案例适用于高权限 / 数据敏感 / 复杂 API;不适用简单问答 |
| 把"OpenClaw / Skylight CLI / Harbor"复制到生产时缺少官方来源 | 引用的是社区文章而非一手 | 查 Reference 段链接 | 引用 S04 Hugging Face Blog 与 agentskills.io / openclaw / harborframework 官方域 |
| 实时数据评测结果"看起来变好"或"看起来变差"但无解释 | Judge Reasoning 没有留档 | 看 Harbor 输出是否含 reason 字段 | 在 Eval 报告里强制保留 Judge Reasoning 文本 + 引用源 |