1 分•作者: matt_d•大约 2 个月前
返回首页
最新
1 分•作者: pretext•大约 2 个月前
1 分•作者: cnunciato•大约 2 个月前
2 分•作者: 01-_-•大约 2 个月前
1 分•作者: 01-_-•大约 2 个月前
1 分•作者: mpweiher•大约 2 个月前
1 分•作者: rodmena•大约 2 个月前
28 分•作者: tosh•大约 2 个月前
1 分•作者: simonebrunozzi•大约 2 个月前
在过去的二到三年里,主要是因为人工智能(AI)的兴起,在 Hacker News 上跟上有趣文章的步伐变得越来越困难。<p>你是如何应对这种情况的?除了简单地选择性忽略越来越多的有趣内容之外。
1 分•作者: num42•大约 2 个月前
1 分•作者: hebelehubele•大约 2 个月前
1 分•作者: jaikant•大约 2 个月前
1 分•作者: the-mitr•大约 2 个月前
2 分•作者: Khaine•大约 2 个月前
1 分•作者: mitchbob•大约 2 个月前
2 分•作者: Corrado•大约 2 个月前
1 分•作者: dima1830•大约 2 个月前
1 分•作者: yamin_bakoh•大约 2 个月前
2 分•作者: lahfir•大约 2 个月前
这是一个大胆的说法。但我真心觉得我可能真的解决了电脑使用的问题(演示:<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 构建,速度快,而且不消耗大量 token(它可以运行数小时而不会超出上下文窗口)。
以下是我实现这一目标的方法:
a) 骨架快照 - 当您想对窗口/应用进行快照时,它只快照父容器并返回一个 ref ID,而不是完整的可访问性树。
b) 骨架钻取 - 一旦代理获得了该树,它就可以决定深入到特定区域。所有子命令,如 --find、--click、--wait... 都作用于该特定的、已知的区域。这意味着如果您想在整个应用中查找一个元素,它不会花费很长时间搜索整个应用来查找该元素;相反,代理会精确地知道该元素可能在哪里,从而节省了大量的 token 成本。
c) 链式交互回退 - 一次点击不是一个 API 调用,而是一系列有序的机制(AXPress -> AXOpen -> 通过内部单元激活 -> 写入选择 -> AXConfirm)。每一步只有在元素声明支持时才会运行,并且通过观察应用的**状态变化**来判断成功,而不是通过返回码,因为应用在这两个方向上都会撒谎:Finder 会为已成功执行的操作返回错误,并为未执行的任何操作返回成功。首次观察到的效果决定了结果。响应会报告尝试的每一步,因此代理确切地知道哪个机制生效了。
d) 操作后反馈 - 每次操作都会报告其处置情况(已送达并验证、已送达但未验证、未送达)以及打开的任何界面(对话框、菜单、工作表),因此代理无需重新扫描整个应用即可了解发生了什么。
e) 严格的 ref 重识别 - ref 不是指针;它是身份证据(角色、路径、稳定文本、边界哈希)。在每次操作之前,它都会根据实时 UI 重新解析。如果 UI 已更改,您将收到 STALE_REF;如果现在有两个元素匹配,您将收到 AMBIGUOUS_TARGET。它从不猜测。
所有这些中最重要的一点是 Chromium 应用的可访问性。我是如何做到的?魔法词是 CDP!
如今,大多数桌面应用都是基于 Chromium 的(Slack、VS Code、Obsidian、Discord...)。一个命令会启动应用,并提供一个 CDP 端点,agent-desktop 会在返回之前验证该端点是否确实在响应。从那里,任何浏览器自动化框架都可以连接并驱动 Web 内容:Playwright、Puppeteer、agent-browser,以及您已经使用的任何工具。通过 CDP 读取 Obsidian 的 Web 内容需要 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": "Next: run `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>
1 分•作者: earth2mars•大约 2 个月前
ChatPanel 是一个浏览器侧边栏,旨在增强浏览器内会议(Zoom、Teams、Google Meet、Webex)的体验。它可以实时捕获会议转录内容,并利用集成的 AI 模型和代理来回答问题。这是体验会议的绝佳方式。最重要的是,它将隐私置于核心地位,在数据发送到 AI 模型之前对其进行匿名化处理。立即尝试,体验它的强大功能。