> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel PAO — 面向 AI 智能体的输出优化工具

> 介绍 laravel/pao。这是一个 Laravel 官方包,在 AI 智能体环境下把 PHPUnit、Pest、PHPStan、Artisan 的输出压缩为 JSON,最多可减少 99.8% 的 token 消耗。

## 前言

[laravel/pao](https://github.com/laravel/pao) 是一个把 PHP 开发工具的输出针对 AI 智能体做优化的包。**PAO(PHP Agent-Optimized output)** 会自动把 PHPUnit、Pest、Paratest、PHPStan、Laravel Artisan 冗长的输出转换成结构化、紧凑的 JSON。

随着包括 GitHub Copilot 在内的众多 AI 智能体转向按 token 数计费,工具输出的削减就直接意味着成本节省。PAO 就是为解决这个问题而设计的,预计会作为 Laravel 启动套件的默认依赖被引入。

```mermaid theme={null}
graph TD
    A["工具执行<br>(PHPUnit/Pest/PHPStan/Artisan)"] --> B{"AI 智能体<br>环境?"}
    B -->|Yes| C["压缩成 JSON 输出"]
    B -->|No| D["常规输出<br>(不变)"]
    C --> E["AI 智能体<br>省 token 处理"]
    D --> F["人类照常查看"]
```

## 为什么重要

随着 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 及以上。

```bash theme={null}
composer require laravel/pao --dev
```

装上就能生效。PAO 会通过 Composer 的 autoloader 自动挂到 PHPUnit、Pest、Paratest、PHPStan 上。Laravel 项目中,服务提供者也会被自动发现,Artisan 输出的优化会一并生效。

<Info>
  PAO 只在检测到 AI 智能体环境时启用。人类在终端里直接运行时它会完全禁用,保持常规输出。
</Info>

## 支持的 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)**

```json theme={null}
{
  "tool": "phpunit",
  "result": "passed",
  "tests": 1002,
  "passed": 1002,
  "duration_ms": 321
}
```

无论测试数量多少,输出都始终保持稳定大小。测试失败时会包含文件路径、行号、错误信息。

### 覆盖率等插件输出

`--coverage`、`--profile` 等 Pest 插件带来的额外输出会去掉 ANSI 码和修饰,放到 `raw` 数组里。

```json theme={null}
{
  "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 输出

```json theme={null}
{
  "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 项目都值得引入这个包。

<Card title="laravel/pao 仓库" icon="github" href="https://github.com/laravel/pao">
  源代码和最新支持的工具与智能体列表请查看这里。
</Card>


## Related topics

- [Laravel AI SDK](/zh/ai-sdk.md)
- [laravel/agent-skills — Laravel 官方 AI 智能体技能集](/zh/blog/agent-skills-introduction.md)
- [2026 年 5 月 Laravel 更新](/zh/blog/changelog/202605.md)
- [Laravel Agent Detector — AI 智能体检测包](/zh/blog/agent-detector-introduction.md)
- [Laravel 新代码分析生态 — surveyor / ranger / roster](/zh/blog/laravel-ecosystem-analysis.md)
