openai-cua-sample-app - 使用计算机的 Agent示例应用

embedded/2025/3/14 5:24:48/

文章目录

    • 一、关于 openai-cua-sample-app
      • 概述
      • 抽象
    • 二、设置与运行
    • 三、CLI 使用
      • 运行示例(可选)
    • 四、计算机环境
      • Docker 设置
      • 主机环境设置
    • 五、函数调用
    • 风险与安全考虑


openaicuasampleapp_3">一、关于 openai-cua-sample-app

CUA : Computer Using Agent (CUA)

开始使用 OpenAI API 构建一个 使用代理的计算机 (CUA)。

警告:计算机使用 处于预览阶段。因为该模型仍处于预览状态,可能容易受到攻击 和意外错误的影响,我们不建议在认证环境中 或高风险任务中使用它。


概述

计算机使用工具和模型可通过 Responses API 获取。

在宏观层面,CUA 会查看计算机界面的截图并推荐行动。

具体来说,它会发送 computer_call(s) 并携带 actions,例如 click(x,y)type(text),您需要在您的环境中执行这些操作,并随后期望看到结果的截图。

您可以在计算机使用指南中了解更多关于这个工具的信息。


抽象

这个仓库定义了两个轻量级抽象,以使与CUA代理交互 更加人性化。一切都可以在没有它们的情况下工作,但它们提供了便利的关注点分离。

抽象文件描述
计算机computers/computer.py定义了适用于各种环境(本地桌面、远程浏览器等)的 计算机 接口。计算机 的实现负责执行 由 CUA(点击等)发送的任何 computer_action
Agentagent/agent.py简单、熟悉的代理循环 - 实现 run_full_turn(),该函数只是不断调用模型,直到处理完所有计算机动作和函数调用。

二、设置与运行

设置 Python 环境并安装依赖项。

python3 -m venv env
source env/bin/activate
pip install -r requirements.txt

运行 CLI 以让 CUA 使用本地浏览器窗口,使用 playwright。 (使用 CTRL+C 停止)

python cli.py --computer local-playwright

其他包含的示例 计算机环境:

  • Docker (容器化桌面)
  • Browserbase (远程浏览器,需要账户)
  • Scrapybara (远程浏览器或计算机,需要账户)
  • …或实现你自己的 Computer!

三、CLI 使用

CLI (cli.py) 是开始使用 CUA 的最简单方式。它接受以下参数:

  • --computer: 要使用的计算机环境。有关选项,请参阅下面的计算机环境部分。默认情况下,CLI 将使用 local-playwright 环境。
  • --input: 代理的初始输入(可选:如果未提供,CLI 将会提示您输入)
  • --debug: 启用调试模式。
  • --show: 在执行期间显示图像(截图)。
  • --start-url: 使用特定URL启动浏览会话(仅适用于浏览器环境)。默认情况下,CLI 将使用 https://bing.com 启动浏览会话。

运行示例(可选)

examples 文件夹包含更多有关如何使用CUA的示例。

python -m examples.weather_example

参考文件 simple_cua_loop.py 实现了 CUA 循环的基本内容。

您可以使用以下命令运行它:

python simple_cua_loop.py

四、计算机环境

CUA可以与任何能够处理CUA操作计算机环境 协同工作:

动作示例
-----------------------------------------------------------------
click(x, y, button="left")click(24, 150)
double_click(x, y)double_click(24, 150)
scroll(x, y, scroll_x, scroll_y)scroll(24, 150, 0, -100)
type(text)type("Hello, World!")
wait(ms=1000)wait(2000)
move(x, y)move(24, 150)
keypress(keys)keypress(["CTRL", "C"])
drag(path)drag([[24, 150], [100, 200]])

这个示例应用提供了一系列 已实现的 计算机 示例,但请随意添加您自己的!

计算机选项类型描述要求
LocalPlaywrightlocal-playwrightbrowser本地浏览器窗口Playwright SDK
DockerdockerlinuxDocker 容器环境Docker 运行
Browserbasebrowserbasebrowser远程浏览器环境Browserbase API key in .env
ScrapybaraBrowserscrapybara-browserbrowser远程浏览器环境Scrapybara API key in .env
ScrapybaraUbuntuscrapybara-ubuntulinux远程 Ubuntu 桌面环境Scrapybara API 密钥在 .env 文件中

使用 CLI,您可以使用上述选项 在不同的计算机环境中 运行示例应用:

python cli.py --show --computer <computer-option>

例如,要使用 Docker 计算机环境 运行示例应用程序,您可以运行:

python cli.py --show --computer docker

Docker 设置

如果您想使用 Docker 计算机环境运行示例应用程序,您需要构建并运行一个本地 Docker 容器。

打开一个新的shell来构建和运行Docker镜像。

第一次这样做可能需要几分钟,但后续运行应该会快得多。

一旦日志停止,请继续进行下一个设置步骤。

要停止容器,请在运行下面命令的终端中按CTRL+C。

docker build -t cua-sample-app .
docker run --rm -it --name cua-sample-app -p 5900:5900 --dns=1.1.1.3 -e DISPLAY=:99 cua-sample-app

注意:我们使用 --dns=1.1.1.3 来限制可访问的网站到一个更小、更安全的集合。我们强烈建议您采取类似的安全预防措施。


警告:如果您遇到以下错误,则需要终止该容器。

docker: Error response from daemon: Conflict. The container name "/cua-sample-app" is already in use by container "e72fcb962b548e06a9dcdf6a99bc4b49642df2265440da7544330eb420b51d87"

杀掉那个容器后再次尝试。

docker rm -f cua-sample-app

主机环境设置

This repository contains example implementations of third-party hosted environments.
要使用这些,您需要通过上面的链接创建一个服务账户,并将您的API密钥添加到.env文件中。


五、函数调用

Agent 类接受 tools 中的常规函数模式 - 它将为任何调用返回一个硬编码的值。

然而,如果您传递了任何也在您的 Computer 方法中定义的 tools,除了必需的 Computer 方法外,它们将被路由到您的 Computer 以便在调用时处理。

这在截图经常无法捕获搜索栏或返回箭头的情况下很有用,因此 CUA 可能会卡住。因此,您可以提供 back()goto(url) 函数。

请参阅 examples/playwright_with_custom_functions.py 以获取示例。


风险与安全考虑

这个存储库提供了带有基本安全措施的示例实现。
我们建议您审查我们指南中概述的最佳实践,并确保您了解使用此工具涉及的风险。


2024-03-12(三)
🌱 植树节快乐 🌲


http://www.ppmy.cn/embedded/172416.html

相关文章

使用websocket,注入依赖service的bean为null

问题&#xff1a;依赖注入失败&#xff0c;service获取不到&#xff0c;提示null 这是参考代码 package com.shier.ws;import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.google.gson.Gson; import com.s…

色板在数据可视化中的创新应用

色板在数据可视化中的创新应用&#xff1a;基于色彩感知理论的优化实践 引言 在数据可视化领域&#xff0c;色彩编码系统的设计已成为决定信息传递效能的核心要素。根据《Nature》期刊2024年发布的视觉认知研究&#xff0c;人类大脑对色彩的识别速度比形状快40%&#xff0c;色…

flutter dio库 源码赏析

1. factory函数 //调用factory构造方法后&#xff0c;实际返回的是Dio的子类 Dio dio Dio();abstract class Dio {factory Dio([BaseOptions? options]) > createDio(options); } 2. CancelToken 作用:取消操作 CancelToken cancelToken CancelToken();//监听取消 ca…

数据结构-队列(详解)

目录 一、队列的基本概念二、队列的基本操作三、队列的实现方式1. 数组实现队列2. 链表实现队列 四、队列的应用场景五、总结 一、队列的基本概念 队列是一种特殊的线性表&#xff0c;它只允许在表的一端进行插入操作&#xff0c;在另一端进行删除操作。允许插入的一端称为队尾…

golang中具有 “no copy“的类型

在 Go 语言中&#xff0c;某些类型由于特殊用途或底层实现&#xff0c;可能会被标记为 “no copy”&#xff0c;即它们不能被复制&#xff0c;通常是因为复制会导致意外的行为或错误。这些类型主要包括&#xff1a; 1. sync.Mutex、sync.RWMutex 原因&#xff1a;Mutex 是用于…

Node.js学习分享(下)

Node.js Expressexpress的基本用法创建基本的web服务器监听GET请求监听POST请求把内容响应给客户端获取URL中携带的查询参数获取URL中的动态参数 托管静态资源express.static()托管多个静态资源目录挂载路径前缀 Express路由路由模块化 Express中间件Express中间件的调用流程Ex…

C++零基础LeetCode热题100- 128.最长连续序列

128.最长连续序列 题目描述思路步骤实现代码代码详解提交结果注意 题目描述 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路 …

使用curl库编写爬虫程序的指令抓取优质视频

首先&#xff0c;curl本身是一个命令行工具&#xff0c;用来传输数据&#xff0c;支持多种协议&#xff0c;包括HTTP、HTTPS等。用户提到“使用curl库编写爬虫程序”&#xff0c;可能指的是用libcurl库在编程语言中调用&#xff0c;比如Python的pycurl&#xff0c;或者C/C直接使…