Back to Blog
OpenAB 企業控管實作 — 從 config 到部門落地
🌀 OpenAB Series

OpenAB 企業控管實作 — 從 config 到部門落地

B
Blake
Jul 1, 2026 By Blake 27 min read
OpenAB 的 config-driven 設計天然適合企業 AI 治理。一份 config.toml 解決頻道隔離、權限控制、Session 管理、多團隊部署。跑了三個月、五個部門場景、零事故。

OpenAB 企業控管實作 — 從 config 到部門落地

過去三週講了 W1 破口、W2 trust、W3 四原則。這一週是 abstraction layer 怎麼具體落地:config-driven。

同樣從病房那 2 小時挑最後一個時刻(完整故事見 W1 cornerstone):

14:00 — Hub deploy 觸發

整篇 W1 cornerstone 被 polish 完之後,Erwin 沒去通知工程師「請手動 deploy」。他開了 git worktree、clone main、commit、push 到 origin/main、GitHub Actions FTP 部署自動觸發。整個過程沒有任何人類介入。

會 work 是因為什麼?config-driven 早就把流程寫死:什麼 push 觸發 deploy、什麼 secret 給 GitHub Actions、什麼 user 有 push 權限。Erwin 只是依著 config 跑。

前端工程師對這個模式不陌生:webpack.config.jstailwind.config.tseslint config 早就是這個模式:用 config 把行為當資料宣告,而不是寫在 code 裡。企業 AI gateway 用的是同一個 idea,只是 scope 從一個前端 codebase 變成全公司。下面講 OpenAB 的 config 模式怎麼落地到部門級。


為什麼 config 是「人類在迴圈裡」的最小保證

Humberto Cervantes(墨西哥 UAM)、Rick Kazman(ATAM 共同發明人、夏威夷大學 / CMU 軟體工程研究所)與 Yuanfang Cai(Drexel 大學)在美國 NSF 贊助下,今年 1 月在 IEEE Software 發表了一篇研究:"LLMs as Assistants in Software Architecture Design"(同研究團隊的完整方法論文 30 頁版已被 IEEE TSE 接收)。7 月 1 日 Kazman 在北科大的 SEAT 大師演講中展示了一組非常直接的實驗數據:

Testability 場景的架構設計問題:

  • 所有 LLM 模型 → 100% 選同一個答案(Hexagonal Architecture)

  • 23 位人類架構師 → 8 種不同選擇,其中 21.7% 說「我資訊不夠,不能決定」

LLM 不會質疑自己的選擇。只有人類會說「等等,我不確定」。更關鍵的是:人類架構師不只是「選不同答案」,還經常主動 disagree with 或 distrust LLM 的建議,原因是模型缺乏 context 且回答 inconsistent。這不是能力問題,是信任問題。

Kazman 的結論是:LLMs are not yet ready for autonomous design, but are powerful collaborators. 人類擅長 convergent thinking(在 context + constraints 下做取捨),AI 擅長 divergent thinking(快速產生大量可能性)。正確的契約是:

人類負責目標、結構、取捨、意義。AI 負責速度、一致性、在定義邊界內的執行。

這跟 W1 講的「senior judgement 往上推」是同一件事。

但這裡有一個關鍵問題:「defined boundaries」誰來 enforce?

如果只是口頭契約,agent 被 prompt injection 的那一刻契約就崩了。如果是寫在文件裡的 policy,沒人看。如果是分散在 5 個不同系統的設定,出事的時候兜不起來。

我目前看到最乾淨的答案是:一份 config.toml

  • Config 定義 agent 能做什麼 = divergent thinking 的邊界

  • 人類決定 config 長什麼樣 = convergent thinking 的判斷

  • 改 config 不改 code = 治理成本降到最低

  • Config 可以被 git track、被 review、被 audit = accountability

一份 config.toml = Kazman 說的「defined boundaries」的工程實現。也是 W3 四原則中 Control by Configuration 的具體落地。


OpenAB 不是只有聊天。它的 config-driven 設計天然適合企業 AI 治理。我這幾個月跟幾個團隊 PoC + 自己場景跑下來,注意到的是:真正讓主管放心的不是 agent 多聰明,而是「我能不能在一個檔案裡看到它能做什麼、不能做什麼」。以下整理的是我目前的設法。


OpenAB 可用的控管機制

1. Channel Restriction(頻道隔離)

[discord]
allowed_channels = ["1234567890"]

作用:bot 只在指定頻道回覆,其他頻道完全靜默。

企業用法:

  • #frontend-ai → 前端 agent 群

  • #backend-ai → 後端 agent

  • #marketing-ai → 行銷用 agent

  • #general → 沒有 agent,純人類討論

一個頻道 = 一個邊界。跨頻道的 agent 互不干擾。 我自己的 baseline 是這個一定要設,因為它是後面所有控管的前提。

2. Bot Message Control(bot 間互動控制)

[discord]
allow_bot_messages = "mentions"    # off / mentions / all

行為

用途

off

忽略所有 bot 訊息

獨立工作的 agent

mentions

被 @mention 才回

multi-agent 協作

all

回所有 bot 訊息

全自動 pipeline(有風險)

企業用法:

  • 前端 code review:5 agent 用 mentions 互相 review

  • 行銷助手:off,只回人類問題,不跟其他 bot 互動

3. Trusted Bot Whitelist(信任名單)

[discord]
trusted_bot_ids = ["erwin_bot_id", "hange_bot_id"]

作用:即使 allow_bot_messages = mentions,也只接受名單內的 bot。

企業用法:

  • 防止外部 bot 注入指令

  • 前端頻道只信任前端的 5 個 agent

  • 後端頻道只信任後端的 agent

4. User Message Control(用戶訊息控制)

[discord]
allow_user_messages = "multibot-mentions"

行為

involved

自己的 thread 不用 @,channel 要 @

mentions

永遠要 @

multibot-mentions

多 bot 場景,有其他 bot 時要 @

企業用法:multibot-mentions 最適合。避免多 agent 場景下搶著回覆。

5. Turn Limit(迴圈防護)

# 內建,不需設定
max_bot_turns = 20     # soft limit
hard_limit = 100       # 絕對上限

作用:bot 之間對話超過 20 輪自動停。人類說話重置計數。

企業用法:防止 agent 無限迴圈燒 token。

前面 5 條都是「誰能跟誰說話」的問題。接下來要處理的是另一個現實:就算溝通管道管好了,agent 佔用的資源也需要一個上限。不然一個失控的 agent 就能把整個團隊的 quota 燒光。

6. Session Pool(資源控管)

[pool]
max_sessions = 5
session_ttl_hours = 24

這解決的問題是:最多 5 個同時進行的對話,24 小時後自動清除。不用人去手動關。

企業用法:

  • 前端團隊 3 人 → max_sessions = 5(留 buffer)

  • 行銷 10 人 → max_sessions = 10

  • 控制每個部門的 AI 使用量

7. Working Directory(檔案存取範圍)

[agent]
working_dir = "/app/frontend-code"

為什麼要這個?agent 只能存取指定目錄,看不到其他程式碼。

企業用法:

  • 前端 agent → working_dir = "/app/frontend"

  • 後端 agent → working_dir = "/app/backend"

  • agent 碰不到不該碰的 code

8. Environment Variable Control(環境變數控制)

[agent]
env = { COMFYUI_API_URL = "http://localhost:8188" }
# 不傳 DB_PASSWORD、AWS_SECRET 等

為什麼要這個?只傳指定的環境變數給 agent,不是全部。

企業用法:agent 拿不到 DB 密碼、API secret。就算 agent 被 prompt injection,也拿不到機密。

9. CLAUDE.md / Persona(行為定義)

# 你是前端 code reviewer
## 你可以做的
- review React/Next.js code
- 建議效能優化
## 你不能做的
- 不碰後端 code
- 不碰資料庫
- 不回答跟 code 無關的問題

作用:用 prompt 限制 agent 的行為範圍。

企業用法:每個部門的 agent 有不同的 CLAUDE.md,定義能做和不能做的事。

到目前為止都是「agent 被動回應」的控管。但企業場景裡,agent 也需要主動做事:排程跑報告、定時 review PR。這時候問題變成:它什麼時候主動、發到哪裡、誰能關掉它?

10. Cronjob 排程控管

[[jobs]]
enabled = true / false
schedule = "0 8 * * *"
channel = "specific-channel-id"
platform = "discord"

這解決的問題是:排程只發到指定頻道,可以隨時開關。

企業用法:

  • 每天早上 9 點自動 review 昨天的 PR → 前端頻道

  • 每週一產週報 → 管理層頻道

  • hot-reload,改 toml 不用重啟

11. Lifecycle Hooks(agent 啟動 / 關閉自訂命令,0.8.4-beta.6 起)

[hooks]
pre_boot = "log-agent-start.sh"
pre_shutdown = "log-agent-stop.sh"

作用:agent 啟動前、關閉前可以執行自訂命令,整個 lifecycle 都進 audit trail。

企業用法:

  • 合規行業需要紀錄「agent 何時上線、誰啟動的」 — pre_boot 寫進 SIEM

  • agent 關閉前同步狀態給 monitoring → pre_shutdown 自動執行

  • 配合 Helm serviceAccountName per-agent(0.8.4-beta.4 起),agent 身份、啟動時間、操作軌跡全部從 config 可控

12. ghpool 整合(agent 打 GitHub API 統一走代理)

如果 agent 需要打 GitHub API(CI bot、code review agent),統一走 ghpool — PAT token 池化、依剩餘 rate limit 自動分配、Mutation 透傳保持身份清晰。agent 不直接拿 GitHub token,從 K8s Secret 動態載入。

前面 12 條解決的是「agent 在執行期間的邊界」。但還有一個更根本的問題沒回答:如果 agent 死了怎麼辦?如果它跑在 spot instance 上被回收了、如果 container OOM 了、如果 region 掛了 — 你的 agent 的記憶跟狀態去哪了?

13. pre_seed / pre_shutdown — Stateless Agent(v0.9.0-beta.6 起)

這個功能看起來很小(從 S3 拉 zip 解壓),但它解決的是企業大規模部署 AI Agent 的根本問題:Agent 應該是 stateless 的。(白話說:agent 死掉不用哭,3 秒重生,什麼都沒丟。)

12-Factor App 早就告訴我們答案:Factor III(Config 存在環境中)、Factor VI(Process 是 stateless 的)、Factor IX(快速啟動、優雅關閉、可隨時銷毀)。如果你用過 Heroku 或 Cloud Run,你已經活在 12-Factor 裡了。AI Agent 也是 process,不應該依賴本地 state 來運作。

完整 lifecycle 現在長這樣:

hooks.pre_seed → hooks.pre_boot → (agent running) → hooks.pre_shutdown

pre_seed 做的事:

  • Agent 啟動時,從 S3 拉 zip 解壓到 $HOME

  • 支援多層覆蓋(像 Docker layers)

  • S3 native checksum 自動驗證完整性

Layer 1: s3://corp/base-policies.zip    ← 全公司合規政策
Layer 2: s3://corp/team-backend.zip     ← 後端團隊共享 memory
Layer 3: s3://corp/agent-alice.zip      ← 這個 agent 的個性化設定

pre_shutdown 做的事:

  • Agent 關閉前,tar $HOME(排除 .cache / node_modules / .rustup / .cargo 等)→ sync 回 S3

  • Agent 變成真正的 cattle not pets — 隨時可以殺掉重建,零資料遺失

對企業意味著:

  • 一個 image 跑所有 agent — 差異化靠 seed layers,不靠 image rebuild

  • 秒級 scale — ECS Fargate spot 被回收?重啟 pre_seed 3 秒恢復

  • 合規審計 — S3 versioning + CloudTrail = 完整的 config 變更歷史

  • 災難恢復 — S3 cross-region replication,agent 換 region 也能跑

  • Multi-cloud — 底層是標準 S3 API,Cloudflare R2(免 egress 費)/ MinIO(air-gapped)都支援

Production-ready AI Agent = Stateless + Fast Recovery + Observable。跟 12-Factor App 一樣的道理,只是這次跑的不是 HTTP server,而是一個會思考的 process。

最後一條比較特別。前面 13 條都是「限制 agent 做什麼」,但企業有些場景是反過來的:你希望 agent 默默在旁邊聽,不搶話,但關鍵時刻能插一句有用的。跑了三個月下來,我自己覺得這個模式對「知識流失」的問題特別有效:團隊討論的東西不會再消失在聊天記錄裡。

14. Ambient Mode — 環境模式(v0.9.0-beta.6 起)

[ambient]
enabled = true

[ambient.discord]
channels = ["你的頻道ID"]

Ambient mode 讓 bot 被動監聽指定頻道中的所有訊息,不需要被 @mention。Bot 觀察對話流,只在它認為有價值的時候才回應;沒什麼好補充的就回傳 [NO_REPLY],完全靜默。

關鍵行為:

  • Bot 緩衝訊息,每 60 秒(或累積 10 則)才送給 LLM 判斷一次

  • LLM 選擇回應或 [NO_REPLY](不回就不會出現在頻道中)

  • 有人 @mention bot,立即切回正常即時回應模式

  • 可在 ~/.openab/config/ambient.md 自訂判斷標準

企業用法:

  • Team channel 的「技術顧問」— 平時只聽,發現技術錯誤或有人問問題才回

  • Compliance observer — 監聽是否有人貼敏感資料

  • 知識庫同步 — 聽到重要討論自動摘要寫入 knowledge base


14 條控管講完了。但 config 寫好之後,agent 要跑在哪裡?這不只是 infra 問題,部署模式決定了你的安全邊界長什麼樣。選錯部署模式,前面 14 條 config 的保障會被打折扣。

部署模式選擇 — POD 模式(v0.9.0 起)

⚠️ Update:NVIDIA OpenShell 自 v0.9.0 起停止支援。原有 OpenShell sandbox 的安全保障(process / filesystem / network isolation)由 K8s native security context + network policy + secret injection 取代。POD 模式現在是唯一的部署路徑。

POD 模式下的安全機制:

  • K8s SecurityContext — runAsNonRoot、readOnlyRootFilesystem、drop ALL capabilities

  • Network Policy — namespace-level egress allowlist,只放行需要的 endpoint

  • Secret Injection — 透過 K8s Secrets / External Secrets Operator 注入,agent code 看不到 raw value

  • pre_seed / pre_shutdown — stateless + S3 備份,隨時可銷毀重建

  • Audit — sender_context + lifecycle hooks + K8s audit log


講了 14 條聽起來很多。但實際上每個部門的 config 大概就 10-15 行。下面直接看真的長什麼樣。

部門配置範例

以下以一家寵物科技公司為例(情境示範),示範如何按部門切 config。這套切法不限於特定產業——金融、製造、SaaS 都適用,差別只在 working_dir 跟 env 的內容。

前端團隊

# 5 agent multi-review 模式
[discord]
allowed_channels = ["frontend-code-review"]
allow_bot_messages = "mentions"
allow_user_messages = "multibot-mentions"
trusted_bot_ids = ["erwin", "hange", "armin", "mikasa", "eren"]

[agent]
working_dir = "/app/frontend"
env = { NODE_ENV = "development" }
# 不傳任何 secret

[pool]
max_sessions = 5

後端團隊

# Claude + 地端 Qwen3(可能碰到機密資料)
[discord]
allowed_channels = ["backend-ai"]
allow_bot_messages = "off"
trusted_bot_ids = []

[agent]
working_dir = "/app/backend"
env = { DB_HOST = "readonly-replica" }
# 只給 read-only DB,不給 write

[pool]
max_sessions = 3

AI Team

# Claude + Gemini Pro(需要大 context)
[discord]
allowed_channels = ["ai-research"]
allow_bot_messages = "mentions"

[agent]
working_dir = "/app/ai-models"

[pool]
max_sessions = 3
session_ttl_hours = 48   # 研究對話可能很長

行銷團隊

# 只回答問題,不寫 code
[discord]
allowed_channels = ["marketing-ai"]
allow_bot_messages = "off"
allow_user_messages = "involved"

[agent]
working_dir = "/app/marketing-docs"   # 只有文件,沒有 code
env = {}                               # 不傳任何環境變數

[pool]
max_sessions = 10   # 行銷人多

SDET 團隊

# Claude + Codex(快速產 test)
[discord]
allowed_channels = ["sdet-testing"]
allow_bot_messages = "mentions"

[agent]
working_dir = "/app/tests"

[pool]
max_sessions = 5

上面這幾組 config 我跑了大概三個月,橫跨 5 個部門場景,目前還沒遇到事故——但這只是我這個取樣下的觀察,不代表絕對安全,每個團隊還是要視自己的 threat model 微調。我自己的感受是,config 最大的價值不是防住 100% 的問題,而是出事的時候你 30 秒就能定位是哪一行設定沒蓋到。


控管總覽

                    ┌─────────────────────────────┐
                    │      OpenAB Instance         │
                    │                             │
                    │  config.toml 定義:          │
                    │  ├── 哪個頻道               │ → Channel Restriction
                    │  ├── 信任哪些 bot           │ → Trusted Whitelist
                    │  ├── bot 間怎麼互動         │ → Message Control
                    │  ├── 能看哪些檔案           │ → Working Directory
                    │  ├── 拿到哪些變數           │ → Env Control
                    │  ├── 最多幾個對話           │ → Session Pool
                    │  ├── 行為邊界              │ → CLAUDE.md
                    │  ├── 啟動/關閉 hooks        │ → Lifecycle Audit
                    │  └── 排程與 GitHub 代理      │ → Cronjob + ghpool
                    │                             │
                    │  全部 config-driven          │
                    │  全部可審計                  │
                    │  改 config 不改 code         │
                    └─────────────────────────────┘

跟 OpenClaw 的差異

控管機制

OpenAB

OpenClaw

頻道隔離

config 一行

沒有

Bot 信任名單

trusted_bot_ids

沒有

檔案存取範圍

working_dir

full disk access

環境變數控制

指定傳哪些

全部暴露

Session 限制

max_sessions

沒有

迴圈防護

turn limit 20/100

沒有

行為定義

CLAUDE.md

可以但沒有強制

Audit trail

Discord/Slack thread

個人帳號裡

OpenClaw 給 agent 一切。OpenAB 只給 agent 該有的。


寫到這裡你可能注意到一件事:上面每一條 config 都不是什麼新概念。如果你是前端工程師,這些 pattern 你每天都在用,只是換了一個名字。這讓我開始想:誰最適合擁有 AI agent 的治理?答案可能比你想的近。

前端的下一個角色:Frontend Deployment Engineer

W1 講到「每一波技術轉變都讓分開的職責被整合成新角色」,Data Engineer、DevOps、SRE、Platform Engineer 都是這樣冒出來的。這一波 AI,我看到的下一個整合角色是 Frontend Deployment Engineer

為什麼是前端?因為這篇講的 14 條 config + deployment mode 選擇,每一條都是前端工程師已經熟悉的 pattern:

  • config.toml = webpack.config.js / next.config.ts — 用宣告式設定控制行為

  • Channel Restriction = route-based code splitting — 不同路徑載不同東西

  • Working Directory = monorepo workspace boundaries — 每個 package 只看到自己的 scope

  • Environment Variable Control = .env.local vs .env.production — 分環境給不同變數

  • Session Pool = connection pooling / rate limiting — 控制併發

  • Lifecycle Hooks = postinstall / prebuild — npm script lifecycle

  • POD vs OpenShell = Vercel Edge vs self-hosted Docker — deployment target 的選擇

前端工程師本來就在做 deployment 的事:CI/CD pipeline、preview environments、feature flags、A/B testing infrastructure、CDN cache invalidation。這些加上 AI agent 的 config-driven governance,就是 Frontend Deployment Engineer 的 scope。

這個角色的職責:

  • Agent 編排 — 哪個部門用哪些 agent、config 怎麼切、怎麼 review

  • 部署拓撲 — POD / OpenShell / hybrid 怎麼選、egress policy 怎麼配

  • Developer Experience — 讓工程師安全地用 AI,不需要每次問 DevOps

  • Observability — token usage、session metrics、audit log 的 dashboard

  • 治理自動化 — config change → PR → review → deploy,跟前端現有 CI/CD 同一條 pipeline

W1 說「每一波都是抽象層往上加一層」。前端從「寫 DOM」推到「寫 Component」推到「寫 Config」推到「管 Agent + Deployment」。Frontend Deployment Engineer 與其說是新職稱,不如說是前端工程師在 AI 時代自然的上移方向。

如果你現在已經在管 CI/CD、寫 Helm chart、配 Vercel / Cloudflare Workers — 你離這個角色只差「把 AI agent 的 config 也納入你的 deployment pipeline」這一步。


四篇串起來

核心問題

答案

W1

AI 把工程價值歸零了嗎?

沒有。成本從 code 層推到判斷層(歷史節奏)

W2

判斷層的瓶頸是什麼?

信任 — 誰下令、誰負責、資料外洩怎麼辦

W3

信任的架構解是什麼?

四原則 — Control / Security / Accountability / Portability

W4

四原則怎麼落地?

Config-driven — 一個檔案解決一個部門的 AI 治理

從 Cervantes、Kazman 與 Cai 的學術研究到工程實踐,結論相同:人類掌控目標與邊界,AI 在邊界內執行。Config 就是那個邊界的物理形式:可被 review、audit、version control,也可以被一行改掉。

Config 本身不 fancy,但它是我目前看到最乾淨、最容易跟法遵解釋的一條路。

wchung.tw/blog/openab-series


資料來源

學術研究

  • H. Cervantes, R. Kazman, Y. Cai, "LLMs as Assistants in Software Architecture Design", IEEE Software, Jan. 2026. (DOI: 10.1109/MS.2026.3663353)

  • H. Cervantes, R. Kazman, Y. Cai, "An LLM-assisted approach to designing software architectures using ADD", IEEE TSE, 2026. 30 pages. (DOI: 10.1109/TSE.2026.3706446; NSF Award #2232720, #2213764)

  • Rick Kazman, "Better Together: How Humans and AI Can Co-Create Software Designs", SEAT 大師演講, 北科大, 2026-07-01.

  • Humberto Cervantes, Rick Kazman, "Designing Software Architectures: A Practical Approach", 2nd Edition, Pearson (SEI Series in Software Engineering).

前三篇引用的延續

  • W1:a16z、Darktrace 2024、IBM 2024、CSA 2026、Google DeepMind Big Sleep

  • W2:EchoLeak CVE-2025-32711、Salesforce ForcedLeak CVSS 9.4、NVIDIA OpenShell / Computex 2026

  • W3:Rubrik 2026 NHI Report、Cloudflare AI Gateway、Portkey、LiteLLM、Helicone、OpenRouter 市場對照

Enjoyed this article? Show some love!

0
Clap

Enjoyed this article?

Subscribe for engineering notes and AI development insights

We respect your privacy. No spam, unsubscribe anytime.

Share this article

Comments