What building Shippy taught us about building agents
TL;DR · AI 摘要
What building Shippy taught us about building agents Back to Articles 0 -1 Enterprise Article Published July 15, 2026 Up...
核心要点
- 主题聚焦:What building Shippy taught us about building ag
- 来源:Hugging Face Blog,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
构建Shippy对我们构建代理的启示
返回文章
[0
[-1
企业
]
文章
发布于2026年7月15日
点赞
3
[
Kyle Wiggers
Ai2Comms
关注
allenai
Shippy是一款用于高风险决策的海事AI代理,错误答案会产生实际影响。以下是其架构设计——以及我们将其经验应用于Ai2其他环境平台的启示。
Shippy正在回答关于加纳专属经济区(EEZ)的实时查询。响应内容展示了其工作原理:边界来源、数据截止时间、查询时间戳,以及一个深度链接,分析师可通过该链接在Skylight地图上验证所有数据。
为高风险运营领域(如海洋保护)构建AI代理,首要挑战是可靠性。对海事分析师而言,错误答案可能导致巡逻船偏离正确方向数英里,造成本已紧张的资源浪费,甚至危及人员安全。
因此当Skylight团队着手构建Shippy(我们的实时海事领域感知AI)时,真正的挑战并非模型本身。而是构建一个值得信赖的系统,确保其准确性、明确自身局限性,并能胜任各种任务。我们必须将所有内容与Skylight的实时数据进行验证,这些数据会随着新卫星和船舶信号的持续接入而不断更新——而非静态快照。
代理结构:技能、灵魂与配置
我们将Shippy这类代理视为三个要素的结合:灵魂、技能和配置。
灵魂是定义Shippy人设和行为边界的系统提示。技能告诉Shippy如何处理特定类型的请求。灵魂与技能共同封装进Docker镜像——这是一个版本化、可部署的构件,定义了Shippy的本质。配置则涵盖其他所有内容:运行哪个代理框架(在Shippy案例中是OpenClaw,一个开源代理框架)、使用哪个大语言模型(目前Shippy依赖Claude Opus 4.6),以及运行时设置。API密钥等敏感信息会在运行时注入;更换模型或框架只需修改配置,无需重新构建。
Shippy的技能遵循与Claude Code和Codex等编程工具相同的代理技能规范——结构化的Markdown文件。这使得每个技能都易于理解、版本化和修改。目前Shippy包含以下技能:
- 通过Skylight API查询事件(Skylight揭示的船舶行为,如捕捞或两船之间转运)和船舶数据
- 查询专属经济区(EEZ)和海洋保护区(MPA)边界
- 解析船舶轨迹数据(船舶广播的位置和移动信号),基于Skylight模型(包括Atlantes)已生成的活动分类进行分析
- 生成交互式地图链接,使分析师能从Shippy的聊天回答直接跳转到Skylight地图的精确位置
例如,Skylight API查询技能编码了回答特定区域问题的完整工作流程。当分析师或用户询问"展示巴拿马EEZ上个月的捕捞活动"时,该技能的指令会引导Shippy首先通过Skylight的区域API将"巴拿马EEZ"解析为边界多边形(而非猜测或硬编码坐标),然后在该几何区域内查询捕捞事件,用深度链接格式化结果返回至Skylight地图,并标注来自Skylight合作伙伴(如Global Fishing Watch或TMT)的船舶元数据。
一个向 Shippy 提出的问题可以同时触发多个技能。例如,“Cordillera de Coiba MPA 附近是否有船舶在活动?”这一问题会调用 Skylight 技能进行数据查询,使用合作伙伴 ProtectedSeas 的数据库提供 MPA 边界背景信息,并通过船舶轨迹技能分析船舶行为。所有这些操作都发生在一次对话回合中。
系统的核心决定了 Shippy 的行为边界。它不会对船舶是否违法做出法律判定——这种判定应由人类而非代理模型完成。它也不会超出数据支持范围进行推测。这些边界在系统提示中明确声明,而非通过微调隐含实现,这使得规则可审计且易于修改。
用于非确定性代理的确定性工具
代理模型本质上是非确定性的。你无法控制模型会做出什么选择,但可以通过工具设计使其行为可预测。为此,Shippy 通过专为 Skylight 开发的 CLI 与 Skylight 交互,而不是直接发出原始 API 调用。
我们的 API 包含数十种输入类型、嵌套过滤对象、分页游标和复杂几何输入。在早期原型中,我们曾允许 Shippy 从零构建 API 请求。这导致了一系列隐蔽的错误:分页格式错误导致结果静默丢失、几何编码错误,以及因误解过滤类型而返回错误数据的查询。
Skylight CLI 将这些复杂性转化为可预测的接口。Shippy 只需发出一个命令 – 带有类型化过滤标志的 skylight events search – CLI 会自动处理身份验证、分页和结构化输出。CLI 还具备自文档功能:详尽的 --help 文本和详细的错误信息为代理(及人类开发者)提供了足够的上下文,使其无需猜测即可从错误中恢复。其输出始终写入本地 JSON 文件,而非通过 shell 管道传输。早期阶段,大型数据集会因管道缓冲区限制或下游工具(如 jq)而中断。写入磁盘可规避这些问题,并使代理能在后续步骤中通过程序访问查询结果。
CLI 下方是标准化的 API:多种资源类型(Skylight 事件、船舶、区域、卫星图像、船舶轨迹等)通过通用的搜索和聚合操作进行访问。API 的输入和输出通过带字段级描述的类型化模式定义。
这种分层结构 – 类型化 API、确定性 CLI 和引用 CLI 命令的代理技能 – 意味着 Shippy 的每个组件都可以独立测试。API 有独立的测试套件。CLI 可由人类或代理执行。代理技能通过引用 CLI 命令处理底层逻辑,使 Shippy 无需每次调用 Skylight API 时都重新发明轮子。每一层都限制了下一层可能出错的范围。
沙盒化托管与隔离
Skylight 为全球 70 多个国家的数百个政府机构和非政府组织提供服务。菲律宾的渔业官员在其 Skylight 账户中拥有特定的兴趣区域、船舶监控名单和警报配置。当他们向 Shippy 提问时,代理的 API 调用必须返回其专属数据,且对话历史记录必须对其他任何人完全不可见。
每个用户都在自己的短暂且隔离的会话中与Shippy进行交互,而实现这种大规模的可靠性是该项目最重要的工程挑战之一。我们构建了Mothership,这是一个代理托管平台,为每个用户会话分配专用的Kubernetes部署。当用户开启对话时,系统会启动一组包含代理运行时、其技能和Skylight CLI的容器。用户在创建时注入Skylight JWT,确保代理的API调用仅限于该用户的数据范围。
代理在多步骤分析过程中写入的文件仅存在于当前会话中,且不会在用户之间共享。在沙箱环境中,代理可以编写和运行代码、安装依赖项、导入数据集并执行多步骤分析。在网络层面,沙箱仅被限制访问其必需的服务。
评估代理而非模型
大多数基准测试通过静态问题评估通用人工智能的表现,但无法反映代理在真实工作流中表现:如何选择工具、查询实时数据、根据结果采取行动以及知道何时停止。因此我们围绕Shippy的工作方式构建了自有评估系统,将模型、技能和沙箱作为一个整体,与实时数据进行对比评分。
在我们的评估框架中,领域专家编写场景和评分标准,选择适用于每个任务的评估维度并设置权重,确保每个任务都根据实际关键点进行评分。例如,针对"捕鱼事件"查询,数据准确性权重最高,其次是边界解析和时间范围,源归属和响应风格权重较低。他们还会对单个响应进行正确性标注,为评分者提供真实基准进行比对。领域专家还会对单个响应进行正确性标注,为评分者提供真实基准进行比对。
评估流程清晰直观:自然语言提示通过沙箱处理后,由LLM评分者对每个评估维度从0到1进行评分,并书面说明响应是否符合标准,加权总分与固定及格阈值进行比对,如下方图表所示。
单个任务的评分流程。自然语言提示通过沙箱处理后,LLM评分者对每个评分维度进行书面评分,加权总分与固定阈值比对后得出通过或失败结果。
任务通过Harbor执行,这是一个开源评估框架。我们开发了Harbor插件,可在测试的精确版本上启动真实Shippy会话,使用与用户实际遇到的相同真实数据。该套件并行运行在特定版本的Shippy构建上,生成时间戳结果文件并记录与上一次运行的评分变化。每当技能、模型或基础数据发生变化时,我们会重新运行套件,任何在评估标准上出现倒退的Shippy版本都不会交付给终端用户。
Shippy 在数据检索和护栏任务中表现稳定,能够正确拒绝军事情报请求,保持用户数据隔离,并准确归因信息来源。在最新一轮测试中,最明显的问题出现在巡逻规划任务中,Shippy 过度介入战术建议而非决策支持;在几何敏感查询中,边界简化导致事件遗漏;以及一个代理虚构了不存在的 CLI 命令的案例。这些问题直接指导了我们下一轮技能改进的方向。
Shippy 的评估套件在 Skylight 内运行:每个场景根据加权标准进行评分,评委的推理过程可见,因此失败案例可明确指向需要修复的具体行为。
我们的下一步
我们将按滚动方式向早期采用者开放 Shippy,并邀请他们进行压力测试——找出代理回答不佳的问题和需要收紧的护栏机制。接下来我们将重点构建以下功能:
- 由代理驱动的 UI 控制。目前 Shippy 返回地图链接;下一步将直接控制 Skylight 地图本身,自动跳转到指定区域、应用过滤器并调整时间范围。
- 模型路由。并非所有问题都需要前沿模型,因此我们将简单查询路由到更小更快的模型,而将完整权重模型保留给复杂调查。
- 跨线程记忆。当前对话历史在单个线程内持久化,但上下文无法跨线程传递。我们正在构建记忆系统,使 Shippy 能够持久存储事实(如分析师的管辖范围、首选数据源)并自动应用。因此,“展示本周捕鱼活动”将无需每次重新指定分析师的专属经济区。
我们对 Shippy 的研发正在重塑 Ai2 其他项目中对代理的设计思路——最直接的影响体现在 EarthRanger(我们的野生动物保护平台)和 OlmoEarth(我们的开源地球观测工具套件)。Mothership 本身设计为通用平台并支持其他代理,虽然海洋领域是我们的首个应用场景,但绝不会是最后一个。
Shippy 由 Ai2 的 Skylight 团队开发。Skylight 是一个免费的海洋领域感知平台,已被 70 多个国家的 300 多个合作伙伴使用。
更多该作者的文章
DiScoFormer:一个跨分布的密度和分数预测变压器
6
2026年6月29日
混合模型在哪些 token 上预测效果更好?
8
2026年6月25日
社区
编辑
预览
通过拖拽、粘贴或
点击此处
上传图片、音频和视频。
点击此处上传图片
评论
· 注册或登录以评论