Kılavuzlar
Node'dan değerlendirme
Node SDK'sı sisteminizi ve değerlendiricilerini Node'da, kendi test çalıştırıcınızın içinde çalıştırır ve puanları karar veren Python motoruna teslim eder. Bir TypeScript ekibi kodunu, fixture'larını ve test çalıştırıcısını korur; her aralık, karşılaştırma ve karar motorun işi olarak kalır ve SDK bunların hiçbirini, bir ortalamayı bile hesaplamaz.
Kurulum
npm install --save-dev @oloproof/sdk
pip install oloproofİlk satır SDK'dır, ikincisi ise SDK'nın puanları teslim ettiği motordur (Python 3.11 ya da üzeri). SDK, oloproof komutunu PATH'inizde bulur; orada değilse durur ve nasıl kurulacağını söyler.
Bir sistemi bir testte puanlama
Bir paket, motorun okuduğu aynı JSON Lines dosyasıdır (Paket yazma): satır başına bir vaka, her biri bir id ile. evaluate fonksiyonuna paketi, sistemi ve ölçüt başına bir değerlendirici verin:
import { test } from "vitest";
import { type Case, decide, evaluate } from "@oloproof/sdk";
import { answer, rateHelpfulness } from "./support-bot.js";
type SupportCase = Case<{ question: string }, { label: string }>;
type Answer = { label: string; text: string };
test("the support bot is good enough to release", async () => {
const scored = await evaluate<SupportCase, Answer>({
suitePath: "data/support.jsonl",
system: (testCase) => answer(testCase.input.question),
evaluators: {
exact_label: (output, testCase) => ({ passed: output.label === testCase.expected?.label }),
helpfulness: {
scale: [0, 1],
judge: "gpt-4o-mini",
evaluate: async (output, testCase) => ({ score: await rateHelpfulness(output, testCase) }),
},
},
concurrency: 8,
out: "scores/candidate.jsonl",
});
console.log(scored.counts);
}, 600_000);Bir değerlendirici, isteğe bağlı bir reason ile birlikte { passed } ya da { score } döndürür. Bir fonksiyon geçti ya da kaldı kararı verir; puan veren bir değerlendirici kendi scale değerini bildirir, çünkü bir ortalama üzerindeki aralık yalnızca puanlar okunmadan önce bilinen bir aralığın içinde geçerlidir. Hakemliği bir model yaptıysa judge alanında onun adını verin: motor bu durumda onu, bir sürüme kapı denetimi uygulayabilmeden önce insanlara karşı denetlenecek bir hakem olarak ele alır (Hakemler).
concurrency, aynı anda kaç vakanın çalıştığını sınırlar (varsayılan olarak dört). Puan dosyası vakaları, hangi sırayla bitmiş olurlarsa olsunlar, paketin verdiği sırayla listeler.
Kararı motora bırakın
const decided = await decide({
scores: "scores/candidate.jsonl",
baseline: "scores/baseline.jsonl",
policy: "release.yaml",
});
console.log(decided.exit, decided.comparison?.gate?.decisions);decide, sizin yazacağınız komutları cwd olarak verilen dizinde (varsayılan olarak geçerli dizinde) çalıştırır:
oloproof scores import scores/baseline.jsonl scores/candidate.jsonl --tool node
oloproof compare RUN_ID BASELINE_RUN_ID --policy release.yaml --jsonBir temel varsa motor iki çalıştırmayı vaka vaka karşılaştırır ve decided.comparison, oloproof compare --json komutunun yazdırdığı kayıttır. Temel yoksa decide, içe aktarılan çalıştırma üzerinde oloproof gate komutunu çalıştırır ve yazdırdığı şeyi decided.decision.stdout içinde döndürür. Her iki durumda da decided.exitCode motorun çıkış kodudur, değiştirilmeden, ve decided.exit onun adıdır: EXIT_CODES, CI'da çalıştırma sayfasının listelediği gibi her adı motorun değerine eşler.
Dosyanın içerdikleri
Dosya, oloproof scores import komutunun okuduğu dosyadır (İkinci bir görüş): vaka ve ölçüt başına bir satır, yalnızca vaka kimlikleri ve puanlar. Bir yanıt, bir girdi ya da bir reason asla ona girmez; bunlar Node'da, scored.results içinde kalır.
- Sistemi hata fırlatan bir vaka her ölçütte boş bir değerle, değerlendiricisi hata fırlatan bir vaka ise o ölçütte boş bir değerle yazılır. Motor her birini eksik sayar ve en kötü değerinde sınırlar; böylece bir hata kanıttan kaybolmak yerine kanıtın gösterebileceğini düşürür. scored.errors her birini mesajıyla listeler.
- Dosyanın taşıyamayacağı bir karar, çalıştırmayı bir hatayla durdurur ve hiçbir şey yazmaz: ölçeği olmayan ya da ölçeğinin dışında kalan bir puan, hem bir puan hem de bir geçti, ya da motorun bir metrik olarak adlandıramadığı bir ölçüt.
- Her dosya, içeriğiyle tanımlanan bir sistem sürümüdür; bu yüzden aynı dosyayı yeniden içe aktarmak motorun sakladığını yeniden kullanır.
Motoru kurmadan
secondOpinion, iki puan dosyasını hiçbir şey kurmadan "bu gerçek mi?" sorusunu yanıtlayan barındırılan sayfaya gönderir ve motorun yanıtını yazdığı haliyle döndürür:
import { secondOpinion } from "@oloproof/sdk";
const result = await secondOpinion({
baseUrl: "https://oloproof.com",
baseline: "scores/baseline.jsonl",
candidate: "scores/candidate.jsonl",
});
if (result.ok) console.log(result.opinion.answers);
else console.log(result.error, result.description);Sayfa hiçbir şey saklamaz ve hesap gerektirmez. Dosya başına en fazla 2 MB okur ve istemci başına sınırlanır; bir ret, değiştirilecek satırı belirten motor cümlesini döndürür.
Neler yapılmadı
- @oloproof/sdk paketini npm'de yayımlamak. Yayımlanana kadar onu depodaki packages/sdk dizininden derleyin.
- Node'da herhangi bir türde istatistik, tasarım gereği: SDK puanları yazar ve motorun yanıtını okur.
- Paketinizdeki bir group_id ya da time_order, yalnızca vaka kimliklerini ve puanları okuyan içe aktarmaya taşınmaz; bu yüzden motor vakaları bağımsız olarak okur.
Sonra nereye
- İkinci bir görüş: dosya biçimi ve bir karşılaştırmanın neyi yanıtladığı.
- CI'da kapı denetimi: decide fonksiyonunun motora ilettiği sürüm politikası.
- Python API'si: aynı değerlendirme, motorun kendisi tarafından çalıştırılır.