laravel/pao 是一个把 PHP 开发工具的输出针对 AI 智能体做优化的包。PAO(PHP Agent-Optimized output) 会自动把 PHPUnit、Pest、Paratest、PHPStan、Laravel Artisan 冗长的输出转换成结构化、紧凑的 JSON。
随着包括 GitHub Copilot 在内的众多 AI 智能体转向按 token 数计费,工具输出的削减就直接意味着成本节省。PAO 就是为解决这个问题而设计的,预计会作为 Laravel 启动套件的默认依赖被引入。
为什么重要
随着 AI 智能体深度融入开发流程,工具的输出 token 数直接关系到成本和响应速度。
一个有 1000 个测试用例的项目里,PHPUnit 的输出会达到数千行,而 AI 智能体真正需要的信息只有“成功、失败、数量、失败位置”。PAO 把这些信息压缩成一个只有一位数字长度的 JSON 对象。
- 测试输出:最高可减少 99.8% 的 token
- PHPStan 输出:以结构化 JSON 只提供必要信息
- Artisan 输出:去掉 ANSI 码、边框字符、空白后最高减少 75%
支持 PHP 8.3 及以上,PHPUnit 12-13 / Pest 4-5 / Paratest / PHPStan / Laravel 12 及以上。
composer require laravel/pao --dev
装上就能生效。PAO 会通过 Composer 的 autoloader 自动挂到 PHPUnit、Pest、Paratest、PHPStan 上。Laravel 项目中,服务提供者也会被自动发现,Artisan 输出的优化会一并生效。
PAO 只在检测到 AI 智能体环境时启用。人类在终端里直接运行时它会完全禁用,保持常规输出。
支持的 AI 智能体
PAO 会自动检测下面这些 AI 智能体。
| 智能体 | 检测方式 |
|---|
| GitHub Copilot | COPILOT_MODEL 等环境变量 |
| Claude Code | CLAUDECODE 或 CLAUDE_CODE |
| Cursor | CURSOR_AGENT |
| Gemini CLI | GEMINI_CLI |
| Devin | /opt/.devin 文件 |
| Codex | CODEX_SANDBOX 等环境变量 |
Before / After
测试输出(PHPUnit / Pest)
一个 1000 个测试的套件,输出会变成这样。
Before(没有 PAO)
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)
After(启用 PAO)
{
"tool": "phpunit",
"result": "passed",
"tests": 1002,
"passed": 1002,
"duration_ms": 321
}
无论测试数量多少,输出都始终保持稳定大小。测试失败时会包含文件路径、行号、错误信息。
覆盖率等插件输出
--coverage、--profile 等 Pest 插件带来的额外输出会去掉 ANSI 码和修饰,放到 raw 数组里。
{
"tool": "pest",
"result": "passed",
"tests": 1002,
"passed": 1002,
"duration_ms": 1520,
"raw": [
"Http/Controllers/Controller 100.0%",
"Models/User 0.0%",
"Total: 33.3 %"
]
}
PHPStan 输出
{
"tool": "phpstan",
"result": "failed",
"errors": 2,
"error_details": {
"/app/Http/Controllers/Controller.php": [
{
"line": 9,
"message": "Method Controller::index() should return int but returns string.",
"identifier": "return.type"
},
{
"line": 14,
"message": "Call to an undefined method Controller::doesNotExist().",
"identifier": "method.notFound"
}
]
}
}
Laravel Artisan 输出
php artisan about 等命令输出中的 ANSI 码、边框字符、点分割、空白都会被去掉。
Before(没有 PAO)—— 2111 字符
Environment ................................................................
Application Name ................................................... Laravel
Laravel Version ..................................................... 13.3.0
PHP Version .......................................................... 8.5.4
Debug Mode ......................................................... ENABLED
After(启用 PAO)—— 535 字符
Environment ..
Application Name .. Laravel
Laravel Version .. 13.3.0
PHP Version .. 8.5.4
Debug Mode .. ENABLED
about、db:show、migrate:status 等命令最多可减少 75% 的 token。
与 Laravel 启动套件的集成
PAO 计划作为 Laravel 启动套件的默认依赖内置。新建项目时会自动安装,你可以直接以受控 token 成本开始使用 AI 智能体开发。
laravel/pao 装上就能用,且只在 AI 智能体环境下启用,不会影响现有开发流程。任何想降低 AI 智能体开发成本的 PHP / Laravel 项目都值得引入这个包。
laravel/pao 仓库
源代码和最新支持的工具与智能体列表请查看这里。