MacOS 上实现 AI 操控电脑(Computer Use)的思考:从 Accessibility 到 AppleScript 的配置骨架

发布时间:2026/9/25 10:14:23
MacOS 上实现 AI 操控电脑(Computer Use)的思考:从 Accessibility 到 AppleScript 的配置骨架 1. 为什么我放弃了纯截图方案转向 Accessibility AppleScript去年黑客松我们组做「让 AI 操作你的电脑」交付了两个能力Playwright 配合 MCP 操控浏览器以及 VNC 沙箱里截图识别做键鼠操作。演示效果不错但我心里清楚这俩都不算真正的 Computer Use——Playwright 是在高度结构化环境里调 APIVNC 截图识别慢、不稳定、还依赖隔离环境离「在我自己的 Mac 上让 AI 帮我干活」差得远。后来我用 Swift 生态开发 macOS Agent 应用时Computer Use 又成了绕不开的核心需求。这次没有 48 小时限制我开始认真想在 macOS 上这件事到底该怎么做调研一圈下来社区方案大体两类。第一类是基于截图的视觉识别典型代表是 Anthropic 的 Computer Use 演示和 UI-TARS 方向——截全屏图发给多模态模型让模型看懂界面后输出坐标点击或键盘输入。这条路很直觉但保留意见明显视觉识别面对复杂界面、深色模式、非标准 UI 时经常犯低级错误每步都要发截图token 开销巨大更根本的是GUI 是给人看的不是给 AI 用的。第二类是结构化控制类似 Playwright 对浏览器做的事——不「看」网页长什么样而是直接读 DOM 树拿元素类型、属性、状态通过编程接口操作。macOS 在这方面其实非常友好它原生提供了完整的 Accessibility 能力包括 AXUIElement API可以读取几乎任何应用的 UI 层级树、元素属性和可执行动作。这套能力原本是为辅助障碍人群设计的但它恰好也为 AI 提供了一层结构化、可读写、可执行的界面抽象。所以我的判断是macOS 上真正有潜力的路线不是「让 AI 看懂 GUI」而是「绕过 GUI 的表象直接读取 GUI 背后的结构化描述」。这篇文章就把这条路的配置骨架拆开讲——Accessibility 授权怎么做、AppleScript 调用骨架长什么样、AI 工具的 settings.json 怎么配、以及怎么验证脚本真的能被 AI 触发执行。2. 前置准备TaoToken 统一 Key 与 API 通道在动手配 Accessibility 之前先把 AI 工具的接入通道理顺。我试过在多个工具里分别填不同厂商的 Key管理起来很乱后来统一走 TaoToken 的 API 通道一个 Key 覆盖模型对话、编码 Agent、脚本生成等多个场景。TaoToken 在这里的角色是统一入口你不需要为每个 AI 工具单独申请和轮换 Key也不用在 settings.json 里维护一堆不同厂商的 base_url。对于 Computer Use 这种需要频繁调用模型生成 AppleScript 或解析 AX 树的场景统一通道能省掉大量配置切换的麻烦。具体操作分两步。第一步去控制台创建 API Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole第二步在 API Keys 页面复制你的 Key后面配置 settings.json 时要用https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keysAPI 的基础地址是https://taotoken.net/api注意这个地址不带 UTM 参数直接填在配置里即可。如果你用的是 Claude Code 这类编码 Agent接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc注意Key 只创建一次就够不要在每个工具里重复申请。统一通道的意义就在于「一处配置多处复用」。3. 可复制配置Accessibility 授权 AppleScript 骨架 settings.json3.1 Accessibility 权限授权步骤macOS 的 Accessibility 权限不是自动给的任何想通过 AXUIElement 读取 UI 树或执行动作的进程都必须被用户手动授权。这一步不做后面所有 AX 调用都会返回kAXErrorAPIDisabled。打开「系统设置」→「隐私与安全性」→「辅助功能」。你会看到已授权的应用列表。点左下角「」把你的终端Terminal 或 iTerm2、以及你实际运行 AI Agent 的宿主程序比如 VS Code、或者你自己编译的 Swift 应用加进去。如果你是用命令行跑脚本授权对象是终端本身如果是打包成 .app 运行授权对象是那个 .app。这里容易踩的坑是授权了 Terminal但脚本实际由另一个 shell 进程执行权限不会继承。确认方法是在脚本里先调一次 AX 检查import ApplicationServices let trusted AXIsProcessTrusted() print(AX trusted: \(trusted))如果输出false说明当前进程没拿到权限回到系统设置里把实际执行进程加进去。改完权限后必须重启该进程权限不会热生效。3.2 AppleScript 调用骨架AppleScript 的价值在于对支持脚本化的应用Finder、Safari、Mail、Calendar、Notes 等它提供比 AX 更高层的语义接口。比如在 Finder 里移动文件用 AX 要「找窗口→定位列表→选中→触发菜单」而 AppleScript 一条命令搞定tell application Finder move file Document.pdf of folder Downloads of home to folder Archive of home end tell在 Swift 里调用 AppleScript用NSAppleScriptimport Foundation func runAppleScript(_ source: String) - String? { var error: NSDictionary? guard let script NSAppleScript(source: source) else { return nil } let result script.executeAndReturnError(error) if let err error { print(AppleScript error: \(err)) return nil } return result.stringValue } // 调用示例让 Finder 返回当前选中文件 let output runAppleScript( tell application Finder set sel to selection if sel is {} then return no selection else return name of item 1 of sel end if end tell ) print(output ?? nil)这段骨架的关键点是executeAndReturnError会同步阻塞直到脚本执行完返回值是NSAppleEventDescriptor用.stringValue取字符串结果。对于需要传参的场景不要用字符串拼接容易注入而是用NSAppleScript的executeAndReturnError配合NSAppleEventDescriptor构造参数。3.3 settings.json 配置示例如果你用的是支持 settings.json 的 AI 编码工具比如 Claude Code 或类似 Agent把 TaoToken 的通道配进去让模型生成的 AppleScript 能直接通过统一 API 调用{ api: { base_url: https://taotoken.net/api, api_key: sk-your-taotoken-key-here, model: claude-sonnet-4-20250514 }, tools: { applescript: { enabled: true, timeout_ms: 10000, allowed_apps: [Finder, Safari, Mail, Calendar] }, accessibility: { enabled: true, max_depth: 8, sparse: true } } }allowed_apps是个安全边界——只允许 AI 操作你明确列出的应用避免它乱动系统设置。max_depth控制 AX 树遍历深度太深会 token 爆炸太浅会漏掉关键元素8 层是个实测下来比较平衡的值。sparse: true表示对 AX 树做稀疏化只保留可交互和有语义的节点。4. 验证请求确认脚本能被 AI 触发执行配好之后怎么确认整条链路通了分三步验证。第一步验证 Accessibility 权限。跑上面那段AXIsProcessTrusted()输出true才算过。第二步验证 AppleScript 能被调用。用一段最简单的脚本让 Finder 创建一个测试文件夹tell application Finder if not (exists folder AI_Test of home) then make new folder at home with properties {name:AI_Test} end if return done end tell在终端里用osascript直接跑osascript -e tell application Finder to make new folder at home with properties {name:AI_Test}如果 Finder 里出现了AI_Test文件夹说明 AppleScript 通道没问题。第三步验证 AI 能触发脚本。在你的 Agent 工具里发一条指令比如「在 Finder 里创建一个叫 AI_Test_2 的文件夹」观察它是否生成了正确的 AppleScript 并通过 TaoToken 通道调用执行。如果模型返回的是脚本内容而不是直接执行说明工具调用链还没接上检查 settings.json 里的tools.applescript.enabled是否为true。验证模型对话通道是否正常可以走这个入口https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat如果你打算长期跑编码 Agent 或自动化任务Coding Plan 更适合持续调用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan5. 本篇常见错排查报错kAXErrorAPIDisabledAccessibility 权限没给。回到系统设置→隐私与安全性→辅助功能把实际执行进程加进去然后重启进程。注意授权对象是「实际执行的那个二进制」不是父进程。AppleScript 返回missing value脚本语法没问题但目标应用没响应。常见原因是应用没在前台或者脚本里的对象路径不对。先用osascript在终端单独跑一遍确认脚本本身能工作再排查 Agent 调用层。settings.json 里 base_url 填错TaoToken 的 API 地址是https://taotoken.net/api不要加 UTM 参数也不要漏掉/api后缀。填成官网首页地址会直接 404。AX 树遍历卡死某些应用的 UI 树非常深比如 Electron 应用全量遍历会超时。在 settings.json 里把max_depth调小或者开启sparse模式只取可交互节点。权限改了但没生效macOS 的 Accessibility 权限不会热更新。改完系统设置后必须完全退出并重启目标进程killall不够要用活动监视器确认进程真的退出了。AppleScript 超时默认超时可能不够尤其是 Mail 这类应用。在 settings.json 里把timeout_ms调到 15000 或更高同时在脚本里加with timeout of 15 seconds块。6. 接入文档与后续路径整条链路的核心就三件事Accessibility 授权拿到 AX 能力AppleScript 处理可脚本化应用TaoToken 统一 Key 和 API 通道让 AI 工具能调用。配好之后AI 操作 Mac 的骨架就搭起来了。更完整的接入参数和工具配置说明看接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc如果你用的是 Claude Code 这类编码 AgentAnthropic 兼容接入的配置细节在这里https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentclaudecode最后说个实测经验AX 树遍历的性能优化是最花时间的部分。有些应用的 UI 树深到离谱全量遍历一次要好几秒。我的做法是先用AXObserver监听焦点变化只在焦点切换时做增量抓取而不是每步都全量遍历。这个改动让响应速度从秒级降到毫秒级token 消耗也降了一个数量级。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询