---
title: 'İstem Nedir'
source: 'https://academia.sh/tr/kurslar/istem-muhendisligi/istem-nedir'
course: 'İstem Mühendisliği'
language: tr
updated: '2026-08-17T18:06:39+00:00'
license: 'CC BY-SA 4.0'
---

# İstem Nedir

İstemin girdi, bağlam ve yönerge bileşenlerine ayrılması ve her birinin belirteç payının ölçülmesi: 120 kurgu destek talebinde yönerge 0,3945, bağlam 0,3114, girdi 0,2941 pay tutuyor. Tek bir bileşen çıkarıldığında sayı ve bedel yan yana okunuyor. Tam istem 0,7833 etiket isabeti ve 5974 belirteç veriyor; bağlam çıkarıldığında 0,7083 ve 4177, yönerge çıkarıldığında 0,7167 ve 4751, girdi çıkarıldığında 0,1417 ve 4197. İki koşum farkı tam istemde 0,0583 iken bileşeni eksik istemlerde 0,2000 ile 0,2583 arasına çıkıyor.

Önceki kurs on dört derste modelin yüzeyini ölçtü ve her sayının yanına bedelini yazdı: kaç
belirteç girdi, kaç belirteç çıktı, sınır neredeydi, aynı girdi iki koşumda ne verdi. Kapanışında
bir eksik duruyordu. Bütün o ölçümler boyunca modele **ne söylendiği** hep aynı kaldı. Yönerge
metni bir kez yazıldı, sonra sabit bir arka plan gibi davranıldı; aynı görevde aynı modele başka
bir metin verildiğinde sayının ne kadar oynadığı hiç sorulmadı.

Bu kurs o metni ölçüm nesnesine dönüştürür. Model, görev ve talep kümesi kurs boyunca sabittir;
değişen tek şey **metindir**. Her derste üç sayı yan yana durur: önceki istem, tek bir tasarım
kararı uygulanmış değiştirilmiş istem, ve değişikliğin bedeli. Bedel **belirteçle** yazılır;
belirteç maliyeti ve bütçe önceki kursun kapanış dersinde ölçüldü ve burada tekrarlanmaz.
**Kursun kuralı budur: istem bir tasarım nesnesidir; ölçülmeden değiştirilen istem bir iyileştirme
değil bir tahmindir.** Bu ders o nesneyi parçalarına ayırır.

- **IT1.** Kod gerçek bir model uç noktası çağırmaz; standart kitaplıkla yazılmış bir
  **benzeticiyi** çağırır. Benzetici önceki kursta kurulan tanımın aynısıdır: kurgu
  belirteçleyici, 240 belirteçlik bağlam penceresi, 24 belirteçlik en büyük çıktı, tohuma bağlı
  belirsizlik, hız sınırı ve zaman aşımı.
- **IT2.** Destek talepleri **kurgudur**: 120 kayıt, beş konu, kayıtların bir bölümüne eklenmiş
  yanıltıcı bir cümle. Konu adları saha ekibinin kurgu belge dağarcığından gelir.
- **IT3.** İstem üç bileşene ayrılır ve ayrım metnin **işlevine** göredir. **Yönerge** ne
  yapılacağını söyler, **bağlam** kararın verileceği dünyayı tanımlar, **girdi** o kararın
  uygulanacağı kaydı taşır.
- **IT4.** Ölçüt **etiket isabetidir**. Yanıttan bir etiket okunamazsa kayıt yanlış sayılır ve
  **etiketsiz yanıt payında** ayrıca gösterilir.
- **IT5.** Bedel belirteçtir ve **giriş ile çıkış ayrı ayrı** yazılır. İkisi aynı yöne gitmez;
  bu dersin ana bulgularından biri budur.
- **IT6.** Bir bileşenin katkısı, o bileşen çıkarılarak ölçülür. Kalan iki bileşen, model, tohum
  ve talep kümesi değişmez.
- **IT7.** Her ölçüm iki tohumla koşulur (20260218 ve 20260219). Tohum bir ayar değil,
  belirsizliğin okunduğu yerdir.
- **IT8.** Belirteç, bağlam penceresi ve çıkarım önceki kursun dil modelleri konusunda tanımlandı;
  burada yalnızca kullanılır.

## İstemin Üç Bileşeni

Bir isteme dışarıdan bakınca tek bir metin görünür. İçeriden bakınca üç ayrı iş yapan üç metin
vardır ve üçünün bedeli de, katkısı da farklıdır. **Yönerge** görevi tanımlar: talebi bir etikete
ata, yanıtı şu biçimde ver. **Bağlam** kararın verileceği dünyayı kurar: etiket kümesi nedir,
hangi seçenekler var. **Girdi** her istekte değişen tek parçadır: sınıflandırılacak talebin
kendisi. Yönerge ve bağlam yüz yirmi istekte aynı kalır, girdi yüz yirmi kez değişir.

İlk blok benzeticiyi ve kurguyu kurar, sonra bu üç bileşeni ayrı ayrı yazıp belirteçlerini sayar.

```python
# BENZETICI. Bu kod gercek bir model uc noktasi cagirmaz; standart kitaplikla yazilmis
# bir dil modeli benzeticisidir. Destek talepleri de KURGU'dur.
import math

TOHUM, M32 = 20260218, 0xFFFFFFFF
PENCERE, EN_UZUN = 240, 24          # baglam penceresi ve en buyuk cikti, belirtec


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


def belirtecle(m):                  # KURGU belirtecleyici: parca en cok bes damga
    b = []
    for s in m.lower().replace(",", " , ").split():
        while len(s) > 5:
            b.append(s[:5])
            s = s[5:]
        b.append(s)
    return b


def izno(m):                        # istemin icerigine bagli, kosumdan bagimsiz iz
    h = 2166136261
    for c in m:
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


KONU = ["fatura", "ariza", "sayac", "tarife", "kesinti"]
KALIP = {
    "fatura": ["bu ayki fatura tutari gecen aya gore cok yuksek geldi",
               "faturami odedim ama sistemde borc gorunuyor",
               "fatura ayrintisini nereden gorebilirim"],
    "ariza": ["evde su akmiyor bir ariza var galiba",
              "baglanti bozuk oldu ve hic calismiyor",
              "ariza kaydi actim ama ekip gelmedi"],
    "sayac": ["sayac okumasi yanlis girilmis endeks tutmuyor",
              "sayac degisimi icin randevu istiyorum",
              "sayac uzerindeki endeks ile fatura ayni degil"],
    "tarife": ["hangi tarife basamagindayim ogrenmek istiyorum",
               "tarife degisikligi icin ne yapmam gerekiyor",
               "birim ucret abone tipine gore degisiyor mu"],
    "kesinti": ["mahallede kesinti var ne zaman gelecek",
                "planli kesinti duyurusu nereden takip edilir",
                "aksamdan beri kesinti yasiyoruz"],
}
EK = ["ayrica gecen ay da ayni sorun olmustu", "bu konuda memnun degilim",
      "acil bilgi almam gerekiyor", "kayit numaram elimde yok"]

TALEP = []
for i in range(120):
    r = uretec(TOHUM + i)
    k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])]
    m = KALIP[k][int(r() * 3)]
    if r() < 0.34:
        m += " " + EK[int(r() * 4)]
    TALEP.append({"no": 4001 + i, "metin": m, "konu": k})

KAVRAM = KONU + ["odeme", "sikayet", "bilgi", "genel"]
IZ = {"fatur": "fatura", "tutar": "fatura", "ayrin": "fatura",
      "ariza": "ariza", "bozuk": "ariza", "calis": "ariza", "akmiy": "ariza",
      "sayac": "sayac", "endek": "sayac", "okuma": "sayac",
      "tarif": "tarife", "birim": "tarife", "abone": "tarife", "basam": "tarife",
      "kesin": "kesinti", "duyur": "kesinti", "mahal": "kesinti",
      "borc": "odeme", "odedi": "odeme", "ucret": "odeme",
      "memnu": "sikayet", "sorun": "sikayet", "acil": "sikayet",
      "bilgi": "bilgi", "ogren": "bilgi", "nered": "bilgi"}
TUZAK = {"degis": "tarife", "kayit": "ariza", "yukse": "tarife", "gorun": "fatura",
         "ekip": "kesinti", "takip": "tarife", "giril": "fatura"}   # yaniltici baglar
SERBEST = ["talebiniz {k} konusuyla ilgili gorunuyor",
           "bu kayit {k} basligina girer , ilgili ekibe yonlendirildi",
           "kaydiniz alindi , konuyu inceleyip donus yapacagiz"]
SAYAC = [0]


def cagir(istem, tohum=TOHUM, sicaklik=0.6, en_uzun=EN_UZUN):
    SAYAC[0] += 1
    bel = belirtecle(istem)
    if len(bel) > PENCERE:
        return {"durum": "baglam_asimi", "giris": len(bel), "cikis": 0, "yanit": ""}
    if SAYAC[0] % 37 == 0:
        return {"durum": "hiz_siniri", "giris": len(bel), "cikis": 0, "yanit": ""}
    r = uretec(tohum ^ izno(istem))
    if len(bel) > 90 and r() < 0.04:
        return {"durum": "zaman_asimi", "giris": len(bel), "cikis": 0, "yanit": ""}
    aday = [k for k in KAVRAM if k[:5] in bel]      # istemde adi gecen kavramlar
    if len(aday) < 3:
        aday = KAVRAM
    p = {k: 0.15 for k in aday}
    for t in bel:
        for tablo, w in ((IZ, 1.0), (TUZAK, 1.3)):
            if tablo.get(t) in p:
                p[tablo[t]] += w
    if sicaklik <= 0.0:
        k = max(sorted(p), key=lambda a: p[a])       # en olasi secim
    else:
        e = [math.exp(p[a] / sicaklik) for a in sorted(p)]
        k = sorted(p)[ayrik(r(), [v / sum(e) for v in e])]
    y = k if "tek" in bel else SERBEST[ayrik(r(), [0.42, 0.26, 0.32])].format(k=k)
    cb = belirtecle(y)
    if len(cb) > en_uzun:                            # durdurma kosulu
        cb = cb[:en_uzun]
        y = " ".join(cb)
    return {"durum": "tamam", "giris": len(bel), "cikis": len(cb), "yanit": y}


def oku(y):                                          # yanittan etiket cikarma
    for s in y.lower().split():
        if s in KONU:
            return s
    return None


YONERGE = "Talebi asagidaki etiketlerden birine ata . Yanit olarak tek etiket yaz ."
BAGLAM = "Etiketler: fatura , ariza , sayac , tarife , kesinti ."


def istem(x, y=True, b=True, g=True):       # uc bilesenden secerek istem kurar
    p = []
    if y:
        p.append(YONERGE)
    if b:
        p.append(BAGLAM)
    if g:
        p.append("Talep: " + x["metin"])
    return " ".join(p)


x0 = TALEP[0]
print(f"KURGU talep kumesi: {len(TALEP)} kayit, {len(KONU)} konu")
for ad, m in (("yonerge", YONERGE), ("baglam", BAGLAM),
              ("girdi", "Talep: " + x0["metin"])):
    print(f"{ad:<9} {len(belirtecle(m)):>2} belirtec | {m}")
i0 = istem(x0)
print(f"{'tam istem':<9} {len(belirtecle(i0)):>2} belirtec")
for th in (TOHUM, TOHUM + 1):
    print(f"tohum {th}: {cagir(i0, tohum=th)['yanit']}")
```

```
KURGU talep kumesi: 120 kayit, 5 konu
yonerge   19 belirtec | Talebi asagidaki etiketlerden birine ata . Yanit olarak tek etiket yaz .
baglam    15 belirtec | Etiketler: fatura , ariza , sayac , tarife , kesinti .
girdi     13 belirtec | Talep: planli kesinti duyurusu nereden takip edilir
tam istem 47 belirtec
tohum 20260218: kesinti
tohum 20260219: kesinti
```

Kırk yedi belirteçlik istemin yalnız on üçü asıl işe, yani sınıflandırılacak talebe ait. Geri
kalan otuz dördü, her istekte yeniden gönderilen sabit metindir. İki tohumun aynı yanıtı vermesi
belirsizliğin ortadan kalktığı anlamına gelmez; tek bir kayıtta iki koşumun çakıştığı anlamına
gelir. Kurs boyunca bu karşılaştırma **kümenin tamamında** yapılır.

## Her Bileşenin Belirteç Payı

Bir bileşenin bedeli, kendi uzunluğu değil, **uzunluğunun istek sayısıyla çarpımıdır**. Katkısı
ise ancak çıkarılarak ölçülebilir. İkinci blok ikisini birden yapar: önce üç bileşenin toplam
giriş belirtecindeki payını çıkarır, sonra her seferinde bir bileşeni düşürüp aynı 120 kaydı
yeniden koşar.

```python
def olc(tohum=TOHUM, **kw):
    SAYAC[0] = 0
    gi = ci = d = bos = 0
    for x in TALEP:
        s = cagir(istem(x, **kw), tohum=tohum)
        gi, ci = gi + s["giris"], ci + s["cikis"]
        e = oku(s["yanit"])
        bos += e is None
        d += e == x["konu"]
    n = len(TALEP)
    return {"isabet": d / n, "bos": bos / n, "giris": gi, "cikis": ci}


ty, tb = len(belirtecle(YONERGE)), len(belirtecle(BAGLAM))
tg = sum(len(belirtecle("Talep: " + x["metin"])) for x in TALEP) / len(TALEP)
top = ty + tb + tg
print(f"{'bilesen':<10} {'belirtec':>9} {'pay':>8}")
for ad, v in (("yonerge", ty), ("baglam", tb), ("girdi", tg), ("toplam", top)):
    print(f"{ad:<10} {v:>9.2f} {v / top:>8.4f}")
print()

DURUM = (("tam istem", {}), ("baglam yok", {"b": False}),
         ("yonerge yok", {"y": False}), ("girdi yok", {"g": False}))
print(f"{'istem':<12} {'isabet':>7} {'kosum 2':>8} {'fark':>7} {'etiketsiz':>10} "
      f"{'giris':>6} {'cikis':>6} {'toplam':>7}")
for ad, kw in DURUM:
    A, B = olc(**kw), olc(tohum=TOHUM + 1, **kw)
    print(f"{ad:<12} {A['isabet']:>7.4f} {B['isabet']:>8.4f} "
          f"{abs(A['isabet'] - B['isabet']):>7.4f} {A['bos']:>10.4f} {A['giris']:>6d} "
          f"{A['cikis']:>6d} {A['giris'] + A['cikis']:>7d}")
```

```
bilesen     belirtec      pay
yonerge        19.00   0.3945
baglam         15.00   0.3114
girdi          14.17   0.2941
toplam         48.17   1.0000

istem         isabet  kosum 2    fark  etiketsiz  giris  cikis  toplam
tam istem     0.7833   0.7250  0.0583     0.0250   5780    194    5974
baglam yok    0.7083   0.5083  0.2000     0.0667   3980    197    4177
yonerge yok   0.7167   0.4583  0.2583     0.2167   3500   1251    4751
girdi yok     0.1417   0.2167  0.0750     0.0250   4080    117    4197
```

İlk tablo kurs boyunca hatırlanacak orantıyı veriyor. Asıl veri, yani sınıflandırılacak talep,
istemin **0,2941 payını** tutuyor. Yönerge ve bağlam birlikte **0,7059** tutuyor ve bu iki metin
yüz yirmi istekte harf harf aynı. Ortalama talep 14,17 belirteç, sabit metin 34 belirteç: her
istekte verinin 2,4 katı kadar sabit metin yeniden gönderiliyor.

## Bir Bileşen Çıkarıldığında

İkinci tablo bileşenlerin katkısını verir ve üçünün de aynı işi yapmadığını gösterir.

**Bağlam çıkarıldığında** isabet 0,7833'ten 0,7083'e iniyor ve toplam belirteç 5974'ten 4177'ye,
yani 1797 belirteç düşüyor. Kazanç ile kayıp ilk bakışta dengeli görünüyor. Ama etiketsiz yanıt
payı 0,0250'den 0,0667'ye çıkmış: etiket kümesi istemde yazılı değilken model, beş konunun
dışında kalan sözcüklerle de yanıt veriyor ve o yanıtlardan hiçbir etiket okunamıyor. Bağlamın
işi modeli akıllandırmak değil, **cevap uzayını kapatmaktır**.

**Yönerge çıkarıldığında** isabet 0,7167'ye iniyor, giriş belirteci 5780'den 3500'e düşüyor —
ve çıkış belirteci 194'ten **1251'e fırlıyor**. Bu, tablonun en sert satırıdır. Yönerge on dokuz
belirteçlik en kısa bileşendi; onu atmak girişte 2280 belirteç kazandırdı, ama çıkışta 1057
belirteç geri aldı ve net kazanç 1223 belirtece indi. Yanıtlar cümleye dönüştüğü için etiketsiz
pay 0,0250'den **0,2167'ye** çıktı: her beş yanıttan biri makinece okunamaz hâle geldi. Yönerge
bu istemde birim uzunluk başına en pahalı değil, **en getirili** bileşendir.

**Girdi çıkarıldığında** çıkan sayı bu dersin en öğretici satırıdır. İstem hâlâ geçerlidir, hâlâ
4197 belirteç harcar, hâlâ etiketsiz yanıt payı 0,0250'dir — yani çıktı sorunsuz görünür. İsabet
ise 0,1417'ye çöker; yüz yirmi kaydın hepsine aynı istem gittiği için model her seferinde aynı
tahmini üretir ve o tahmin ancak o etiketin kümedeki payı kadar tutar. **Bir istem, veri
taşımadan da düzgün biçimli ve kendinden emin bir yanıt üretir.** İstemi biçimine bakarak
değerlendirmenin niçin ölçüm sayılmadığı buradadır.

## Ölçülmeden Değiştirilen İstem Bir Tahmindir

Tablonun `fark` sütunu, kursun üçüncü kuralını ilk kez çalıştırıyor. Tam istem iki tohumda 0,7833
ve 0,7250 verdi; **iki koşum farkı 0,0583**. Bağlamın çıkarılmasının isabete etkisi 0,0750,
yönergenin çıkarılmasının etkisi 0,0667. Her iki sayı da iki koşum farkının hemen üstünde duruyor
ve tek başlarına güvenilecek büyüklükte değil. Bu kursta böyle bir sayı **ölçülmüş sayılmaz**;
kural bir sonraki derslerde adıyla işletilir.

Aynı satırların ölçülmüş olan yanı başka yerdedir. Etiketsiz yanıt payı 0,0250'den 0,2167'ye
çıktı, çıkış belirteci altı katına bindi, ve bileşeni eksik istemlerin **kendi iki koşum farkı**
0,2000 ile 0,2583 arasına yükseldi. Üç bileşen isabete ekledikleri kadar isabeti **oturtuyor**:
tam istem koşumdan koşuma 0,0583 oynarken, bileşeni düşmüş istemler dört kat fazla oynuyor.
İstemin bileşenleri modele bilgi vermekten çok, modelin **serbestlik alanını daraltır**; kazanç
oradan gelir.

Bedel de bu okumadan ayrı yazılır. Tam istem doğru etiket başına 5974 / 0,7833 / 120, yani 63,5
belirteç harcıyor. Bağlamsız istem 49,1 belirteç, yönergesiz istem 55,2 belirteç harcıyor. Yani
en isabetli istem **aynı zamanda en pahalı istemdir** ve bu ikisi ayrı satırlarda durmalıdır.
Bir bileşeni çıkarmak bedeli düşürür; onu çıkarmanın nasıl bir kayıp olduğu ise ancak isabet ve
etiketsiz pay birlikte okununca görünür.

## Özet

- İstem üç bileşene ayrılır: **yönerge** (ne yapılacak), **bağlam** (hangi dünyada), **girdi**
  (hangi kayıt). 120 kurgu talepte paylar 0,3945 / 0,3114 / 0,2941; asıl veri istemin üçte
  birinden azdır.
- Bağlam cevap uzayını kapatır: çıkarıldığında isabet 0,7833'ten 0,7083'e, etiketsiz yanıt payı
  ise 0,0250'den 0,0667'ye gider ve 1797 belirteç kazanılır.
- Yönerge en kısa ve en getirili bileşendir: çıkarıldığında girişte 2280 belirteç kazanılır ama
  çıkışta 1057 belirteç geri ödenir, etiketsiz pay 0,2167'ye çıkar.
- Girdisiz istem de düzgün biçimli yanıt üretir ve 4197 belirteç harcar; isabeti 0,1417'dir.
  Biçimi doğru bir çıktı, isteminin ölçüldüğü anlamına gelmez.
- Tam istemin iki koşum farkı 0,0583; bileşeni eksik istemlerinki 0,2000 ile 0,2583. Bileşenlerin
  asıl ölçülen katkısı, isabeti yükseltmek kadar **koşumlar arası oynamayı daraltmaktır**.

## Sonraki Adım

Bu derste yönerge ve bağlam yüz yirmi isteğin her birine yeniden yazıldı ve toplam girişin
0,7059 payını tuttu. Kod bunu tek satırda yaptığı için bedel görünmez kaldı: aynı otuz dört
belirteç yüz yirmi kez gönderildi. Bir davranış tanımı bir kez yazılır ama **her istekte ödenir**,
ve istek sayısı büyüdükçe bu tekrar toplam maliyetin baskın kalemi hâline gelir. Sonraki ders bunu
ölçer: kalıcı bir sistem yönergesinin toplam belirteci istek sayısıyla nasıl büyüdüğü, yönergeyi
kısaltmanın kaç belirteç kazandırdığı, ve o kısaltmanın isabetten ne kadarını geri aldığı.
