背景與問題定義
《A Programming Paradigm for Spatiotemporal Composability》由 Yifan Shi、Wei Zhang(北京大學)與 Tianyi Cui(DeepSeek-AI,即 Koishi 框架作者 Shigma)合著,是一篇程式語言理論與執行時系統論文,而非模型訓練或模型能力論文。
Agent = Model + Harness
【論文原文結論 §1.2.2】論文把 Agent Runtime 作為 motivating example 之一:現代 AI agent 依賴 runtime agent harnesses,這些系統組合工具套件、執行環境、權限沙箱、會談狀態、上下文記憶、子 agent 工作流程與 UI;「未來的 harness 可能生成並部署對自己元件的修改,同時持續服務請求」。
這一定義與 DeepSeek 官方對 Harness 的描述完全吻合:Agent = Model + Harness。Model 負責推理與決策;Harness 透過插件提供 Tools / Skills / Sessions / Sandboxes / Storage / Loops / Sub-agent scheduling / UI。DeepSeek Harness 把所有這些能力域都做成 Cordis 插件。
為什麼長期運行、可自我修改的 Agent 需要動態載入、卸載與替換元件?因為自演化 Agent 的核心特徵是「在運行中修改自己」——升級某個工具、替換某個 Skill、調整某個子 Agent 的環境。如果每次修改都要重啟整個 session,會丟失上下文與中間狀態;如果不重啟,舊元件的副作用(開啟的連線、註冊的回呼、持有的狀態)就成了懸空的垃圾,污染後續運行。傳統機制沒有給出「如何乾淨地換掉一個正在被使用的元件」的答案。
傳統插件系統、DI 與 HMR 為什麼不夠
論文 §1.2.1 以 VSCode 為典型例子:
- Temporal limitation:VSCode 的 extension host 不提供執行時卸載單個擴充程式碼的機制,停用或卸載一個擴充需要重啟整個 host。前 100 名擴充中 87 個含可執行程式碼,都需要重啟。
deactivate鉤子只在行程關閉時作為優雅退出回呼使用,且把 effect disposal 與 effect creation(在activate中)分離,違反 locality of concern。 - Spatial limitation:
extensionDependencies幾乎無人使用(前 100 名中只有 7 個宣告),擴充之間沒有結構性契約,getExtension(...).exports回傳值是any型別。
【基於原文的推論】傳統 DI(如 Spring、Angular)只在初始化時注入依賴,執行時 provider 被替換或移除時既有 dependent 既不會被停用也不會被重新初始化;React 的 useEffect 把 effect 與 cleanup 配對,但 hook 不能在條件/迴圈/巢狀函式裡呼叫,effect body 不接受 async 函式或迭代器,無法組合出複合 inverse;HMR(webpack、Vite)透過 import.meta.hot 把狀態向前遷移,依賴開發者手寫遷移函式;事務記憶體(STM)與 RAII 把 reversal 限定在固定靜態作用域內;OSGi Declarative Services 反應服務可用性,但 deactivation 回呼是手寫且同步的。
【論文原文結論 §1.2.3】作業系統在行程粒度提供 temporal composability,容器編排器在服務粒度提供 spatial composability,但這是粗粒度替代物:每次重啟丟棄所有行程本地狀態(快取、連線、部分計算),重建需要數秒到數分鐘;容器級編排無法表達共享位址空間的元件間依賴。論文要的是與元件本身同粒度的組合抽象。
兩個正交維度
【論文原文結論 §1.1】論文識別動態組合的兩個正交維度:
- Temporal composability(時間維度):元件被移除時,它對共享環境所做的修改必須被完全且安全地撤銷。這要求追蹤元件執行過的每一次資源分配、事件註冊與狀態變更,並保證其有序回收。
- Spatial composability(空間維度):元件必須能結構化、可驗證地宣告、發現並解析彼此之間的依賴。這要求管理依賴拓撲並在依賴變化時協調元件生命週期。
【論文原文結論 §2.3】Effect 描述「計算如何修改環境」,Coeffect 描述「計算如何依賴環境」——兩者方向互補,不要混淆。在靜態設定下,temporal 歸約為詞彙作用域(RAII、bracket pattern),spatial 歸約為模組匯入解析;在動態設定下,兩者都顯著更難。
論文的解法:把經典 effect/coeffect 從編譯期靜態分析提升為執行時機制——Revertible Effects(每個上下文變換攜帶一個 inverse,執行時追蹤)解決 temporal;Reactive Coeffects(元件宣告 coeffect 規格,上下文變化時按規格通知)解決 spatial。兩者統一在單一 context 型別中,構成 component 概念,給出動態組合演算並證明元理論性質。
核心概念對應表
| 概念 | 含義 | 出處 |
|---|---|---|
| Revertible Effect | 每個上下文變換攜帶一個 inverse,執行時追蹤 | §3.1, Def 8 |
| Reactive Coeffect | 元件宣告 coeffect 規格,上下文變化時按規格通知 | §3.2.2, Def 26 |
| Unified Context Γ∞ | 遞迴攜帶(狀態、累加器、coeffect 表)的單一 context 型別 | §3.3.1, Def 32 |
| Component ℭΓ | 三元組(依賴規格 d、提供 p、見證 effect 函式 e) | §4.1, Def 43 |
| Fiber | 元件一次實例化,攜帶生命週期狀態 | §4.1, Def 44 |
| Committed View ω | 當前已提交的依賴解析(fiber 名稱對應) | §4.1, Def 44 |
| Target View | 期望 fiber 應處於的依賴解析狀態 | §4.2, Def 46 |
| Isolation Realm | 同一 key 在不同 context 解析為不同實例 | §3.2.3, Def 28 |
| Interception | 不替換依賴,只修改其使用方式 | §3.2.3, Def 30 |
後續章節按這條主線展開:Effects 講 temporal 怎麼撤銷,Coeffects 講 spatial 怎麼回應,生命週期 講兩者如何在元件實例上協同,定理 講這套機制保證了什麼,DeepSeek Harness 講它如何落到一個真實 Agent Runtime 上,局限 講它沒保證什麼。