Ground Truths: zakotwiczanie agentów AI w rzeczywistości
> Agenci AI halucynują z pełnym przekonaniem. Ground truths to wersjonowane, zakresowe fakty, które zakotwiczają zachowanie agentów w rzeczywistości. Oto jak je zbudowaliśmy i egzekwujemy.
Liczby w tym wpisie odzwierciedlają system w momencie publikacji (styczeń 2026). Aktualne dane znajdziesz na naszej stronie zespołu.
Agenci AI są niezwykle zdolni. Potrafią rozumować, syntetyzować i generować. Ale mają fundamentalną słabość: zmyślają. Nie złośliwie, ale z pełnym przekonaniem. Agent może wymyślić parametry API, które nie istnieją, odwołać się do konfiguracji, które nigdy nie zostały zdefiniowane, albo zastosować wzorce ze swoich danych treningowych, które są sprzeczne z Twoją rzeczywistą architekturą.
Standardowym środkiem zaradczym jest „daj agentowi więcej kontekstu”. Ale kontekst może być sprzeczny. Dokumentacja odbiega od implementacji. Komentarze kłamią. Nawet kod może wprowadzać w błąd, gdy czyta się go bez zrozumienia intencji.
Potrzebowaliśmy czegoś bardziej jednoznacznego. Czegoś, czego nie da się zignorować ani błędnie zinterpretować. Czegoś, co zakotwiczy agentów w weryfikowalnej rzeczywistości.
Nazywamy je Ground Truths.
Czym jest Ground Truth?
Ground truth to jednoznaczne, wersjonowane stwierdzenie faktu, którego agenci muszą przestrzegać. To nie dokumentacja. To nie komentarz. To pełnoprawna jednostka w systemie z:
- Unikalnym identyfikatorem (takim jak
GT-MAG-015czyGT-MAG-036) - Statusem cyklu życia (aktualny, tymczasowy lub przestarzały)
- Zakresem (obejmujący całą platformę, specyficzny dla pakietu lub związany z domeną)
- Dowodem (ścieżki plików, adresy URL lub referencje, które potwierdzają stwierdzenie)
- Wskazówkami dla agenta (jednoznaczne instrukcje rób/unikaj)
Oto przykład z naszej platformy inteligencji kodu Maguyva:
- id: GT-MAG-015
status: current
scope: package
statement: |
Fuzzy symbol matching is opt-in via `find_similar=true`.
Default behavior returns empty results for non-existent symbols;
`exact_match=true` enforces strict matching and disables all fuzzy fallbacks.
rationale: |
Deterministic defaults prevent agents from receiving misleading results.
Typos should fail explicitly rather than silently returning unrelated symbols.
evidence:
- "packages/maguyva/server/src/maguyva/services/code_analysis_service.py"
- "packages/maguyva/server/docs/quick_reference/parameters.md"
last_verified: "2026-01-25"
tags:
- product
- ai_first
- principle
To nie jest proza. To kontrakt. Gdy agent natrafia na ten ground truth, wie że:
- Domyślne zachowanie jest deterministyczne (puste wyniki, nie rozmyte zgadywanie)
- Istnieją konkretne parametry (
find_similar,exact_match) o zdefiniowanym zachowaniu - Dowody istnieją w konkretnych plikach, które można zweryfikować
- Stwierdzenie zostało zweryfikowane w konkretnej dacie
Anatomia rejestru Ground Truths
Ground truths żyją w rejestrach YAML pod ai_assets/reference/ground_truths.yaml. Każdy pakiet lub domena może mieć swój własny rejestr. Struktura wygląda tak:
metadata:
title: "Maguyva Ground Truths"
summary: "Foundational constraints and principles that guide Maguyva."
last_updated: "2026-01-26"
owner: "maguyva"
render:
include_statuses: [current, tentative]
show_deprecated: true
groups:
- title: "Product Principles"
tags: [product, principle, brand]
- title: "Architecture & Boundaries"
tags: [architecture, boundaries, cqrs]
statements:
- id: GT-MAG-001
status: current
scope: package
statement: "Maguyva is read-only with respect to user repositories..."
...
Rejestr zawiera metadane o samej kolekcji, konfigurację renderowania na potrzeby generowania dokumentacji oraz same stwierdzenia. Każde stwierdzenie podlega ścisłemu schematowi walidowanemu przez modele Pydantic:
class GroundTruthStatement(BaseModel):
id: str
status: GTStatus # current, tentative, deprecated
source: GTSource | None # claude-code, orkestra, discipline
scope: GTScope # platform, package, domain
statement: str
rationale: str | None
evidence: list[str]
last_verified: str | None
tags: list[str]
agent_guidance: AgentGuidance | None
Jak agenci uzyskują dostęp do Ground Truths
Ground truths są udostępniane przez wiele kanałów:
1. Wyrenderowana dokumentacja
Polecenie orkestra sync przekształca rejestry YAML w czytelny markdown:
uv run orkestra sync
Generuje to pliki GROUND_TRUTHS.md, które są włączane do kontekstu agenta. Wyrenderowany wynik grupuje stwierdzenia według statusu i kategorii:
## Current
### Product Principles
- Maguyva is read-only with respect to user repositories... (GT-MAG-001)
- Design tool responses for AI agents first... (GT-MAG-009)
### Architecture & Boundaries
- Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)
2. Wyszukiwanie CLI
Agenci z dostępem do powłoki mogą przeszukiwać ground truths programowo:
uv run orkestra context ground-truths search "embedding"
uv run orkestra context ground-truths search --tag security
uv run orkestra context ground-truths list --status current
Funkcja wyszukiwania ocenia dopasowania w wielu polach z ważoną trafnością:
def truth_fields(gt: GroundTruthStatement) -> list[FieldSpec]:
return [
FieldSpec(name="id", weight=6, values=[gt.id]),
FieldSpec(name="statement", weight=5, values=[gt.statement]),
FieldSpec(name="rationale", weight=4, values=[gt.rationale] if gt.rationale else []),
FieldSpec(name="tags", weight=3, values=gt.tags or []),
FieldSpec(name="evidence", weight=2, values=gt.evidence or []),
]
3. Kompozycja kontekstu
Gdy agenci są renderowani z definicji YAML, ich kontekst może odwoływać się do rejestrów ground truths:
context_composition:
domain_knowledge:
- packages/maguyva/ai_assets/reference/ground_truths.yaml
To zapewnia, że odpowiednie ground truths są wczytane, zanim agent zacznie pracę.
Kategorie Ground Truths
Patrząc na nasze rejestry, ground truths skupiają się w kilku wzorcach:
Zasady produktowe
Ograniczenia dotyczące tego, czym produkt jest, a czym nie jest:
„Maguyva jest tylko do odczytu w odniesieniu do repozytoriów użytkowników; jedynym zasobem, którego nie da się odbudować, jest płatny cache embeddingów.” (GT-MAG-001)
Granice architektury
Gdzie leżą odpowiedzialności i dlaczego:
„Granice pipeline’u i Maguyva są celowe: pipeline jest wielokrotnego użytku, Maguyva przechowuje logikę specyficzną dla kodu, a CQRS oddziela zapisy etapów od odczytów serwera.” (GT-MAG-006)
Zasady antyhalucynacyjne
Jednoznaczne mandaty utrzymujące kontrakty narzędzi deterministycznymi, a nie wywnioskowanymi:
„Rozmyte dopasowywanie symboli jest opcjonalne (opt-in) przez
find_similar=true. Domyślne zachowanie zwraca puste wyniki dla nieistniejących symboli;exact_match=truewymusza ścisłe dopasowywanie i wyłącza wszystkie rozmyte fallbacki.” (GT-MAG-015)
Bramki jakości
Standardy, które muszą być utrzymywane:
„Zmiany we współdzielonej infrastrukturze (post_filters.py, ekstraktory relacji, współdzielone handlery) MUSZĄ być zwalidowane względem WSZYSTKICH obsługiwanych języków przez generowanie pełnego manifestu przed commitem. Walidacja jednego języka jest niewystarczająca dla kodu współdzielonego.” (GT-MAG-036)
Wzorce kodu
Wymagania implementacyjne:
„Używaj
asyncio.to_thread()do pracy obciążającej CPU w kontekstach asynchronicznych; przestarzały wzorzecloop.run_in_executor()nie powinien być używany w nowym kodzie.” (GT-MAG-018)
Cykl życia Ground Truth
Ground truths nie są statyczne. Ewoluują przez zdefiniowany cykl życia:
Tymczasowy
Proponowana prawda w trakcie oceny. Stwierdzenie jest zapisane, ale może się zmienić:
- id: GT-MAG-044
status: tentative
statement: |
get_file with include_metadata=false may still return metadata in the
response because middleware may re-inject it for AI agent disambiguation.
Aktualny
Zweryfikowana prawda, której agenci muszą przestrzegać. Dowody zostały zwalidowane:
- id: GT-MAG-017
status: current
last_verified: "2026-01-26"
evidence:
- "packages/maguyva/server/src/maguyva/services/supabase.py"
Przestarzały
Prawda, która już nie ma zastosowania. Zachowana jako odniesienie historyczne ze wskazaniem tego, co ją zastąpiło:
- id: GT-MAG-099
status: deprecated
superseded_by: GT-MAG-015
notes: "Replaced when we moved to explicit matching behavior"
Dlaczego nie zwykła dokumentacja?
Dokumentacja służy innemu celowi. Wyjaśnia. Uczy. Może być niejednoznaczna, może używać kwalifikatorów takich jak „ogólnie” czy „zazwyczaj”.
Ground truths nie mogą być niejednoznaczne. To są asercje. Albo mają zastosowanie, albo nie.
Rozważ tę różnicę:
Dokumentacja: „API zazwyczaj zwraca puste wyniki, gdy symbol nie zostanie znaleziony, choć w niektórych konfiguracjach może być włączone rozmyte dopasowywanie.”
Ground Truth: „Domyślne zachowanie zwraca puste wyniki dla nieistniejących symboli; exact_match=true wymusza ścisłe dopasowywanie i wyłącza wszystkie rozmyte fallbacki.”
Pierwsze jest pomocne dla ludzi uczących się systemu. Drugie jest gotowe do działania dla agentów podejmujących decyzje.
Wskazówki dla agenta: rób i unikaj
Niektóre ground truths zawierają jednoznaczne wskazówki dla agenta:
- id: GT-MAG-022
statement: |
Accuracy fixes must happen at extraction time via production code,
never via validator filters.
agent_guidance:
do:
- "Fix extraction bugs in YAML config, handlers, or tree-sitter queries"
- "Add test cases at the layer where the fix lives"
avoid:
- "Adding validator filters to mask production bugs"
- "Creating test-only workarounds for extraction issues"
To usuwa niejednoznaczność. Agent czytający to wie nie tylko, co jest prawdą, ale jakie działania ta prawda implikuje.
Weryfikacja i utrzymanie
Ground truths wymagają utrzymania. Śledzimy:
- last_verified: kiedy ktoś potwierdził, że stwierdzenie wciąż się utrzymuje
- evidence: pliki, które potwierdzają stwierdzenie (można sprawdzić ich istnienie)
- source: skąd pochodzi prawda (inspekcja CLI, przegląd architektury, wnioski po incydencie)
Ground truth z nieaktualnymi datami weryfikacji lub zerwanymi linkami do dowodów jest sygnałem do zbadania. Albo prawda wciąż jest ważna i wymaga ponownej weryfikacji, albo rzeczywistość się zmieniła i prawda wymaga aktualizacji.
Prawdziwe przykłady z produkcji
Granica bezpieczeństwa
- id: GT-MAG-014
statement: |
Maguyva queries are search patterns, not executable code.
SQL injection prevention is handled by PostgREST parameterization;
application-layer SQL keyword blocking must never be added.
rationale: |
Blocking SQL keywords breaks legitimate code search. Users search FOR
code containing patterns like 'DROP TABLE', they don't execute them.
Ten ground truth zapobiega klasie błędnie pojętych „usprawnień bezpieczeństwa”, które zepsułyby produkt.
Dokładność w czasie ekstrakcji
- id: GT-MAG-022
statement: |
Accuracy fixes must happen at extraction time via production code
(YAML config, handlers, queries), never via validator filters.
rationale: |
Validator filters only run during tests. They can hide extractor bugs
while production responses remain wrong.
To wynikło z bolesnego doświadczenia. Agenci łatali zawodzące pakiety językowe, dodając filtry działające tylko w walidatorze, które sprawiały, że harness testowy wyglądał na bardziej zielony, podczas gdy działający ekstraktor Maguyva wciąż emitował złe krawędzie. Ta zasada zmusza naprawy z powrotem na prawdziwą ścieżkę: konfigurację YAML, zapytania lub handlery.
Filtrowanie wielopoziomowe
- id: GT-MAG-023
statement: |
Language engine uses three-tier filtering: external_method_patterns
(builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets
(validation-time deduplication). Each tier serves a distinct purpose.
rationale: |
Conflating filter purposes leads to either over-filtering (missing real
relationships) or under-filtering (noise).
To zapobiega dodawaniu przez agentów filtrów w niewłaściwym miejscu — częstemu błędowi, który powodował regresje dokładności.
Integracja z systemem orkiestracji
Ground truths to jedna warstwa szerszego systemu kontekstu:
- Decyzje architektoniczne (ADR) - Zapisują, dlaczego wybraliśmy podejście A zamiast B
- Ground Truths - Stwierdzają, co jest jednoznacznie prawdziwe teraz
- Wzorce domenowe - Opisują, jak robić rzeczy poprawnie
- Antywzorce - Opisują, czego unikać i dlaczego
Agent pracujący w systemie ma dostęp do wszystkich czterech. Ground truths dostarczają faktycznej kotwicy, decyzje wyjaśniają historię, wzorce prowadzą implementację, a antywzorce ostrzegają przed pułapkami.
Mierzenie wpływu
Od czasu wprowadzenia ground truths zaobserwowaliśmy:
- Mniej cykli „napraw halucynowaną naprawę”
- Bardziej pewne decyzje agentów, gdy fakty są jasne
- Lepsze przeglądy PR, ponieważ oczekiwania są jednoznaczne
- Skrócony czas wdrażania nowych agentów (i ludzi)
Inwestycja w utrzymanie ground truths zwraca się w postaci mniejszej liczby debugowań i wyraźniejszych granic systemu.
Jak zacząć
Aby dodać ground truth do swojego systemu:
- Utwórz
ground_truths.yamlw kataloguai_assets/reference/swojego pakietu - Zdefiniuj metadane i konfigurację renderowania
- Dodaj stwierdzenia zgodnie ze schematem
- Uruchom
uv run orkestra sync, aby wygenerować dokumentację - Uwzględnij rejestr w kompozycji kontekstu agenta
Zacznij od faktów, które powodują najwięcej zamieszania, lub ograniczeń, które są najczęściej łamane. To Twoje najbardziej wartościowe ground truths.
Podsumowanie
Agenci AI będą halucynować. To ich natura. Ale możemy tworzyć środowiska, w których halucynacja jest ograniczona, w których pewne fakty są nienegocjowalne, w których agenci mogą sprawdzić swoje założenia względem zweryfikowanej rzeczywistości.
Ground truths nie są kompletnym rozwiązaniem. Wymagają utrzymania. Mogą stać się nieaktualne. Dodają narzut do procesu rozwoju.
Ale dają coś wartościowego: wspólne słownictwo faktów, któremu ludzie i agenci mogą zaufać. W świecie, w którym agenci coraz częściej uczestniczą w tworzeniu oprogramowania, ten wspólny fundament staje się niezbędny.
Alternatywą są niekończące się cykle agentów popełniających pewne siebie błędy i ludzi je korygujących. Ground truths przerywają ten cykl, czyniąc korekty jednoznacznymi i trwałymi.
Twoi agenci zasługują na to, by wiedzieć, co jest prawdą. Powiedz im.
Powiązane treści
Więcej z dziennika budowy Maguyva
Dlaczego zaktualizowaliśmy wyszukiwanie kodu do voyage-4-large_
Przenieśliśmy nasze embeddingi kodu na voyage-4-large — obecnie na szczycie publicznego rankingu RTEB dla wyszukiwania kodu. Wersja uczciwa: kompromis, na jaki idziemy, co faktycznie indeksujemy i dlaczego płacimy za embeddingi premium.
Rekurencyjne samodoskonalenie językowe: szlifowanie inteligencji kodu w ~280 językach_
Obsługujemy inteligencję kodu dla ~280 języków. Żaden człowiek nie jest w stanie tego ręcznie zweryfikować. Zbudowaliśmy więc pętlę rekurencyjnego samodoskonalenia językowego — wyrywkowa kontrola, LLM jako sędzia, naprawa jednej rzeczy, ponowna walidacja — i uruchamiamy ją z flotą izolowanych agentów, dopóki ekstrakcja nie będzie naprawdę poprawna, a nie tylko zielona.
Wielomodalne wyszukiwanie z fuzją: dobór właściwego retrievera do każdego zapytania_
Zapytanie w stylu „gdzie zdefiniowano parseConfig” potrzebuje innego wyszukiwania niż „jak działa autoryzacja”. Maguyva klasyfikuje intencję, odpowiednio waży cztery tryby wyszukiwania i łączy wyniki za pomocą ważonej Reciprocal Rank Fusion.