手把手教你做Computer Use Agent!实现浏览器+办公软件自动操作
各位程序员小伙伴、技术爱好者们,大家好!最近AI Agent火得一塌糊涂,而Computer Use Agent(简称CUA)绝对是其中最实用的分支之一。简单来说,CUA就是能像人一样操作电脑的AI智能体,它可以自动打开浏览器查资料、操作Excel做报表、用Word写文档,甚至能帮你完成订机票、整理文件这类重复性工作,堪称打工人的“数字分身”。你有没有过这样的经历:每天上班要打开浏览器查行业数据,
文章目录
前言:什么是Computer Use Agent,为啥它这么香?
各位程序员小伙伴、技术爱好者们,大家好!最近AI Agent火得一塌糊涂,而Computer Use Agent(简称CUA) 绝对是其中最实用的分支之一。简单来说,CUA就是能像人一样操作电脑的AI智能体,它可以自动打开浏览器查资料、操作Excel做报表、用Word写文档,甚至能帮你完成订机票、整理文件这类重复性工作,堪称打工人的“数字分身”。
你有没有过这样的经历:每天上班要打开浏览器查行业数据,再把数据复制到Excel里整理成表格,最后粘贴到Word里写报告,一套操作下来半小时没了,全是机械重复的活。而CUA能把这些步骤全部自动化,你只需要说一句“帮我查2025年AI行业市场规模,整理成Excel报表并保存”,剩下的事它全搞定。
更关键的是,现在搭建CUA的门槛已经很低了,不用你深入研究大模型底层原理,用Python结合几个常用库就能实现核心功能。当然,虽然不懂AI基础知识也能开发AI应用,但是懂的人往往可以开发出更复杂更优秀的AI高级应用。如果你对AI基础知识感兴趣,可以看看我的人工智能入门教程http://blog.csdn.net/jiangjunshow。
今天这篇文章,我就手把手带大家从零开始做一个CUA,实现浏览器自动搜索+Excel自动整理数据的核心功能,全程口语化讲解,代码附带详细注释,新手也能跟着做,话不多说,开干!
一、CUA核心工作原理:其实就是“感知-推理-执行”三步走
在写代码之前,我们得先搞懂CUA是怎么工作的,不然写代码就像“盲人摸象”。其实所有实用的CUA,核心都是感知-推理-执行的循环流程,这也是它能模拟人类操作电脑的关键,我用一张流程图给大家讲清楚:
简单拆解一下这三层:
- 感知层:相当于CUA的“眼睛和耳朵”,一方面接收用户的自然语言指令,另一方面获取电脑的当前环境,比如屏幕截图、待操作的文件信息等;
- 推理层:相当于CUA的“大脑”,一般由大模型(比如GPT-3.5、豆包大模型)担任,负责把用户的模糊指令拆分成具体的、可执行的步骤,比如“打开Chrome浏览器→访问百度→搜索2025年AI行业市场规模→提取数据→打开Excel→写入数据”;
- 执行层:相当于CUA的“手和脚”,通过Python的第三方库(Selenium操控浏览器、openpyxl操控Excel)执行推理层生成的步骤,完成实际操作。
我们今天做的简易版CUA,会简化感知层(暂时不做屏幕截图识别,直接接收结构化指令),重点实现推理层的任务拆分+执行层的工具调用,这也是CUA最核心的落地环节。
二、前期准备:环境配置与工具选型
工欲善其事,必先利其器。在写代码之前,我们需要完成3项准备工作,都是新手能轻松搞定的,我一步步教大家。
2.1 核心工具选型
我们这次开发的CUA,主要用到以下工具/库,都是Python生态中成熟、易用的选择,具体作用看表格:
| 工具/库 | 核心作用 | 选择理由 |
|---|---|---|
| Python 3.9+ | 开发语言 | 语法简洁,第三方库丰富,AI开发主流语言 |
| Selenium 4.x | 操控浏览器 | 模拟人类操作浏览器的黄金库,支持Chrome/Firefox等主流浏览器 |
| openpyxl | 操控Excel | 专门处理xlsx格式Excel文件,支持读写、格式设置,功能强大 |
| python-dotenv | 管理环境变量 | 安全存储大模型API Key等敏感信息,避免硬编码 |
| GPT-3.5-turbo | 推理层大模型 | 性价比高,推理能力强,能轻松拆分任务步骤 |
2.2 安装依赖库
打开电脑的终端(Windows用CMD/PowerShell,Mac/Linux用Terminal),直接执行以下命令,一键安装所有需要的依赖库:
pip install selenium openpyxl python-dotenv openai
如果安装速度慢,可以换成国内镜像源,比如清华源:
pip install selenium openpyxl python-dotenv openai -i https://pypi.tuna.tsinghua.edu.cn/simple
2.3 配置浏览器驱动(关键步骤)
Selenium需要浏览器驱动才能操控浏览器,我们以最常用的Chrome浏览器为例,配置步骤如下:
- 打开Chrome浏览器,在地址栏输入
chrome://version/,查看自己的Chrome版本(比如120.0.6099.109); - 前往Chrome驱动官网(https://sites.google.com/chromium.org/driver/),下载对应版本的驱动(注意区分Windows/Mac/Linux系统);
- Windows用户:将驱动解压后,放到Python的安装目录(比如
C:\Python310\),或者添加到系统环境变量; - Mac/Linux用户:将驱动解压后,放到
/usr/local/bin目录下。
如果访问官网困难,直接在百度搜索“Chrome驱动+你的版本号+国内下载”,很多镜像站都有资源,非常方便。
2.4 准备大模型API Key
我们的推理层需要用到大模型,这里以OpenAI的GPT-3.5-turbo为例,需要大家准备自己的API Key:
- 登录OpenAI官网(https://platform.openai.com/),进入API Keys页面;
- 创建一个新的API Key,复制保存好(只显示一次,丢了要重新创建);
- 在项目文件夹中,创建一个
.env文件,写入以下内容:
OPENAI_API_KEY=你的API Key
到这里,前期准备工作就全部完成了,接下来进入核心的代码开发环节!
三、核心代码开发:实现浏览器+Excel自动操作
我们这次的目标是做一个能自动搜索行业数据并整理到Excel的CUA,整个代码分为感知模块、推理模块、执行模块、主函数四个部分,每个部分都附带详细注释,大家可以直接复制代码,跟着我的讲解理解。
3.1 完整代码展示
创建一个cua_demo.py文件,将以下代码复制进去,注意替换.env文件中的API Key,以及根据自己的需求修改参数:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Computer Use Agent 核心demo:浏览器自动搜索+Excel自动整理数据
功能:根据用户指令,自动打开Chrome搜索数据,将结果整理到Excel并设置格式
"""
import os
import time
from openai import OpenAI
from dotenv import load_dotenv
# Selenium相关库,操控浏览器
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
# openpyxl相关库,操控Excel
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
# 加载环境变量,读取OpenAI API Key
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# ---------------------- 感知模块 ----------------------
def perception_module(user_command, extra_info=None):
"""
感知模块:收集用户指令和额外约束条件
:param user_command: 用户的自然语言指令
:param extra_info: 额外约束(如数据来源、Excel保存路径)
:return: 整理后的任务信息字典
"""
# 默认约束条件,可根据用户输入修改
default_info = {
"data_source": "百度", # 数据搜索来源
"excel_path": "行业数据报表.xlsx", # Excel保存路径
"target_year": "2025" # 目标年份
}
# 如果用户传入额外约束,更新默认配置
if extra_info:
default_info.update(extra_info)
# 整理任务信息
task_info = {
"target": user_command,
"extra_info": default_info,
"status": "待执行"
}
print(f"【感知模块】已整理任务信息:{task_info}")
return task_info
# ---------------------- 推理模块 ----------------------
def planning_module(task_info):
"""
推理模块:调用GPT-3.5-turbo拆分任务,生成可执行步骤
:param task_info: 感知模块传入的任务信息
:return: 结构化的执行步骤列表
"""
# 提示词,引导大模型拆分任务,输出固定格式的步骤
prompt = f"""
请你作为Computer Use Agent的规划师,将以下任务拆分成具体的、可执行的步骤,要求:
1. 步骤必须明确,每一步只做一件事,比如“打开Chrome浏览器”“在百度搜索框输入关键词”;
2. 明确每一步需要使用的工具(Chrome浏览器/Excel);
3. 输出格式为Python列表,每个元素是字典,包含step(序号)、action(操作描述)、tool(工具)三个键,无其他额外内容;
4. 任务完成后,最后一步必须是“保存Excel文件并关闭浏览器”。
任务目标:{task_info['target']}
约束条件:
- 数据搜索来源:{task_info['extra_info']['data_source']}
- Excel文件保存路径:{task_info['extra_info']['excel_path']}
- 目标年份:{task_info['extra_info']['target_year']}
"""
try:
# 调用GPT-3.5-turbo生成步骤
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.2, # 降低随机性,保证步骤稳定
max_tokens=500
)
# 解析大模型输出,转换为Python列表
steps = eval(response.choices[0].message.content.strip())
print(f"【推理模块】已拆分任务步骤:{steps}")
return steps
except Exception as e:
print(f"【推理模块】出错:{e}")
return None
# ---------------------- 执行模块 ----------------------
def execute_module(steps, task_info):
"""
执行模块:根据推理步骤,调用Selenium和openpyxl执行操作
:param steps: 推理模块生成的执行步骤
:param task_info: 任务信息
:return: 执行结果(成功/失败)
"""
# 初始化浏览器驱动
driver = None
# 初始化Excel工作簿
wb = Workbook()
ws = wb.active
ws.title = "行业数据"
# 定义Excel样式,让报表更美观
title_font = Font(name="微软雅黑", size=14, bold=True, color="FFFFFF")
title_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
content_font = Font(name="微软雅黑", size=12)
alignment = Alignment(horizontal="center", vertical="center")
try:
# 遍历步骤,执行操作
data_list = [] # 存储搜索到的数据
for step in steps:
print(f"【执行模块】正在执行:{step['action']}")
action = step['action']
tool = step['tool']
# 操作Chrome浏览器
if tool == "Chrome浏览器":
if "打开Chrome浏览器" in action:
# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window() # 窗口最大化
time.sleep(2) # 等待浏览器加载
elif "访问百度" in action:
driver.get("https://www.baidu.com")
time.sleep(2)
elif "搜索" in action:
# 定位搜索框,输入关键词
search_box = driver.find_element(By.ID, "kw")
# 提取搜索关键词(以AI行业市场规模为例)
keyword = f"{task_info['extra_info']['target_year']}年AI行业市场规模"
search_box.send_keys(keyword)
search_box.send_keys(Keys.ENTER)
time.sleep(3)
# 提取搜索结果中的数据(简单提取,可根据实际需求优化)
result_div = driver.find_element(By.CLASS_NAME, "result-op")
data = result_div.text[:500] # 取前500个字符
data_list.append(data)
print(f"【执行模块】已提取数据:{data}")
# 操作Excel
elif tool == "Excel":
if "写入数据" in action:
# 写入标题
ws["A1"] = f"{task_info['extra_info']['target_year']}年AI行业市场规模数据"
ws["A1"].font = title_font
ws["A1"].fill = title_fill
ws["A1"].alignment = alignment
ws.merge_cells("A1:D1") # 合并单元格
# 写入数据
for i, data in enumerate(data_list, start=3):
ws[f"A{i}"] = f"数据{i-2}"
ws[f"B{i}"] = data
ws[f"A{i}"].font = content_font
ws[f"B{i}"].font = content_font
ws[f"A{i}"].alignment = alignment
ws[f"B{i}"].alignment = alignment
# 调整列宽
ws.column_dimensions["A"].width = 10
ws.column_dimensions["B"].width = 80
elif "保存Excel文件" in action:
wb.save(task_info['extra_info']['excel_path'])
print(f"【执行模块】Excel文件已保存至:{task_info['extra_info']['excel_path']}")
# 关闭浏览器
elif "关闭浏览器" in action and driver:
driver.quit()
print(f"【执行模块】浏览器已关闭")
print("【执行模块】任务执行成功!")
return "成功"
except Exception as e:
print(f"【执行模块】出错:{e}")
# 出错时关闭浏览器和Excel
if driver:
driver.quit()
wb.close()
return "失败"
# ---------------------- 主函数 ----------------------
def main():
"""
主函数:整合感知、推理、执行模块,运行CUA
"""
# 1. 用户输入指令
user_command = "帮我搜索2025年AI行业市场规模数据,整理到Excel报表中"
# 2. 感知模块处理指令
task_info = perception_module(user_command)
if not task_info:
print("感知模块处理失败,退出程序")
return
# 3. 推理模块拆分步骤
steps = planning_module(task_info)
if not steps:
print("推理模块拆分步骤失败,退出程序")
return
# 4. 执行模块执行步骤
result = execute_module(steps, task_info)
print(f"【主函数】任务最终执行结果:{result}")
# 运行程序
if __name__ == "__main__":
main()
3.2 代码核心讲解
很多新手看到代码会觉得有点长,但其实每个模块的职责都很清晰,我挑重点给大家讲解:
3.2.1 感知模块(perception_module)
这个模块的作用很简单,就是收集用户指令和约束条件,比如数据来源是百度、Excel保存路径、目标年份等。我们设置了默认的约束条件,用户也可以传入自定义的参数,灵活性很高。
3.2.2 推理模块(planning_module)
这是CUA的“大脑”,核心是调用大模型将用户的自然语言指令拆分成结构化的执行步骤。这里有几个关键技巧:
- 提示词设计:明确要求大模型输出固定格式的Python列表,方便后续解析,避免输出杂乱的内容;
- temperature设置:将
temperature设为0.2,降低大模型输出的随机性,保证拆分的步骤稳定、可执行; - 异常处理:捕获大模型调用过程中的异常,避免程序崩溃。
3.2.3 执行模块(execute_module)
这是CUA的“手脚”,也是最核心的落地模块,实现了浏览器和Excel的具体操作:
- 浏览器操作:通过Selenium的
webdriver.Chrome()初始化浏览器,用find_element定位页面元素(搜索框、结果区域),用send_keys模拟输入,用quit()关闭浏览器; - Excel操作:通过openpyxl创建工作簿和工作表,设置单元格样式(字体、背景色、对齐方式),写入数据后保存文件;
- 异常处理:执行过程中如果出错,会自动关闭浏览器和Excel,避免资源占用。
3.2.4 主函数(main)
相当于CUA的“总指挥”,整合感知、推理、执行三个模块,按顺序执行任务,输出最终的执行结果,逻辑清晰,新手也能轻松理解。
四、运行代码:见证CUA的神奇效果
代码写好后,运行的步骤非常简单,一共两步:
- 确保
.env文件中的API Key正确,浏览器驱动配置完成; - 在终端进入项目文件夹,执行以下命令:
python cua_demo.py
运行后,你会看到终端不断输出执行日志,同时电脑会自动打开Chrome浏览器,访问百度搜索2025年AI行业市场规模数据,然后自动将数据整理到Excel中,最后关闭浏览器,整个过程完全自动化,是不是非常神奇?
打开生成的行业数据报表.xlsx文件,你会看到数据已经被整理好,并且设置了美观的格式,直接可以用于工作汇报,省去了手动操作的麻烦。
五、功能优化:让你的CUA更强大
我们今天做的是简易版CUA,实现了核心的浏览器+Excel自动操作,在此基础上,大家可以根据自己的需求进行优化,让CUA的功能更强大,我给大家推荐几个常见的优化方向:
5.1 支持更多办公软件
除了Excel,我们还可以添加对Word、PPT的操作支持:
- 用
python-docx库操控Word,实现自动写文档、替换内容; - 用
python-pptx库操控PPT,实现自动创建幻灯片、插入数据和图表。
5.2 优化数据提取逻辑
我们现在的代码只是简单提取了百度搜索结果的前500个字符,实际应用中,可以优化数据提取逻辑:
- 用XPath/CSS选择器精准定位数据区域;
- 结合正则表达式提取具体的数值(比如市场规模的具体金额);
- 支持多页搜索结果的提取,数据更全面。
5.3 加入错误重试机制
在实际运行中,可能会出现网络卡顿、页面加载失败等问题,我们可以加入错误重试机制:
- 对浏览器操作、Excel操作的关键步骤设置重试次数;
- 重试失败时,向用户发送提醒,方便排查问题。
5.4 支持本地大模型
如果不想使用OpenAI的云端大模型,也可以接入本地大模型(比如Llama 3、Qwen),通过Ollama部署,实现本地化运行,数据更安全,也能节省API调用费用。
六、常见问题与解决方案
在开发和运行CUA的过程中,新手可能会遇到一些问题,我整理了几个高频问题和解决方案,帮大家避坑:
| 常见问题 | 解决方案 |
|---|---|
| Selenium提示“找不到浏览器驱动” | 检查驱动版本是否与Chrome版本一致,是否添加到系统环境变量 |
| 大模型调用失败,提示“API Key无效” | 检查.env文件中的API Key是否正确,是否有余额 |
| 浏览器打开后,无法定位搜索框 | 检查百度页面的元素ID是否变化,可改用XPath定位 |
| Excel文件保存失败,提示“权限不足” | 检查Excel保存路径是否正确,是否有写入权限 |
| 程序运行时,浏览器操作卡顿 | 在关键步骤后添加time.sleep(),等待页面加载完成 |
七、总结
今天这篇文章,我们从零开始搭建了一个Computer Use Agent,实现了浏览器自动搜索+Excel自动整理数据的核心功能,相信大家已经对CUA的开发流程有了清晰的认识。
其实CUA的开发并不复杂,核心就是利用Python的第三方库实现工具调用,结合大模型实现任务推理,即使是新手也能快速上手。当然,要开发出更复杂、更优秀的CUA,比如支持多任务并行、智能处理异常、适配更多软件的CUA,还是需要掌握一定的AI基础知识,比如大模型原理、Agent框架设计等。
最后,再给大家提个醒:AI时代,掌握Agent开发能力会成为重要的技术竞争力,希望大家能在今天的基础上,不断尝试和优化,做出属于自己的、更强大的Computer Use Agent!
如果大家在开发过程中有任何问题,欢迎在评论区留言,我会一一回复。也欢迎大家关注我,后续会分享更多AI Agent开发的实战教程!
更多推荐

所有评论(0)