系统架构
PhysiClaw 的硬件采用 CoreXY 运动结构:两个步进电机驱动触控笔在 X/Y 平面上移动,Z 轴的点击由电磁铁完成。控制板运行 FluidNC 固件,通过 USB 串口接收电脑上 Python 服务器发来的 G-code 指令,并转换为触控笔的移动和点击。
MCP 工具
Section titled “MCP 工具”MCP 工具把底层硬件封装成一组可直接调用的工具:通过摄像头查看手机屏幕、获取截屏、执行常用手势、把文本复制到手机剪贴板等。
| 分组 | 工具 |
|---|---|
| 观察 | peek、screenshot |
| 手势 | tap、double_tap、long_press、swipe |
| 导航 | home_screen、go_back、force_quit |
| 解锁 | unlock_phone |
| 文本 | send_to_clipboard |
| 连续动作 | sequence |
OCR 与图标检测
Section titled “OCR 与图标检测”PhysiClaw 对摄像头画面和截屏做 OCR 和图标检测,再把结果连同压缩后的图片提供给智能体。
图像像素坐标 → 手机屏幕坐标 → 物理平面坐标,整条链路需要两个变换矩阵来换算。
每次运行前都要重新校准,以计算出准确的变换矩阵。
摄像头画面有时对焦模糊,这时机械臂点击辅助触控:单击拍一张 iOS 截屏,双击运行快捷指令把截屏上传到服务器。全程无需切换页面,效率更高。
人在手机键盘上打字很自然,对智能体却不友好。按键小而密集,难以精确定位和点击,而且每按一个键都要调用一次大模型,既慢又容易出错,还浪费 token。
更好的做法是通过快捷指令从电脑获取文本,写入剪贴板后直接粘贴,既快又准确。
快捷指令是 iOS 独有功能,安卓没有原生替代方案,因此 PhysiClaw 目前使用 iPhone。
运行时持续循环检查是否有定时任务到期,或屏幕是否因新通知点亮;满足任一条件就唤醒智能体。
唤醒后,智能体解锁手机,读取微信消息,打开对应 App 完成任务,把结果反馈给用户,最后保存日志并结束对话。
智能体完成一项任务通常需要多次调用大模型,每次都附带一张手机屏幕图片。没有合适的上下文管理,很快就会达到上下文窗口上限。
压缩上下文。 每次调用,大模型除了返回要执行的操作,还返回一段简短描述。只有最近一轮保留原始图片,更早的轮次换成 OCR 文本;轮次增多后,OCR 文本进一步压缩为每步一句话的描述。
更新进度。 提示词要求大模型在关键步骤更新任务进度,这样上下文压缩后也不会迷失方向。进度放在消息列表末尾,引导大模型。
让缓存稳定命中。 把系统提示词、工具描述、记忆等固定内容放在最前面,并保持逐字节一致。压缩上下文时尽量少改动前面的内容,因为每处改动都会使缓存从改动处失效。
Conductor
Section titled “Conductor”Conductor 负责运行 playbook。用户的任务匹配到可用的 playbook 时,由 conductor 直接执行,不再让智能体逐步操作。Playbook 内置 App 的先验知识,大部分步骤可程序化执行,因此模型调用更少,token 成本更低。