跳过正文

给 Grok Bot 装了个身体

·3151 字·7 分钟
Rollin
作者
Rollin
机器人产品规划 × AI 全栈独立开发者,铁人三项爱好者。

深圳那场 Grok Bot 线下局,有人在把 Bot 往 StackChan 上接,桌面小人跟着说话、转头,挺好玩。

我自己桌上早就有一具差不多的身体:iPhone 吸在 DockKit 云台上,能转头、能看人。当时就想,这不就是给 Bot 用的吗。回来开了工。

现在这具身体能对着手机说话、它转头、它换脸、它把听到的话写回 Grok 对话框。手指还能在屏幕上搓它的脸。拍完、转完默认只出一声短的「拍好了」,长内容留在对话框里。

仓库:github.com/rowline/grokbot-body

它是什么
#

Grok Bot 里某一个 Bot 的身体。大脑还是那个 Bot,不是另开一张嘴。

手机只干三件事:

  • :白球槽眼。变形跟 bloub 一样,径向轮廓、指数 ease-out,身体不过冲。思考绕彩带,出错变成感叹号。
  • 耳朵:系统听写。默认按住球体说话,松手发出去。按住和搓脸是同一根手指:不太动就是说话,拖了就是边说边搓。
  • :把 Bot 要说的话读出来。想用 Grok 音色,自己在绑定页贴 xAI 密钥;不贴就用系统声。密钥留在手机,不过云。

云台用 Belkin 这类 DockKit 支架就行,比如 Auto-Tracking Stand Pro。没有云台也能听、说、换脸、拍照,只是不能转头。

手机出站连你自己部署的 Cloudflare Worker。运行时不需要家里再开一台 Mac。

有一件事要先说清楚:没有公共云通道。 每人部署自己的 Worker,再把地址填进 App 绑定页最上栏「云」。别人的 Worker 别用,也别让别人用你的。

App 图标,白球黑槽眼

怎么玩
#

装好之后,日常就是按住球体说话。下面先写每天怎么用,第一次怎么装放在后面。

按住说话
#

默认「按住说话」。按住球体开口,松手发出去。办公室用这个,旁边闲聊不会收进去。

安静环境可以在绑定页切到「一直听」——周围说话也会收进去。还可以切「按住录像」,松手存到相册。

按住和搓脸是同一根手指:不太动就是说话,拖了就是边说边搓。

按住球体对着它说话

开口之后大概是这样:

  • 说「帮我拍一张桌上」:屏幕闪一下,露出缩略图,身体说「拍好了」。图回到 Grok 对话框,不落盘。
  • 说「往左转」「转圈」「点头」:支架当场动,不等 Bot。纯指令不交给 Bot。
  • 说「看一下窗户再拍一张」:电机会先转,剩下的仍发给 Bot。
  • 电脑里打字让它拍照:只是在调工具,不等于在听。它拍完可能出一声「拍好了」,然后还是没在听,除非门铃接通,或它自己又 wait_for_speech
  • 它要讲很长一段:手机只念一两句要点。全文写在 Grok 对话框,手机屏幕底下也能往上滑看完。

绑定页「任务完成出声」默认开。拍完、转完、录像完只说一句短的,比如「拍好了」「点头完成」「录像好了」。关了就不出声。长内容、报告、完成后的全文只写在对话框,不往外念。

支架当场动
#

吸上云台默认人脸追踪。对着手机说这些,支架当场动:

左转、右转、转圈、点头、摇头、抬头、低头、跟着我、别跟着、停下

纯指令不交给 Bot。句子里夹了别的话,电机会动,剩下的仍发给 Bot。

云台转头,屏幕上的球跟着看向一边

没有云台也能听、说、换脸、拍照,只是上面这些转头不会发生。

拍照和录像
#

Bot 可以要一张 JPEG,绑定页可关。拍照会闪一下并露出缩略图。图只走这一次工具返回。

录像 1 到 12 秒,绑定页可关。手机上切「按住录像」也能自己录,松手进相册。Bot 录的也会存一份到相册。过云的片子暂存在 Durable Object 里,每具身体只留最近 4 段。

搓脸、发晕、换脸
#

手指在球上拖一拖,眼睛看过来,身体被按扁。松手用同样的 ease-out 缓回去,不会弹。

手指搓脸,眼睛跟着看

眼睛会跟着手机倾斜。轻轻晃一下它会愣住;故意连着用力晃会发晕,大约两秒后自己好。

绑定页「脸」可以切 Orb(白球槽眼)或暗球(黑球白眼)。思考绕彩带,出错变成感叹号,还能变成六边形。

思考时绕彩带

屏幕上这几行字
#

左上角「在听 / 在说」表示身体正在听或正在读。

听到的原话会显示在屏幕底下,长句可以往上滑看完:

  • 已交给 Bot:正在听,或门铃已经按过
  • 已记下 · 现在没在听:话到云了,但没人在等,门铃也还没接通

听到的原话和它的回答,会写进 Grok Bot 对话框,电脑这边能看见。

认领成功后它应自己循环听。wait_for_speech 一次最多约 18 秒,没人说话也必须马上再调。这是它听人说话的唯一入口。

电脑里打字让它拍照、转头,只是在调工具,不等于在听。屏幕若停在「已记下 · 现在没在听」,对着手机再说话会去按门铃。门铃没接通,话只会落到云上,Bot 不会醒来。

第一次怎么装
#

先备齐三样:

  1. 能加 Custom Connector 的 Grok Bot
  2. 一部 iPhone(吸上 DockKit 云台更好)
  3. 一个 Cloudflare 账号

做完一次,日常就是按住球体说话。

1. 自己跑云
#

把仓库拉下来,进 cloud/

cd cloud
npm install
npm test
npx wrangler deploy

记下部署后的地址,形如 https://<worker名>.<你的子域>.workers.dev。这就是身体的云。

本地调试可以 npx wrangler dev,手机绑定页填 http://<这台 Mac 的局域网 IP>:8787。真机日常用 workers.dev,不要走家里的网关。

2. 装 App,填云地址
#

Xcode 打开 ios/GrokBotBody.xcodeproj,Team 换成你的 Apple ID,装到真机。第一次允许相机、麦克风、相册。

打开绑定页,最上栏「云」填上一步的 Worker 地址,点「保存并重连」。不填就不连,屏幕会写「未填云地址」。

连上之后,屏幕下方出现 6 位配对码,十分钟内有效。

3. 把 Connector 贴进 Grok
#

绑定页有一栏「连接」,复制那条带密钥的地址,形如:

https://<你的worker>/mcp/<密钥>

到 Grok Bot → Settings → Plugins → Custom Connector:

  • Name:GrokBot Body(随便起)
  • Server URL:贴上面那条,只贴一次

不要贴不带密钥的 /mcp。那条旧地址 Bot 忘了 token 就调不动。带密钥的地址认领之后,工具自己找这具身体。

Connector 是账号级的,你名下所有 Bot 都看得到。真正的锁是配对码,加上连接地址里的密钥。

4. 认领
#

打开要当灵魂的那个 Bot,对它说:

用配对码 482193 认领身体。认领后立刻 wait_for_speech。

482193 换成手机上那 6 位。手机屏幕变成「已绑定 · …」就对了。

解绑:绑定页点「解绑」,或让已绑定的 Bot 调用 unbind_body。门铃网址还留着,重绑不用重设,除非点了「关掉门铃」。

5. 门铃设一次
#

Grok 只有正在跑回合时才会调工具。它没在听的时候,你对着手机说话,话会到云上,但 Bot 不会醒来。所以要给它装个门铃。这一步只做一次。

电脑打开 https://<你的worker>/setup,或看手机绑定页「门铃」:

  1. 打开这个 Bot → 自动化 → 新建
  2. 触发选「当 webhook 响起」
  3. 说明贴这段:

身体有人说话了。立刻 wait_for_speech。把听到的原话写进对话框。开口最多一两句要点,长文和完成后的全文只写对话框。然后再听。不要编。

  1. 打开触发卡片,把网址和密钥贴回 setup 页或手机。密钥只在电脑上能看见。
  2. setup 页要填手机上的 6 位码:认领前是配对码,认领后是门铃码

保存后绑定页显示「门铃 · 已接通」。

它能干什么
#

能力说明
听和说人对着手机说,Bot 用嘴回答。开口只说短句
换脸思考、高兴、出错、六边形
搓脸手指按在屏幕上,眼睛跟着,身体被按扁
转头点头云台左转、右转、转圈、点头、摇头、抬头、低头
跟着人吸上云台默认开
拍一张Bot 可以要一张 JPEG,绑定页可关。图只走这一次工具返回,不落盘
录像1 到 12 秒,绑定页可关。过云的片子暂存在 Durable Object 里,每具身体只留最近 4 段
任务完成出声绑定页可关。开了只说一句短的

Bot 转头、拍照、录像、跟着人时,手机屏幕会写出正在做什么。拍照会闪一下并露出缩略图;录像时左上角红点倒数。

几个边界
#

Grok 没有对外的「塞一条用户消息进去」的接口。所以身体要嘛一直 wait_for_speech,要嘛靠门铃把 Bot 叫醒。电脑对话框里写完,不等于告诉了身体;要开口必须 speak,而且只说要点。

这不是 xAI 官方产品。脸的变形移植自 jeremy-prt/bloub

现场那个 StackChan 方案和这个不打架。一个是桌面小人,一个是你已经吸在支架上的手机。我选后者,只是因为硬件已经在桌上了。

玩之前把 README 再过一遍:github.com/rowline/grokbot-body