Exact Query Saja Tidak Cukup: Field Apa Lagi yang Dibutuhkan untuk Replay?
Exact query adalah pusat replay, tetapi bukan seluruh kondisi eksperimen. Pertanyaan yang sama dapat menghasilkan jawaban berbeda karena engine, surface, model, mode, lokasi, waktu, bahasa, status login, history, tool configuration, dan perubahan web.
Jika observation record hanya menyimpan query, replay berubah menjadi tebak-tebakan.
Field yang dibutuhkan tidak harus semuanya tersedia. Prinsipnya adalah mencatat apa yang diketahui, membedakan unknown dari default, dan tidak mengarang parameter yang tidak diekspos.
1. Identitas observasi
Simpan observation_id yang unik dan tidak berubah. Tambahkan project_id, query_id, run_id, batch_id, dan parent_observation_id bila replay mengacu pada run sebelumnya.
Gunakan created_at dan captured_at terpisah. Record dapat dibuat setelah capture.
Status memuat valid, corrected, retracted, superseded, disputed, atau incomplete.
Identity layer memudahkan lineage dan correction.
2. Exact query dan konteks
Simpan raw_query persis seperti dikirim, termasuk ejaan, kapitalisasi, tanda baca, URL, dan line break.
Tambahkan normalized_query untuk clustering, tetapi jangan menimpa raw.
Simpan query_language, intended_locale, query_intent, branded_status, dan topic cluster sebagai interpretation fields.
Untuk multi-turn, simpan relevant_history dan turn_number. Query “bandingkan lagi” tidak dapat direplay tanpa konteks sebelumnya.
Jika ada attachment, image, atau file, simpan reference, hash, dan version sesuai kebijakan. Exact text saja tidak cukup.
3. Provider, product, dan surface
Simpan provider, product, surface, interface, dan access channel.
ChatGPT Search, ChatGPT agent, OpenAI API web search, dan deep research bukan surface yang sama. Gemini app, Google AI Overview, serta AI Mode juga berbeda.
Nama umum “OpenAI” atau “Google” terlalu kasar untuk replay.
Tambahkan app_version atau UI_version jika terlihat. Jika tidak, tandai unavailable.
4. Model dan mode
Simpan model_label yang ditampilkan. Jangan menebak model identifier internal.
Catat mode seperti search, reasoning, deep research, agent, atau standard chat. Catat web_enabled, citations_enabled, dan tool_choice bila diketahui.
Jika platform memilih model otomatis, simpan auto. Jangan mengganti dengan asumsi model populer saat itu.
Model deprecation dapat membuat replay historis tidak mungkin. Record tetap berguna untuk comparison.
5. Waktu
Simpan timestamp dalam UTC dengan offset source, lalu local representation seperti WIB jika dibutuhkan.
Tambahkan start_time, end_time, duration, dan observation_window.
Untuk breaking news, menit penting. Untuk evergreen query, hari mungkin cukup dalam laporan, tetapi raw data sebaiknya tetap presisi.
Simpan date of source access dan answer capture separately.
6. Lokasi dan bahasa
Simpan country, region, city bila diketahui dan relevan. Bedakan declared_location, device_location, IP-inferred location, dan test_environment location.
Jangan mengklaim koordinat bila tidak tersedia.
Simpan interface_language, prompt_language, response_language, dan browser locale. Keempatnya dapat berbeda.
Untuk query lokal, timezone dan location menjadi variabel utama.
7. Session state
Simpan logged_in, logged_out, incognito, cookie_state, new_session, continued_session, dan account_type bila aman serta relevan.
History, memory, enterprise settings, atau connected apps dapat memengaruhi hasil. Catat enabled atau unknown tanpa menyimpan data pribadi yang tidak diperlukan.
Jika eksperimen memakai akun berbeda, gunakan anonymized account_id.
“Logged out” bukan sinonim “tanpa personalisasi”.
8. Perangkat dan lingkungan
Simpan device_type, operating_system, browser, viewport, app, dan network region bila relevan.
Antarmuka mobile dapat menampilkan source berbeda secara visual. Screenshot comparison perlu viewport.
Catat ad blocker, privacy extension, dan VPN bila dapat memengaruhi request. Jangan mengumpulkan daftar software pengguna yang tidak perlu.
9. Tool configuration
Untuk API atau controlled environment, simpan tool name, tool version, allowed domains, blocked domains, max uses, search context size, user location, response format, temperature atau sampling parameter bila diekspos, dan system instruction hash.
Untuk product UI, sebagian field unknown. Simpan sebagai unknown, bukan kosong.
Dynamic filtering, web fetch, dan web search dapat mengubah apa yang masuk ke context. Tool version penting.
10. Retrieval trace
Jika tersedia, simpan search queries yang dijalankan, urutan tool call, result count, URLs, titles, snippets, passages, rank atau display order, error, timeout, dan filter.
Jangan menganggap prompt sama dengan tool query.
Jika trace tidak diekspos, field retrieval_trace_available bernilai false.
Simpan raw dan normalized URL. Tambahkan registrable domain, publisher entity, canonical, content type, dan redirect chain.
11. Jawaban
Simpan raw_answer dengan citation markers, structured output bila ada, stop reason, refusal, error, dan token usage bila tersedia.
Buat normalized_answer untuk analysis. Jangan menghapus raw.
Pecah claim units, entity mentions, relations, recommendations, numbers, dates, and limitations.
Simpan answer_length dan structure label, tetapi jangan menganggap panjang sebagai kualitas.
12. Citation
Untuk setiap citation, simpan citation_id, claim_id, displayed_url, display_type, placement, source title, passage, publication date, accessed_at, support status, dan interpretation status.
Bedakan inline citation, source panel, supporting link, image source, video source, dan navigational link.
Satu link dapat mendukung banyak klaim. Gunakan relation table.
13. Evidence capture
Simpan screenshot, screen recording, exported response, log, atau PDF sesuai kebutuhan dan privacy policy.
Berikan hash, mime type, capture method, crop status, dan storage reference.
Screenshot terpotong perlu label. Jangan menggunakannya untuk menyatakan source list lengkap.
14. Review
Simpan reviewer_id, review_time, confidence, severity, limitation, disagreement, dan adjudication.
Confidence bukan probability kebenaran. Ia menunjukkan kekuatan bukti sesuai rubric.
Pisahkan automated extraction dan human validation.
15. Replay relation
Replay record membutuhkan original_observation_id, replay_reason, matched_fields, changed_fields, method_version, dan elapsed_time.
Simpan comparison results: query match, source overlap, claim overlap, entity relation change, citation mapping, framing, dan conclusion stability.
Jangan menimpa original.
16. External events
Hubungkan press release, website update, regulation, news, outage, model release, UI change, atau data-source change yang relevan.
Simpan event_id dan evidence. Kedekatan waktu bukan causation, tetapi context penting.
17. Missingness
Nilai unavailable, unknown, not_applicable, not_captured, dan redacted berbeda.
Kosong dapat berarti banyak hal. Gunakan missing_reason.
Jika field tidak tersedia karena product UI tidak mengeksposnya, jangan memberi nilai default API.
18. Privacy dan governance
Simpan data minimum. Redact prompt yang mengandung personal information. Pisahkan secret, token, dan credential dari record.
Tentukan retention, access control, legal basis, dan deletion policy. Replayability tidak membenarkan penyimpanan data sensitif tanpa batas.
Jika evidence harus dihapus, pertahankan tombstone dan alasan sesuai policy.
Minimum viable replay record
Jika semua field tidak memungkinkan, minimum yang masih berguna mencakup observation_id, exact query, relevant history, provider, product, surface, model label, mode, timestamp dengan timezone, lokasi, bahasa, session state, answer utuh, displayed citations, screenshot, dan limitation.
Untuk API, tambahkan tool configuration dan request payload yang telah dibersihkan dari secret.
Untuk high-stakes claim, minimum tersebut belum tentu cukup. Tambahkan source passage dan reviewer.
Replay grade
Berikan grade berdasarkan completeness.
Grade A: input, environment, tool, retrieval, answer, citation, evidence, dan review lengkap.
Grade B: input dan output lengkap, sebagian retrieval tidak tersedia.
Grade C: query, timestamp, surface, answer, dan screenshot tersedia, tetapi parameter penting hilang.
Grade D: hanya screenshot atau ringkasan.
Grade tidak menilai benar atau salah. Ia menilai kemampuan replay.
Validation rules sebelum record diterima
Schema perlu guardrail. Timestamp harus memiliki timezone. Exact query tidak boleh kosong. Surface harus berasal dari controlled vocabulary. Jika citation_count lebih dari nol, minimal satu citation relation harus ada. Jika logged_in bernilai true, account context tidak boleh kosong tanpa missing reason.
Cross-field validation juga penting. Mode web_disabled tidak boleh memiliki retrieval trace kecuali trace berasal dari tool lain yang dijelaskan. Screenshot capture time tidak boleh lebih awal dari run start. Response language detector dapat berbeda dari declared language, tetapi discrepancy harus ditandai, bukan ditolak otomatis.
Gunakan uniqueness constraint pada provider, surface, run identifier, dan timestamp bila platform menyediakan identifier. Hash jawaban saja tidak cukup karena respons identik dapat terjadi pada run berbeda.
Untuk URL, validasi scheme dan simpan redirect. Untuk source date, bedakan publication_date, modified_date, dan observed_date. Jangan mengisi publication date dari search snippet tanpa provenance.
Required field dapat berbeda per surface. Product UI tidak boleh gagal hanya karena API-only parameter tidak tersedia. Gunakan profile schema: core, UI extension, API extension, agent extension, dan analytics extension.
Sebelum batch ditutup, jalankan completeness report. Tampilkan missing fields per reason, bukan hanya persentase. Seratus field unknown karena platform tidak mengeksposnya berbeda dari seratus field yang lupa dicatat reviewer.
Contoh limitation
“Exact query, session state, location, interface language, timestamp, answer, dan citation tersedia. Model internal dan tool queries tidak diekspos oleh product UI. Replay dapat menyamakan input visible, tetapi tidak menjamin retrieval condition identik.”
Kalimat itu lebih jujur daripada “pengujian telah direplikasi penuh”.
Mengapa schema perlu version
Platform berubah dan field baru muncul. Bing menambah Intents dan Topics. Google meluncurkan generative AI performance report. Anthropic memperbarui tool versions. OpenAI mengubah surface.
Schema_version menunjukkan field apa yang tersedia saat capture. Migration tidak boleh mengarang nilai historis.
Jika field baru tidak dapat diisi untuk record lama, gunakan not_captured_historical.
Exact query tetap field paling penting karena ia menjaga pertanyaan. Namun replay membutuhkan kondisi yang mengubah bagaimana pertanyaan itu diproses, sumber apa yang ditemukan, dan jawaban apa yang ditampilkan.
Satu baris query tanpa surface, waktu, sesi, dan evidence bukan eksperimen yang dapat diulang. Ia hanya pengingat bahwa seseorang pernah bertanya sesuatu.
Field yang lengkap juga tidak menjamin replay identik. Ia menjamin perbedaan dapat dibaca dengan lebih sedikit tebakan. Itu target yang realistis untuk sistem yang model, indeks, dan web-nya terus berubah.
Mulai dari core schema, uji pada beberapa surface, lalu tambahkan extension. Schema raksasa yang tidak pernah diisi sama buruknya dengan spreadsheet dua kolom. Nilai field harus lahir dari keputusan yang akan dibuat.
Jika satu field tidak pernah dipakai dalam audit, review manfaat dan biaya penyimpanannya. Jika satu limitation terus muncul, pertimbangkan apakah metode perlu diubah. Replay schema adalah produk observasi yang perlu dirawat, bukan formulir sekali jadi.
Rawatlah.
Kontrol negatif
Sertakan query kontrol yang tidak menyebut entitas utama, query dengan formulasi netral, dan query yang sengaja memperjelas ambiguitas. Kontrol negatif membantu menunjukkan apakah hasil dipicu oleh wording atau memang bagian dari pola yang lebih luas. Pada Exact Query Saja Tidak Cukup: Field Apa Lagi yang Dibutuhkan untuk Replay, kontrol juga dapat memakai entitas pembanding yang kategori dan skala informasinya serupa. Jika hanya target utama yang diuji, setiap perubahan terasa istimewa. Pembanding mengembalikan konteks dan menurunkan risiko overclaim.