Pusula

Açık kaynak · Apache 2.0 · v2.0

İlk Türkçe tam donanımlı
karar modeli

Karar modelleri, bir metin hakkında tanımlı sorulara (örneğin bir kaydın hangi ekibe yönlendirileceği, ne kadar acil olduğu ya da bir insana devredilmesinin gerekip gerekmediği) cevap verir ve metin üretmek yerine her seçenek için bir olasılık döndürür. Mevcut karar modelleri İngilizce için geliştirilmiştir ve Türkçedeki doğrulukları sınırlıdır. Pusula, Türkçeye uyarlanmış Decision 3.0'dır.

Gerçek müşteri mesajları

90,6

Decision 3.0: 84,0 · +6,6

Uzun müşteri şikâyetleri

88,3

Decision 3.0: 81,5 · +6,8

Türkçe Karar Benchmark'ı

92,0

Decision 3.0: 88,5 · +3,5

Pusula'nın doğruluğu (%). Değerlendirme yöntemi Sonuçlar bölümünde açıklanmıştır.

Nasıl çalışır

Bir istek, bir metinden (state) ve adlandırılmış sorulardan oluşur. Her sorunun seçenekleri isteğin içinde tanımlanır; bu sayede yeni etiketler yeniden eğitim gerektirmeden eklenebilir.

İstek

{
  "state": "Kartımdan bilgim dışında 4.500 TL çekilmiş, hemen bloke edin!",
  "questions": {
    "ekip": {
      "type": "choice",
      "instructions": "Bu talebi hangi ekip ele almalı?",
      "criteria": {
        "dolandiricilik": "Şüpheli işlem ve dolandırıcılık",
        "kart_islemleri": "Kart başvurusu, limit ve şifre",
        "genel_destek": "Diğer sorular"
      }
    },
    "acil": { "type": "noul", "instructions": "Hemen müdahale gerekiyor mu?" },
    "risk": {
      "type": "score",
      "instructions": "Finansal risk ne düzeyde?",
      "criteria": ["Düşük", "Orta", "Yüksek"]
    }
  }
}

Cevap (temsilî değerler)

{
  "answers": {
    "ekip": {
      "type": "choice",
      "choice": "dolandiricilik",
      "probabilities": {"dolandiricilik": 0.94, "kart_islemleri": 0.05, "genel_destek": 0.01},
      "confidence": 0.94
    },
    "acil": {"type": "noul", "noul": 0.97},
    "risk": {
      "type": "score",
      "score": 1.86,
      "probabilities": {"0": 0.02, "1": 0.10, "2": 0.88},
      "confidence": 0.88,
      "legend": {"0": "Düşük", "1": "Orta", "2": "Yüksek"}
    }
  },
  "model": "pusula"
}

Özellikler

Decision 3.0'ın arayüzü korunmuş ve Türkçe metinler için genişletilmiştir.

Önce Türkçe

Decision 3.0; bankacılık, hukuk, sağlık, e-ticaret, lojistik ve kamu hizmetleri dahil 20 alandan Türkçe karar verisiyle ince ayarlanmıştır. Gündelik yazım, yazım hataları, eksik Türkçe karakterler ve Türkçe–İngilizce karışık metinler kapsanmaktadır.

İstek anında tanımlanan seçenekler

Sorular ve seçenekleri her istekte ayrıca belirtilir. Model sabit bir etiket kümesiyle sınırlı değildir.

Üç soru tipi

choice (tek seçenek), noul (evet/hayır) ve score (sıralı seviyeler). Her cevapta her seçenek için bir olasılık döndürülür.

d3 ile doğrudan değiştirilebilir

Decision 3.0'ın /v1/systemone istek ve cevap biçimi aynen korunmuştur; bu nedenle Pusula, mevcut entegrasyonlarda d3'ün yerine kullanılabilir.

Hazır Türkçe taksonomi ve şablonlar

20 alan, 103 alt alan ve 333 niyetin yanı sıra 20 hazır şablon (konu ve niyet, mesajlar için 14 kontrol ve yapay zekâ ajanları için 4 kontrol) sunulmaktadır. Kurumun kendi konu listesiyle yönlendirme de desteklenmektedir.

Bağımsız değerlendirme

Pusula, bağımsız olarak etiketlenmiş Türkçe test setlerinde ham Decision 3.0 ile karşılaştırılmıştır. Türkçe Karar Benchmark'ı modelle birlikte yayımlanmaktadır.

Modeller

İki model sunulmaktadır. Her iki model de aynı istekleri kabul eder.

En yüksek doğruluk

Pusula (Türkçe Decision 3.0)

Çok seçenekli görevler dahil, hazır ve özel sorular için önerilmektedir.

Boyut
26B: vllm-sr/d3 üzerine 0,9 GB'lık LoRA adaptörü
Çalıştığı yer
GPU: BF16'da ≥ 64 GB, 4-bit'te ≥ 24 GB
Benchmark / altın
92,0 / 92,1
Ağırlıklar
erenextlabs/pusula
Hızlı, CPU'da çalışır

Pusula Nano

Hazır sorularda yüksek hacim ve düşük gecikme için önerilmektedir.

Boyut
149M (TabiBERT cross-encoder)
Çalıştığı yer
CPU veya herhangi bir GPU
Benchmark / altın
83,2 / 91,3
Ağırlıklar
erenextlabs/pusula-nano

Sonuçlar

Doğruluk (%). Değerlendirme etiketleri, birbirinden bağımsız ve kör çalışan iki etiketçi (Claude Opus 5.5 ve Claude Sonnet 5.5) tarafından atanmış; ayrışmalar hakem tarafından karara bağlanmıştır. Tüm etiketler yayımlanan etiketleme politikasına uygundur. Değerlendirme etiketleri yalnızca ölçüm amacıyla kullanılmakta olup hiçbir zaman eğitim etiketi olarak kullanılmamaktadır.

Decision 3.0 ve Pusula, doğruluk (%)

Her satır, temel modelden Pusula'ya olan değişimi göstermektedir. Tüm değerler aşağıdaki tabloda yer almaktadır.

  • Decision 3.0
  • Pusula
DeğerlendirmeSoruDecision 3.0PusulaPusula Nano
Gerçek müşteri mesajları (500, eğitim dışı, lisanslı)7.50084,090,689,9
Uzun müşteri şikâyetleri (500, eğitim dışı, lisanslı)4.50081,588,384,6
Türkçe Karar Benchmark'ı (2.194 mesaj)19.86188,592,083,2
Altın test seti (eğitimde olmayan 757 mesaj)11.35586,392,191,3
Görülmemiş sektörlerde özel sorular40092,893,555,5
MASSIVE tr-TR, 60 seçenekli niyet, sıfır örnek (insan yazımı)2.97485,385,232,7
OffensEval 2020 Türkçe, saldırgan dil (gerçek tweet'ler)3.52888,488,381,8

Altın test seti, soru bazında

SoruDecision 3.0Pusula
Alan82,083,0
Mesaj türü69,093,3
Aciliyet (4 seviye)53,184,0
Duygu89,293,9
Eksik bilgi71,570,9
Eylem gerekli mi88,692,1
İnsana devretme81,487,6
Kişisel veri96,496,4
Güvenlik riski95,699,1
Hakaret ve nefret söylemi99,2100,0
Dolandırıcılık92,198,8
Can güvenliği98,099,1
Yasal risk95,595,9
Ayrılma riski85,789,3
Satış fırsatı97,297,5
  • Gerçek müşteri mesajları: Değerlendirme, ticari bir iş ortağından lisanslanan ve eğitimde kullanılmayan 500'er anonim mesajdan oluşan iki set üzerinde yapılmıştır: müşteri mesajları (yorum, şikâyet ve soru) ile uzun ve ayrıntılı müşteri şikâyetleri. Bu setler yayımlanmamaktadır.
  • Sürüm 2.0: Değerlendirme setleri 20 şablonu kapsayacak biçimde genişletilmiş ve v2.0 etiketleme politikasıyla etiketlenmiştir; bu nedenle puanlar v1.0 için yayımlananlarla karşılaştırılamaz. v2.0'ın daha düşük kaldığı ölçümler dâhil v1.0 ile karşılaştırma README dosyasında yer almaktadır.
  • Özel sorular (hazır şablonlar arasında yer almayan sorular) ve eksik bilgi şablonu, adaptör kapatılarak temel Decision 3.0 modeli tarafından cevaplanmaktadır; öteki hazır şablonlar adaptörle cevaplanmaktadır.
  • Pusula Nano ağırlıklı olarak hazır sorularla eğitilmiştir. Hazır sorulardan farklı ya da çok seçenekli görevler için Pusula önerilmektedir.
  • MASSIVE ve OffensEval eğitim verisinde yer almamaktadır.

Hızlı başlangıç

PyTorch'un CUDA sürümünün önceden kurulması gerekir. Pusula Nano için yalnızca serve eki yeterlidir; model CPU'da çalışır.

Kurulum

pip install "pusula[serve,d3] @ git+https://github.com/erenextlabs/pusula"
hf download vllm-sr/d3 --local-dir ~/d3 --exclude "assets/*"     # temel Decision 3.0 ağırlıkları (~52 GB)
hf download erenextlabs/pusula --local-dir ~/pusula                # Pusula adaptörü (~0,9 GB)
# ya da temel ağırlık gerektirmeyen küçük model:
hf download erenextlabs/pusula-nano --local-dir ~/pusula-nano      # Pusula Nano (~0,6 GB)

Python

from pusula.inference import D3Engine, DecisionEngine

engine = D3Engine.load("~/d3", adapter="~/pusula")      # Pusula (Türkçe Decision 3.0)
# engine = DecisionEngine.load("~/pusula-nano")          # Pusula Nano (GPU veya CPU)

answers = engine.decide(
    "Siparişim 5 gündür kargoda, hâlâ gelmedi. Artık iptal etmek istiyorum.",
    {
        "niyet": {
            "type": "choice",
            "instructions": "Müşteri ne istiyor?",
            "criteria": {
                "kargo_takip": "Gönderinin nerede olduğunu öğrenmek",
                "iptal": "Siparişi iptal etmek",
                "iade": "Teslim alınan ürünü iade etmek",
            },
        },
        "temsilci": {"type": "noul", "instructions": "Bir insan temsilciye aktarılmalı mı?"},
    },
)
print(answers["niyet"]["choice"], answers["niyet"]["confidence"])

HTTP API, hazır taksonomi, soru yazma önerileri ve güven değerlerinin kullanımı README dosyasında açıklanmıştır.

Kendi modelinizi eğitmek

Pusula'nın oluşturulmasında kullanılan tüm bileşenler depoda yer almaktadır; bu sayede Decision 3.0 başka alanların ya da dillerin verisiyle ince ayarlanabilir. Etiketli karar verisi yerel bir açık ağırlıklı modelle üretilir, temizlenir ve d3'ün QLoRA ile ince ayarında kullanılır. Her aşama kaldığı yerden sürdürülebilir.

README'deki eğitim kılavuzu

Lisans ve teşekkürler

Pusula, Apache 2.0 lisansıyla yayımlanmaktadır ve tümü Apache 2.0 lisanslı olan vllm-sr/d3 (vLLM Semantic Router), Qwen3.8 (Qwen Team, Alibaba Cloud) ve TabiBERT (Boğaziçi Üniversitesi TABILAB) üzerine kurulmuştur.

Veri kaynağı

Pusula modelleri ağırlıklı olarak bu proje için üretilmiş sentetik Türkçe veriyle eğitilmiştir. Ticari bir iş ortağından lisanslanan sınırlı sayıda gerçek müşteri mesajı da eğitim verisine dahil edilmiştir. Bu mesajlar kullanımdan önce anonimleştirilmiş olup hiçbir biçimde yeniden dağıtılmamaktadır.