附錄:Agent worker 設定
設定具名的 Telegram、LINE、Discord 和 Slack worker,以及憑據優先順序、執行時路徑、傳輸模式和本地應答行為。
適用對象: Agent 維運與整合維護者
Agent worker 設定#
.ait/agent-workers.json 為一個 AIT Repository 宣告具名的訊息 worker。 1.1.1 支援 telegram、line、discord 和 slack。預設位置可以用 AIT_AGENT_CONFIG_PATH 覆蓋。
先讀 ait-agent-worker:訊息與回覆執行時, 瞭解這個可執行檔案的職責、完整命令面、從訊息到回覆的路徑、傳輸模式、 原生 Codex provider、執行時接納和安全限制。這份附錄是逐欄位的編寫參考。
規範文件形狀#
{
"version": 1,
"workers": {
"telegram/support": {
"kind": "telegram",
"name": "support",
"mode": "poll",
"username": "support_bot",
"env_path": ".ait/agent-runtime/telegram.env",
"request_timeout_seconds": 30,
"local_reply": {
"model": "gpt-5.4-mini",
"reasoning_effort": "low",
"sandbox": "workspace-write",
"turn_timeout_seconds": 300
}
}
}
}作者要寫的就是上面那種直接的 version 加 workers 物件。內部診斷投影 可能會把它包在 config 裡;別把那層包裝寫進儲存庫檔案。
worker 的 key 用確切的 <kind>/<name> 形式。kind 和 name 都必須非空, name 裡不能有 /,顯式寫出的 kind 必須和 key 一致。目前約定下 version 是整數 1。規範化過程中出現問題時,worker 會啟動失敗並直接 關停。
通用 worker 欄位#
| 欄位 | 型別與行為 |
|---|---|
kind | telegram、line、discord 或 slack;一般從 key 推導。 |
name | 非空的例項名;一般從 key 推導。 |
runtime_root | 可選,worker 執行時檔案的路徑;預設 .ait/agent-runtime。相對路徑從 Repository 根解析;~ 在可用時按程序的 home 目錄解析。 |
sync_state_path | 可選的狀態檔案路徑。預設 <runtime_root>/<kind>-<safe-name>-sync.json。 |
env_path | 可選的憑據環境檔案路徑。預設 <runtime_root>/<kind>.env。 |
web_url | 可選,與回覆關聯的規範化瀏覽器基礎 URL。 |
request_timeout_seconds | 可選的正數請求超時。inf、infinite 或 none 關閉受支援的通用超時;Telegram 還接受 null 和 unlimited。 |
local_reply | 可選的本地回覆 provider 物件,見下文。 |
created_at、updated_at | 由命令託管的時間戳。 |
pid_file、log_file、termination_context_path | 存在時是由命令託管的生命週期路徑;別拿它們去設定回覆行為。 |
執行目標從 .ait/config.json 推導:solo_local 在本地跑;有遠端的工作流程 則需要一個有效的預設遠端 URL。當 worker 沒有設定 model 時,Repository 的 default_model 提供 Telegram 的模型回落值。
憑據來源與優先順序#
憑據欄位必須是非空字串。解析順序是:
- worker 條目本身;
- 目前程序環境;
- worker 的
env_path檔案。
其他行為類欄位只來自 worker 條目或它們編譯期的預設值;env 檔案覆蓋不了 它們。環境檔案接受 KEY=VALUE 行、空行、# 註釋,以及值兩邊配對的一對 單引號或雙引號。它們不是 shell 指令碼。
別把機密留在提交上去的清單裡。優先用僅所有者可讀的 env 檔案或程序環境, 並使用環境變數附錄 裡那些確切的變數名。
local_reply#
這個巢狀物件裡的未知欄位會被拒絕。
| 欄位 | 約定 |
|---|---|
program | 可選,非空的回覆 provider 可執行檔案。 |
args | 可選的字串陣列,元素中不能含 NUL 字元。 |
timeout_seconds | 可選的有限正數。 |
append_turn_analysis | 可選的布林值。 |
codex_program | 可選,非空的 Codex 可執行檔案覆蓋值。 |
model | 可選,非空的模型名。 |
reasoning_effort | none、minimal、low、medium、high、xhigh、max 或 ultra。 |
sandbox | read-only、workspace-write 或 danger-full-access。 |
turn_timeout_seconds | 正數、數字字串,或者 inf、infinite、none、unlimited。 |
sandbox 的取捨是一條執行邊界,不是訊息偏好。只給這個 worker 完成其 Repository 任務所需的訪問許可權。
Telegram 欄位#
| 欄位 | 約定與預設值 |
|---|---|
token | 必填的 bot token,或者提供 AIT_TELEGRAM_BOT_TOKEN/BOT_TOKEN。 |
username | 可選;開頭的 @ 會被去掉。 |
mode | poll(預設)或 webhook。 |
bind_host / bind_port | webhook 監聽地址;預設 127.0.0.1 和 8090。 |
webhook_path | HTTP 路徑;預設 /webhook。 |
webhook_secret | 可選的金鑰,或用 AIT_TELEGRAM_WEBHOOK_SECRET。 |
poll_timeout_seconds | 整數,至少 5;預設 45。 |
background_sync_enabled | 布林值;預設 false。 |
background_sync_interval_seconds | 數字,至少 5;預設 30。 |
openai_api_key | 可選的 worker 憑據;佔位值會被拒絕。 |
openai_base_url | 可選的規範化基礎 URL;預設 https://api.openai.com/v1。 |
openai_model | 可選的模型;先回落到 Repository 預設模型,再回落到 gpt-5.4-mini。 |
openai_reasoning_effort | 可選字串;預設 low。 |
openai_timeout_seconds | 可選的正數超時;不寫時繼承請求超時。 |
openai_max_output_tokens | 整數,至少 64;預設 700。 |
turn_merge_window_seconds | 非負數;預設 0.35。 |
turn_merge_max_messages | 正整數;預設 4。 |
decoupled_reply_enabled | 布林值;預設 true。 |
reply_markdown_enabled | 布林值;預設 true。 |
owner_bootstrap_enabled | 布林值;預設 true。 |
stt_mode | off(預設)或 local-stt。 |
stt_model | 本地語音轉文字模型名。 |
stt_device | 裝置選擇器;預設 auto。 |
stt_compute_type、stt_language | 可選字串。 |
stt_include_audio_uploads | 布林值;預設 false。 |
stt_program | 可選的本地語音轉文字可執行檔案路徑。 |
stt_timeout_seconds | 正數,取值從 0.1 到 3600;預設 120。 |
expected_concurrent_workers、workers_per_shard | 可選的正整數。 |
event_loop_backend | 可選的後端字串。 |
LINE 欄位#
| 欄位 | 約定與預設值 |
|---|---|
token | 必填的 channel access token,或用 AIT_LINE_CHANNEL_ACCESS_TOKEN/LINE_CHANNEL_ACCESS_TOKEN。 |
secret | 必填的 channel secret,或用 AIT_LINE_CHANNEL_SECRET/LINE_CHANNEL_SECRET。 |
api_base_url | 預設 https://api.line.me。 |
bind_host / bind_port | 預設 127.0.0.1 和 8091。 |
webhook_path | 預設 /callback。 |
Discord 欄位#
| 欄位 | 約定與預設值 |
|---|---|
application_id | 必填的字串,或用 AIT_DISCORD_APPLICATION_ID/DISCORD_APPLICATION_ID。 |
public_key | 可選憑據,用於 interaction 校驗。 |
bot_token | 可選憑據,用於 gateway 或 API 呼叫。 |
turn_timeout_seconds | 可選的正數超時;設定了請求超時時,預設至少 300 秒。 |
api_base_url | 預設 https://discord.com/api/v10。 |
http_user_agent | 預設 curl/8.7.1。 |
bind_host / bind_port | 預設 127.0.0.1 和 8092。 |
interaction_path | 預設 /interactions。 |
選用哪條 worker 命令,決定了該服務模式下 public_key、bot_token 是必須 其一還是兩者都要。
Slack 欄位#
| 欄位 | 約定與預設值 |
|---|---|
app_token | 可選憑據,用於 socket 模式。 |
signing_secret | 可選憑據,用於 HTTP 命令校驗。 |
api_base_url | 預設 https://slack.com/api。 |
http_user_agent | 預設 ait-agent-worker/0.1。 |
bind_host / bind_port | 預設 127.0.0.1 和 8093。 |
command_path | 預設 /command。 |
ack_text | 預設 ait is thinking...。 |
response_type | 預設 in_channel。 |
選用哪條 Slack 命令,決定了必須提供的是 socket 憑據還是 HTTP 簽名金鑰。
驗證#
用完整 CLI 參考裡的 agent worker 檢視和啟動命令。診斷輸出只報告憑據是否 已設定,不會列印它們的值。webhook 監聽器先在環回地址上測試,再透過可信的 反向代理對外暴露。