乐于分享
好东西不私藏

一个拇指大小的 AI 工作台:StickS3 + Codex 的随身助手实验

一个拇指大小的 AI 工作台:StickS3 + Codex 的随身助手实验

最近买了块 M5Stack StickS3,一百多块钱。

它很小,带屏幕、按钮、Wi-Fi、麦克风、扬声器和电池。

单看参数,它是一个全能的可以塞进口袋里的 ESP32的开发板。

但如果把它和桌面端 Codex 连起来,它就可以变成一个很有意思的“AI 工作状态控制器”。

我最后做出来的效果是:

  • 屏幕上能显示 Codex 当前状态:待命、运行中、已完成、离线等。

  • 能显示 Codex 5 小时和 7 天额度。

  • Codex完成任务之后,会有提示音告知。

  • 长按设备上的蓝色按钮,可以语音输入。

  • 松开按钮后,语音会被识别成文字,自动填入桌面端 Codex。

  • 支持自动按 Enter,语音说完后直接让 Codex 执行。

    已关注
    关注
    重播 分享
  • 设备上还有一个 Result 页面,可以翻页查看最近一次 Codex 回复。

这篇文章就记录一下这个小产品从想法到实现的过程。

为什么要做一个实体 Codex 控制器

第一,尝试做嵌入式开发的小起点。

这点是最原始的动力。毕竟这个codex的小助手做出来也算是点脱裤子放屁的美丽的小废物。但是这给了我用AI做嵌入式开发的信心,也算是为以后做些其他的小东西打下基础吧。

第二,额度可见

Codex 的 5 小时和 7 天额度对重度使用很重要。把额度显示在小屏上,小玩意放到桌面,随时可以查看,比每次自己去电脑端点账号、点剩余用量等操作找状态更方便

第三,快速语音输入。

很多时候我脑子里已经想好了要让 Codex 做什么,但有其他事情忙,懒得切窗口、点输入框、打字。按住一个实体按钮说话,松手后直接识别并提交,这个交互非常自然。

第四,结果回看。

Codex 的回答有时很长,但我不一定一直盯着电脑。让小屏幕显示最近一次回答摘要,哪怕只是几页短文本,也很适合做“低打扰”的结果提示。

整体架构

这个方案里,StickS3 不直接访问 Codex,也不直接访问云端 AI 服务。

它只和电脑上的本地 bridge 通信。

这样的好处是:

  • 设备端逻辑简单

  • API key、token、桌面输入权限都留在电脑上

  • 以后换 ASR、换输入方式、换状态来源,不需要大改固件

  • StickS3 只需要稳定连上电脑 bridg

电脑端 bridge 做了什么

bridge 是整个系统的中枢

它主要负责四件事。

第一,提供 HTTP API。

StickS3 会轮询:

GET /state

也会在按钮、录音等事件发生时调用:

POST /eventPOST /recording/startPOST /recording/audioPOST /recording/stop

第二,观察 Codex 状态和额度。

bridge 会读取本机 Codex 的活动状态和会话信息,同时通过 Codex app-server 获取额度。现在设备上显示的 5H、7D 额度就是这么来的。

第三,处理语音识别。

StickS3 上传音频后,bridge 负责调用 ASR,把音频变成文字。

第四,把文字输入到桌面端 Codex。

这里没有用慢速逐字输入,而是用 Windows 原生剪贴板 API,先把文字写入剪贴板,再触发粘贴。这样速度明显更快,也更接近正常用户输入。

固件端做了什么

StickS3 固件主要负责硬件交互。

它做的事情包括:

现在固件里还加了中文字体,否则中文会显示成方块。

Result 页用的是 GB2312 字体,覆盖大部分常用中文。它不是完整 Unicode 字库,所以遇到极少数字符仍然可能显示不出来。考虑到 StickS3 的固件体积和屏幕大小,这个折中目前够用。

开源项目与作者

这个项目基于开源方案继续改造和适配。

原始开源项目:

https://github.com/GaryGaryyy/VibeStick

作者 GitHub:

https://github.com/GaryGaryyy

如果你也想复现或继续改造,可以从这个仓库开始看。

另外这个小设备淘宝上搜索M5stack StickS3即可,149块不加运费。

源方案的功能没有这个那么多,而且是基于MacOS进行的适配。本文里的 Windows 适配、语音自动提交、Result 页翻页、中文字体和稳定性修复,是在这个开源方案基础上继续扩展出来的。