架構概覽
Triggerfish 是一個安全的多通道 AI 代理平台,具有一個核心不變量:
安全性 安全性是確定性的,位於 LLM 層之下。 每一個安全決策都由純程式碼做出,LLM 無法繞過、覆蓋或影響。LLM 沒有任何權限——它請求操作;策略層做出決定。 :::
本頁提供 Triggerfish 運作方式的全貌。每個主要組件都連結到專門的深入頁面。
系統架構
資料流
每條訊息都經過系統中的以下路徑:
在每個執行點,決策都是確定性的——相同的輸入始終產生相同的結果。hook 內沒有 LLM 呼叫,沒有隨機性,LLM 也無法影響結果。
主要組件
分類系統
資料在四個有序層級之間流動: RESTRICTED > CONFIDENTIAL > INTERNAL > PUBLIC。核心規則是禁止降級寫入:資料只能流向相同或更高分類等級。CONFIDENTIAL 的工作階段無法將資料傳送到 PUBLIC 通道。沒有例外。不能由 LLM 覆蓋。
策略引擎和 Hook
八個確定性執行 hook 在資料流的關鍵點攔截每個操作。Hook 是純函式:同步、記錄並且不可偽造。策略引擎支援固定規則(永不可配置)、管理員可調整規則,以及企業級的宣告式 YAML 逃生機制。
工作階段和 Taint
每個對話都是具有獨立 taint 追蹤的工作階段。當工作階段存取分類資料時,其 taint 會提升到該等級,且在該工作階段內永遠不會降低。完全重設會清除 taint 和對話記錄。每個資料元素都透過血統追蹤系統攜帶來源中繼資料。
Gateway
Gateway 是中央控制平面——一個長期執行的本機服務,透過 WebSocket JSON-RPC 端點管理工作階段、通道、工具、事件和代理程序。它協調通知服務、排程器、webhook 接收和通道路由。
儲存
所有有狀態的資料都通過統一的 StorageProvider 抽象層。命名空間化的鍵(sessions:、taint:、lineage:、audit:)保持關注點分離,同時允許在不觸及業務邏輯的情況下替換後端。預設為 ~/.triggerfish/data/triggerfish.db 的 SQLite WAL。
縱深防禦
安全性透過 13 個獨立機制分層實現,從通道驗證和權限感知資料存取到工作階段 taint、策略 hook、plugin 沙盒、檔案系統工具沙盒和稽核日誌。沒有任何單一層足以獨立運作;它們共同形成的防禦能在即使一層被攻破時也能優雅降級。
設計原則
| 原則 | 意義 |
|---|---|
| 確定性執行 | 策略 hook 使用純函式。無 LLM 呼叫,無隨機性。相同輸入始終產生相同決策。 |
| Taint 傳播 | 所有資料攜帶分類中繼資料。工作階段 taint 只能提升,永不降低。 |
| 禁止降級寫入 | 資料永遠無法流向更低的分類等級。 |
| 稽核一切 | 所有策略決策都以完整上下文記錄:時間戳記、hook 類型、工作階段 ID、輸入、結果、評估的規則。 |
| Hook 不可偽造 | LLM 無法繞過、修改或影響策略 hook 決策。Hook 在 LLM 層之下的程式碼中執行。 |
| 工作階段隔離 | 每個工作階段獨立追蹤 taint。背景工作階段以全新的 PUBLIC taint 產生。代理工作區完全隔離。 |
| 儲存抽象 | 沒有模組建立自己的儲存。所有持久化都通過 StorageProvider。 |
技術堆疊
| 組件 | 技術 |
|---|---|
| 執行環境 | Deno 2.x(TypeScript 嚴格模式) |
| Python plugin | Pyodide(WASM) |
| 測試 | Deno 內建測試執行器 |
| 通道 | Baileys(WhatsApp)、grammY(Telegram)、Bolt(Slack)、discord.js(Discord) |
| 瀏覽器自動化 | puppeteer-core(CDP) |
| 語音 | Whisper(本地 STT)、ElevenLabs/OpenAI(TTS) |
| 儲存 | SQLite WAL(預設)、企業後端(Postgres、S3) |
| 密鑰 | 作業系統金鑰鏈(個人版)、Vault 整合(企業版) |
Triggerfish 不需要任何外部建置工具、Docker 或雲端依賴。它在本機執行,在本機處理資料,並賦予使用者對其資料的完全主權。 :::
