Przejdź do głównej zawartości

Ciągłe ewaluacje — testowanie regresyjne środowiska agenta

Ciągłe ewaluacje to zestawy regresyjne mierzące jakość, zgodność i trafność harnessu agenta (CLAUDE.md, .cursor/rules, .agents/skills i hooki) w CI. Po zmianie promptów, instrukcji, narzędzi lub modeli reprezentatywne zadania wykrywają istotny regres i dostarczają dowodów do decyzji człowieka; żaden skończony zestaw nie gwarantuje braku pogorszenia.

Pytanie w scorecardzie: W jaki sposób testujesz regresyjnie konfigurację swojego agenta (CLAUDE.md, rules, skills, hooks)? Maksymalna odpowiedź (3 pkt): Ciągły workflow ewaluacyjny w CI (.github/workflows/agent-evals.yml) uruchamiany na PR konfiguracji/skilli, z incydentami produkcyjnymi dodawanymi jako testy regresyjne.

Pliki instrukcji agenta i skille sterują milionami linii generowanego kodu, jednak większość zespołów traktuje je jak luźną dokumentację. Programista w dobrej wierze koryguje regułę lub aktualizuje domyślny model, by po kilku dniach odkryć, że agent przestał przestrzegać zasad marki albo zaczął ignorować polityki bezpieczeństwa w całej organizacji inżynierskiej.

W natywnym dla AI SDLC konfiguracja agenta jest kodem i musi być testowana jak kod. Utrzymując zestaw ewaluacyjny 20–50 reprezentatywnych zadań z deterministycznymi sprawdzeniami pass/fail, zespoły uruchamiają bezgłowe ewaluacje przy każdym PR dotykającym katalogów .claude/, .cursor/ lub .agents/. Ponadto każdy incydent produkcyjny jest przekształcany w nowy przypadek ewaluacyjny, trwale eliminując nawrót danego błędu.

Konfiguracja z maksymalnym wynikiem w Q17 wykazuje cztery możliwości operacyjne:

  1. Dedykowany workflow w CI: Zautomatyzowany przepływ (np. .github/workflows/agent-evals.yml) uruchamia się przy każdej zmianie reguł, instrukcji lub skilli agenta.
  2. Deterministyczna ocena: Każdy przypadek ewaluacyjny testuje wykonanie agenta według twardych kryteriów: testy jednostkowe przechodzą, linter zwraca kod 0, brak zabronionych API i obecność wymaganych wzorców architektonicznych.
  3. Potok od incydentu do ewaluacji: Zamknięcie ticketu z post-mortem wymaga napisania zadania ewaluacyjnego odtwarzającego dany incydent.
  4. Bramka merge’a: Zmiany w regułach lub skillach, które obniżają wskaźnik zaliczeń benchmarku, są blokowane przed scaleniem do main.
  1. Przygotuj początkowy zestaw zadań benchmarkowych.

    Zbierz 15–30 historycznych zadań reprezentujących codzienne przepływy pracy w repozytorium:

    • Dodanie nowego endpointu API z uwierzytelnianiem
    • Refaktoryzacja zapytania do bazy danych na sparametryzowane wejścia
    • Napisanie komponentu React zgodnego z tokenami design systemu
    • Obsługa błędu w asynchronicznym workerze
  2. Zorganizuj przypadki testowe ewaluacji.

    Utwórz katalog evals/ w repozytorium. Dla każdego przypadku zdefiniuj prompt startowy, oczekiwane zmiany w plikach i polecenie weryfikujące:

    {
    "id": "eval-auth-middleware",
    "description": "Upewnij sie, ze agent dodaje sprawdzenie autoryzacji do niechronionych tras",
    "prompt": "Utworz nowa trase /api/v1/user/settings w src/routes/settings.ts zgodnie z naszymi standardami API.",
    "checks": [
    "test -f src/routes/settings.ts",
    "grep -q 'requireAuth' src/routes/settings.ts",
    "npm run typecheck",
    "npm test tests/routes/settings.test.ts"
    ]
    }
  3. Zbuduj zautomatyzowany workflow w CI.

    Utwórz .github/workflows/agent-evals.yml do bezgłowego uruchamiania zestawu na PR modyfikujących pliki agenta:

    name: Agent Evals
    on:
    pull_request:
    paths:
    - '.claude/**'
    - '.cursor/**'
    - '.agents/**'
    - 'CLAUDE.md'
    - 'AGENTS.md'
    jobs:
    eval:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v5
    - uses: actions/setup-node@v4
    with:
    node-version: 22
    - name: Run Headless Agent Evals
    env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
    run: |
    npm ci
    # Uruchom skrypt runnera ewaluacji w trybie bezglowym
    npx tsx scripts/run-evals.ts
  4. Wykonuj bezgłowe uruchomienia agenta w runnerze.

    Wykorzystaj nieinteraktywny tryb wykonania swojego głównego narzędzia:

    • Claude Code: claude -p "PROMPT" wewnątrz odizolowanego kontenera.
    • Codex: openai/codex-action@v1 lub codex exec.
    • Cursor: Automatyzacja Cursor Cloud Agent lub CLI w sandboksie.
  5. Przekształcaj każdy incydent w trwałą ewaluację regresyjną.

    Gdy na produkcję przedostanie się błąd lub wystąpi incydent, udokumentuj prompt i warunki błędu jako nowy plik JSON w evals/. Zacommituj ewaluację wraz z dokumentem post-mortem incydentu.

  • Testowanie modeli zamiast środowiska agenta: Pisanie ewaluacji sprawdzających ogólne ciekawostki z benchmarków LLM zamiast specyficznych konwencji i skilli Twojego repozytorium.
  • Niestabilne asercje (flaky checks): Poleganie na modelach LLM w roli sędziów oceniających, podczas gdy deterministyczne polecenia basha (npm test, grep, linter) dają natychmiastowe i bezdyskusyjne werdykty.
  • Uruchamianie ewaluacji wyłącznie ręcznie: Liczenie na to, że programiści będą pamiętać o lokalnym uruchomieniu testów przed wysłaniem zmian w regułach. Wymuś bramkę bezpośrednio w CI.
  • Modyfikacja CLAUDE.md lub .cursor/rules/ automatycznie uruchamia workflow Agent Evals w CI.
  • Wskaźnik zaliczeń zestawu ewaluacyjnego jest śledzony w czasie i widoczny na dashboardzie.
  • Każdy dokument post-mortem incydentu produkcyjnego zawiera zacommitowany plik w evals/.
  • Zmiany w regułach, które powodują halucynacje agenta lub łamanie wytycznych, failują proces CI i blokują możliwość merge’a.