前言:多 bot 之後,訊息要送到誰
上一篇把公司責任拆成多個部門 bot,但拆分只完成一半。真正上線後,使用者不會先打開「finance Profile」再輸入問題;他只會在某個 Telegram 群組、私人聊天室或 LINE 對話中發訊息。
因此下一個問題變成:同一個 Gateway 如何同時服務多個 Profile,而且每則訊息都能抵達正確的角色?
這不是把八個 bot 都塞進同一個提示詞,而是建立一張可驗證的路由表:來源聊天室是誰、允許哪些 Profile、最後由哪個 Profile 回應。
一、Profile、Bot 與聊天室不是同一層
在實作時,我先把三個概念分開。
Profile 是一套獨立的執行環境,包含設定、SOUL、USER、skills、cron 與記憶。Bot 是這套環境在某個工作責任上的角色。聊天室則是訊息進入系統的來源。
三者可以用下面的方式理解:
| 層級 | 回答的問題 | 例子 |
|---|---|---|
| Profile | 這套環境使用哪些模型與規則? | flash、deep、部門專屬 Profile |
| Bot | 這個角色對什麼結果負責? | finance、engineering、support |
| 聊天室 | 訊息從哪裡進來、誰可以使用? | Telegram 私人群組、公司群組 |
最容易犯的錯,是把模型工具 Profile 當成部門 Bot。flash/deep/best 是模型工具分工,不代表它們應該直接取代 finance 或 engineering 的責任邊界。
二、先畫路由表,再改設定
我的路由設計先從資料表開始,而不是先改設定檔。每一列至少要寫清楚:
例如:
| 來源 | 用途 | 允許 Profile | 預設 Profile |
|---|---|---|---|
| 公司營運群組 | 日常跨部門協作 | operations、architect | operations |
| 財務工作群組 | 收支與對帳 | finance | finance |
| 工程工作群組 | 案件與設備交接 | engineering | engineering |
| 個人私有群組 | 個人助理工作 | private | private |
這張表的價值不在於看起來完整,而在於出問題時可以回答:訊息到底在授權層被拒絕、在路由層選錯,還是到了模型後才產生錯誤?
三、Multiplex Gateway 解決的是同時在線
單一 Gateway 的好處是平台連線、訊息接收與基本生命週期可以集中管理。當 multiplex_profiles 啟用後,Gateway 可以在同一個服務中載入多個 Profile,根據來源與路由規則把訊息交給對的執行環境。
但「啟用 multiplex_profiles」只代表系統具備多 Profile 能力,不代表所有聊天室都自動被授權,也不代表會自動猜出正確的 Profile。後面仍然需要 allowlist 與 routes。
我把設定拆成三個責任:
對群組訊息而言,還要確認群組專用的授權清單。少一層時,症狀可能不是錯誤訊息,而是訊息安靜地消失,讓人誤以為模型或 Gateway 掛掉。
四、allowlist 是安全邊界,不是方便清單
我不把所有 chat ID 都放進允許清單。每加入一個來源,都要能回答三件事:
私人資料、公司資料與不同部門的資料不能因為共用 Gateway 就混在一起。尤其是「公司群組允許使用 architect」不等於 architect 可以讀取每個部門的所有原始資料;平台授權、Profile 權限與工具資料源仍要分層檢查。
五、最小可行路由測試
改完路由後,我不會只看設定檔語法正確,也不會只重啟服務就宣布完成。我會用最小測試矩陣逐一驗證:
| 測試 | 預期結果 |
|---|---|
| 允許聊天室送出一般訊息 | 正確 Profile 回覆 |
| 未允許聊天室送出訊息 | 被拒絕或明確記錄,不進入錯誤 Profile |
| 群組聊天室送出訊息 | 通過群組授權層後才回覆 |
| 同一 Gateway 的另一個 Profile | 不會讀取前一個 Profile 的私人記憶 |
| 路由到不存在的 Profile | 產生可追蹤錯誤,不靜默丟棄 |
| 重啟 Gateway 後再次測試 | 路由設定仍然載入 |
每次測試都保留原始訊息、log、回覆內容與 message ID。這些資料比「服務顯示 running」更能證明路由真的有效。
六、一次設定失敗的排查順序
當個人 DM 有回覆、群組卻沒有回覆時,我會依序檢查:
這個順序很重要。若訊息根本沒有通過授權層,繼續調模型只是在錯的地方浪費時間。
七、重載不是驗證
設定檔寫入成功,只能證明檔案被修改。服務重新啟動成功,也只能證明程序能跑起來。完整驗證至少要包含三段:
如果只有前兩段,最多只能說「設定已載入」,不能說「群組路由已修好」。
八、路由規則也需要 owner
路由表不是一次建立後永遠不變。新增聊天室、移交部門、停用 Bot 或改變資料權限時,都可能需要同步更新 allowlist 與 Profile 設定。
所以我會把路由維護責任交給明確 owner,並留下變更原因、影響範圍、驗證結果與回滾方式。沒有 owner 的路由表,最後一定會變成只有最初建立者看得懂的隱性設定。
結語:多 Profile 的重點是可控,不是數量
Multiplex Gateway 讓多個 Profile 可以同時在線,但真正的工程難題是把「誰可以收到什麼」說清楚。
我的做法是先分離 Profile、Bot 與聊天室,再用 allowlist 限制入口,用 profile_routes 決定責任,最後用實際訊息與 log 驗證外部效果。任何一層缺失,都可能讓訊息被送錯或靜默丟棄。
下一篇會記錄一次更具體的踩雷:Bot 在私人訊息中正常回覆,到了群組卻完全沒有反應。那次排查最後發現,問題不在 chat ID、權限或模型,而是在新版授權流程多了一道群組清單。
實際證據清單