仅限gpt 5.4 5.5
vibe coding了一个 pi extension,让模型可以通过autohotkey操作windows,
pi-computer-use-ahk.zip (110.3 KB)
思路来自于Computer use | OpenAI API
里面有个Option 2: Use a custom tool or harness
试下来有点出乎我的意料,原本以为没法用的
,当然也没那么有用
项目目录里面有:
README.md:使用说明关键设计决策.txt:主要设计取舍index.ts / actions.ts / screenshot.ts:pi extension 代码test-computer-use.js: 测试脚本computer-use.ahk:AutoHotkey 控制鼠标键盘screenshot-helper/以及bin/screenshot-helper:.NET 截图 helper 源码及exebuild-screenshot-helper.ps1:构建截图 helperinstall-extension.ps1:复制到 pi extension 目录
大概思路
这个扩展注册了一个 computer_use 工具,模型可以调用它执行一组 UI 动作:
screenshotclickdouble_clickmovescrolltypekeypressdragwait
整体流程是:
- 模型先请求截图;
- 扩展返回当前桌面截图;
- 模型根据截图决定点击、输入、快捷键等动作;
- AHK 执行动作;
- 动作后再截图返回给模型;
- 如此循环。
进程与管道设计
底层有两个常驻子进程:
-
AutoHotkey v1 进程
- 负责鼠标、键盘、拖拽、滚动、粘贴输入。
- pi extension 在 session 启动时 spawn 一次。
- 后续每个动作通过 stdin 发命令给 AHK。
- AHK 执行完后通过 stdout 返回结果。
-
.NET 10 screenshot helper
- 负责截图。
- 同样是常驻进程。
- 也是通过 stdin/stdout 管道通信。
- 避免每次截图都 spawn PowerShell。
管道协议很简单,大概是这种形式:
stdin:
id|action|param1|param2|...
stdout:
id|ok
id|error|message
例如:
1|click|500|300
2|keypress|Ctrl|Shift|Esc
3|screenshot
截图 helper 返回时大概是:
id|ok|width|height|base64_png
这样做的好处是:
- AHK 和截图 helper 都是常驻进程;
- 不需要每次工具调用都重新 spawn;
- 延迟低;
- 协议简单;
- 出错时可以根据 id 对应 pending command;
- session 结束时统一发
exit关闭。
如果 .NET helper 没构建,截图会回退到 PowerShell,但会慢一些。
前置要求
需要提前安装:
- pi coding agent
- .NET 10
- AutoHotkey v1
注意:
AutoHotkey 脚本是按 v1 写的,我本机测试用的是 v1。
v2 没测试过,不保证可用。
.NET helper 目标框架是:
net10.0-windows
所以需要本机有 .NET 10 运行环境。
启用方式
扩展默认是关闭的,不会自动注册tool。
需要设置环境变量:
$env:CUA_ENABLED = "1"
pi
如果 pi 已经启动,需要重启 pi。
安装方式
把目录解压后,在项目目录运行install-extension.ps1
install-extension.ps1 会复制文件到:
C:\Users\<你的用户名>\.pi\agent\extensions\computer-use-ahk
当然也可以自己手动复制过去
然后启动 pi
AutoHotkey 路径
默认会检测常见路径,例如:
D:/Program Files/AutoHotkey/AutoHotkeyU64.exe
C:/Program Files/AutoHotkey/AutoHotkeyU64.exe
也会检查 PATH。
如果你的 AHK 不在默认位置,可以设置:
$env:AUTOHOTKEY_EXE = "D:\Program Files\AutoHotkey\AutoHotkeyU64.exe"
安全方面
没有在tool prompt里面设置安全护栏
其他说明
这不是OpenAI 官方那种内置 Computer Use
更详细的设计可以看目录里的:
README.md
关键设计决策.txt
欢迎大家看看设计思路,也欢迎提建议。
1 个帖子 - 1 位参与者