İçeriğe geç

Kılavuzlar

Sıfırdan kendi uygulamanız hakkında bir karara

Soruları yanıtlayan bir Python fonksiyonunuz var ve yayımlanacak kadar iyi olup olmadığını bilmek istiyorsunuz. Üç komut sizi bu fonksiyondan bir yayın kararına götürür, elle tek satır YAML yazmadan: oloproof init --system projeyi fonksiyonunuzun etrafına yazar, oloproof check hiçbir şey harcanmadan önce çalışıp çalışmayacağını söyler ve oloproof run karar verir. Her şey kendi makinenizde, hesap olmadan ve hiçbir model çağrısı yapmadan çalışır.

Aşağıdaki her çıktı, bu komutların gösterilen fonksiyon üzerinde çalıştırılmasından alınmıştır.

1. Fonksiyonunuz

Bir vaka alıp bir yanıt döndüren herhangi bir fonksiyon. Bu, içe aktardığı bir yardımcı modülle birlikte bot.py:

from prompts import GREETING


def answer(question):
    text = question.lower()
    if "refund" in text:
        reply = "Refunds are available within 30 days of purchase."
    elif "ship" in text:
        reply = "We ship to the US and Canada."
    else:
        reply = "A support agent will follow up within one business day."
    return {"reply": f"{GREETING} {reply}", "topic": "support"}

2. Projeyi onun etrafına yazın

bot.py dosyasını barındıran dizinden:

oloproof init --system bot:answer
Initialized Oloproof project in . around bot:answer
  Each case's input is a string, read from the function's first parameter.

Fill in before a run means anything:
  data/cases.jsonl  3 placeholder cases: give each a real input and, as its expected
                    phrase, words a right answer contains. Add more: see below.
  oloproof.yaml     the check reads the whole answer; if your function returns an
                    object, add `field:` naming the key that holds the text.
  release.yaml      a placeholder bar of 0.80; set the one your release needs.

What this suite can decide, if every case is measured:
  mentions-floor (mentions_expected at least 0.8, 3 cases):
    1 or more pass: INSUFFICIENT_EVIDENCE (not established yet); 0: FAIL
    (ruled out). With 50 cases, PASS from 46; with 100, from 89.

Next: oloproof check, then oloproof run

Referans önce içe aktarılır ve bir fonksiyona çözümlenmedikçe hiçbir şey yazılmaz; modülünüzdeki bir hata burada dosyası ve satırıyla birlikte durur. Fonksiyon çağrılmaz. Üç dosya oluşur: oloproof.yaml (fonksiyonunuz ve bir denetim), data/cases.jsonl (üç yer tutucu vaka) ve release.yaml (eşik). Vakanın girdisi bir dizgedir, çünkü ilk parametrenin adı question; adı case, inputs, row olan ya da dict olarak işaretlenmiş bir parametre bunun yerine bir nesne alır.

Denetim contains: yanıt vakanın beklenen ifadesini içerdiğinde vaka geçer. Deterministik bir denetimdir, bu yüzden karar verebilmeden önce insanlara karşı ölçülmesi gerekmez. Suite rehberi diğer tüm denetimleri ve hakemleri listeler.

3. Vakaları doldurun

Yer tutucuları gerçek sorularla ve doğru bir yanıtın içerdiği kelimelerle değiştirin, her satıra bir vaka:

{"id": "refund_01", "input": "Can I get a refund?", "expected": {"phrase": "30 days"}}
{"id": "ship_01", "input": "Do you ship to Canada?", "expected": {"phrase": "US and Canada"}}
{"id": "other_01", "input": "My order is late", "expected": {"phrase": "follow up"}}

Yukarıdaki tablonun söylediği gibi, üç vaka 0.80 eşiğini geçemez: üç vakayla en iyi sonuç INSUFFICIENT_EVIDENCE olur. Aşağıdaki çalıştırma bunlara benzer 30 vaka kullanır, konu başına on tane; bunlardan 29'unun geçmesi yeterlidir.

4. Çalıştırmadan önce denetleyin

oloproof check

Alan ayarlanmadan önce şunu söyledi:

ok   System: callable bot:answer imports.
ok   Called on case refund_01: it answered {"reply": "Thanks for writing in. Refunds are available within 30 days of purchase.", "topic": "support"}

Evaluators on that answer (one case, not a result):
ok   mentions_expected (contains) can read the answer; it passed this case.
note   It reads the whole answer object; `field:` can name one of reply, topic.

Bu yüzden oloproof.yaml içinde denetimin altına field: reply ekleyin ve yeniden denetleyin:

ok   System: callable bot:answer imports.
ok   Called on case refund_01: it answered {"reply": "Thanks for writing in. Refunds are available within 30 days of purchase.", "topic": "support"}

Evaluators on that answer (one case, not a result):
ok   mentions_expected (contains) can read the answer; it passed this case.

Code: the system's version hashes bot.py, prompts.py. Edit one and the next run calls the system again.

What this suite can decide, if every case is measured:
  mentions-floor (mentions_expected at least 0.8, 30 cases):
    29 or 30 pass: PASS (established); 19 to 28: INSUFFICIENT_EVIDENCE (not
    established yet); 18 or fewer: FAIL (ruled out). With 50 cases, PASS from
    46; with 100, from 89.

CI: no model key is needed for the evaluators. Keys your own function reads are not checked here.

Ready. Next: oloproof run

Her bölümün anlamı:

  • İçe aktarma ve yanıt: Sistem tam olarak oloproof run nasıl kuruyorsa öyle kurulur ve ilk vaka üzerinde çağrılır (--case ID başka birini seçer, --no-call çağrıyı atlar). Bir hata fırlatırsa satır, hatayı ve kodunuzdaki dosya ile satırı belirtir.
  • Değerlendiriciler: Model gerektirmeyen her denetim o tek yanıt üzerinde çalıştırılır. Bulunamayan bir alan, yanıtın sahip olduğu alanlarla birlikte belirtilir. Burada geçmek ya da kalmak tek bir vakadır, bir sonuç değildir. check bir model hakemini asla çağırmaz; bunu söyler ve onu bir çalıştırma çağırır.
  • Kod: İçeriği sistemin sürümünü oluşturan dosyalar: modülü ve içe aktardığı proje modülleri, artı varsa system.code_paths. Sistemi içe aktarırken ya da çağırırken yüklenen ama bunlar arasında olmayan bir proje dosyası (örneğin çalışma anında adıyla içe aktarılan bir modül) karma alınmamış olarak listelenir: onu code_paths içine ekleyin, yoksa ondaki bir değişiklik eski yanıtları yeniden kullanır.
  • Neye karar verebileceği: oloproof plan ile aynı tablo. release.yaml yoksa, bir çalıştırmanın sade sözcüklerle yanıt verdiğini ve hiçbir şeye karar vermediğini söyler.
  • CI: Projenin çağırdığı her model ve bir CI işinin onun için ihtiyaç duyduğu gizli anahtar: api_key_env başka birini adlandırmadıkça ANTHROPIC_API_KEY ya da OPENAI_API_KEY; bu makinedeki bir sunucu için hiçbiri.

check hiçbir şey saklamaz. Düzeltilmesi gereken bir şey olduğunda 2 ile, aksi halde 0 ile çıkar; oloproof check --json aynı bulguları tek bir belge olarak yazdırır.

5. Çalıştırın

oloproof run
Gate: ALLOW (exit 0)
mentions-floor:
  100.0%, range 88.4% to 100.0% (exact binomial interval); 30 of 30 cases

Çalıştırmanın raporu daha uzundur; bunlar onun kararı ve kuralın satırıdır. 30 vakanın tümü geçti ve oranın tutulduğu aralık %88.4'ten başlıyor, 0.80 eşiğinin üzerinde; bu yüzden kural PASS der ve kapı yayına izin verir. oloproof inspect latest onu yeniden okur.

Sonraki adımlar

  • Kapıyı pull request'lere ekleyin: oloproof init --ci github iş akışını bu projenin yanına yazar (CI rehberi).
  • Bir ifade doğru yanıtın ne olduğunu söyleyemediğinde denetimi bir hakemle değiştirin (hakemler rehberi); o zaman oloproof check CI'ın ihtiyaç duyduğu anahtarı belirtir.
  • Yanıtlarınız bir fonksiyonda değil de bir dosyada mı? oloproof eval answers.jsonl onları hiç proje olmadan denetler.