Shippy:构建高风险海事AI代理的架构与经验教训
Shippy:构建高风险海事AI代理的架构与经验教训
TL;DR
Hugging Face 和 Ai2 推出了 Shippy,这是一个专为高风险海事领域感知设计的海事 AI 代理。为了在错误数据可能导致资源浪费或安全风险的环境中确保可靠性,Shippy 采用了将人格与能力分离的模块化架构,使用确定性 CLI 工具来接口实时数据,并在隔离的用户沙盒中运行。
Agent 解剖:Soul、Skills 和 Config
Shippy 被结构为三个不同的组件,以确保版本控制、可审计性和灵活性:
- Soul:定义代理人格和行为边界的系统提示。这包括显式约束,例如拒绝进行法律判断或超出可用数据进行推测。
- Skills:定义为带有结构化前置元数据的纯 Markdown 文件(遵循 agent-skills 规范),skills 提供特定任务的说明。当前功能包括查询 Skylight API 以获取船舶数据和事件、查询专属经济区(EEZ)和海洋保护区(MPA)边界、解释船舶轨迹数据以及生成交互式地图链接。
- Config:确定代理 harness(OpenClaw)和 LLM(目前为 Claude Opus 4.6)的运行时设置。
这些组件被打包到一个版本化的 Docker 镜像中,使开发者可以通过配置更换模型或 harness,而无需重新构建整个代理。
确定性工具用于非确定性代理
为了减轻 LLM 的非确定性,Shippy 不会发出原始 API 调用。相反,它通过一个专门构建的自文档 CLI 与 Skylight 平台进行交互。
CLI 层
直接的 API 调用经常导致分页格式错误、几何编码错误和错误的过滤器类型。Skylight CLI 将此复杂性折叠为类型化的过滤器标志(例如 skylight events search),内部处理身份验证和分页。为了避免管道缓冲区限制并确保程序化访问,CLI 将所有输出写入磁盘上的本地 JSON 文件。
API 层
在 CLI 下方是一个具有类型化 schema 和字段级描述的标准化 API。这种分层方法——Typed API $ ightarrow$ Deterministic CLI $ ightarrow$ Agent Skills——使每个组件能够独立测试,从而在每个阶段缩小错误范围。
通过 Mothership 进行沙箱托管与隔离
由于 Shippy 服务于全球 70 个国家的政府机构和非政府组织,严格的数据隔离是必需的。Ai2 开发了 Mothership,这是一个代理托管平台,为每个用户会话提供专用的临时 Kubernetes 部署。
- 会话隔离:每个用户会话会启动一组包含代理运行时、skills 和 Skylight CLI 的 pod。
- 安全:用户的 Skylight JWT 会在供应时注入,以将 API 调用范围限定为其特定数据。网络访问仅限于必要服务,分析过程中写入的文件会在会话结束时删除。
- 能力:在此沙盒内,代理可以安装依赖项、运行代码并拉取数据集进行多步骤分析,而不会导致跨用户数据泄露。
评估代理性能而非模型性能
与其依赖静态的通用基准,Ai2 使用 Harbor 评估框架将 Shippy 作为一个完整的系统(模型、skills 和沙盒)与实时数据进行评估。
评估流程
领域专家创建带有加权标准的场景和评分规则。例如,捕鱼事件查询优先考虑数据准确性和边界解析,而非响应风格。该流程遵循特定的管道:
- 在沙盒中执行自然语言提示。
- LLM 评判者对每个标准从 0 到 1 进行评分,并给出书面理由。
- 加权总分与固定通过阈值进行比较。
发现与迭代
最近的评估确定了特定的失败模式,例如代理越过战略建议而非决策支持的范围,边界简化导致在几何敏感查询中遗漏事件,以及幻觉出现不存在的 CLI 命令。这些结果直接推动下一次 skills 改进的迭代。
未来路线图
Ai2 正在通过三个主要方向扩展 Shippy 的能力:
- Agent 驱动的 UI 控制:使 Shippy 能够直接操作 Skylight 地图(调整过滤器和时间范围),而不仅仅是提供链接。
- 模型路由:实施一个系统,将简单的查找路由到更小、更快的模型,同时为复杂调查保留前沿模型。
- 跨线程记忆:开发持久化记忆,使代理能够在不同对话线程中记住用户特定的上下文(例如分析师的管辖权)。