Shippy 是一個為高風險決策而設計的海上 AI 代理,錯誤的答案可能造成實際影響。本文將介紹其背後的架構,以及我們從中學到的經驗,這些經驗也將應用於 Ai2 的其他環境平台。

為保護海洋這類高風險操作領域建構 AI 代理,首要挑戰便是可靠性。對海上分析師而言,一個錯誤的答案可能導致巡邏船偏離數英里,耗費本已捉襟見肘的寶貴資源,甚至可能危及人員安全。

因此,當 Skylight 團隊著手打造 Shippy 這個即時海上領域感知 AI 時,真正的挑戰並非模型本身。而是要建構一個值得信賴的系統,確保其正確性、遵守限制,並能應對各種任務。我們還必須根據 Skylight 的即時數據來驗證一切,這些數據會隨著新的衛星和船隻訊號不斷更新,而非靜態快照。

我們將 Shippy 這類代理視為三個部分:靈魂 (soul)、技能 (skills) 和配置 (config)。

「靈魂」是定義 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 查詢技能編碼了回答特定區域問題的完整工作流程。當分析師或使用者詢問「顯示上個月巴拿馬專屬經濟區的捕魚活動」時,該技能的指令會引導 Shippy 首先透過 Skylight 的區域 API 將「巴拿馬專屬經濟區」解析為邊界多邊形,而不是猜測或硬編碼座標。

接著,它會在該幾何範圍內查詢捕魚事件,將結果格式化並附上指向 Skylight 地圖的深度連結,並歸因於來自 Global Fishing Watch 或 TMT 等 Skylight 合作夥伴的任何船隻元數據。

向 Shippy 提出的單一問題可以同時調用多項技能。例如,「Cordillera de Coiba 海洋保護區附近是否有船隻活動?」這個問題會利用 Skylight 的數據查詢技能、合作夥伴 ProtectedSeas 的 MPA 邊界資料庫,以及船隻航跡技能來解讀船隻行為。所有這些都在單一對話回合中完成。

「靈魂」定義了 Shippy 的行為範圍。它不會對船隻是否違法做出法律判斷,這屬於人類的職責,而非代理。它也不會超出數據支持的範圍進行推測。這些界限在系統提示詞中明確定義,而非隱含於微調中,這使得它們易於審核和修改。

代理是非確定性的。你無法控制模型決定做什麼,但你可以讓它使用的工具變得可預測。為此,Shippy 透過一個專門建構的命令列介面 (CLI) 與 Skylight 進行「對話」,該 CLI 負責呼叫 API,而不是由 Shippy 本身發出原始呼叫。

我們的 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 的 Pod。

使用者的 Skylight JWT 會在佈建時注入,因此代理的 API 呼叫會限定於該使用者的數據。

代理在多步驟分析期間寫入的檔案僅存在於該會話中,絕不會在使用者之間共享。在沙盒內部,代理可以編寫和執行程式碼、安裝依賴項、引入數據集,並進行多步驟分析。在網路層面,沙盒僅限於其所需的服務。

大多數基準測試都是根據靜態問題來評估通用 AI。它們無法捕捉代理一旦整合到實際工作流程中後的行為:它如何選擇工具、查詢即時數據、根據結果採取行動,以及何時停止。因此,我們圍繞 Shippy 的運作方式建構了自己的評估系統,針對整個代理,模型、技能和沙盒,共同對即時數據進行評分。

在我們的評估框架中,領域專家會編寫情境和評分標準,選擇適用於每個任務的標準並設定權重,這樣每個任務都會根據其真正重要的方面進行評分。例如,捕魚事件查詢會最重視數據準確性,其次是邊界解析和時間範圍,而來源歸屬和回應風格的權重較低。他們還會將個別回應標註為正確或不正確,為評審提供評分依據的真實答案。

評估流程很直接:自然語言提示詞透過沙盒執行,一個大型語言模型 (LLM) 評審會根據每個標準給出 0 到 1 的分數,並書面解釋回應是否符合標準,然後將加權總分與固定的通過門檻進行比對,如下圖所示。

任務透過開源評估框架 Harbor 執行。我們編寫了一個 Harbor 外掛程式,它會啟動一個真實的 Shippy 會話,使用正在測試的確切版本,並對抗使用者會遇到的相同真實數據。該套件會針對特定版本化的 Shippy 建構平行運行,產生帶有時間戳的結果檔案,以及與上次運行相比的評分變化報告。

每當技能、模型或底層數據發生變化時,我們都會重新運行該套件,並且在評估標準上退步的 Shippy 版本不會發布給終端使用者。

Shippy 在數據檢索和安全防護任務中表現穩定,能正確拒絕軍事情報請求、維持使用者數據隔離並準確歸因來源。在我們最近的運行中,最明顯的問題模式是巡邏規劃任務中 Shippy 超越了決策支援,提供了戰術建議;幾何敏感查詢中邊界簡化導致遺漏事件;以及一個代理發明了不存在的 CLI 命令的案例。這些問題都直接指導了我們下一輪的技能改進。

我們正在逐步向早期採用者開放 Shippy,並邀請他們進行壓力測試,以找出代理回答不佳的問題以及可能需要收緊的安全防護措施。以下是我們接下來將要建構的內容:

  • 代理驅動的 UI 控制。目前 Shippy 會返回地圖連結;接下來它將直接操控 Skylight 地圖,移動到特定區域、應用篩選器並調整時間範圍。
  • 模型路由。並非所有問題都需要最先進的模型,因此我們將簡單的查詢路由到更小、更快的模型,並將完整模型保留用於複雜的調查。
  • 跨線程記憶。對話歷史會保留在單一線程中,但上下文不會跨線程傳遞。我們正在建構記憶功能,讓 Shippy 能夠攜帶持久性事實(例如分析師的管轄範圍、偏好來源)並自動應用。這樣一來,「顯示本週的捕魚活動」就不必每次都重新指定分析師的專屬經濟區。

我們在 Shippy 上的工作已經影響了 Ai2 其他代理的思考方式,最直接的例子是我們的野生動物保育平台 EarthRanger,以及我們的開源地球觀測工具套件 OlmoEarth。Mothership 的建構宗旨是通用性並能託管其他代理,因此儘管海上領域是我們首次應用它的地方,我們預計這不會是最後一個。

Shippy 由 Ai2 的 Skylight 團隊開發。Skylight 是一個免費的海上領域感知平台,全球 70 多個國家、超過 300 個合作夥伴正在使用。