【免费下载链接】pao
PAO is agent-optimized output for PHP testing tools.
当你用 AI Agent 跑 PHP 测试时,满屏的进度点和冗长日志不仅白白消耗 Token,还会干扰 AI 的判断。PAO 是专为 AI Agent 优化的 PHP 测试输出工具:安装后零配置,自动把 PHPUnit、Pest 等上千行冗长输出压缩成 6 行结构化 JSON,Token 消耗最高直降 99.8%。
什么是 PAO?AI Agent 跑 PHP 测试的 Token 救星
PAO 的核心思想只有一句话:人看的输出给 AI 用,是浪费。
它会先检测当前工具是否运行在 AI Agent 环境中(如 Claude Code、Cursor、Devin、Gemini CLI 等),如果是,就把冗长的、为人类设计的彩色终端输出,替换成超紧凑的结构化 JSON。检测逻辑在入口文件 src/Autoload.php 中,几行代码就完成了判断与开关控制。
三个关键特性:
- 🚀零配置:通过 Composer 自动加载器自动挂钩,装完即用
- 🎭只影响 AI,不影响人:你或团队在终端里直接跑测试时,输出与原来完全一致——同样的颜色、同样的格式
- 📦全生态覆盖:PHPUnit 12-13、Pest 4-5、Paratest、PHPStan、Rector,以及 Laravel 12+ 的 Artisan 命令
震撼前后对比:1000 个测试从千行变 6 行
来看一次真实的前后对比。一个包含1002 个测试的测试套件,未安装 PAO 时的 PHPUnit 输出是这样的:
PHPUnit 12.5.14 by Sebastian Bergmann and contributors. ............................................................. 61 / 1002 ( 6%) ............................................................. 122 / 1002 ( 12%) .......................... 1002 / 1002 (100%) Time: 00:00.321, Memory: 46.50 MB OK (1002 tests, 1002 assertions)安装 PAO 后,AI Agent 拿到的变成了这段 JSON:
{ "tool": "phpunit", "result": "passed", "tests": 1002, "passed": 1002, "duration_ms": 321 }📉 数据不会说谎:
| 指标 | 效果 |
|---|---|
| Token 消耗 | 最高减少99.8% |
| 输出体积 | 恒定大小,与测试数量无关 |
| Artisan 命令输出 | 最多减少75%(如 2,111 字符 → 535 字符) |
测试失败时,JSON 里会带上文件路径、行号和失败信息,AI 可以直接定位问题,而不必从几千行日志里大海捞针。Pest 插件(如--coverage、--profile)产生的额外输出也会被清理掉 ANSI 转义码和装饰字符后,收纳进 JSON 的raw字段,信息一点不丢。
PAO 快速上手:一条命令完成零配置安装
要求 PHP 8.3+,其余什么都不用管:
composer require laravel/pao --dev就这样。PAO 通过 Composer 的自动加载机制自动挂钩 PHPUnit、Pest、Paratest、PHPStan 和 Rector;在 Laravel 项目中,src/Laravel/ServiceProvider.php 会被自动发现,顺手清理 Artisan 命令输出。
还有两个环境变量可以控制行为:
PAO_DISABLE=true:手动关闭 PAOPAO_FORCE=true:强制启用,无需 Agent 检测
工具与驱动的路由分发逻辑见 src/Execution.php,按可执行文件名自动匹配对应的 Starter。
支持哪些工具?PHPUnit、Pest、PHPStan 全家族
每个工具都有独立的驱动,按统一接口 src/Contracts/Driver.php 实现start/name/parse三个方法:
| 工具 | 驱动入口 | 说明 |
|---|---|---|
| PHPUnit | src/Drivers/Phpunit/Starter.php | 自动附加--no-output,只解析结果 |
| Pest | src/Drivers/Pest/Plugin.php | 以 Pest 插件形式接入 |
| PHPStan | src/Drivers/Phpstan/Starter.php | 输出转为带行号、错误标识的结构化 JSON |
| Rector | src/Drivers/Rector/Starter.php | 自动切换到原生 JSON 输出格式 |
对 Rector 这类本来就有 JSON 模式的工具,PAO 直接让它输出file_diffs、changed_files等结构化数据,AI 一眼就能看懂改了哪些文件、应用了哪些规则。
🔍 Laravel Artisan 输出瘦身
在 Laravel 项目中,Artisan 命令输出会自动剥离 ANSI 颜色、制表框线和冗余空白:
# Before(无 PAO)— 2,111 字符 Application Name ................................................... Laravel # After(有 PAO)— 535 字符 Application Name .. Laravelabout、db:show、migrate:status这类命令,信息一样,只是没了"包装纸"。
🐳 Docker 环境下启用 PAO 的方法
PAO 靠环境变量识别 Agent,容器内跑测试时需要把AI_AGENT、CLAUDECODE、CURSOR_AGENT等变量转发进容器,或者在命令上直接设置PAO_FORCE=true,即可跳过检测强制激活。
PAO 源码结构速览
想深入了解实现原理?几个值得看的位置:
- src/Autoload.php:进程退出时的钩子,完成输出捕获、清洗与 JSON 序列化
- src/OutputCleaner.php:负责剥离 ANSI 颜色码与装饰字符
- src/Drivers/Concerns/TestResultParsable.php:测试结果解析的公共逻辑
- composer.json:自动加载入口与 Laravel 服务提供者注册
总结
PAO 解决了一个 AI 辅助开发时代的新痛点:PHP 测试工具的"人类友好"输出,对 AI 来说就是 Token 黑洞。
它用零配置的方式,在 AI Agent 环境中把 PHPUnit 千行进度点压缩成 6 行 JSON、把 Artisan 输出瘦身 75%,而在人类终端里保持原样不动——对现有工作流零影响。如果你的 PHP 项目正在与 Claude Code、Cursor 等 Agent 协作,composer require laravel/pao --dev这一条命令,就是你的第一站。
【免费下载链接】pao
PAO is agent-optimized output for PHP testing tools.
相关推荐
实测PAO极限:千级测试与超长输出的压力测试全记录
实测PAO极限:千级测试与超长输出的压力测试全记录 PAO(agent optimized output for PHP testing tools)是面向 A
Terser性能测试:10万行代码压缩效率对比分析
Terser性能测试:10万行代码压缩效率对比分析 你还在为前端项目构建速度慢、文件体积大而烦恼吗?作为JavaScript开发者,我们经常面临代码优化的挑战。
开发工具前端构建CLIPAO 路线图前瞻:AI Agent 时代 PHP 工具输出将如何进化
PAO 路线图前瞻:AI Agent 时代 PHP 工具输出将如何进化 PAO(agent optimized output for PHP testing t
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考