AI News HubLIVE
站內改寫2 分鐘閱讀

透過 WhatsApp 將 Meta AI 用作 OpenCode 的模型後端

wa-metaai 是一個基於 WhatsApp 的 OpenAI 相容端點,讓 opencode 等客戶端可以將 Meta AI 當作模型使用。專案利用 whatsmeow 與 Meta AI 的官方機器人賬號通訊,實現了工具呼叫模擬和流式輸出,並給出了配置方法、已知限制與賬號耐久性注意事項。

來源Hacker News AI作者: amita2

wa-metaai 是一個開源專案,它在 Meta AI 與標準 OpenAI 相容介面之間搭建了一座橋樑。它的工作方式是將 opencode 等客戶端發出的 /v1/chat/completions 請求轉發到 WhatsApp,再經由 whatsmeow 庫傳送給 Meta AI 的官方機器人賬號。為了讓訊息能夠被 Meta AI 識別,專案在訊息 stanza 中追加了一個節點,並使用由訊息金鑰透過 HKDF 派生出的 BotMessageSecret。作者對比了兩個 Go 庫後發現,Baileys 並未真正支援 bot 對話:它雖然定義了 META_AI_JID,但該號碼已經無法路由,WhatsApp 會以“找不到對應的 USync 結果”來拒絕;而 whatsmeow 提供的 types.NewMetaAIJID 正確指向 867051314767696@bot,並在傳送時自動設定 bot 模式、派生 bot secret。

設定過程並不複雜,但賬號必須存在於真實的 WhatsApp 手機應用中(Android 模擬器也可以)。先用 CGO_ENABLED=1 go build -o wametaai . 編譯,然後執行 WA_PHONE=<號碼> ./wametaai。首次執行會顯示配對碼,在 WhatsApp 的“已連結裝置”中完成繫結。會話會儲存在 wametaai.db 中,之後無需再輸入配對碼。接下來只需在 opencode 的配置檔案 ~/.config/opencode/opencode.json 中加入 whatsapp provider,指定 baseURL 為 http://localhost:8788/v1,並設定模型 meta-ai,即可透過 opencode run --model whatsapp/meta-ai 使用。

由於 Meta AI 沒有原生函式呼叫能力,專案在提示詞中注入每個工具的名稱、描述和 JSON Schema,要求模型輸出一個 fenced JSON 物件,然後解析為標準的 OpenAI tool_calls 訊息。作者在 opencode 的真實代理迴圈中驗證過該流程:讓模型讀取 notes.txt 並說出秘密單詞,模型成功返回 pomegranate。整個系統提示詞加工具 schema 大約 3.7 萬字元(約 9k tokens),Meta AI 可以正常處理,但這也逼近 WhatsApp 單條訊息約 6.5 萬字元的上限。專案目前沒有截斷保護,超長提示會直接失敗。

專案文件列出了若干限制。工具呼叫依賴提示詞而非原生能力,Meta AI 有時會用散文回答而不是呼叫工具,導致迴圈卡住。流式響應實際上先將整個回覆緩衝,再一次性輸出;因為 Meta AI 的即時編輯訊息在 whatsmeow 中需要手工解包。系統提示詞被摺疊成扁平對話,沒有獨立的 system role。會話狀態基於單條 WhatsApp 執行緒,歷史每次都會重發,Meta AI 自身的記憶也可能在不同請求間相互影響。併發請求被序列化,無法並行服務。令牌數按約 4 字元/token 估算,延遲約 7 秒。

環境變數包括 WA_PORT(預設 8788)、WA_PHONE(首次配對必需)、WA_QUIET_MS(預設 6000 毫秒靜默判定完成)、WA_GRACE_MS(預設 18000 毫秒額外等待)、WA_TIMEOUT_MS(預設 120000 毫秒硬超時)。賬號本身註冊在租用的 TextVerified 號碼上,一旦號碼被回收,賬號可能被他人重新註冊而失效;WhatsApp 也會在主裝置長期離線時使連結裝置過期。此外,非官方客戶端違反 WhatsApp 服務條款,存在封號風險。