行空板“哈基米机”
一、从 HachimoDock 说起
前段时间,小米开源的 AI 桌面配件 HachimoDock 火得一塌糊涂:一块小屏幕、三个按键、一个摇杆,屏幕里养着一只西高地小狗。电脑上的 Agent 在干活时,小狗会跟着任务状态切换表情——思考时托腮发愁、调工具时撸起袖子、出错时委屈巴巴。它还能语音操控电脑端 Agent、联动智能家居,硬件自制成本约 150 元,官方开放了源码、物料清单和装配教程。
我看完第一反应是心动,第二反应是排队:那块核心开发板和配套屏幕早被买断了货,社区里配件都在涨价。与其抢购,不如翻翻手头的东西——结果真让我翻到一块吃灰许久的行空板 M10。
这块板子简直是为此而生的:RK3308 主控,板载 Debian 系统,原生跑 Python;自带一块 240×320 的彩色触摸屏(电阻式)、金手指上的三个物理按键、一颗板载麦克风,还有 Wi-Fi。HachimoDock 的硬件要素——屏幕、按键、麦克风、联网——它一样不缺。于是有了这个周末项目:用行空板 M10 复刻一只"哈基米小狗",让它实时显示 WorkBuddy 的任务状态,还能反过来遥控电脑上的会话。
二、总体架构
整个系统分两端,中间用最朴素的 HTTP 连起来:
| WorkBuddy 会话日志 ──┐ ├─ watcher.py ──> pc_bridge.py (HTTP :8765) ──> 行空板 pet_m10.py WorkBuddy 审计日志 ──┘ (PC 端) (PC 端) (板端,WLAN/USB 直连) |
板端的 pet_m10.py 是一只 pygame 写的桌宠:负责画小狗、切表情、处理触摸和按键,每秒向 PC 轮询一次状态。PC 端的 watcher.py 专门"偷看" WorkBuddy 自己写下的本地日志,把日志事件翻译成六种状态;pc_bridge.py 把状态挂在 GET /state 上,同时提供 POST /action 和 POST /voice 两个反向接口,接收板子的遥控指令,通过 Win32 API 模拟键盘写进 WorkBuddy 的输入框。
没有上 MQTT,也没有上 WebSocket,就是标准库里的 http.server。好处是 PC 端零第三方依赖,板子端和 PC 端各自独立,任何一头出问题,拿 curl 敲一下接口就能定位是哪边的锅。
三、硬件与准备
需要的硬件只有两样:一块行空板 M10,一台装着 WorkBuddy 的 Windows 电脑。连接方式两种:USB 数据线直连(板子会虚拟出网卡),或者让板子和电脑连同一个 Wi-Fi。我把两个地址都写进了服务配置,直连不通就自动切 Wi-Fi。
软件侧:板端需要 pygame、Pillow、evdev 和系统自带的 arecord;PC 端除了语音识别用的 vosk,其余全是标准库。写了一个 deploy.py,一条命令完成"上传代码到板子 + 注册板端 systemd 服务 + 注册 PC 端自启",跑完之后两端都随开机自动拉起,之后我再也没有手动管过它。金手指上的三个物理键在项目里就是三个遥控按钮:0 号"继续"、1 号"详细说说"、2 号"停止",和屏幕底部的三个触摸按钮一一对应。
四、桌宠形象与动画
HachimoDock 那只小狗好看,很大程度上是因为形象统一。我用 AI 生图按同一角色设定画了六张立绘:待命、思考、执行工具、等待确认、完成、出错,每张都是同一只戴红项圈的奶油色小狗,只是姿势和表情不同。
图 1 AI 生成的卡通小狗状态立绘(同一角色批量生成,白底抠除后按屏幕高度缩放)

图 2 本地渲染预览:240×320 屏幕布局(状态栏 / 气泡 / 小狗 / 按钮区)
运行时的界面分三层:顶部一条状态栏(状态灯加状态名),中间是小狗立绘,底部是任务气泡和三个触摸按钮。状态切换时立绘整张换掉,配上气泡文字(比如"写入文件 · pet_m10.py"),一眼就能看懂 Agent 在干嘛。

图 3 真机实拍:TOOL 状态下屏幕实时显示当前执行的命令标题
五、三种控制方式
光能看还不够,HachimoDock 的精髓是"搭子感"——你随时能插话。我做了三条下行通道。
触摸按钮。电阻屏走 /dev/input/touchscreen 直接读 evdev,不经过 X 的指针映射,主循环自己判定按下位置落在哪个按钮热区。电阻屏一次按压常会抖出两三个事件,做了 0.25 秒、24 像素窗口的去重。点击判定逻辑抽成了纯函数 resolve_tap(),可以脱离设备跑 16 项自测;真机上另有注入连点的冒烟测试。
金手指按键。金手指走 /dev/input/event2,三个键按下即触发。后来干脆把主输入挪到了金手指上——电阻屏的坐标映射在这块板子上实在不够可靠,物理按键省心得多。
长按语音。短按执行固定动作;按住 0.6 秒进入录音,松手送识别。录音在按下瞬间就开始,不等到 0.6 秒——不然第一个字必丢。板子只负责用 arecord 录一段 16kHz 的 wav,通过 POST /voice 原样甩给 PC;识别在 PC 上做,因为 M10 的算力跑 Kaldi 会把动画卡住。识别用的是 Vosk 中文小模型,纯离线约 42MB,关键是开启了 grammar 限定词表:只让识别器在"继续、详细说说、停止"等十来个候选词里挑,短指令准确率比自由识别高一大截。认不出就气泡提示"没听清:xxx",方便排查是没说清还是词表缺词。
三条通道殊途同归,最终都汇到 PC 端同一套动作:找到 WorkBuddy 窗口、前置、写剪贴板、Ctrl+V、回车;"停止"则直接发 Esc 中断会话。
六、效果与展望

现在这块小板子就立在我的显示器旁边:WorkBuddy 在电脑上查资料、改代码、等我确认,小狗在屏幕上同步演出来;想让它继续,摸一下按钮,或者长按金手指说声"继续"就行。整个复刻的物料只有一块行空板 M10,教育级开发板价格通常在两三百元,虽然高于 HachimoDock 自制方案的 150 元硬件成本,但那个抢购难度大——更值的是,M10 复刻完还是一块通用板子,屏幕、麦克风、按键都能留着干别的。
可扩展的方向也不少:接上小米 Miloco 之类的能力做智能家居中控;把桌面宠物换成自家猫的照片;或者学 HachimoDock 的思路,让屏幕轮流显示番茄钟、天气、电脑状态等自制小组件。代码、测试和部署脚本都整理在项目仓库里,感兴趣的朋友可以直接上手改。对普通人来说,HachimoDock 最大的启示或许不是那只小狗本身,而是:与 AI 助手的交互,未必只能盯着一块大屏敲键盘。一块两三百元的开发板,一个周末的时间,就能让你的 Agent 在桌面上拥有一个会察言观色的"家"。



