AIOS 桌面环境评估器(Evaluator)搭建与配置实战:从 apport 到 Chrome、VLC 与 LibreOffice 全指南
【免费下载链接】AIOSAIOS: AI Agent Operating System项目地址: https://gitcode.com/GitHub_Trending/ai/AIOS
导读:本文以 AIOS 项目中 evaluators/README.md 为骨架,系统讲解在桌面虚拟环境中为自动化评估器(Evaluator)准备运行环境所需的全部细节——包括禁用系统崩溃报告、LibreOffice 全家族(Press/Writer/Calc)依赖安装与 CSV 转换、
compare_table评估规则体系、Chrome 远程调试与 Playwright 接入、VLC HTTP 控制接口以及 GIMP 交互设置。读完本文,你将具备搭建一套可复现、可扩展的桌面应用评估环境,并能为 LibreOffice Calc 编写定制化的表格对比评估规则。
一、评估器在 AIOS 中的定位
AIOS(AI Agent Operating System)通过virtual_env模块在虚拟机中模拟真实桌面环境,供 AI Agent 执行真实软件操作。而evaluators子模块(位于 aios/tool/virtual_env/evaluators)承担“裁判”角色:它读取 Agent 操作后的产物(xlsx、docx、pptx、图片、VLC 状态等),与 golden(期望)结果比对,输出 0/1 或 0~1 的分数。
从源码结构看,评估器分为两大类(可参考目录结构确认):
- getters/:从软件或其数据文件中“取回”状态与产物,例如 getters/chrome.py 负责读取 Chrome 的 Cookies、历史记录、默认搜索引擎、活动标签页 URL 等;
- metrics/:对取回的结果做比对打分,例如 metrics/table.py 的
compare_table用于 xlsx 表格比对,metrics/vlc.py 用于 VLC 播放状态比对,metrics/gimp.py 用于图像效果比对。
下文所有环境准备步骤,正是为了让这些 getter/metrics 能在目标虚拟机内稳定工作。
二、总体环境:禁用系统崩溃报告
进入虚拟机后,第一项全局配置是关闭 Ubuntu 的崩溃报告(apport),避免评估过程中弹窗干扰 Agent 操作。原文档给出的操作如下:
sudo vim /etc/default/apport将文件中的enabled改为0,保存退出即可。该配置在 Ubuntu 系桌面上是通用的,设置后系统级崩溃对话框将不再弹出。
三、VSCode 评估器
原文档中 VSCode 一节标注为todo,即该项目当前尚未公开完整的 VSCode 评估器设置细节。需要为 VSCode 编写定制评估时,可参考同目录下 getters/vscode.py 与 metrics/vscode.py 中已有的函数骨架,按需扩展。
四、LibreOffice 家族
LibreOffice 是评估器覆盖最广的软件族(Impress 幻灯片、Writer 文档、Calc 表格)。除按各组件安装 Python 依赖外,还有一个共同前提:首次进入 LibreOffice 应用后,需要手动开启"Ctrl+S 保存时不弹对话框",避免快捷键保存时弹出原生对话框阻塞自动化。
4.1 LibreOffice Impress:安装 python-pptx
Impress 评估产物通常是.pptx文件,需要python-pptx库进行解析:
pip install python-pptx在 metrics/slides.py 中,compare_pptx_files会逐幻灯片、逐 shape、逐 run 地对比数量、文本、缩进、字体名/字号/粗斜体/颜色/下划线/删除线、对齐方式、项目符号、背景色与演讲者备注,check_transition甚至通过 zipfile 直接解析ppt/slides/slideN.xml中的<p:transition>节点来校验切换动画类型。
4.2 LibreOffice Writer:安装 python-docx 与 odfpy
Writer 同时产出.docx(默认)与.odt两种格式,因此需要两个库:
pip install python-docx pip install odfpy对应的实现见 metrics/docs.py:compare_docx_files支持ignore_blanks、ignore_case、ignore_order、content_only等选项;compare_docx_tables、compare_docx_images、compare_font_names、check_tabstops、compare_references等函数则覆盖了表格、图片、字体、制表位与参考文献等更细粒度的检查场景。
4.3 LibreOffice Calc:表格评估的核心
4.3.1 必需依赖库
openpyxl pandas lxml xmltodict这四者分别承担:xlsx 底层单元格/样式读写(openpyxl)、DataFrame 层面的数据加载(pandas)、xlsx 内部 XML 的 CSS 选择器解析(lxml,见 metrics/utils.py 中的load_charts/load_sparklines)、以及将 XML 片段转为字典的解析(xmltodict)。此外,实现中还依赖rapidfuzz(模糊匹配)、formulas(条件格式表达式求值),完整依赖建议以项目的 requirements.txt 为准。
4.3.2 从 XLSX 生成 CSV(sheet_print 评估前置步骤)
sheet_print类评估需要“打印所见”的 CSV 文件,可用 LibreOffice 无头转换命令生成:
libreoffice --convert-to "csv:Text - txt - csv (StarCalc):44,34,UTF8,,,,false,true,true,false,false,1" --out-dir /home/user /home/user/abc.xlsx命令要点(对照原文档说明):
- 输出文件为
/home/user/abc-Sheet1.csv,即原文件名-Sheet名.csv; - 转换选项字符串以逗号分隔:
44(字段分隔符为,的 ASCII 码)、34(文本限定符为")、UTF8编码、以及后续布尔开关(如首行是否视为标题等); - 最后一个参数
1表示导出第 1 个工作表(从 1 开始计数),即Sheet1; - 更多 CSV 过滤器参数说明可查阅 LibreOffice 官方文档中的 "CSV Filter Options" 章节(帮助文档路径为 text/shared/guide/csv_params.html)。
在 metrics/table.py 的_load_sheet中可以看到,当传入的是 CSV 字符串路径时,函数会按{basename}-{sheet_index}.csv的命名规则("{:}-{:}.csv".format(os.path.splitext(book)[0], index))定位同目录下的 CSV 文件,并去除空行后按行比对——这正是上面命令命名规则与评估逻辑衔接之处。
4.3.3 compare_table:表格评估规则详解
xlsx 评估主要依赖compare_table(result, expected, **options)(实现于 metrics/table.py)。它接收结果文件路径、期望(golden)文件路径,以及包含rules列表的 options;规则按顺序执行,任一规则失败则整体判 0,全部通过返回 1.0。
每一条规则必须包含type字段,已实现的类型包括:
| type | 比对内容 | 关键附加字段 |
|---|---|---|
sheet_name | 工作簿的工作表名列表是否一致 | 无 |
sheet_data | 通过 pandas 读取的内部单元格数值是否一致 | sheet_idx0、sheet_idx1、precision(小数位,默认 4) |
sheet_print | 通过 CSV 读取的“显示值”是否一致 | sheet_idx0、sheet_idx1、ignore_case |
sheet_fuzzy | 指定单元格区域的模糊/包含匹配 | sheet_idx0/1、rules(含range、type、threshold、normalization、trim_leadings、trim_trailings、ignore_chars、ignore_case) |
sparkline | 迷你图(sparkline)定义 | sheet_idx0/1 |
chart | 图表属性(标题、图例、锚点、宽高、类型、方向、坐标轴标题) | sheet_idx0/1、chart_props |
style | 单元格样式(含条件格式) | sheet_idx0/1、props |
freeze | 冻结窗格位置 | sheet_idx0/1 |
zoom | 视图缩放比例 | sheet_idx、method、ref |
data_validation | 数据有效性规则 | sheet_idx、dv_props |
row_props/col_props | 行/列属性(隐藏、折叠、宽高) | sheet_idx0/1、props |
filter | 自动筛选与排序状态 | sheet_idx0/1 |
pivot_table | 数据透视表属性 | sheet_idx0/1、pivot_props |
check_cell | 单个单元格的值与样式 | sheet_idx、coordinate、props |
sheet 定位约定(sheet_idx0/sheet_idx1/sheet_idx):既可传整数也可传带前缀的字符串。整数 i 表示从结果 xlsx中取第 i 个工作表(从 0 计数);字符串则以两个维度组合:
- 首字母
R表示从 result 取,E表示从 expected(golden)取; - 第二位
I表示按编号(从 0 起),N表示按工作表名(通常形如Sheet1、Sheet2)。
例如:0≡RI0≡RNSheet1;EI1表示 golden 文件中的第 2 个工作表。该逻辑对应源码 metrics/table.py 中的_parse_sheet_idx函数。
{"method": "eq", "ref": ...}形式规则:zoom、data_validation、check_cell等类型内部使用这种“方法 + 参考值”的结构,具体匹配逻辑集中在 metrics/utils.py 的_match_value_to_rule。已实现的 method 包括:
- 比较类:
eq、ne、le、lt、ge、gt; - 正则类:以
re开头(可附加.I、.M、.S等标志,如re.I),对值做re.search; - 近似类:
approx:THRESHOLD,绝对值误差不超过阈值; - 区间类:
range.te [0, 2]表示左开右闭区间(首字母t/f控制开闭)、spreadsheet_range做多区域包含关系判断; - 容器类:
str_list_eq、str_set_eq,将逗号分隔字符串与参考列表做有序/无序比较。
示例(假定规则 JSON 位于评估用例数据集中,命名形如libreoffice_calc/{uuid}.json):
{ "rules": [ {"type": "sheet_name"}, {"type": "sheet_data", "sheet_idx0": "RI0", "sheet_idx1": "EI0", "precision": 4}, {"type": "sheet_print", "sheet_idx0": "RNSheet1", "sheet_idx1": "ENSheet1", "ignore_case": true} ] }五、Chrome:远程调试与 Playwright
Chrome 评估依赖两个能力:一是远程调试接口,让外部程序接管正在运行的 Chrome;二是Playwright for Python,提供浏览器自动化 API。在 getters/chrome.py 中可以看到,get_page_info、get_open_tabs_info、get_pdf_from_url等函数均通过p.chromium.connect_over_cdp("http://{host}:{port}")连接已运行的 Chrome,因此正确的启动参数是这些 getter 工作的前提。
5.1 手动开启 Chrome 远程调试
- 找到平时启动 Chrome 的快捷方式(桌面、开始菜单或任务栏);
- 右键 →
属性(Properties); - 在
目标(Target)字段末尾追加--remote-debugging-port=9222,注意路径与参数之间要有空格,形如"C:\Path\To\Chrome.exe" --remote-debugging-port=9222; - 点击
应用→确定关闭对话框; - 通过该修改后的快捷方式启动 Chrome;
- 验证:浏览器访问
http://localhost:9222,若能看到列出当前活动标签页的调试信息页面,说明远程调试已生效。
5.2 安装 Playwright for Python
pip install playwright playwright install- 第一步安装 Python 库,第二步下载 Chromium/Firefox/WebKit 浏览器二进制;
- 编写脚本时导入同步 API:
from playwright.sync_api import sync_playwright。
5.3 最小可运行示例
from playwright.sync_api import sync_playwright def run(playwright): browser = playwright.chromium.launch() page = browser.new_page() page.goto("http://example.com") # other actions... browser.close() with sync_playwright() as playwright: run(playwright)该脚本会启动 Chromium、打开新页面、访问 example.com 后关闭浏览器。注意:这个示例是独立启动浏览器;而在 AIOS 评估场景中,应使用connect_over_cdp(remote_debugging_url)连接到 5.1 节配置的已运行实例(源码 getters/chrome.py 中甚至包含了连接失败后通过后端/setup/launch接口重新拉起google-chrome --remote-debugging-port=1337的兜底逻辑)。
5.4 故障排查
- 确认 Python 环境与 Playwright 及其依赖安装正确;
- 连接不上时检查 Chrome 是否真的以调试端口启动、
localhost:9222是否可访问; - 若目标虚拟机为 ARM 架构,源码中会改用
chromium命令(见platform.machine()分支判断)。
六、VLC 媒体播放器
VLC 评估需要解决两件事:音频转码的一个已知 bug,以及 HTTP 控制接口的启用。
6.1 MP3 转换 Bug 修复
Ubuntu 下用 VLC 将媒体转为 MP3 时,若直接使用默认Audio - MP3配置,可能生成 0 字节的 mp3 文件。修复方法(原文档明确说明):
- 进入
媒体(media)→转换/保存(convert/save); - 选择文件后进入
转换/保存; - 在配置文件中选中
Audio - MP3,修改 profile,将音频编码(audiocodec)从 "MP3" 改为 "MPEG Audio"。
这是 VLC 自身的已知问题,修改后生成的 mp3 才包含有效数据。
6.2 启用 VLC HTTP 接口
VLC 的 HTTP 接口用于远程控制与状态查询,配合 metrics/vlc.py 中的is_vlc_playing(解析播放状态 XML 并校验文件名/URL 后缀)即可判断 Agent 是否成功播放了目标媒体。启用步骤:
- 打开 VLC →
工具(Tools)→偏好设置(Preferences); - 在偏好设置窗口左下角,
显示设置(Show settings)选择全部(All); - 展开
接口(Interface)→主接口(Main interfaces),勾选Web; - 展开
主接口下的Lua,在Lua HTTP一节设置密码password; - 点击
保存(Save),重启 VLC 使配置生效; - 浏览器访问
http://localhost:8080,输入刚设置的密码即可进入远程控制界面。
排查建议:若无法访问,检查防火墙/安全软件是否拦截;确认 VLC 正在运行且端口正确(默认 8080);若端口被占用,可在 VLC 设置中修改端口号。
6.3 依赖包
pip install opencv-python-headless Pillow imagehash这三个包服务于 metrics/vlc.py 中的音视频比对:compare_videos用imagehash.phash逐帧计算感知哈希,compare_audios用 librosa 提取 MFCC 特征后做 DTW 对齐(librosa、fastdtw、scipy 为间接依赖),compare_images用ssim计算结构相似度。
七、GIMP
GIMP 评估中,图片加载时弹出的对话框需要手动处理:点击弹窗中的 "Keep"(保留)按钮,以保持图片原始尺寸/画布,避免默认裁剪影响后续图像比对。若需基于配置做校验,metrics/gimp.py 提供了check_config_status(解析 gimprc 键值)、check_image_size、check_brightness/check_saturation/check_contrast与结构相似度组合检查(如check_brightness_decrease_and_structure_sim、check_saturation_increase_and_structure_sim)等函数,可据此扩展更细化的评估规则。
八、总结与扩展建议
搭建一套完整的 AIOS 桌面评估环境,核心动作可归纳为四点:
- 系统层:通过
/etc/default/apport关闭崩溃弹窗; - 软件层:LibreOffice 各组件按需安装 python-pptx / python-docx / odfpy / openpyxl / pandas / lxml / xmltodict,并开启"Ctrl+S 无弹窗";Chrome 以
--remote-debugging-port=9222启动并pip install playwright;VLC 修复 MP3 转码 bug、启用 HTTP 接口;GIMP 处理图片加载弹窗; - 数据层:为
sheet_print类规则提前用libreoffice --convert-to "csv:..."生成 CSV,文件名遵循{basename}-{sheet}.csv约定; - 规则层:深入理解
compare_table的type体系与sheet_idx前缀语义(RI/RN/EI/EN),并借助_match_value_to_rule的eq/re/approx/range等方法编写精确的定制规则。
如需继续深入,推荐按需查阅源码:metrics/table.py(表格规则全集)、metrics/utils.py(底层解析与值匹配)、metrics/docs.py(文档比对)、metrics/slides.py(幻灯片比对)、metrics/vlc.py(媒体比对)以及 getters/chrome.py(浏览器状态获取),结合各自评估用例即可搭建出覆盖桌面全场景的自动化评估体系。
【免费下载链接】AIOSAIOS: AI Agent Operating System项目地址: https://gitcode.com/GitHub_Trending/ai/AIOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考