🍌 用于网页任务的开源AI代理评估 🍌
Banana-lyzer
简介
Banana-lyzer是一个开源的AI代理评估框架和数据集,用于使用Playwright进行网页任务(并且有一个香蕉主题,因为为什么不呢)。 我们创建了自己的评估仓库,原因如下:
- 网站随时间变化,受延迟影响,可能有反机器人保护。
- 我们需要一个可以可靠保存和部署网站历史/静态快照的系统。
- 标准的网页实践松散,有大量不同的底层方式来表示单个网站。为了让代理最好地泛化,我们需要构建一个跨行业和用例的多样化网站数据集。
- 我们有特定的评估标准和代理用例,专注于跨网站的结构化和直接信息检索。
- 存在一些有价值的网页任务数据集和评估,我们希望在一个仓库中统一它们(Mind2Web,WebArena等)。
https://github.com/reworkd/bananalyzer/assets/50181239/4587615c-a5b4-472d-bca9-334594130af1
它是如何工作的?
⚠️ 请注意,此仓库仍在开发中。 ⚠️
Banana-lyzer是一个CLI工具,用于对一组示例网站运行一系列评估。 这些示例在examples.json中定义,使用类似于Mind2Web和WebArena的模式。这些示例存储元数据,如代理目标和预期的代理输出,以及通过mhtml保存的URL快照,以确保页面不会随时间改变。请注意,目前所有示例都期望使用直接从页面提取的数据生成结构化JSON输出。
CLI工具将通过动态构建pytest测试套件并执行它来按顺序运行用户定义代理的示例。
作为用户,你只需创建一个实现AgentRunner
接口的文件,并在名为"agent"的变量中定义你的AgentRunner实例。
AgentRunner公开了示例和一个playwright浏览器上下文供使用。
未来我们将支持更复杂的评估方法和需要多个步骤完成的示例。计划是将现有的数据集(如Mind2Web和WebArena)转换为这种格式。
测试意图
我们定义了一组可以评估代理的测试意图。这些意图在schemas.py的GoalType
枚举中定义。
- fetch:代理必须从页面检索特定的JSON信息。这是最常见的测试类型。
- links:代理必须从页面抓取所有详情页链接
- links_fetch:代理必须从页面抓取所有详情页链接,并额外提取每个链接的JSON信息
- pagination:必须跨页面获取数据。目前只支持链接或获取。
入门
本地测试安装
pip install --dev bananalyzer
- 实现
agent_runner.py
接口并创建一个banalyzer.py测试文件(名称无关紧要)。以下是一个示例文件
import asyncio
from playwright.async_api import BrowserContext
from bananalyzer.data.schemas import Example
from bananalyzer.runner.agent_runner import AgentResult, AgentRunner
class NullAgentRunner(AgentRunner):
"""
一个测试代理类,只返回空字符串
"""
async def run(
self,
context: BrowserContext,
example: Example,
) -> AgentResult:
page = await context.new_page()
await page.goto(
example.get_static_url()) # example.url是真实url,example.get_static_url()返回本地mhtml文件url
await asyncio.sleep(0.5)
return example.evals[0].expected # 直接返回预期输出,以便测试通过
- 运行
bananalyze ./tests/banalyzer.py
来运行测试套件 - 你也可以运行
bananalyze .
来运行当前目录中的所有测试
参数
-h
或--help
:显示帮助--headless
:以Playwright无头模式运行-id
或--id
:通过id运行特定测试-i
或--intent
:仅运行特定意图的测试(fetch、links等)-c
或--category
:仅运行特定类别的测试(医疗保健、制造业、软件等)-n
或--n
:使用的测试工作器数量。默认为1-skip
或--skip
:要跳过测试的id列表,用逗号分隔-t
或--type
:仅运行特定类型的测试(links、fetch等)
贡献
运行服务器
该项目有一个基本的FastAPI服务器来公开示例数据。你可以使用以下命令运行它:
cd server
poetry run uvicorn server:app --reload
然后在浏览器中访问http://127.0.0.1:8000/api/docs
查看API文档。
添加示例
所有当前示例都是通过运行项目根目录下的fetch.ipynb
笔记本手动添加的。
这个笔记本将使用Playwright加载一个网站,并使用Chrome开发者API将页面保存为MHTML文件。
路线图
发布
- 用于提供本地MHTML站点的功能
- 运行工具所需的代理接口
- Pytest包装器,以启用带有附加参数的CLI测试
- 记录仓库的大部分内容
功能
- CLI参数,按意图过滤测试
- 额外的CLI参数,用于选择特定测试或测试类别
- 能够向示例添加多个网站页面
- 能够向示例添加页面内操作
- 转换WebArena评估
- 转换Mind2Web评估
- 延迟和机器人检测模拟
- 更新的测试可视化,分离类别和输出
数据集更新
- 15个额外的数据检索示例
- 15个额外的链接示例
- 15个点击示例
- 15个导航示例
- 需要多步导航的测试
- 需要导航和数据检索的测试
- 需要关闭弹出窗口的测试
- 需要登录的测试
- 需要解决验证码的测试
引用
bibtex
@misc{reworkd2023bananalyzer,
title = {Bananalyzer},
author = {Asim Shrestha and Adam Watkins and Rohan Pandey and Srijan Subedi},
year = {2023},
howpublished = {GitHub},
url = {https://github.com/reworkd/bananalyzer}
}