Panduan
Pendapat kedua atas skor dari tool lain
Skor eval Anda naik. Apakah itu nyata? Dan dapatkah Anda memercayai juri yang mengukurnya? Jika Anda sudah mengevaluasi dengan tool lain, ekspor hasil per kasusnya sebelum dan sesudah sebuah perubahan, dan Oloproof menjawab kedua pertanyaan itu atas hasil tersebut tanpa menjalankan apa pun lagi.
Apa yang dibacanya
Satu file per versi sistem, CSV atau JSON Lines, dengan satu baris per kasus dan kriteria:
| Kolom | Isinya |
|---|---|
| case_id | Id kasus. Dua file hanya berpasangan pada id yang dimiliki keduanya |
| criterion | Nama metrik, yang menjadi metrik yang disebut oleh sebuah aturan |
| score | Angka pada skala metrik, atau kosong jika tool tidak menilai kasus itu |
| passed | true atau false sebagai pengganti skor, atau kosong |
| score_min, score_max | Skala tempat sebuah skor berada (0 dan 1 untuk sebagian besar tool), wajib untuk sebuah skor |
| judge, judge_version | Model yang menilai, jika yang menilai adalah model. Opsional |
Tidak ada hal lain yang dibaca, dan file dengan kolom lain apa pun ditolak: sebuah file berisi id kasus dan skor, tidak pernah pertanyaan, jawaban, atau konten lain apa pun. Resep di bawah ini mengubah hasil setiap tool menjadi file ini.
Menjalankannya
oloproof init --example second-opinion second-opinion
cd second-opinionContoh ini berisi dua ekspor faithfulness sebuah asisten dukungan pada 150 pertanyaan, sebelum dan sesudah perubahan prompt, sebagaimana dinilai oleh juri tool lain: skor dari 0 sampai 1, dan lulus atau gagalnya pada 0.7. make_exports.py adalah simulasi yang menuliskannya. Skor rata-rata naik sekitar 0.02.
oloproof scores import before.csv after.csv --policy release.yamlfaithfulness: +0.023 [-0.024, +0.068] · 150 paired · 0 missing · 0 excluded
faithfulness_passed: +5.3 points [-6.9, +18.0] · 150 paired · 0 missing · 0 excluded
Decisions
score-went-up faithfulness superiority INSUFFICIENT_EVIDENCE evaluator_not_validated
more-answers-pass faithfulness_passed superiority INSUFFICIENT_EVIDENCE evaluator_not_validated
Gate: BLOCK (exit 3)
score-went-up, more-answers-pass: the judge (or model or custom evaluator) behind these rules has not been measured against people yet, so it may not decide.Setiap file menjadi sebuah eksekusi, dan kedua eksekusi dibandingkan kasus demi kasus. Jawabannya terdiri dari dua bagian.
- Apakah itu nyata? Belum. Skornya naik 0.023, tetapi intervalnya berkisar dari 0.024 lebih rendah sampai 0.068 lebih tinggi: dengan 150 pertanyaan, perubahan sekecil ini tidak dapat dibedakan dari derau. Porsi jawaban yang diluluskan juri naik 5.3 poin, dengan interval dari 6.9 poin lebih rendah sampai 18.0 lebih tinggi.
- Dapatkah Anda memercayai jurinya? Belum ada yang memeriksanya. release.yaml hanya mengizinkan juri memutuskan rilis setelah label dari orang-orang mengukurnya (require_validated_evaluators: true), sehingga kedua aturan berhenti di evaluator_not_validated sebelum mencapai interval.
Untuk melihat bagian pertama saja, seolah-olah juri sudah diperiksa:
oloproof scores import before.csv after.csv --policy statistics-only.yaml score-went-up faithfulness superiority INSUFFICIENT_EVIDENCE interval_overlaps_zero
more-answers-pass faithfulness_passed superiority INSUFFICIENT_EVIDENCE interval_overlaps_zeroDi CI, tambahkan --summary markdown >> "$GITHUB_STEP_SUMMARY": pull request lalu dibuka dengan "Is it real?" dan satu baris per aturan, yang menyebut "not established" beserta alasannya, dan kode keluarnya tetap sama. Baris milik impor itu sendiri masuk ke standard error, sehingga ringkasan hanya menerima jawabannya (CI).
Tanpa --policy, perintah ini melaporkan perbandingan dan tidak memutuskan apa pun. Dengan satu file, perintah ini melaporkan eksekusi itu, dan --policy menjadikannya gerbang berdasarkan aturan eksekusi dalam kebijakan.
Memeriksa juri
Orang-orang melabeli sampel acak dari kasus-kasus sebuah eksekusi yang diimpor, secara buta terhadap juri, dan Oloproof mengukur juri terhadap label mereka:
oloproof labels export RUN_ID --criterion faithfulness_passed --sample 60 --out sample.csv
oloproof labels import sample.csv
oloproof evaluators validate EVALUATOR_ID --by NAMESampel menampilkan id setiap kasus dan tidak menampilkan apa pun dari putusan juri. Pelabel membaca kasus di tool yang menyimpannya, berdasarkan id-nya, dan menulis pass atau fail di passed. oloproof evaluators list memberikan id evaluator. Setelah divalidasi, aturan yang membaca juri itu memutuskan berdasarkan bukti saja.
Label berupa lulus atau gagal, sehingga label memeriksa putusan lulus atau gagal sebuah juri, bukan skornya. Impor putusan itu di samping skor, seperti yang dilakukan contoh dengan faithfulness_passed: itulah kriteria yang dapat divalidasi oleh orang-orang.
Dari tool Anda
Folder recipes/ pada contoh berisi satu skrip pendek per tool. Masing-masing membaca hasil tool itu dan menulis file, hanya menyimpan id dan skor. Jalankan satu per versi, lalu impor kedua file.
| Tool | Resep | Apa yang mengidentifikasi sebuah kasus di dua eksekusi | Catatan |
|---|---|---|---|
| DeepEval | deepeval_results.py RESULTS_JSON OUT | name dari test case | Simpan hasil dengan DisplayConfig(results_folder=...) dan beri nama setiap LLMTestCase. Setiap metrik memberikan skornya dan lulus atau gagalnya sebagai <metric>_passed, beserta model juri |
| Braintrust | braintrust_experiment.py PROJECT EXPERIMENT OUT | Record dataset yang dijalankan eksperimen (origin.id) | Skor dari 0 sampai 1; --judge menyebut model jika satu model menilai semuanya |
| LangSmith | langsmith_experiment.py EXPERIMENT OUT --scale LOW HIGH | Contoh dataset (reference_example_id) | Skor true atau false menjadi lulus atau gagal; angka memerlukan skalanya |
| Langfuse | langfuse_experiment.py EXPERIMENT SINCE OUT | Item dataset (experiment_item_id) | Eksperimen Langfuse 5; skor numerik pada rentang konfigurasi skornya, atau --scale |
Resep-resep ini mengikuti SDK setiap tool sebagaimana diterbitkan pada 16 Oktober 2026 (DeepEval 4.3.1, braintrust 0.46.1, langsmith 0.14.11, langfuse 5.0.2) dan diuji pada hasil dengan bentuk tersebut, bukan terhadap akun sungguhan. Tool yang mengganti nama sebuah field merusak resepnya, bukan impornya: file yang ditulis resep itulah kontraknya.
Apa yang harus benar dalam sebuah file
- Kasus yang hanya ada di satu file dianggap hilang di sisi lain, dihitung dan dibatasi pada nilai terburuknya; kasus itu tidak pernah dipasangkan dengan kasus lain.
- Baris kedua untuk satu kasus dan kriteria, skor di luar score_min dan score_max, baris yang berisi skor sekaligus lulus atau gagal, dan kriteria yang berupa skor di satu file tetapi lulus atau gagal di file lain akan ditolak, dengan menyebut barisnya.
- File yang dibandingkan harus sepakat pada skala dan juri setiap kriteria: skor dari dua juri adalah dua instrumen, dan selisihnya sebagian akan berasal dari instrumen itu.
- Setiap file adalah sebuah versi sistem yang diidentifikasi oleh isinya. Mengimpor file yang sama lagi memakai ulang apa yang telah disimpan; tidak ada yang pernah dieksekusi, sehingga tidak ada eksekusi ulang yang dapat mereproduksi atau mengubah skor yang diimpor.
- --tool merekam asal skor, dan --name menamai sistem setiap file; keduanya disimpan bersama eksekusi.
Apa yang belum dibangun
- Membaca format ekspor milik sebuah tool secara langsung: sebuah resep mengubahnya menjadi file di atas.
- Mengunggah file ke situs yang di-hosting tanpa memasang apa pun.
- Memvalidasi skor juri, alih-alih putusan lulus atau gagalnya.
Langkah selanjutnya
- Membandingkan kandidat dengan baseline: apa yang dibaca oleh perbandingan berpasangan.
- Aturan perbandingan: superioritas, non-inferioritas, dan ekuivalensi.
- Juri: bagaimana juri diukur terhadap orang-orang sebelum boleh menjadi gerbang.