İçeriğe geç
mcpd
daemon yok
Kaynak

Puanlar ve geri bildirim

Puan, bir makinenin ne düşündüğüdür. Geri bildirim, bir insanın ne düşündüğüdür. mcpd bunları iki ayrı sinyal olarak tutar ve asla ikisinin ortalamasını almaz.

Tek bir sayı değil, iki sinyal

Puan bir makine değerlendirmesidir: bir yargıç model, bir düzenli ifade, bir birim testi, bir çalıştırma hakkında sayı üretebilen her şey. Geri bildirim kaydı ise bir insanın yargısıdır: ürününüzdeki bir başparmak aşağı, bir gözden geçirenin puanı, düzeltilmiş bir yanıt.

İkisi de bir trace_id ya da bir span_id üzerine iliştirilir, ikisi de kendi başına birer sinyal olarak gelir ve ikisi de kendi tablosunda saklanır. Asla birleştirilmezler. Konuyla ilgililik için 0.9 veren bir yargıç da başparmağı aşağı çeviren bir müşteri de doğru söyler; aralarındaki uyuşmazlık, o çalıştırmadaki en işe yarar şeydir. Ortalama tam olarak bunu siler ve elinizde kimsenin bir şey yapamayacağı bir sayı bırakır.

  • Spans

    What ran, nested, with timings

  • Logs

    Lines the run emitted

  • Metrics

    Numbers, with exemplars back to a run

  • Scores

    Machine evaluation

  • Feedback

    What a person thought

  • Aspect notes

    A sentence a model wrote about the run

trace_id Store Search Export

Puan kendi ölçeğini bildirir

min ve max puanın parçasıdır. Onlar olmadan değer yorumlanamaz: 0.86 sayısı 0 ile 1 arası bir ölçekte iyi bir sonuç, 0 ile 5 arası bir ölçekte kötü bir sonuç ya da küçüğün daha iyi olduğu bir uzaklık olabilir. Altı ay sonra, aynı projede iki puanlayıcı varken, kimse hangisi olduğunu ayırt edemez. Spesifikasyon bunları 0 ve 1 olarak varsayar ve her SDK bunları çağrı yerinde ister, böylece varsayılan yanlışlıkla kabul edilmez.

AlanNe işe yarar
scorer_id Bunu hangi puanlayıcının ürettiği, örneğin answer_relevance. Zorunludur.
scorer_version Bir puan yalnızca aynı sürümden gelen başka bir puanla karşılaştırılır. Bir yargıcın istemini değiştirdiğinizde eskisinin devamı değil, yeni bir puanlayıcı elde edersiniz.
value Sayı.
min, max Sayının üzerinde durduğu, bildirilmiş ölçek.
label Puanlayıcı sayının yanında bir tane üretiyorsa, kategorik sonuç.
reason Gerekçe. Bir yargıç model için bu onun açıklamasıdır ve puanı sihir olmaktan çıkarıp tartışılabilir kılan şey budur.
source Canlı, çevrimdışı, deney ya da elle.
score_trace_id Puanlama çalıştırmasının kendi trace'i, böylece şüpheli bir puan da başka her çalıştırma gibi açılıp okunabilir.
cost Puanı üretmenin maliyeti.

Bir puan kaydetmek

SDK yardımcısı bir puanı tıpkı bir span'i sıraya koyduğu gibi sıraya koyar, yani çağrı bloklamaz ve hata fırlatamaz. traceId verilmezse etkin span'in trace'ine iliştirilir.

puan ve geri bildirim

// A machine evaluation of the run. `min` and `max` are required: 0.86 on an
// undeclared scale cannot be compared to anything.
mcpd.score({
  traceId,
  scorerId: 'answer_relevance',
  value: 0.86,
  min: 0,
  max: 1,
  reason: 'Answered the question and gave the delivery date.',
})

// A human evaluation. Kept separate from a score, and never averaged with
// one, because the two answer different questions.
mcpd.feedback({
  traceId,
  kind: 'thumbs',
  value: 'up',
  comment: 'Exactly what the customer asked for.',
  authorKind: 'end_user',
})

// Anything you already count can travel with the trace.
mcpd.metric('support.tickets_handled', 1, 'counter', { labels: { queue: 'tier-1' } })

HTTP üzerinden bu, gövdesinde bir Score taşıyan POST /v1/api/scores isteğidir. Bir puan, hakkında olduğu trace_id ya da span_id değerini adlandırmak zorundadır; hiçbir şeye iliştirilmemiş bir puan, asla bulunamayacağı bir yere yazılmak yerine 400 ile geri çevrilir. score_id alanını boş dize olarak gönderin, sunucu bir tane üretir.

Bir puanın nereden geldiği

source alanı scorer_id alanından ayrıdır, çünkü aynı puanlayıcı birden çok bağlamda çalışır ve bu bağlamlar karşılaştırılabilir değildir. Geçen haftanın trafiğini bugünün yargıcıyla yeniden puanlamak, kalitenin arttığının kanıtı olmaz.

KaynakAnlamı
liveÇevrimiçi üretildi, izlenen çalıştırma sürerken.
offlineDaha sonra, saklanmış trace'ler puanlanarak üretildi.
experimentBir veri kümesine karşı yürütülen bir deneyle üretildi.
manualAPI ya da arayüz üzerinden bir kişi tarafından girildi.

Bir SDK üzerinden yazılan puan varsayılan olarak live olur. Diğer üçü için değeri kendiniz verin.

Puanlama para harcar, o yüzden kaydedilir

Yargıçlı bir değerlendirme genellikle bir model çağrısı daha demektir. Her üretim çalıştırmasını büyük bir yargıçla puanlamak, trafiğe hizmet etmekten daha pahalıya gelebilir ve bu, insanların geç fark ettiği bir faturadır. Bu yüzden bir Score kaydı, bir span'inkiyle aynı biçimde bir cost taşır: para birimi, girdi ve çıktı ayrımı ve rakamı üreten fiyat kitabı. Puanı HTTP API'si ya da yerel bir alım yığınıyla yazarken bu alanı doldurun.

score_trace_id aynı fikrin diğer yarısıdır. Puanlama çalıştırmasının kendisini izleyin, kimliği de puanın üzerine gelsin; böylece her şeye düşük puan vermeye başlayan bir yargıç açılabilir, okunabilir ve bozuk olduğu gösterilebilir.

İnsan geri bildirimi

Geri bildirim kendi ürününüzden yazılır. Kişinin gerçekten bastığı denetimin içinden çağırın, yargı da tepki verdikleri yanıtı üreten tam o trace'in üzerine düşsün. kind alanı value alanının biçimini belirler.

Türvalue
thumbsup ya da down.
ratingÜretenin bildirdiği bir ölçek üzerinde bir sayı.
correctionDoğru yanıt, metin olarak.
tagBir kümeden seçilmiş bir etiket.
commentPuan iliştirilmemiş serbest metin.

ürününüzden gelen bir başparmak aşağı

// traceId yok: etkin span'in trace'ine iliştirilir.
mcpd.feedback({
  kind: 'thumbs',
  value: 'down',
  comment: 'Named the wrong depot.',
  authorKind: 'end_user',
})

Maskeleme anahtar adlarına bakarak eşleşir ve bir yargıya iliştirdiğiniz metadata üzerinde de çalışır. author_id gönderdiğiniz gibi saklanır, o yüzden e-posta adresi yerine takma bir kimlik gönderin. Bakınız Maskeleme ve saklama.

Kötü yanıtları bulan sorgu

Puanlar bunun içindir. has_score bir puanlayıcıyı adlandırır, score_below da eşiği koyar; trace listesi de o puanlayıcının eşiğin altına düşürdüğü çalıştırmaları döndürür. Karşılaştırma katıdır, yani score_below=0.5 tam olarak 0.5 alan bir çalıştırmayı dışarıda bırakır.

kötü puan alan çalıştırmaları bulma

// The same client reads. This is the query that finds bad answers: every run
// that a scorer put below the bar.
const suspect = await mcpd.listTraces({
  hasScore: 'answer_relevance',
  scoreBelow: 0.5,
  limit: 10,
})
console.log(`runs scoring under 0.5: ${suspect.traces.length}`)

const recent = await mcpd.listTraces({ limit: 5, sort: 'start_time', order: 'desc' })
for (const trace of recent.traces) {
  const seconds = ((trace.durationNs ?? 0) / 1e9).toFixed(2)
  console.log(
    `${trace.traceId.slice(0, 8)}  ${trace.name.padEnd(16)} ${trace.status.padEnd(6)} ` +
      `${seconds}s  ${trace.spanCount} spans  $${(trace.cost?.totalCost ?? 0).toFixed(6)}`,
  )
}

// One run, with every span in it, ordered so a waterfall renders directly.
const detail = await mcpd.getTrace(traceId, { include: ['scores', 'feedback'] })
for (const span of detail.spans) {
  console.log(`  ${span.kind.padEnd(18)} ${span.name}`)
}

score_below yalnızca yanında has_score varken bir anlam taşır: puanlayıcısı adlandırılmamış bir eşik, hiçbir şeyin eşiğidir. İkisi de GET /v1/api/traces parametresidir, dolayısıyla oradaki diğer bütün filtrelerle birleşirler. Tek bir modelden gelen, üretim ortamındaki, son bir gün içindeki kötü yanıtlar tek bir istektir.

Geri okumak

GET /v1/api/scores makine değerlendirmelerini listeler; scorer_id, source, trace_id, experiment_id, min_value, max_value alanlarına ve bir zaman aralığına göre filtreli, imleçle sayfalanır. source değeri live, offline, experiment ya da manual olur; yargıcın kendi puanlarını bir kişinin yazdıklarından ayrı okumanın yolu budur. GET /v1/api/feedback bir trace_id alır ve o çalıştırmaya verilen yargıları döndürür. Bir çalıştırma adlandırmadan bir projenin tüm geri bildirimini listelemek bu sürümde uygulanmamıştır ve endpoint bunu açıkça söyler: trace_id olmadan, parametreyi adlandıran bir 400 ile geri çevirir. Eskiden boş bir liste döndürüyordu, ki bu da sanki kimse hiçbir şeyi yargılamamış gibi okunuyordu.

Puan listesi order almaz: en yeniden başlar ve imleci tek yönde karşılaştırır. Çalıştırma ve span listeleri alır, bu yüzden burada sessizce kabul edilip atılmak yerine adıyla geri çevrilir. Aynısı, birkaç SDK istemcisinin bir geri bildirim sorgusunda ayarlamanıza izin verdiği kind, from, to ve cursor filtreleri için de geçerlidir. Dördü de hiçbir zaman uygulanmıyordu ve artık dördü de geri çevriliyor.

Bir çalıştırmayı ve ona iliştirilmiş her şeyi tek seferde okumak için ekleri adıyla isteyin: GET /v1/api/traces/{trace_id}?include=scores,feedback, loglar da dahil olsun isterseniz include=all.

Trace listesi ne taşır, ne taşımaz

Saklanan her trace iki özet taşır, böylece listenin birleştirmeye ihtiyacı olmaz. Biri puanlayıcı başına ortalama değerdir: answer_relevance içinde bir ortalama, groundedness içinde ayrı bir ortalama. Diğeri tür başına geri bildirim sayısıdır: üç başparmak, bir düzeltme. Ortalama değil sayım, çünkü bir başparmak yukarı ile bir düzeltmenin ortalaması bir nicelik değildir.

Genel bir kalite puanı yoktur ve olmayacaktır. Bir yargıç modeli, bir düzenli ifadeyi ve bir müşterinin başparmak aşağısını birleştiren tek bir rakam, birimi olmayan ve tartışılamayan bir sayı olurdu. mcpd size parçaları gösterir, kararı size bırakır.

Sırada