Ground Truths: Menambatkan Agen AI ke Realitas
> Agen AI berhalusinasi dengan percaya diri. Ground truths adalah fakta yang terversi dan bercakupan jelas yang menambatkan perilaku agen ke realitas. Berikut cara kami membangun dan menegakkannya.
Angka dalam tulisan ini mencerminkan sistem pada saat publikasi (Januari 2026). Lihat halaman tim kami untuk angka terkini.
Agen AI sangat kapabel. Mereka bisa bernalar, mensintesis, dan menghasilkan. Tetapi mereka punya kelemahan mendasar: mereka mengarang-ngarang. Bukan dengan niat jahat, tetapi dengan percaya diri. Seorang agen bisa saja mengarang parameter API yang tidak ada, merujuk konfigurasi yang tidak pernah didefinisikan, atau menerapkan pola dari data pelatihannya yang bertentangan dengan arsitektur Anda yang sebenarnya.
Mitigasi standarnya adalah “beri agen lebih banyak konteks.” Tetapi konteks bisa saling bertentangan. Dokumentasi melenceng dari implementasi. Komentar bisa berbohong. Bahkan kode pun bisa menyesatkan jika dibaca tanpa memahami maksudnya.
Kami butuh sesuatu yang lebih eksplisit. Sesuatu yang tidak bisa diabaikan atau disalahtafsirkan. Sesuatu yang menambatkan agen ke realitas yang bisa diverifikasi.
Kami menyebutnya Ground Truths.
Apa itu Ground Truth?
Sebuah ground truth adalah pernyataan fakta yang eksplisit dan terversi yang harus dihormati oleh agen. Ini bukan dokumentasi. Ini bukan komentar. Ini adalah entitas kelas satu dalam sistem dengan:
- Sebuah identifier unik (seperti
GT-MAG-015atauGT-MAG-036) - Sebuah status lifecycle (current, tentative, atau deprecated)
- Sebuah scope (platform-wide, package-specific, atau domain-bound)
- Bukti (path file, URL, atau referensi yang membuktikan pernyataan tersebut)
- Panduan agen (instruksi do/avoid yang eksplisit)
Berikut contoh dari platform kecerdasan kode Maguyva kami:
- 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
Ini bukan prosa. Ini kontrak. Ketika seorang agen menjumpai ground truth ini, ia tahu:
- Default-nya deterministik (hasil kosong, bukan tebakan yang samar)
- Ada parameter spesifik (
find_similar,exact_match) dengan perilaku yang terdefinisi - Bukti ada di file-file spesifik yang bisa diverifikasi
- Pernyataan ini diverifikasi pada tanggal tertentu
Anatomi Registry Ground Truth
Ground truth hidup dalam registry YAML di bawah ai_assets/reference/ground_truths.yaml. Setiap package atau domain bisa punya registry-nya sendiri. Strukturnya adalah:
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..."
...
Registry mencakup metadata tentang koleksinya sendiri, konfigurasi render untuk generasi dokumentasi, dan pernyataan-pernyataannya sendiri. Setiap pernyataan mengikuti skema ketat yang divalidasi oleh model 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
Bagaimana Agen Mengakses Ground Truth
Ground truth diekspos lewat beberapa jalur:
1. Dokumentasi Ter-render
Perintah orkestra sync mengubah registry YAML menjadi markdown yang bisa dibaca:
uv run orkestra sync
Ini menghasilkan file GROUND_TRUTHS.md yang disertakan dalam konteks agen. Output ter-render mengelompokkan pernyataan berdasarkan status dan kategori:
## 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. Pencarian CLI
Agen dengan akses shell bisa mencari ground truth secara terprogram:
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
Fungsi pencarian menilai kecocokan di berbagai field dengan relevansi berbobot:
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. Komposisi Konteks
Ketika agen di-render dari definisi YAML, konteks mereka bisa merujuk ke registry ground truth:
context_composition:
domain_knowledge:
- packages/maguyva/ai_assets/reference/ground_truths.yaml
Ini memastikan ground truth yang relevan dimuat sebelum agen mulai bekerja.
Kategori Ground Truth
Melihat ke seluruh registry kami, ground truth mengelompok ke dalam beberapa pola:
Prinsip Produk
Batasan tentang apa yang menjadi dan bukan produk ini:
“Maguyva bersifat read-only terhadap repositori pengguna; satu-satunya aset yang tidak bisa dibangun ulang adalah cache embedding berbayar.” (GT-MAG-001)
Batas Arsitektur
Di mana tanggung jawab berada dan mengapa:
“Batas antara pipeline dan Maguyva itu disengaja: pipeline dapat digunakan ulang, Maguyva memegang logika spesifik-kode, dan CQRS memisahkan penulisan stage dari pembacaan server.” (GT-MAG-006)
Aturan Anti-Halusinasi
Mandat eksplisit yang menjaga kontrak tool tetap deterministik, bukan hasil inferensi:
“Pencocokan simbol fuzzy bersifat opt-in lewat
find_similar=true. Perilaku default mengembalikan hasil kosong untuk simbol yang tidak ada;exact_match=truemenegakkan pencocokan ketat dan menonaktifkan semua fallback fuzzy.” (GT-MAG-015)
Quality Gate
Standar yang harus dipertahankan:
“Perubahan pada infrastruktur bersama (post_filters.py, ekstraktor relasi, handler bersama) HARUS divalidasi terhadap SEMUA bahasa yang didukung lewat generasi full manifest sebelum commit. Validasi satu bahasa saja tidak cukup untuk kode bersama.” (GT-MAG-036)
Pola Kode
Persyaratan implementasi:
“Gunakan
asyncio.to_thread()untuk pekerjaan CPU-bound dalam konteks async; polaloop.run_in_executor()yang sudah usang tidak boleh dipakai di kode baru.” (GT-MAG-018)
Siklus Hidup Sebuah Ground Truth
Ground truth tidak statis. Mereka berevolusi lewat siklus hidup yang terdefinisi:
Tentative
Sebuah truth yang diusulkan dan sedang dievaluasi. Pernyataannya tercatat tetapi bisa berubah:
- 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.
Current
Sebuah truth terverifikasi yang harus dihormati agen. Buktinya sudah divalidasi:
- id: GT-MAG-017
status: current
last_verified: "2026-01-26"
evidence:
- "packages/maguyva/server/src/maguyva/services/supabase.py"
Deprecated
Sebuah truth yang tidak berlaku lagi. Disimpan untuk referensi historis dengan penunjuk ke apa yang menggantikannya:
- id: GT-MAG-099
status: deprecated
superseded_by: GT-MAG-015
notes: "Replaced when we moved to explicit matching behavior"
Mengapa Bukan Sekadar Dokumentasi?
Dokumentasi punya tujuan yang berbeda. Ia menjelaskan. Ia mengajarkan. Ia boleh samar, boleh memakai kata seperti “umumnya” atau “biasanya.”
Ground truth tidak boleh samar. Mereka adalah pernyataan tegas. Mereka berlaku atau tidak berlaku, titik.
Pertimbangkan perbedaannya:
Dokumentasi: “API umumnya mengembalikan hasil kosong ketika sebuah simbol tidak ditemukan, meski pencocokan fuzzy bisa diaktifkan pada beberapa konfigurasi.”
Ground Truth: “Perilaku default mengembalikan hasil kosong untuk simbol yang tidak ada; exact_match=true menegakkan pencocokan ketat dan menonaktifkan semua fallback fuzzy.”
Yang pertama membantu manusia mempelajari sistem. Yang kedua bisa langsung ditindaklanjuti oleh agen yang mengambil keputusan.
Panduan Agen: Do dan Avoid
Beberapa ground truth menyertakan panduan agen yang eksplisit:
- 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"
Ini menghilangkan ambiguitas. Seorang agen yang membaca ini tahu bukan hanya apa yang benar, tetapi juga tindakan apa yang tersirat dari kebenaran itu.
Verifikasi dan Pemeliharaan
Ground truth membutuhkan pemeliharaan. Kami melacak:
- last_verified: Kapan seseorang mengonfirmasi pernyataan ini masih berlaku
- evidence: File-file yang membuktikan pernyataan tersebut (bisa diperiksa keberadaannya)
- source: Dari mana truth ini berasal (inspeksi CLI, tinjauan arsitektur, pembelajaran pasca-insiden)
Sebuah ground truth dengan tanggal verifikasi yang basi atau tautan bukti yang rusak adalah sinyal untuk diselidiki. Entah truth-nya masih valid dan butuh verifikasi ulang, atau realitasnya sudah berubah dan truth-nya perlu diperbarui.
Contoh Nyata dari Produksi
Batas Keamanan
- 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.
Ground truth ini mencegah sekelompok “perbaikan keamanan” yang keliru arah yang justru akan merusak produk.
Akurasi Saat Ekstraksi
- 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.
Ini lahir dari pengalaman yang menyakitkan. Agen pernah menambal language pack yang gagal dengan menambahkan filter yang hanya berlaku di validator, yang membuat test harness terlihat lebih hijau, sementara Maguyva extractor yang sesungguhnya di produksi tetap mengemisikan edge yang salah. Aturan ini memaksa perbaikan kembali ke jalur sungguhan: config YAML, query, atau handler.
Filtering Multi-Tier
- 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).
Ini mencegah agen menambahkan filter di tempat yang salah, sebuah kesalahan umum yang menyebabkan regresi akurasi.
Integrasi dengan Sistem Orkestrasi
Ground truth adalah satu lapisan dari sistem konteks yang lebih luas:
- Keputusan Arsitektur (ADR) - Mencatat mengapa kami memilih pendekatan A daripada B
- Ground Truths - Menyatakan apa yang secara definitif benar saat ini
- Domain Patterns - Menjelaskan bagaimana melakukan sesuatu dengan benar
- Anti-Patterns - Menjelaskan apa yang harus dihindari dan mengapa
Seorang agen yang bekerja dalam sistem punya akses ke keempatnya. Ground truth menyediakan jangkar faktual, sementara decision menjelaskan sejarah, pattern memandu implementasi, dan anti-pattern memperingatkan jebakan.
Mengukur Dampak
Sejak memperkenalkan ground truth, kami telah mengamati:
- Lebih sedikit siklus “perbaiki perbaikan yang berhalusinasi”
- Pengambilan keputusan agen yang lebih percaya diri ketika fakta sudah jelas
- Tinjauan PR yang lebih baik karena ekspektasinya eksplisit
- Waktu onboarding yang lebih singkat untuk agen baru (dan manusia baru)
Investasi dalam memelihara ground truth terbayar lewat debugging yang berkurang dan batas sistem yang lebih jelas.
Memulai
Untuk menambahkan sebuah ground truth ke sistem Anda:
- Buat sebuah
ground_truths.yamldi direktoriai_assets/reference/milik package Anda - Definisikan metadata dan konfigurasi render
- Tambahkan pernyataan yang mengikuti skema
- Jalankan
uv run orkestra syncuntuk menghasilkan dokumentasi - Sertakan registry-nya dalam komposisi konteks agen
Mulailah dari fakta-fakta yang paling sering menimbulkan kebingungan atau batasan yang paling sering dilanggar. Itulah ground truth Anda yang paling bernilai.
Kesimpulan
Agen AI akan berhalusinasi. Itu sudah sifat dasarnya. Tetapi kita bisa menciptakan lingkungan tempat halusinasi itu dibatasi, tempat fakta-fakta tertentu tidak bisa dinegosiasikan, tempat agen bisa memeriksa asumsi mereka terhadap realitas yang terverifikasi.
Ground truth bukan solusi yang lengkap. Mereka butuh pemeliharaan. Mereka bisa menjadi basi. Mereka menambah overhead pada proses pengembangan.
Tetapi mereka menyediakan sesuatu yang berharga: sebuah kosakata fakta bersama yang bisa dipercaya baik oleh manusia maupun agen. Di dunia tempat agen semakin banyak berpartisipasi dalam pengembangan perangkat lunak, fondasi bersama itu menjadi esensial.
Alternatifnya adalah siklus tanpa akhir dari agen yang membuat kesalahan dengan percaya diri dan manusia yang mengoreksinya. Ground truth memutus siklus itu dengan membuat koreksi-koreksi itu eksplisit dan bertahan lama.
Agen Anda berhak tahu apa yang benar. Beri tahu mereka.
Bacaan terkait
Lebih banyak dari build log Maguyva
Mengapa Kami Meningkatkan Pencarian Kode ke voyage-4-large_
Kami memindahkan embedding kode kami ke voyage-4-large — saat ini teratas di papan peringkat retrieval kode RTEB publik. Versi jujurnya: trade-off yang kami ambil, apa yang sebenarnya kami indeks, dan mengapa kami membayar untuk embedding premium.
Language Recursive Self-Improvement: Menggrind Kecerdasan Kode di ~280 Bahasa_
Kami mendukung kecerdasan kode untuk ~280 bahasa. Tidak ada manusia yang bisa mengaudit itu secara manual. Jadi kami membangun loop language recursive self-improvement — spot-check, LLM-as-judge, perbaiki satu hal, validasi ulang — dan menjalankannya dengan sepasukan agen terisolasi sampai ekstraksinya benar-benar tepat, bukan sekadar hijau.
Multi-Modal Fusion Search: Memilih Retriever yang Tepat untuk Setiap Kueri_
Kueri seperti 'di mana parseConfig didefinisikan' menginginkan pencarian yang berbeda dari 'bagaimana auth bekerja'. Maguyva mengklasifikasikan intent, memberi bobot pada empat modalitas retrieval sesuai kebutuhannya, lalu menggabungkan hasilnya dengan weighted Reciprocal Rank Fusion.