【技术干货】把 Claude 变成“本地自动化工程师”:Anthropic Computer Use 能力与实战落地指南
摘要
Anthropic 在 Claude Code 中正式引入 Computer Use 能力,让大模型可以直接操作你的桌面应用和浏览器,从“写代码助手”升级为“全栈自动化代理”。本文从原理、典型场景、跨平台替代方案,到如何用统一 OpenAI 兼容 API(基于 xuedingmao.com)接入多模型 Agent,给出完整的落地实践与 Python 代码示例。
一、背景介绍:从 ChatGPT 到“能点鼠标的代理”
传统 LLM 助手(ChatGPT、Claude、Gemini 等)主要停留在“生成结果”层面:输出代码、文档或命令,然后还需要开发者自己去执行。
Anthropic 在 3 月推出的 Computer Use 能力改变了这一点:
- Claude 可以在你的 Mac 上:
- 打开应用、切换窗口
- 操作浏览器、填写 Web 表单
- 操作 Excel / Google Sheets
- 在 CI 中直接跑 UI 流程测试与可视化调试
- 甚至可以通过手机远程控制你的电脑(借助 Cloud Cowork / Claude Work 之类的客户端)
近期,Anthropic 又把 Computer Use 能力集成到了 Claude Code(Cloud Code CLI/IDE 插件) 中,使得:
你可以不离开终端,让 Claude 自动构建、运行、点击、输入、截图、验证整个应用及工作流。
对开发者而言,这意味着从“代码助手”到“自动化工程师”的跃迁。
二、核心原理:LLM + 视觉 + UI 控制 = 通用 GUI Agent
从开发者视角,可以把 Claude Computer Use 理解为一个“三层架构”的智能代理系统:
1. 感知层:屏幕与 UI 结构感知
Claude 通过内置的 视觉模型 与系统 Hook 能力,获得当前屏幕或窗口的状态:
- 屏幕截图(Image)
- 识别 UI 元素:按钮、输入框、表格、菜单等
- 有时候还会结合 DOM / Accessibility Tree(尤其在浏览器中)
这一层的目标是把“像素级屏幕”抽象为“语义化 UI 组件描述”。
2. 决策层:LLM 规划与工具使用
在 Claude Code / Computer Use 模式下,模型多了一类“工具”:
click(x, y | element_id)type(text, into=element)scroll(...)wait_for(selector | condition)screenshot()
LLM 在“扩展思考”模式下,循环执行:
- 观察当前 UI 状态(截图 + 元素描述)
- 规划操作步骤(类似 AGI 级 Chain-of-Thought)
- 调用相应的 UI 操作工具
- 再次观察,校验结果,继续下一步
3. 执行层:系统与浏览器控制
官方 Claude Code on macOS 使用的是 原生客户端 + CLI 集成 的控制方式:
- Mac 客户端负责:
- 获得屏幕内容与窗口结构
- 通过系统 API 执行鼠标、键盘、窗口操作
- CLI / Cloud Code 负责:
- 把用户任务 + UI 状态传给 LLM
- 接收 LLM 工具调用指令
- 转发给本地控制模块执行
对于 Windows / Linux,目前没有官方 Computer Use,但视频中提到一个开源 “Dev 浏览器 / Dev Agent” 作为替代方案:
- 在一个“可编程浏览器(Dev Browser)”中执行 JavaScript / Python
- 允许 Agent 通过“写代码 + 执行”来控制浏览器
- 类似有代表性的实现:Playwright + LLM、Selenium + LLM、puppeteer + LLM 等
本质上是把“本地电脑控制”替换为“浏览器沙盒控制”。
三、实战演示:用 Python + 搭建一个 Browser-Agent
由于官方 Computer Use 目前仅支持部分 macOS 用户,本文用更通用的方式演示:通过 OpenAI 兼容 API + 可编程浏览器,构建一个“自动化表格填充 Agent”。
这里我们使用:
- 模型:
claude-sonnet-4-6 - 平台:薛定猫 AI(xuedingmao.com,OpenAI 兼容模式)
- 任务:自动生成“Top Movies Tracker” Google 表格,并填充示例数据(与视频中的 Demo 对齐)
3.1 环境准备
pip install playwright python-dotenv requests
playwright install
3.2 配置环境变量(.env)
XDM_API_KEY=你在 xuedingmao.com 获取的密钥
XDM_BASE_URL=https://xuedingmao.com
3.3 Python 代码示例:LLM + Playwright 浏览器 Agent
import os
import json
import asyncio
from dataclasses import dataclass
from typing import List, Dict, Any
import requests
from dotenv import load_dotenv
from playwright.async_api import async_playwright
load_dotenv()
# ===============================
# 一、封装 xuedingmao OpenAI 兼容调用
# ===============================
class XueDingMaoClient:
"""
简单的 OpenAI 兼容客户端封装,用于调用 claude-sonnet-4-6。
"""
def __init__(self):
self.api_key = os.getenv("XDM_API_KEY")
self.base_url = os.getenv("XDM_BASE_URL", "https://xuedingmao.com")
if not self.api_key:
raise RuntimeError("请在 .env 中配置 XDM_API_KEY")
self.chat_url = f"{self.base_url}/v1/chat/completions"
def chat(self, messages: List[Dict[str, str]], model: str = "claude-sonnet-4-6") -> str:
"""
调用聊天接口,返回模型回复文本。
"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json",
}
payload = {
"model": model,
"messages": messages,
"temperature": 0.2,
}
resp = requests.post(self.chat_url, headers=headers, json=payload, timeout=60)
resp.raise_for_status()
data = resp.json()
return data["choices"][0]["message"]["content"]
# ===============================
# 二、定义 Browser-Agent 任务协议
# ===============================
@dataclass
class BrowserAction:
"""
描述一次浏览器动作,用于由 LLM 规划后返回。
"""
type: str # "goto", "click", "fill", "wait", ...
selector: str = ""
text: str = ""
url: str = ""
def parse_actions_from_llm(response: str) -> List[BrowserAction]:
"""
解析 LLM 返回的 JSON 动作列表。
要求 LLM 输出严格 JSON 格式。
"""
try:
actions_data = json.loads(response)
actions = []
for item in actions_data:
actions.append(BrowserAction(
type=item.get("type", ""),
selector=item.get("selector", ""),
text=item.get("text", ""),
url=item.get("url", "")
))
return actions
except json.JSONDecodeError as e:
raise ValueError(f"LLM 返回 JSON 解析失败: {e}\n原始内容: {response}")
# ===============================
# 三、核心逻辑:LLM 规划 + Playwright 执行
# ===============================
SYSTEM_PROMPT = """
你是一个浏览器自动化规划器,负责为 Playwright 生成动作序列。
仅输出一个 JSON 数组,每个元素是一个动作对象,不要包含其他文本。
动作对象字段:
{
"type": "goto" | "click" | "fill",
"url": "仅在 type=goto 时使用",
"selector": "CSS 选择器",
"text": "仅在 type=fill 时使用"
}
约束:
1. 严格输出有效 JSON,最外层是数组。
2. 只生成高层逻辑需要的必要步骤。
3. 使用简洁但尽量稳健的 CSS 选择器。
"""
USER_PROMPT = """
目标:在浏览器中创建一个“Top Movies Tracker”Google Sheet,并填充少量示例数据。
步骤大致为:
1. 访问 https://docs.google.com/spreadsheets/ 并创建一个新的空白表格。
2. 在第一行创建列:Title, Year, Genre, Rating, Watched。
3. 在 A2:E6 填充 5 条示例电影条目,Rating 为 1-10 分,Watched 为 TRUE/FALSE。
4. 保持简单,不需要复杂公式,只需要一个便于演示的表格。
请生成一系列动作,让人类执行这些动作就可以完成整个流程。
注意:
- 假设用户已经登录 Google 账号。
- 不要处理登录场景。
"""
async def run_browser_actions(actions: List[BrowserAction]):
"""
使用 Playwright 执行 LLM 规划好的动作。
"""
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False) # headless=False 方便可视化调试
page = await browser.new_page()
for i, act in enumerate(actions, start=1):
print(f"[Action {i}] {act}")
if act.type == "goto":
await page.goto(act.url, wait_until="networkidle")
elif act.type == "click":
await page.click(act.selector, timeout=15000)
elif act.type == "fill":
await page.fill(act.selector, act.text, timeout=15000)
else:
print(f"未知动作类型: {act.type}")
# 为方便观察结果,延迟一段时间
await page.wait_for_timeout(15000)
await browser.close()
def plan_actions_with_llm() -> List[BrowserAction]:
"""
调用薛定猫 AI(claude-sonnet-4-6)规划浏览器动作。
"""
client = XueDingMaoClient()
response = client.chat(
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": USER_PROMPT},
]
)
print("LLM 原始输出:", response)
actions = parse_actions_from_llm(response)
return actions
if __name__ == "__main__":
# 1. 先由 LLM 规划动作
actions = plan_actions_with_llm()
# 2. 再用 Playwright 执行这些动作
asyncio.run(run_browser_actions(actions))
3.4 说明与扩展
- 上述代码的结构本质上模拟了 “Claude Computer Use in Browser”:
- LLM 只负责生成高层动作计划(JSON)
- 本地 Playwright 负责执行实际 GUI 操作
- 你可以进一步扩展:
- 加入截图工具(
page.screenshot)并把结果回传给 LLM做“视觉调试” - 循环:执行一部分动作 → 截图 → LLM 评估 & 规划下一步
- 加入错误恢复逻辑(例如元素未找到时,让 LLM 重新选择选择器)
- 加入截图工具(
四、注意事项与工程实践建议
1. 权限与安全边界
官方 Claude Computer Use 在本地执行任意 UI 操作,务必注意:
- 启用前明确权限范围(只在开发专用机器使用更安全)
- 不要在生产数据库或敏感系统上直接让 Agent 自动操作
- 建议在虚拟机 / 容器内提供“沙盒环境”
对于我们用 Playwright 的方案:
- 默认只控制浏览器,相对安全
- 仍需注意 Cookie / 登录态泄露风险
2. 可靠性:UI 变更与选择器问题
LLM 生成的 CSS 选择器并不总是稳健:
- 建议对常用站点(内部管理后台、运营系统):
- 手工设计更稳定的 selector
- 把 selector 作为“工具配置”注入,LLM 只选择动作顺序
- 可以设计“视图校验回路”,例如:
- 执行前/后截图 + DOM 抽象,交给 LLM 判断是否操作成功
3. 模型选型与多模型集成
在构建复杂 Agent 系统时,经常需要多种模型协作:
- 高级决策:Claude 4.6 / GPT-5.4 / Gemini 3 Pro
- 轻量工具调用 / 文本处理:小参数模型
- 视觉任务:支持多模态的 GPT / Claude / Gemini
这时如果每个模型各用一套 SDK,会导致:
- 接入代码重复、配置分散
- 生产环境切换模型成本很高
五、技术资源与平台推荐:统一多模型的 OpenAI 兼容接口
在上面的示例中,我使用 (xuedingmao.com) 作为底层 LLM 服务端,原因主要是工程上的:
-
聚合 500+ 主流大模型
- 包括 GPT-5.4、Claude 4.6、Gemini 3 Pro 等新型号
- 同一接口下即可切换不同厂商的模型,适合做多模型对比与 A/B Test
-
新模型实时首发,API 兼容 OpenAI 标准
- 基本保持与 OpenAI API 一致的
chat/completions协议 - 像本文这样,把
base_url换成https://xuedingmao.com+ API Key 即可无缝迁移
- 基本保持与 OpenAI API 一致的
-
统一接入接口,降低多模型集成复杂度
- 在 AI Agent 场景下,可以非常方便地:
- 用一个“规划模型”(如 Claude 4.6)负责高层策略
- 用另一个“工具模型”做文本/结构化解析
- 代码层只是修改
model字段,不需要重写 SDK 逻辑
- 在 AI Agent 场景下,可以非常方便地:
从技术选型角度说,这类聚合式平台更适合:
- 做前沿实验(第一时间体验新模型)
- 做多模型对比和弹性调度
- 做企业级 Agent 平台的底层 LLM 服务抽象层
六、小结
基于视频内容和目前的生态,可以看到几个明显趋势:
- LLM 正从“写代码”升级为“直接动手”的自动化工程师
- 能打开应用、点击按钮、填表、截图、调试 UI
- 官方 Claude Computer Use 把这一能力与 CLI / IDE 深度融合
- 对 macOS + Pro/Max 用户来说,已经可以做到“不离开终端”的完整开发闭环
- 对 Windows / Linux 开发者来说,可编程浏览器 + LLM 是一个现实可行的替代方案
- Playwright / Selenium + OpenAI 兼容 API(如薛定猫 AI)即可快速构建
- 多模型时代,统一 API 网关是构建稳定 Agent 系统的关键基础设施
- 避免被单一厂商锁死,也能快速试用最新能力
如果你在做自动化测试、运营工具、内部系统集成,强烈建议把“LLM + GUI 自动化”纳入技术路线,哪怕先从浏览器场景切入,也能极大提升开发与运维效率。
#AI #大模型 #Python #机器学习 #技术实战
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)