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 服务条款,存在封号风险。