[基準內容] ❖ [入門] ❖ [現場示範] ❖ [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},
}