[基准内容] ❖ [入门] ❖ [现场演示] ❖ [BrowserGym] ❖ [引用此作品]
[ICML 2024] WorkArena:Web 代理解决常见知识工作任务的能力如何? [纸]
WorkArena++:迈向基于组合规划和推理的常识工作任务 [论文]
WorkArena
是一套基于浏览器的任务,旨在衡量网络代理在支持知识工作者日常任务方面的有效性。通过利用无处不在的 ServiceNow 平台,该基准将有助于评估现代知识工作环境中此类自动化的广泛状态。
WorkArena 包含在 BrowserGym 中,这是一个用于评估网络代理的对话健身房环境。
要设置 WorkArena,您需要获取自己的 ServiceNow 实例,安装我们的 Python 包,并将一些数据上传到您的实例。请按照以下步骤来实现此目的。
Request an instance
并选择Washington
版本(初始化实例将需要几分钟)SNOW_INSTANCE_URL
:您的 ServiceNow 开发人员实例的 URLSNOW_INSTANCE_UNAME
:用户名应该是“admin”SNOW_INSTANCE_PWD
:密码,请确保将值放在引号“”中,并注意转义特殊 shell 字符。运行echo $SNOW_INSTANCE_PWD
应打印正确的密码。警告:请随意查看平台,但请确保恢复任何更改(例如,对列表视图的更改、固定某些菜单等),因为这些更改将持续存在并影响基准测试过程。
运行以下命令在 BrowswerGym 环境中安装 WorkArena:
pip install browsergym
然后,安装 Playwright:
playwright install
最后,在终端中运行以下命令,将基准数据上传到您的 ServiceNow 实例:
workarena-install
您的安装现已完成! ?
目前,WorkArena-L1 包括从33
任务中提取的19,912
唯一实例,这些任务涵盖了 ServiceNow 用户界面的主要组件,也称为“原子”任务。 WorkArena++ 包含 682 个任务,每个任务都从数千种潜在配置中采样。 WorkArena++ 使用 WorkArena 中提供的原子组件,并将它们组合成现实世界的用例,评估代理的规划、推理和记忆能力。
以下视频展示了基于GPT-4-vision
构建的代理与基准测试的每个原子组件进行交互。正如我们的结果所强调的,该基准尚未解决,因此代理的性能并不总是正确的。
目标:代理必须在公司知识库中搜索特定信息。
代理通过 BrowserGym 的对话界面与用户交互。
目标:代理必须填写复杂的表格,其中每个字段都有特定值。
目标:代理必须从公司的服务目录中订购具有特定配置的项目。
目标:代理必须根据某些规范过滤列表。
在此示例中,代理努力操作 UI 并且无法创建过滤器。
目标:代理必须使用主菜单导航到特定应用程序。
目标:代理必须回答一个需要阅读图表并(可选)对其进行简单推理的问题。
注意:出于演示目的,人类正在控制光标,因为这是纯粹的检索任务
要设置 WorkArena,您需要获取自己的 ServiceNow 实例,安装我们的 Python 包,并将一些数据上传到您的实例。请按照以下步骤来实现此目的。
Request an instance
并选择Washington
版本(初始化实例将需要几分钟)SNOW_INSTANCE_URL
:您的 ServiceNow 开发人员实例的 URLSNOW_INSTANCE_UNAME
:用户名应该是“admin”SNOW_INSTANCE_PWD
:密码,确保将值放在单引号 '' 中,并注意转义特殊 shell 字符。运行echo $SNOW_INSTANCE_PWD
应打印正确的密码。警告:请随意查看平台,但请确保恢复任何更改(例如,对列表视图的更改、固定某些菜单等),因为这些更改将持续存在并影响基准测试过程。
运行以下命令在 BrowswerGym 环境中安装 WorkArena:
pip install browsergym-workarena
然后,安装 Playwright:
playwright install
最后,在终端中运行以下命令,将基准数据上传到您的 ServiceNow 实例:
workarena-install
您的安装现已完成! ?
运行此代码以查看 WorkArena 的运行情况。
注意:以下示例执行WorkArena的oracle(cheat)函数来解决每个任务。要评估代理,必须使用对env.step()
调用。
import random
from browsergym . core . env import BrowserEnv
from browsergym . workarena import ALL_WORKARENA_TASKS
from time import sleep
random . shuffle ( ALL_WORKARENA_TASKS )
for task in ALL_WORKARENA_TASKS :
print ( "Task:" , task )
# Instantiate a new environment
env = BrowserEnv ( task_entrypoint = task ,
headless = False )
env . reset ()
# Cheat functions use Playwright to automatically solve the task
env . chat . add_message ( role = "assistant" , msg = "On it. Please wait..." )
cheat_messages = []
env . task . cheat ( env . page , cheat_messages )
# Send cheat messages to chat
for cheat_msg in cheat_messages :
env . chat . add_message ( role = cheat_msg [ "role" ], msg = cheat_msg [ "message" ])
# Post solution to chat
env . chat . add_message ( role = "assistant" , msg = "I'm done!" )
# Validate the solution
reward , stop , message , info = env . task . validate ( env . page , cheat_messages )
if reward == 1 :
env . chat . add_message ( role = "user" , msg = "Yes, that works. Thanks!" )
else :
env . chat . add_message ( role = "user" , msg = f"No, that doesn't work. { info . get ( 'message' , '' ) } " )
sleep ( 3 )
env . close ()
l3
以对 L3 任务进行采样。 import random
from browsergym . core . env import BrowserEnv
from browsergym . workarena import get_all_tasks_agents
AGENT_L2_SAMPLED_SET = get_all_tasks_agents ( filter = "l2" )
AGENT_L2_SAMPLED_TASKS , AGENT_L2_SEEDS = [ sampled_set [ 0 ] for sampled_set in AGENT_L2_SAMPLED_SET ], [
sampled_set [ 1 ] for sampled_set in AGENT_L2_SAMPLED_SET
]
from time import sleep
for ( task , seed ) in zip ( AGENT_L2_SAMPLED_TASKS , AGENT_L2_SEEDS ):
print ( "Task:" , task )
# Instantiate a new environment
env = BrowserEnv ( task_entrypoint = task ,
headless = False )
env . reset ()
# Cheat functions use Playwright to automatically solve the task
env . chat . add_message ( role = "assistant" , msg = "On it. Please wait..." )
for i in range ( len ( env . task )):
sleep ( 1 )
env . task . cheat ( page = env . page , chat_messages = env . chat . messages , subtask_idx = i )
sleep ( 1 )
reward , done , message , info = env . task . validate ( page = env . page , chat_messages = env . chat . messages )
if reward == 1 :
env . chat . add_message ( role = "user" , msg = "Yes, that works. Thanks!" )
else :
env . chat . add_message ( role = "user" , msg = f"No, that doesn't work. { info . get ( 'message' , '' ) } " )
sleep ( 3 )
env . close ()
注意:以下示例执行WorkArena的oracle(cheat)函数来解决每个任务。要评估代理,必须使用对env.step()
调用。
请使用以下 BibTeX 引用我们的工作:
@misc{workarena2024,
title={WorkArena: How Capable Are Web Agents at Solving Common Knowledge Work Tasks?},
author={Alexandre Drouin and Maxime Gasse and Massimo Caccia and Issam H. Laradji and Manuel Del Verme and Tom Marty and Léo Boisvert and Megh Thakkar and Quentin Cappart and David Vazquez and Nicolas Chapados and Alexandre Lacoste},
year={2024},
eprint={2403.07718},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@misc{boisvert2024workarenacompositionalplanningreasoningbased,
title={WorkArena++: Towards Compositional Planning and Reasoning-based Common Knowledge Work Tasks},
author={Léo Boisvert and Megh Thakkar and Maxime Gasse and Massimo Caccia and Thibault Le Sellier De Chezelles and Quentin Cappart and Nicolas Chapados and Alexandre Lacoste and Alexandre Drouin},
year={2024},
eprint={2407.05291},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2407.05291},
}