news 2026/9/17 23:33:43

AIOS 桌面环境评估器(Evaluator)搭建与配置实战:从 apport 到 Chrome、VLC 与 LibreOffice 全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AIOS 桌面环境评估器(Evaluator)搭建与配置实战:从 apport 到 Chrome、VLC 与 LibreOffice 全指南

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_blanksignore_caseignore_ordercontent_only等选项;compare_docx_tablescompare_docx_imagescompare_font_namescheck_tabstopscompare_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_idx0sheet_idx1precision(小数位,默认 4)
sheet_print通过 CSV 读取的“显示值”是否一致sheet_idx0sheet_idx1ignore_case
sheet_fuzzy指定单元格区域的模糊/包含匹配sheet_idx0/1rules(含rangetypethresholdnormalizationtrim_leadingstrim_trailingsignore_charsignore_case
sparkline迷你图(sparkline)定义sheet_idx0/1
chart图表属性(标题、图例、锚点、宽高、类型、方向、坐标轴标题)sheet_idx0/1chart_props
style单元格样式(含条件格式)sheet_idx0/1props
freeze冻结窗格位置sheet_idx0/1
zoom视图缩放比例sheet_idxmethodref
data_validation数据有效性规则sheet_idxdv_props
row_props/col_props行/列属性(隐藏、折叠、宽高)sheet_idx0/1props
filter自动筛选与排序状态sheet_idx0/1
pivot_table数据透视表属性sheet_idx0/1pivot_props
check_cell单个单元格的值与样式sheet_idxcoordinateprops

sheet 定位约定(sheet_idx0/sheet_idx1/sheet_idx:既可传整数也可传带前缀的字符串。整数 i 表示从结果 xlsx中取第 i 个工作表(从 0 计数);字符串则以两个维度组合:

  • 首字母R表示从 result 取,E表示从 expected(golden)取;
  • 第二位I表示按编号(从 0 起),N表示按工作表名(通常形如Sheet1Sheet2)。

例如:0RI0RNSheet1EI1表示 golden 文件中的第 2 个工作表。该逻辑对应源码 metrics/table.py 中的_parse_sheet_idx函数。

{"method": "eq", "ref": ...}形式规则zoomdata_validationcheck_cell等类型内部使用这种“方法 + 参考值”的结构,具体匹配逻辑集中在 metrics/utils.py 的_match_value_to_rule。已实现的 method 包括:

  • 比较类:eqneleltgegt
  • 正则类:以re开头(可附加.I.M.S等标志,如re.I),对值做re.search
  • 近似类:approx:THRESHOLD,绝对值误差不超过阈值;
  • 区间类:range.te [0, 2]表示左开右闭区间(首字母t/f控制开闭)、spreadsheet_range做多区域包含关系判断;
  • 容器类:str_list_eqstr_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_infoget_open_tabs_infoget_pdf_from_url等函数均通过p.chromium.connect_over_cdp("http://{host}:{port}")连接已运行的 Chrome,因此正确的启动参数是这些 getter 工作的前提。

5.1 手动开启 Chrome 远程调试

  1. 找到平时启动 Chrome 的快捷方式(桌面、开始菜单或任务栏);
  2. 右键 →属性(Properties);
  3. 目标(Target)字段末尾追加--remote-debugging-port=9222注意路径与参数之间要有空格,形如"C:\Path\To\Chrome.exe" --remote-debugging-port=9222
  4. 点击应用确定关闭对话框;
  5. 通过该修改后的快捷方式启动 Chrome;
  6. 验证:浏览器访问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 文件。修复方法(原文档明确说明):

  1. 进入媒体(media)→转换/保存(convert/save);
  2. 选择文件后进入转换/保存
  3. 在配置文件中选中Audio - MP3,修改 profile,将音频编码(audiocodec)从 "MP3" 改为 "MPEG Audio"。

这是 VLC 自身的已知问题,修改后生成的 mp3 才包含有效数据。

6.2 启用 VLC HTTP 接口

VLC 的 HTTP 接口用于远程控制与状态查询,配合 metrics/vlc.py 中的is_vlc_playing(解析播放状态 XML 并校验文件名/URL 后缀)即可判断 Agent 是否成功播放了目标媒体。启用步骤:

  1. 打开 VLC →工具(Tools)→偏好设置(Preferences);
  2. 在偏好设置窗口左下角,显示设置(Show settings)选择全部(All);
  3. 展开接口(Interface)→主接口(Main interfaces),勾选Web
  4. 展开主接口下的Lua,在Lua HTTP一节设置密码password
  5. 点击保存(Save),重启 VLC 使配置生效;
  6. 浏览器访问http://localhost:8080,输入刚设置的密码即可进入远程控制界面。

排查建议:若无法访问,检查防火墙/安全软件是否拦截;确认 VLC 正在运行且端口正确(默认 8080);若端口被占用,可在 VLC 设置中修改端口号。

6.3 依赖包

pip install opencv-python-headless Pillow imagehash

这三个包服务于 metrics/vlc.py 中的音视频比对:compare_videosimagehash.phash逐帧计算感知哈希,compare_audios用 librosa 提取 MFCC 特征后做 DTW 对齐(librosa、fastdtw、scipy 为间接依赖),compare_imagesssim计算结构相似度。

七、GIMP

GIMP 评估中,图片加载时弹出的对话框需要手动处理:点击弹窗中的 "Keep"(保留)按钮,以保持图片原始尺寸/画布,避免默认裁剪影响后续图像比对。若需基于配置做校验,metrics/gimp.py 提供了check_config_status(解析 gimprc 键值)、check_image_sizecheck_brightness/check_saturation/check_contrast与结构相似度组合检查(如check_brightness_decrease_and_structure_simcheck_saturation_increase_and_structure_sim)等函数,可据此扩展更细化的评估规则。

八、总结与扩展建议

搭建一套完整的 AIOS 桌面评估环境,核心动作可归纳为四点:

  1. 系统层:通过/etc/default/apport关闭崩溃弹窗;
  2. 软件层: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 处理图片加载弹窗;
  3. 数据层:为sheet_print类规则提前用libreoffice --convert-to "csv:..."生成 CSV,文件名遵循{basename}-{sheet}.csv约定;
  4. 规则层:深入理解compare_tabletype体系与sheet_idx前缀语义(RI/RN/EI/EN),并借助_match_value_to_ruleeq/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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 23:26:38

IDC运维工程师面试:Linux、MySQL、Redis、Docker排障

简介&#xff1a;面向 IDC 机房运维岗位求职者与初级运维工程师的面试备考资料&#xff0c;以一份 PDF 问答文档形式呈现&#xff0c;覆盖 Windows、Linux 与网络基础三大知识板块。内容按基础技能测试题组织&#xff0c;逐条给出参考答案&#xff0c;涉及远程登录工具与端口辨…

作者头像 李华