前言:什么是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,核心都是感知-推理-执行的循环流程,这也是它能模拟人类操作电脑的关键,我用一张流程图给大家讲清楚:

用户发出指令

感知层:获取指令+电脑环境状态(截图/文件信息)

推理层:大模型拆分任务,生成执行步骤

执行层:调用工具库执行操作(浏览器/Excel)

任务是否完成?

输出结果,结束任务

简单拆解一下这三层:

  1. 感知层:相当于CUA的“眼睛和耳朵”,一方面接收用户的自然语言指令,另一方面获取电脑的当前环境,比如屏幕截图、待操作的文件信息等;
  2. 推理层:相当于CUA的“大脑”,一般由大模型(比如GPT-3.5、豆包大模型)担任,负责把用户的模糊指令拆分成具体的、可执行的步骤,比如“打开Chrome浏览器→访问百度→搜索2025年AI行业市场规模→提取数据→打开Excel→写入数据”;
  3. 执行层:相当于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浏览器为例,配置步骤如下:

  1. 打开Chrome浏览器,在地址栏输入chrome://version/,查看自己的Chrome版本(比如120.0.6099.109);
  2. 前往Chrome驱动官网(https://sites.google.com/chromium.org/driver/),下载对应版本的驱动(注意区分Windows/Mac/Linux系统);
  3. Windows用户:将驱动解压后,放到Python的安装目录(比如C:\Python310\),或者添加到系统环境变量;
  4. Mac/Linux用户:将驱动解压后,放到/usr/local/bin目录下。

如果访问官网困难,直接在百度搜索“Chrome驱动+你的版本号+国内下载”,很多镜像站都有资源,非常方便。

2.4 准备大模型API Key

我们的推理层需要用到大模型,这里以OpenAI的GPT-3.5-turbo为例,需要大家准备自己的API Key:

  1. 登录OpenAI官网(https://platform.openai.com/),进入API Keys页面;
  2. 创建一个新的API Key,复制保存好(只显示一次,丢了要重新创建);
  3. 在项目文件夹中,创建一个.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的“大脑”,核心是调用大模型将用户的自然语言指令拆分成结构化的执行步骤。这里有几个关键技巧:

  1. 提示词设计:明确要求大模型输出固定格式的Python列表,方便后续解析,避免输出杂乱的内容;
  2. temperature设置:将temperature设为0.2,降低大模型输出的随机性,保证拆分的步骤稳定、可执行;
  3. 异常处理:捕获大模型调用过程中的异常,避免程序崩溃。
3.2.3 执行模块(execute_module)

这是CUA的“手脚”,也是最核心的落地模块,实现了浏览器和Excel的具体操作

  1. 浏览器操作:通过Selenium的webdriver.Chrome()初始化浏览器,用find_element定位页面元素(搜索框、结果区域),用send_keys模拟输入,用quit()关闭浏览器;
  2. Excel操作:通过openpyxl创建工作簿和工作表,设置单元格样式(字体、背景色、对齐方式),写入数据后保存文件;
  3. 异常处理:执行过程中如果出错,会自动关闭浏览器和Excel,避免资源占用。
3.2.4 主函数(main)

相当于CUA的“总指挥”,整合感知、推理、执行三个模块,按顺序执行任务,输出最终的执行结果,逻辑清晰,新手也能轻松理解。

四、运行代码:见证CUA的神奇效果

代码写好后,运行的步骤非常简单,一共两步:

  1. 确保.env文件中的API Key正确,浏览器驱动配置完成;
  2. 在终端进入项目文件夹,执行以下命令:
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开发的实战教程!
在这里插入图片描述

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐