快轉到主要內容

OpenAB 新手入門:建立自己的機器人

·429 字·3 分鐘
Art
作者
Art
這是我的技術筆記。

引言
#

今天我們來介紹一下,如何將 OpenAB 完整安裝並跑起來。

OpenAB 的架構本質上就像是一座橋樑,連接了「通訊平台」(例如 Discord、Slack)與「實際運行 Coding Agent 的主機」。換句話說,這等於讓你在通訊軟體上直接使用 Coding Agent——當你在頻道中輸入指令時,OpenAB 會將這些內容轉送給 Agent 來執行。

透過這樣的架構,你就能在習慣的通訊軟體裡,隨時調用自己訂閱的 Coding Agent 帳號(例如 Codex 或 Agy)。

準備 Discord Bot
#

在 OpenAB 官方 GitHub 上可以看到多個通訊平台的整合文件,但目前對 Discord 的支援度最完整,因此這篇文章會以 Discord 作為主要範例(可參考官方 Discord 文件)。

1. 建立 Application 與 Bot
#

首先,前往 Discord Developer Portal 新增一個應用程式(Application),設定名稱並點選建立。

接著切換到 Bot(機器人) 頁籤,往下拉找到 Privileged Gateway Intents,將以下三個選項啟用:

  • Presence Intent
  • Server Members Intent
  • Message Content Intent

啟用這些權限後,你的 Bot 才能獲得接收與讀取訊息的互動能力。

2. 設定 OAuth2 權限與邀請
#

接下來,我們需要設定 Bot 的權限。切換到 OAuth2 頁籤中的 URL Generator,並在 Scopes 中勾選 bot

勾選 bot 後下方會出現 Bot Permissions,你可以參考下方的圖示進行對應的權限設定:

設定完成後,複製最下方產生的 URL,並在瀏覽器中打開它。這個步驟就是將你的 Bot 授權並邀請到你指定的 Discord 伺服器中,直接完成授權即可。

3. 啟用 Discord 開發者模式
#

之後的設定會需要頻繁用到頻道、使用者或 Bot 的 ID。因此,你必須先打開 Discord 的開發者模式:

前往 Discord 設定 -> 進階 -> 啟用「開發者模式」

啟用後,只要在任何頻道、機器人或使用者頭像上按滑鼠右鍵,就能直接點擊「複製 ID」。無論你之後想限制 Bot 只能在特定的頻道發言,或是設定只接受特定使用者的對話,這些 ID 都會是關鍵設定。


在 Local K3s 架設 OpenAB
#

OpenAB 的架構預設是設計來運行在 Kubernetes (k8s) 或 K3s 底下的。這種容器化設計是為了解決基本的安全性問題——既然 Agent 是在獨立的 pod 中執行,它能存取哪些檔案、擁有什麼系統權限,完全可以由你來嚴格定義與限制。

使用 AI Agent 輔助安裝
#

其實起手式非常簡單。如果你跟我一樣對 K3s 沒有特別深入的研究,最省事的方法就是直接在 Host 主機上裝好你平常用的 Coding Agent CLI(例如 Claude Code),開啟後直接下達需求:

help me install k3s in local and openab , per https://github.com/openabdev/openab

接著,AI 就會自己摸索,把 K3s 跟 OpenAB 順便一起幫你全部裝好。這些 Prompts 不需要死記,用你習慣的口吻告訴 Agent 你的需求,它自己就會想辦法安裝完成。

當然,AI 不一定每次都能一次做對。例如這次它跟我說安裝好了,但實際上我用指令查看,狀態顯示為 ERROR

不過沒關係,這就是有 Agent 的好處——直接把報錯丟回去給它,它會自己 debug 並修正問題。

待狀態正常後,因為 Agent CLI(例如 Claude Code)在初始化時可能需要授權,我們需要先 exec 進入跑好的 pod 裡,完成對應的登入授權步驟:

授權完畢,就可以直接到 Discord 頻道中,開始跟你的 Bot 說話互動了!

系統架構簡圖
#

如果你對 K3s 和容器架構不太熟悉,可以參考下面這張簡單的示意圖,了解整套系統是怎麼運作的:

+-----------------------------------------------------------------------------+
| [ 外部使用者環境 ]                                                           |
|                                                                             |
|      +---------------------------------------------------------------+      |
|      |                  Discord / Slack 聊天軟體                     |      |
|      +-------------------------------+-------------------------------+      |
+--------------------------------------|--------------------------------------+
                                       | (傳送你的指令,例如:「幫我寫一個網頁」)
                                       v
===============================================================================
| [ k3s 雲端主機環境 ] (負責管理與分配伺服器資源)                                |
|                                                                             |
|   +---------------------------------------------------------------------+   |
|   | 【 openab-pod 】(透過 Image 跑起來的獨立網頁後端貨櫃)                  |   |
|   |                                                                     |   |
|   |   +-------------------------------------------------------------+   |   |
|   |   |  【中樞調度】OpenAB Core (Rust 引擎)                         |   |   |
|   |   |  * 24小時在線,負責跟外部的 Discord 連線與接收指令             |   |   |
|   |   +------------------------------+------------------------------+   |   |
|   |                                  | (在 Pod 內部直接呼叫)             |   |
|   |                                  v                                  |   |
|   |   +-------------------------------------------------------------+   |   |
|   |   |  【AI 執行官】Coding Agent CLI (如 Claude Code)              |   |   |
|   |   |  * 真正動手在 Pod 裡寫網頁、改 Code 與跑測試的地方             |   |   |
|   |   +------------------------------+------------------------------+   |   |
|   |                                                                     |   |
|   +----------------------------------|----------------------------------+   |
+--------------------------------------|--------------------------------------+
                                       | (遇到不會的問題時)
                                       v
+-----------------------------------------------------------------------------+
| [ 雲端 AI 大腦 ]                                                             |
|                                                                             |
|      +---------------------------------------------------------------+      |
|      |               Anthropic / OpenAI API 雲端服務                  |      |
|      +---------------------------------------------------------------+      |
+-----------------------------------------------------------------------------+

持久化設定:本地目錄映射
#

在預設情況下,Pod 內 Agent 的家目錄會存放在 PVC (Persistent Volume Claim) 中進行持久化:

但老實說,如果要進到 K3s 的 PVC 裡改檔案、看程式碼,流程超級不方便也不直覺。

於是我要求 Coding Agent 幫我修改設定:我希望可以直接在 Host 主機的 ~/openab/bot-ghost 路徑下,存取並編輯對應於 Pod 家目錄的檔案。

Agent 收到後就自己去修改 K3s 的 deployment 檔案並重新部署:

這樣設定完就舒服多了!現在我可以直接在 Host 主機的 ~/openab/bot-ghost/ 新增 AGENTS.md 來調整設定,並直接在 Discord 上進行測試:

後記
#

其實還有很多調整的細節與內容,都很難整理成文章來特別發一篇文章,因為 openab 自由度太高了,需求不同、解法也不同,他只提供最基本的框架,不限制固定玩法,你可以自己用不一樣的方式來搭建,牽涉到的細節與技巧又都不太一樣。所以在這個過程當中,即便是有想要分享的內容,也很難彙整成一個主題,往往就會是散落凌亂的各種想法跟tip

使用 k3s / k8s 是官方原先預設的方式;為了要感受一下 openab 帶來的方便,甚至也提供了相當於試玩版的 windows binary(這個玩一下就好,感受到威力就可以考慮換k3s or 其他方式了);而在最近的軟體趨勢下,openab 也緊跟著技術前沿,不止前陣子推出了openshell的方式來安裝運行,現在更是推出了Amazon Bedrock AgentCore Runtime的支援,我相信不管對初學入門、進階玩家、高級用戶,都可以找到合適,且能運用到的場景

例如每天幫你收集財經資訊;或者全家人的群組中可以放一隻機器人,讓他來幫你找到大家都有空的時間,規劃旅遊行程(這個案例是社群分享的真實案例);又或者是人在外面,有靈感就透過discord發指令給機器人說:我想要寫一篇關於XXX的文章,然後文章就在短時間內依照你的寫文風格撰寫完畢,你要作的只是同意發布

他的靈活度很高,佈署很方便,支援很多平台,重視資安且企業導向,未來有機會我再慢慢分享給大家 也歡迎到社群逛逛 Openab Discord