SeeAct
GPT-4V(ision)是一个通用网络代理,如果有基础
SeeAct
GPT-4V(ision)是一个通用网络代理,如果有基础
SeeAct是一个通用网络代理系统,可以在任何给定网站上自主执行任务, 重点关注大型多模态模型(LMMs),如GPT-4V(ision)。 它由两个主要组件组成: (1) 一个支持在实时网站上运行网络代理的健壮代码库,以及 (2) 一个利用LMMs作为通用网络代理的创新框架。
更新
-
2024/7/9:支持SoM(Set-of-Mark)基础策略!
-
2024/5/18:支持Gemini和LLaVA!
-
2024/5/1:SeeAct已被ICML'24接收!
-
2024/4/28:发布SeeAct Python包,有许多更新和即将推出的功能。可以使用
pip install seeact
尝试 -
2024/3/18:Multimodal-Mind2Web数据集发布。我们将每个HTML文档与相应的网页截图图像配对,并省去了下载Mind2Web原始转储的麻烦。
SeeAct工具
SeeAct工具通过PlayWright在实时网站上运行网络代理, 作为代理和网络浏览器之间的接口。 它高效地将输入从浏览器传输到代理,并将代理的预测动作转换为浏览器事件以执行。 此工具可用于运行网络代理演示并评估其在实时网站上的性能。
设置
- 创建conda环境并安装依赖:
conda create -n seeact python=3.11
conda activate seeact
pip install seeact
- 设置PlayWright并安装浏览器内核。
playwright install
使用
import asyncio
import os
from seeact.agent import SeeActAgent
# 在这里设置你的API密钥,或通过环境变量传递
os.environ["OPENAI_API_KEY"] = "你的API密钥"
async def run_agent():
agent = SeeActAgent(model="gpt-4-turbo")
await agent.start()
while not agent.complete_flag:
prediction_dict = await agent.predict()
await agent.execute(prediction_dict)
await agent.stop()
if __name__ == "__main__":
asyncio.run(run_agent())
SeeActAgent主要输入
名称 | 描述 | 类型 | 默认值 | 必需 |
---|---|---|---|---|
model | 首选的LLM模型来运行任务 | str | gpt-4o | 否 |
default_task | 默认运行的任务 | str | 找到论文"GPT-4V(ision) is a Generalist Web Agent, if Grounded"的pdf | 否 |
default_website | 默认起始网站 | str | https://www.google.com/ | 否 |
grounding_strategy | 基础策略
| str | text_choice_som | 否 |
config_path | 配置文件路径 | str | None | 否 |
save_file_dir | 保存输出文件的文件夹 | str | seeact_agent_files | 否 |
temperature | 传递给LLM的温度 | num | 0.9 | 否 |
crawler_mode | 启用爬虫模式的标志 | bool | False | 否 |
crawler_max_steps | 允许爬虫行进的最大步数 | int | 10 | 否 |
支持的模型
SeeAct最初使用OpenAI GPT4-V,现在它支持一些其他模型。
以下是当前支持的模型列表,要使用以下任何一个模型,只需使用SeeActAgent(model="gpt-4-turbo")
,并在需要时指定API密钥。
提供商 | 模型 | 兼容性 | API密钥 | 注意 |
---|---|---|---|---|
OpenAI | gpt-4-vision-preview | 高 | 环境中的OPENAI_API_KEY | |
OpenAI | gpt-4-turbo | 高 | 环境中的OPENAI_API_KEY | |
OpenAI | gpt-4o | 高 | 环境中的OPENAI_API_KEY | |
gemini-1.5-pro-latest | 高 | 环境中的GEMINI_API_KEY | Google限制每分钟2次请求,需要在代码中添加等待时间才能工作 | |
Ollama | llava | 低 | 不适用 | 安装Ollama,启动Ollama,拉取llava |
API密钥
如果你计划使用OpenAI系列模型,请在Python中或通过环境变量传入API密钥
os.environ["OPENAI_API_KEY"] = "你的API密钥"
你的OpenAI API密钥可在OpenAI账户页面获取。
要使用Gemini,请在Python中或通过环境变量传入API密钥
os.environ["GEMINI_API_KEY"] = "你的API密钥"
你的Google API密钥可在Google AI Studio获取。
配置文件
提供SeeActAgent输入参数的另一种方式是使用配置文件,一旦提供了配置文件,它将覆盖所有其他输入参数。
agent = SeeActAgent(config_path="demo_mode.toml")
示例配置文件可在src/config/
中找到。
爬虫模式
在新引入的爬虫模式中,SeeAct可以随机点击给定起始网页上的任何链接,并按照crawler_max_steps
定义的步数行进。
演示模式
在演示模式下,SeeAct从用户终端输入获取task
和website
。使用以下命令在演示模式下运行SeeAct:
cd src
python seeact.py
演示模式将使用src/config/demo_mode.toml
中的默认配置文件。
配置
SeeAct可通过src/config/
中的TOML文件进行配置。
这些文件使您能够通过以下参数自定义系统行为的各个方面:
is_demo
:设置为true
以允许从用户终端输入任务和网站,设置为false
以从JSON文件运行任务和网站(适用于批量评估)。default_task
和default_website
:演示模式中使用的默认任务和网站。max_op
:代理可以为一个任务执行的最大操作数。save_file_dir
:保存输出结果的目录路径,包括终端日志和截图图像。
终端用户输入
启动SeeAct后,你需要输入任务描述
或者你可以按Enter
使用默认任务,即在arXiv上查找我们的论文。
接下来,你需要输入网站URL
(请确保包含所有必要的前缀(https,www))
或者你可以按Enter
使用默认的Google主页(https://www.google.com/)。
自动模式
你还可以在JSON文件中自动运行SeeAct的任务和网站列表。 使用以下命令运行SeeAct:
cd src
python seeact.py -c config/auto_mode.toml
在配置文件中,task_file_path
定义了JSON文件的路径。
默认为../data/online_tasks/sample_tasks.json
,其中包含各种任务示例。
自定义使用
对于自定义场景,修改配置文件以适应工具 到你的特定要求。 这包括设置自定义任务、调整实验参数、 以及配置Playwright选项以更精确地控制网页浏览体验。
安全性和监控
当前版本具有研究/实验性质,绝不是完美的。请始终对安全风险保持高度警惕,并密切监控代理。
在默认设置下(monitor = true
),代理将在执行每个操作之前提示确认。
此设置在每个操作之前暂停代理,允许仔细检查、拒绝操作以及其他人工干预,如在需要时手动执行某些操作。
你应该始终在执行前监控代理的预测,以防止有害结果。请拒绝任何可能造成潜在伤害的操作。
你可以通过每次执行前的终端输入来监控和干预操作:
Y
或Enter
:接受此操作。n
:拒绝此操作并将其记录在操作历史中。i
:拒绝此操作并暂停以进行人工干预。- 在暂停期间,你可以做任何事情,比如打开或关闭标签页、打开另一个链接等,除了直接关闭浏览器。如果当前活动标签页被关闭,活动标签页将默认为浏览器中的最后一个标签页。如果所有标签页都被关闭,浏览器将重新打开Google页面。
- 你可以在手动操作后留言,这将被注入到代理的提示中,以实现更好的人机合作。
e
:终止会话并保存结果。
我们不支持直接登录操作,以保护你的个人信息 并防止暴露于潜在的安全和法律风险。 **为防止无意的连带错误,我们建议不要使用SeeAct执行
多模态Mind2Web数据集
多模态Mind2Web是Mind2Web数据集的多模态版本,在Huggingface上以OpenRAIL许可发布。 在这个数据集中,我们将数据集中的每个HTML文档与Mind2Web原始转储中相应的网页截图图像对齐。 这个多模态版本解决了从约300GB的Mind2Web原始转储中加载图像的不便。
数据分割
- 训练集:来自1009个任务的7775个动作。
- test_task:来自177个任务的1339个动作。来自同一网站的任务在训练期间出现过。
- test_website:来自142个任务的1019个动作。训练期间未见过的网站。
- test_domain:来自694个任务的4060个动作。训练期间未见过的整个域名。
训练集可能包含一些由于Mind2Web注释期间渲染问题而未正确渲染的截图图像。三个**测试集(test_task、test_website、test_domain)**已经过人工验证,确认元素可见性和正确渲染,以用于动作预测。
数据字段
数据集中的每一行都是一个动作,包含截图图像、HTML文本和其他用于动作预测的必要字段,便于推理。
- "annotation_id"(str):每个任务的唯一ID
- "website"(str):网站名称
- "domain"(str):网站域名
- "subdomain"(str):网站子域名
- "confirmed_task"(str):任务描述
- "screenshot"(str):与HTML对应的网页截图图像路径。
- "action_uid"(str):每个动作(步骤)的唯一ID
- "raw_html"(str):执行动作前页面的原始html
- "cleaned_html"(str):执行动作前页面的清理后html
- "operation"(dict):要执行的操作
- "op"(str):操作类型,CLICK、TYPE或SELECT之一
- "original_op"(str):原始操作类型,包含额外的HOVER和ENTER,映射到CLICK,未使用
- "value"(str):操作的可选值,例如要输入的文本、要选择的选项
- "pos_candidates"(list[dict]):真实元素。这里我们只包含预处理后在"cleaned_html"中存在的正面元素,所以"pos_candidates"可能为空。原始标记的元素始终可以在"raw_html"中找到。
- "tag"(str):元素的标签
- "is_original_target"(bool):该元素是否为注释者原始标记的目标
- "is_top_level_target"(bool):该元素是否为我们算法找到的顶级目标。详情请参见论文。
- "backend_node_id"(str):元素的唯一ID
- "attributes"(str):元素属性的序列化,使用
json.loads
转换回字典
- "neg_candidates"(list[dict]):预处理后页面中的其他候选元素,结构与"pos_candidates"类似
- "action_reprs"(list[str]):动作序列的人类可读字符串表示
- "target_action_index"(str):目标动作在动作序列中的索引
- "target_action_reprs"(str):目标动作的人类可读字符串表示
实验
截图生成
您也可以从Mind2Web原始转储生成截图图像和查询文本数据。 运行以下命令为每种定位方法生成截图图像和叠加图像注释:
cd src/offline_experiments/screenshot_generation
# 文本选择
python textual_choices.py
# 元素属性
python element_attributes.py
# 图像注释
python image_annotation.py
请从此链接下载Mind2Web原始转储,并从此处下载查询源数据。下载后,请将两个文件放在../data/
目录中。
Mind2Web任务的在线评估
要复现论文中的在线评估实验,运行以下命令以自动模式运行SeeAct:
python src/seeact.py -c config/online_exp.toml
注意:由于时间敏感性,某些任务可能需要手动更新任务描述。
我们遵循MindAct的2阶段策略进行公平比较。您可以在Huggingface Model Hub中找到训练好的排序模型DeBERTa-v3-base。
许可信息
此仓库下的代码采用OPEN RAIL-S许可。
此仓库下的数据采用OPEN RAIL-D许可。
此仓库下的模型权重和参数采用OPEN RAIL-M许可。
免责声明
此代码仅为研究目的发布,旨在通过语言技术使网络更易访问。 作者强烈反对任何一方对数据或技术的潜在有害使用。
致谢
我们衷心感谢邓翔对SeeAct系统的原创贡献。 此外,我们感谢来自OSU NLP小组的同事们测试SeeAct系统并提供宝贵反馈。
联系方式
有问题或issues?提交issue或联系 Boyuan Zheng, Boyu Gou, Huan Sun, Yu Su, 俄亥俄州立大学
引用信息
如果您觉得这项工作有用,请考虑为我们的仓库加星并引用我们的论文:
@inproceedings{zheng2024seeact,
title={GPT-4V(ision) is a Generalist Web Agent, if Grounded},
author={Boyuan Zheng and Boyu Gou and Jihyung Kil and Huan Sun and Yu Su},
booktitle={Forty-first International Conference on Machine Learning},
year={2024},
url={https://openreview.net/forum?id=piecKJ2DlB},
}
@inproceedings{deng2023mindweb,
title={Mind2Web: Towards a Generalist Agent for the Web},
author={Xiang Deng and Yu Gu and Boyuan Zheng and Shijie Chen and Samuel Stevens and Boshi Wang and Huan Sun and Yu Su},
booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
year={2023},
url={https://openreview.net/forum?id=kiYqbO3wqw}
}