本體
本體即軟體。
一份可執行的業務本體。AI 編寫它,執行時執行它,Agent 操作它,你擁有它。這一頁說清這個詞在這裡指什麼。本體是你的業務裡那份由執行時直接執行的定義:以型別化後設資料寫在你的倉庫裡,編譯成一個工件,然後執行——資料庫、API、介面和 Agent 工具都從它派生,定義本身在每一次呼叫時被強制執行。同時寫給做選擇的人和寫定義的 Agent。
- 6 類
- 核心由六類東西構成:物件與欄位、關係、動作、權限、流程、Agent 與工具定義
- 4 種投影
- 檢視、儀表盤、應用和翻譯——同樣用後設資料編寫、過同一道門禁,但不是本體的一部分
- 4 道閘門
- 型別化、校驗、審閱、治理——橫在 Agent 與你的使用者之間
執行時如何執行它
一份定義進去,其餘全部派生。
本體以型別化後設資料寫在 objectstack.config.ts 裡,編譯成 objectstack.json 工件。執行時從這個工件派生可更換驅動之上的資料庫結構、生成的 REST 與即時 API、Console 的服務端驅動介面,以及一個 MCP 伺服器——並在每一次呼叫時強制執行這份定義。RBAC、行級與欄位級安全、共享和審計,對一次 REST 請求、一次 Console 點選和一次 Agent 工具呼叫一視同仁。執行時不做任何推理:跑的就是被校驗過的東西。
objectstack.config.ts
# 本體:用型別化後設資料寫下的定義
│ 編譯
▼
objectstack.json
# 執行時載入的工件
│ 派生
▼
資料庫結構 · REST 與即時 API
服務端驅動介面 · MCP 伺服器
│ 每一次呼叫都強制執行
▼
RBAC · 行級與欄位級安全 · 共享 · 審計 核心
六類東西,一份定義
本體是一份定義,開放、帶版本。它以普通 TypeScript 的形式住在你的倉庫裡,可以當作一個 diff 來審閱,規範與許可證都是 Apache-2.0——而不是一張鎖在廠商系統裡、只能通過那家廠商的控制台觸達的圖。其餘一切都由執行時從它派生。
關係
物件之間的查詢與主從關聯。
動作
使用者或 Agent 可以對一條記錄發起的操作,以及它們顯示的條件。
投影
檢視、儀表盤、應用和翻譯是它的投影
投影同樣用後設資料編寫、由同一道門禁校驗,但它們不是本體的一部分。改動核心,投影跟著變;刪掉一個投影,它所展示的業務不變。這個區分劃定了 Agent 為了推理業務必須裝下的範圍:是核心,而不是每一個螢幕。
檢視
把一個物件的欄位和權限投影到一張網格上。
儀表盤
把物件上的查詢投影到圖表上。
應用
把物件、檢視和動作組合成一個可導航的產品。
翻譯
把每一個標籤投影到一種語言。
它不是什麼
關於這個詞的四道護欄
「本體」這個詞涵蓋好幾種不同的東西,還有兩種思維習慣隨它一起出現。四者在這裡都不成立;ObjectStack 與它們的逐項對比在對比頁。
不是知識本體
OWL、RDF 和知識圖譜描述一個領域,帶有類繼承和公理,並由推理引擎推理。ObjectStack 沒有物件繼承、沒有公理、沒有推理器:定義先被校驗——由 Zod schema 和 os validate——然後被執行。abstract 這個鍵正是因此從規範中移除。
不是業界所說的語義層
語義層是架在現有系統之上的一層只讀對映:它描述業務,但不執行業務。ObjectStack 的本體就是系統——資料庫、API、介面和 Agent 工具都從它派生。聯邦接入外部資料來源是可以的,預設只讀,而且還處於早期。
不是哲學意義上的形式本體
它不對「什麼東西普遍存在」做任何斷言。它是一家企業的一個應用,定義得精確到足以執行。
不是「程式碼消失了」
程式碼搬進了執行時。鉤子、動作體,以及公式、謂詞和策略裡的 CEL 表示式,都在執行時的權限與審計圍欄內執行;頁面裡的受限 JSX 被解析成服務端驅動的介面樹,從不當作程式碼執行。沒有一樣散落在一個本體隨後還得去描述的程式碼庫裡。
四個承諾
每個承諾都點名兌現它的機制
定位句後面的四個詞不是形容詞。每一個都由執行時、工具鏈或許可證裡某個具體的東西兌現,這裡把那個東西逐一列出。
可執行
定義就是在跑的那個東西。執行時從編譯後的工件派生資料庫、REST 與即時 API、Console 介面和 MCP 伺服器,並在每一次呼叫時強制執行權限與審計——REST 請求、Console 點選和 Agent 工具呼叫一視同仁。
AI 可編寫
腳手架安裝 AI 技能包並寫入一份 AGENTS.md,編碼 Agent 一開始就帶著協議的規則。Strict TypeScript 和 Zod 在編輯器裡拒掉形狀錯誤;os validate 拒掉型別檢查能過、執行時卻會靜默失敗的後設資料——懸空繫結、錯誤的 CEL 謂詞、缺失的安全姿態——並以定位到位置、可據以修正的文字返回,Agent 自己讀、自己改。你審批一個小而可讀的 diff。
Agent 可操作
跑起來的應用就是一個 MCP 伺服器,預設開啟:每個物件是一個工具,每個暴露出來的動作是一個工具,權限決定 Agent 可以呼叫什麼,審計記錄它做了什麼。Agent 通過與人相同的型別化、權限感知的表面操作應用——從不是裸 SQL 或抓取介面。
歸你所有
定義以普通 TypeScript 的形式住在你的倉庫裡,在你的版本控制裡帶版本、可以當作 diff 審閱——不是一張鎖在廠商系統裡的圖。ObjectStack 倉庫裡的一切都是開放棧——協議、微核心、SDK、CLI 和生產執行時——Apache-2.0,沒有 open-core 的星號;腳手架生成的專案開箱即可容器化自託管。
決策面
改什麼、誰來審、跑什麼
| 你宣告 | 執行時派生 | 執行時強制執行 |
|---|---|---|
| 物件、欄位、關係 | 可更換驅動之上的資料庫結構;生成的 REST 與即時 API | 欄位上宣告的校驗、公式與預設值 |
| 動作 | 帶權限檢查的按鈕與服務端操作;每個暴露的動作同時是一個 MCP 工具 | 動作顯示的條件,以及誰可以發起它 |
| 權限 | 無需生成——它本身就是圍欄 | RBAC、行級與欄位級安全、共享和審計,對 REST 請求、Console 點選和 Agent 工具呼叫一視同仁 |
| 流程 | DAG 流程、記錄觸發器、定時任務、帶佇列的審批 | 多級審批鏈與完整的審計軌跡 |
| Agent 與工具定義 | 應用對外提供的 MCP 伺服器,預設開啟 | 權限決定 Agent 可以呼叫什麼;審計記錄它做了什麼 |
| 檢視、儀表盤、應用、翻譯 | Console 的服務端驅動介面 | 檢視投影的是物件的欄位和權限——刪掉它,業務不變 |
FAQ
常見問題
它和 Palantir 那種本體是一回事嗎?
詞彙相近,住的地方不同。運營本體在從其他系統整合來的資料之上定義物件、連結、動作和權限,並把編輯寫回去;Palantir Ontology 是這一類的參照。它仍然是架在別處系統之上的一層,而且在 Palantir 這裡是一個專有平臺。ObjectStack 從定義本身派生資料庫結構、API、介面和 MCP 工具,而且是 Apache-2.0。
有了本體,是不是就沒人寫程式碼了?
不是。程式碼不會消失——它搬進了執行時。鉤子、動作體,以及公式、謂詞和策略裡的 CEL 表示式,在執行時的權限與審計圍欄內執行;頁面裡的受限 JSX 被解析成服務端驅動的介面樹,而不是被執行。變化在於:沒有一樣散落在一個本體隨後還得去描述的程式碼庫裡。
為什麼大小這麼重要?
因為閉環的兩半都依賴它。寫定義的 Agent 和操作應用的 Agent 都需要把整件東西裝下:小到 AI 能一次讀全的應用,才能被整體閱讀、整體推理、整體重構。自帶的示例 CRM——物件、檢視、一個儀表盤、一條線索轉化流程、權限集、動作、翻譯——小到 Agent 可以端到端載入,回答得出「改這裡會弄壞什麼」。
ObjectOS 在哪裡?
想把同一個迴圈託管起來、在瀏覽器裡用、什麼都不用安裝?那就是 ObjectOS——建立在 ObjectStack 之上的商業執行環境。ObjectOS 既可託管在瀏覽器中、無需安裝(ObjectOS Cloud),也可自管部署在你自己的基礎設施上(ObjectOS Enterprise);無論哪個版本,你都可以匯出本體,拿到開源的 ObjectStack 執行時上執行。
下一步