Langsung ke konten

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:

KolomIsinya
case_idId kasus. Dua file hanya berpasangan pada id yang dimiliki keduanya
criterionNama metrik, yang menjadi metrik yang disebut oleh sebuah aturan
scoreAngka pada skala metrik, atau kosong jika tool tidak menilai kasus itu
passedtrue atau false sebagai pengganti skor, atau kosong
score_min, score_maxSkala tempat sebuah skor berada (0 dan 1 untuk sebagian besar tool), wajib untuk sebuah skor
judge, judge_versionModel 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-opinion

Contoh 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.yaml
faithfulness: +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_zero

Di 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 NAME

Sampel 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.

ToolResepApa yang mengidentifikasi sebuah kasus di dua eksekusiCatatan
DeepEvaldeepeval_results.py RESULTS_JSON OUTname dari test caseSimpan hasil dengan DisplayConfig(results_folder=...) dan beri nama setiap LLMTestCase. Setiap metrik memberikan skornya dan lulus atau gagalnya sebagai <metric>_passed, beserta model juri
Braintrustbraintrust_experiment.py PROJECT EXPERIMENT OUTRecord dataset yang dijalankan eksperimen (origin.id)Skor dari 0 sampai 1; --judge menyebut model jika satu model menilai semuanya
LangSmithlangsmith_experiment.py EXPERIMENT OUT --scale LOW HIGHContoh dataset (reference_example_id)Skor true atau false menjadi lulus atau gagal; angka memerlukan skalanya
Langfuselangfuse_experiment.py EXPERIMENT SINCE OUTItem 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