返回首页
最新
在过去的2-3年里,主要由于人工智能的影响,跟上HN上有趣文章的节奏变得越来越困难。<p>你是如何应对这种情况的?除了越来越多地选择忽视有趣内容这个简单的解决办法。
这是一个大胆的声明。但我真心觉得我可能真的解决了计算机使用的问题(演示链接:<a href="https://x.com/mdlahfir/status/2088109763783700827?s=20" rel="nofollow">https://x.com/mdlahfir/status/2088109763783700827?s=20</a>)。
为了提供一些背景信息,我一直在构建 agent-desktop(受 Vercel Labs 的 agent-browser 启发),这是一个用于桌面应用的自动化 CLI。它就像 Playwright,但用于桌面,不仅限于本地应用,还包括 Chromium 应用。相信我,是的,Chromium 应用的可访问性树是非常复杂的。
MacOS 版本已经发布;我几乎快要为 Windows 和 Linux 发布了!
那么,我是如何解决这个问题的呢?
基本上是通过互操作性。
计算机使用的最大问题是,我们对于浏览器的使用有可靠的框架,比如 Playwright、agent-browser 等,但桌面应用却没有同样的支持。
我们有一些很好的解决方案正在出现,比如 tryCua,我是它的忠实粉丝。我对 agent-desktop 的愿景是构建一个最可靠的框架,供代理用于长期任务。
agent-desktop 轻量级,基于 Rust 构建,速度快,并且不消耗过多的令牌(它可以在不超过上下文窗口的情况下运行数小时)。
以下是我用来实现这一目标的方法:
a) 骨架快照 - 当你想要快照一个窗口/应用时,它只会快照父容器,并返回一个引用 ID,而不是整个可访问性树。
b) 骨架钻取 - 一旦代理拥有了那棵树,它就可以决定钻取到特定区域。所有子命令,如 --find、--click、--wait 等,都在那个特定的引用感知区域内工作。这意味着如果你想在整个应用中查找一个元素,它不会花费很长时间去搜索整个应用;相反,代理会准确知道那个元素可能在哪里,从而节省令牌成本。
c) 链式交互回退 - 单击并不是一个 API 调用,而是一个有序的机制链(AXPress -> AXOpen -> 通过内部单元激活 -> 写入选择 -> AXConfirm)。每一步只有在元素支持时才会执行,成功与否是通过观察应用状态的变化来判断,而不是通过返回代码,因为应用在两个方向上都会撒谎:Finder 对一个成功的操作返回错误,而对一个无效的操作返回成功。首先观察到的效果获胜。响应报告每一步尝试的结果,因此代理确切知道哪个机制成功了。
d) 事后反馈 - 每个操作都会报告其状态(已交付并验证、已交付但未验证、未交付),以及任何打开的界面(对话框、菜单、表单),因此代理知道发生了什么,而无需重新扫描整个应用。
e) 严格的引用重新识别 - 引用不是指针;它是身份证据(角色、路径、稳定文本、边界哈希)。在每个操作之前,它会针对实时 UI 重新解析。如果 UI 发生了变化,你会得到 STALE_REF;如果两个元素现在匹配,你会得到 AMBIGUOUS_TARGET。它从不猜测。
所有这些中最重要的部分是 Chromium 应用的可访问性。我是如何做到的呢?魔法词是 CDP!
如今,大多数桌面应用都是基于 Chromium 的(如 Slack、VS Code、Obsidian、Discord 等)。一个命令启动应用,并带有一个 CDP 端点,agent-desktop 会验证该端点是否真的在响应,然后再返回。从那里,任何浏览器自动化框架都可以连接并驱动网页内容:Playwright、Puppeteer、agent-browser,或你已经使用的任何工具。通过 CDP 读取 Obsidian 的网页内容需要 201 毫秒,而通过可访问性树则需要 2.3 秒。
$ agent-desktop launch "Obsidian" --cdp
```json
{ "ok": true, "data": {
"renderer": "chromium",
"cdp": { "port": 57500,
"http_endpoint": "http://127.0.0.1:57500",
"websocket_url": "ws://127.0.0.1:57500/devtools/browser/..." },
"suggestion": "下一步:运行 `agent-browser connect 57500` ..." } }
```
这使得 agent-desktop 能够与整个浏览器自动化生态系统互操作,而不是与之竞争。
快去试试 agent-desktop -> <a href="https://github.com/lahfir/agent-desktop" rel="nofollow">https://github.com/lahfir/agent-desktop</a>
chatpanel 是一个浏览器侧边面板,旨在帮助进行浏览器内会议(如 Zoom、Teams、Google Meet、Webex),能够实时捕捉会议记录,并通过集成的人工智能模型和代理回答问题。这是体验会议的最佳方式。它以隐私为核心,在数据传输到人工智能模型之前对其进行匿名处理。试用一下,感受它的强大功能。