AiHubMix'te Jev'i Aramak: Yapılandırılmış Sınıflandırma Eğitimi

AIHubMix5 dk okuma
AiHubMix'te Jev'i Aramak: Yapılandırılmış Sınıflandırma Eğitimi

Kısa cevap: jev-1.13 metin üretmez. Bir metin parçasını ve bir dizi adlandırılmış soruyu https://aihubmix.com/v1/systemone adresine POST edersiniz ve sorularınıza göre anahtarlanmış yazılı cevaplar alırsınız — bir kategori, bir puan veya bir olasılık. Parçalamaya gerek yok. Aşağıda çalışan bir istek, tam yanıt formatı ve sessizce doğruluğunuzu kaybettirecek bir tasarım hatası bulunmaktadır.

Jev'in ne için kullanıldığı

Bir yargı gerektiğinde kullanın, bir paragrafa değil: bir destek talebini yönlendirmek, ciddiyet puanı vermek, aciliyeti işaretlemek, içerik kapatmak. Model sayfası bunu açıkça belirtir — "Metin üretimi yok, parçalanacak bir şey yok."

Açıklamalar, özetler veya herhangi bir serbest biçim çıktısı gerektiğinde bunun yerine normal bir sohbet modelini kullanın. jev bunları üretemez.

Başlamadan önce

  • [ ] Python 3 yüklü (standart kütüphane yeterlidir)
  • [ ] Bir AiHubMix hesabı ve API anahtarı
  • [ ] Anahtar AIHUBMIX_API_KEY olarak dışa aktarılmış, kaynakta asla sabit kodlanmamış

Bir OpenAI SDK'sına, LangChain'e veya requests paketine ihtiyacınız yok.

Adım 1 — Uç noktayı bil

POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json

Bu model spesifik bir yoldur, değil /v1/chat/completions. OpenAI uyumlu istemciler bunu çağıramaz. Düz HTTP kullanın.

Adım 2 — Soru türlerinizi seçin

Üç tür vardır ve bunları bir istekte serbestçe karıştırabilirsiniz:

TürNe için kullanılırSiz sağlarsınız
choiceBir kategori seçmekcriteria bir dict olarak: etiket → tanım
scoreSıralı bir ölçekte puanlamacriteria bir liste olarak, en düşükten en yükseğe
noulEvet/hayır yargısıbaşka bir şey yok instructions

Adım 3 — İsteği oluşturun

state yargılanacak metindir. questions anahtarları, icat ettiğiniz isimlerdir; yanıt aynı isimleri kullanır.

payload = {
    "model": "jev-1.13",
    "state": "Merhaba, 3 gündür Stripe hesabımı bağlamaya çalışıyorum "
             "ve sürekli başarısız oluyor. Satış kaybediyorum. Lütfen acil yardım edin.",
    "questions": {
        "department": {
            "type": "choice",
            "instructions": "Bu durumu hangi ekip ele almalı",
            "criteria": {
                "billing":   "Ödeme veya abonelik sorunları",
                "technical": "Hata veya entegrasyon problemleri",
                "sales":     "Fiyatlandırma veya hesap soruları",
            },
        },
        "frustration": {
            "type": "score",
            "instructions": "Müşterinin ne kadar sinirli göründüğü",
            "criteria": [
                "Sakin, sadece gerçekleri belirtiyor",
                "Sinirli ama nazik",
                "Çok öfkeli, sert bir dil kullanıyor",
            ],
        },
        "is_urgent": {
            "type": "noul",
            "instructions": "Mesaj aciliyet veya zaman hassasiyeti taşıyor",
        },
    },
}

Adım 4 — Standart kütüphane ile gönderin

import json, os, urllib.error, urllib.request

def ask(payload):
    req = urllib.request.Request(
        "https://aihubmix.com/v1/systemone",
        data=json.dumps(payload).encode(),
        headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
                 "Content-Type": "application/json"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=60) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")

İstek yapısını bir fonksiyon içinde tutun. Modül seviyesinde oluşturup gönderirseniz, dosyayı içe aktarmak çağrıyı yeniden tetikler ve token harcar.

Adım 5 — Cevapları okuyun

Her cevap, değerini kendi type anahtarı altında saklar, bu nedenle tek bir erişimci tüm üçünü kapsar:

data = ask(payload)
for name, ans in data["answers"].items():
    kind = ans["type"]
    print(name, kind, ans[kind], ans.get("confidence"))
print("kullanım:", data.get("usage"))

Doğrulanmış çıktı:

department   choice  billing   0.51
frustration  score   1         1
is_urgent    noul    1         None
usage: {'input_tokens': 424, 'output_tokens': 73}

Adım 6 — Tam zarfı anlayın

Yazdırma döngüsü, yararlı alanları gizler. Bir score cevabının ham JSON'u:

{
  "type": "score",
  "score": 1,
  "legend": {"0": "Sakin, sadece gerçekleri belirtiyor", "1": "Sinirli ama nazik", "2": "Çok öfkeli, sert bir dil kullanıyor"},
  "probabilities": {"0": 0, "1": 1, "2": 0},
  "confidence": 1
}
  • legend indeksi kendi kelimelerinize geri eşler — tam sayı kendini tanımlar, bu nedenle kodunuzda bir arama tablosuna ihtiyacınız yok.
  • probabilities tam dağılımı verir, bu da yakın bir eşitliği tespit etmek için yararlıdır.
  • noul hiçbir confidence alanına sahip değildir. Olasılığı sinyaldir.

Üst düzey ayrıca usage, id, provider (TypeSafe), ve çözülmüş arka uç sürümü typesafe/jev-1.13-20260917 gönderir.

Sizi doğruluk kaybına uğratan hata

Yukarıdaki istekte, department billing değerini 0.51 güvenilirliği ile döndürdü. Aynı isteği tekrarlamak 0.38 güvenilirliği ile aynı etiketi döndürdü — cevap kararlıydı, belirtilen kesinlik değeri değildi.

Sebep kriterlerde, modelde değil. billing "Ödeme veya abonelik sorunları" ve technical "Hata veya entegrasyon problemleri." Başarısız olan bir Stripe entegrasyonu gerçekten her ikisine de uyar. Model, şemaya yazılmış bir belirsizliği raporluyordu.

Üretim öncesi iki kural:

  1.  choice kriterlerini karşılıklı olarak dışlayıcı şekilde yazın. Eğer bir insan iki etiket arasında tereddüt ederse, model de eder.
  2. Düşük güvenilirlik sonuçlarını kabul etmek yerine bir insan kuyruğuna yönlendirmek için bir güvenilirlik eşiği belirleyin. Belirsizliği kabul eden bir model, onu gizleyen bir modelden daha değerlidir.

Ön lansman kontrol listesi

  • [ ] Anahtar ortamdan yüklendi veya VCS'nizin göz ardı ettiği bir 600-mod dosyasından
  • [ ] choice kriterleri örtüşme açısından gözden geçirildi
  • [ ] Güvenilirlik eşiği tanımlandı, altında bir geri dönüş yolu ile
  • [ ] noul cevapları ayrı olarak ele alındı — bunlar confidence taşımıyor
  • [ ] Kullanılmayan sorular kaldırıldı (3 soru 424 giriş tokeni, 2 soru 355 token harcıyor)
  • [ ] Ham gövde ile birlikte kullanılmayan 2xx dışı yanıtlar kaydedildi

SSS

OpenAI SDK'sını kullanabilir miyim? Hayır. /v1/systemone OpenAI uyumlu bir yol değildir.

jev bir cümle veya özet döndürebilir mi? Hayır. Sadece tanımladığınız yazılı sorulara yanıt verir.

Her istekte kaç soru var? Doğrulanmış testler iki ve üç soru kullandı. Her soru giriş ve çıkış tokeni ekler, bu nedenle yalnızca üzerinde işlem yapacağınız soruları dahil edin.

Bir sürüm takma adı var mı? Model sayfası jev-latest takma adını jev-1.13 ile birlikte listeler. Tekrar üretilebilirlik önemliyse, açık sürümü sabitleyin.

Bu ne kadara mal oluyor? Model sayfası $0.0462 / M giriş tokenleri ve $0 / M çıkış tokenleri yayınlar. Bunlar satıcı rakamlarıdır — bütçelemeden önce mevcut fiyatlandırmayı doğrulayın.

Bağlam penceresi nedir? Model sayfası tutarsızdır: başlıkta 64K, sağlayıcı tablosunda 32K. Herhangi birine güvenmeden önce kendi en uzun girişinizi doğrulayın.

Bu kılavuzun kapsamı

Yukarıdaki her şey, tek bir girdi ile üç canlı çağrı ile doğrulandı. Gecikme, toplama, verim veya örneğe benzemeyen girdiler üzerindeki davranışları kapsamaz. Güvenilirlik kayması, ölçülen bir hata oranı değil, tekrarlanan bir gözlemdir — bir eşiği ayarlamadan önce kendi verilerinizde bunu tekrarlayın.

AiHubMix'te başlayın

jev-1.13 AiHubMix aracılığıyla mevcuttur ve model sayfası bu eğitimin referans aldığı her şeyi taşır: /v1/systemone uç noktası, üç soru türü ve bunların criteria formatları, tam yanıt alanları ve $0.0462 / M giriş tokenleri ile $0 / M çıkış tokenlerinin yayınlanan fiyatlandırması. Takma ad olan jev-latest en yeni sürüme karşılık gelir, böylece sürümler değiştikçe güncel kalır.

Buradan başlayın: https://aihubmix.com/model/jev-latest

Sonraki adımlar:

  1. Bir AiHubMix hesabı oluşturun ve bir API anahtarı oluşturun
  2. Adım 3'teki isteği ve Adım 4'teki ask() fonksiyonunu kopyalayın
  3. state değerini kendi kuyruğunuzdan gerçek bir kayıt ile değiştirin
  4. Sonucu, o kaydı bugün nasıl sınıflandırıyorsanız ona göre karşılaştırın

Bu kılavuz faydalı olduysa, yapılandırılmış çıktı modelleri ve sınıflandırma boru hatları hakkında gelecekteki gönderiler için abone olun.