---
title: 'Rol ve Davranış Belirtme'
source: 'https://academia.sh/tr/kurslar/istem-muhendisligi/rol-ve-davranis-belirtme'
course: 'İstem Mühendisliği'
language: tr
updated: '2026-08-17T18:06:39+00:00'
license: 'CC BY-SA 4.0'
---

# Rol ve Davranış Belirtme

İsteme rol ve davranış öneki eklemenin kattığı farkın ölçülüp aynı istemin koşum farkıyla karşılaştırılması. Aynı 120 kurgu destek talebinde önekli istemlerin isabeti 0,7500 tabana göre -0,0667, -0,0583, -0,2208 ve +0,0125 oynuyor; tabanın dört tohumdaki bandı ise 0,1500. Dört önekten hiçbiri bandın dışına çıkmıyor, yani hiçbirinin farkı ölçülmüş sayılmıyor. Ölçülen tek şey bedeldir: 9 ile 27 belirteç arasındaki önekler 120 istekte 1080 ile 3240 belirteç ekliyor ve doğru etiket başına bedeli 65,1'den 84,6 ile 123,8 arasına çıkarıyor.

Önceki ders yönergenin uzunluğunu ölçtü ve isabetin otuz üç belirteçte doyduğunu buldu; eklenen
otuz dokuz belirteç bedeli kesin biçimde artırdı, sayıyı ise ölçülebilir biçimde oynatmadı.
Yönergeye ne ekleneceği sorusu orada kapanmadı. En sık verilen cevap modele **kim olduğunu**
söylemektir: bir uzmanlık alanı, bir görev unvanı, bir kıdem. Bu ekin isabeti yükselttiği yaygın
bir kabuldür.

Bu ders o kabulü ölçer ve ölçerken kursun üçüncü kuralını adıyla işletir. **Model belirsiz bir
bileşendir**: aynı istem, tohum değiştiğinde başka bir sayı verir. Bir istem değişikliğinin
kattığı fark, aynı istemin koşumdan koşuma oynadığı aralıktan büyük değilse, o fark bir kazanç
değil bir çakışmadır. Bu kursta öyle bir sayı **ölçülmemiş sayılır**. Ders bu ölçütü kurar, dört
öneke uygular ve sonucu açıkça yazar.

- **IT17.** Kod bir **benzeticiyi** çağırır; gerçek bir model uç noktası çağrılmaz. Destek
  talepleri **kurgudur** ve önceki iki dersteki 120 kayıtla aynıdır.
- **IT18.** Taban istem, önceki dersin ölçtüğü orta yönergedir: etiket kümesi, görev ve yanıt
  biçimi. Bu derste yönerge değişmez; yalnızca önüne bir **önek** eklenir.
- **IT19.** **Rol belirtme**, modele bir kimlik atfeden metindir. **Davranış belirtme**, modelden
  izlemesi istenen adımları yazan metindir. İkisi de yönergenin önüne aynı biçimde konur.
- **IT20.** Her istem **dört tohumla** koşulur (20260218'den 20260221'e). İlk iki tohum **iki
  koşum** sütunlarıdır; dördünün en büyüğü ile en küçüğü arasındaki fark **koşum bandıdır**.
- **IT21.** Bir öneğin **etkisi**, ilk iki koşumun ortalaması ile tabanın ilk iki koşumunun
  ortalaması arasındaki farktır.
- **IT22.** **Ölçülebilirlik ölçütü:** bir etki, karşılaştırılan iki istemin **bantlarının
  büyüğünden** büyük değilse ölçülmemiş sayılır. Ölçüt bu yönüyle tutucudur ve gerekçesi derste
  yazılıdır.
- **IT23.** Bedel belirteçtir. Önek bedeli **önek uzunluğu çarpı istek sayısıdır** ve toplam
  belirtecin içindedir; doğru etiket başına bedel ayrıca basılır.
- **IT24.** Benzeticinin iz tablosu koddadır ve okunabilir. Bir önek metninin hangi etikete ağırlık
  eklediği bu tablodan doğrulanır.
- **IT25.** Bu ders yalnız isabeti ve bedeli ölçer; yanıtın biçimi önceki derste kapatıldı ve
  burada sabittir.

## Tek Kayıtta Rol İşe Yaramış Görünüyor

İlk blok benzeticiyi ve kurguyu kurar, dört öneki tanımlar, her birinin yüz yirmi istekteki
bedelini yazar ve tek bir kurgu talebi tabanla ve rol önekiyle, iki ayrı tohumda çağırır.

```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 = ("Etiketler: fatura , ariza , sayac , tarife , kesinti ."
           " Talebi bu etiketlerden birine ata . Yanit olarak tek etiket yaz .")
ONEK = (("taban", ""),
        ("rol A", "Sen bir abone destek gorevlisisin ."),
        ("rol B", "Sen bir deneyimli saha teknisyenisin ."),
        ("rol C", "Sen dagitim sirketinde on yildir calisan kidemli bir kayit uzmanisin ."),
        ("davranis", "Once talebin ana nesnesini bul , sonra etiketi sec ."
                     " Emin olmadigin durumda talepte gecen ana sozcugu esas al ."))
TOHUMLAR = (TOHUM, TOHUM + 1, TOHUM + 2, TOHUM + 3)


def kur(o, x):
    return (o + " " if o else "") + YONERGE + " Talep: " + x["metin"]


print(f"{'onek':<9} {'belirtec':>9} {'120 istekte':>12}")
for ad, o in ONEK:
    b = len(belirtecle(o))
    print(f"{ad:<9} {b:>9d} {b * len(TALEP):>12d}")
x0 = TALEP[2]
print(f"KURGU talep {x0['no']} ({x0['konu']}): {x0['metin']}")
for ad, o in ONEK[:2]:
    SAYAC[0] = 0
    y = [cagir(kur(o, x0), tohum=t)["yanit"] for t in TOHUMLAR[:2]]
    print(f"{ad:<9} iki kosum: {y[0]} / {y[1]}")
```

```
onek       belirtec  120 istekte
taban             0            0
rol A             9         1080
rol B             9         1080
rol C            17         2040
davranis         27         3240
KURGU talep 4003 (ariza): evde su akmiyor bir ariza var galiba ayrica gecen ay da ayni sorun olmustu
taban     iki kosum: kesinti / ariza
rol A     iki kosum: ariza / ariza
```

Son iki satır bir istem değişikliğinin nasıl kanıtlanmış göründüğünü gösteriyor. Talebin gerçek
konusu `ariza`. Taban istem iki koşumda bir kez yanlış, bir kez doğru cevap verdi; rol öneki
eklenince iki koşumda da doğru cevap geldi. Tek kayda bakan biri buradan "rol isabeti yükseltti"
sonucunu çıkarır. Bu sonucun tek dayanağı, tabanın **zaten koşumdan koşuma oynuyor** olmasıdır.
Aynı gösteri, ters yönde çıkan bir kayıtla da yapılabilirdi.

## Kümede Ne Oluyor

İkinci blok aynı dört öneki 120 kaydın tamamında ve dört ayrı tohumda koşturur. Her satırda ilk
iki koşum, bu ikisinin ortalamasının tabandan farkı, dört tohumun bandı ve doğru etiket başına
bedel yan yana durur.

```python
def olc(o, tohum):
    SAYAC[0] = 0
    gi = ci = d = 0
    for x in TALEP:
        c = cagir(kur(o, x), tohum=tohum)
        gi, ci = gi + c["giris"], ci + c["cikis"]
        d += oku(c["yanit"]) == x["konu"]
    return {"isabet": d / len(TALEP), "toplam": gi + ci}


S = {ad: [olc(o, t) for t in TOHUMLAR] for ad, o in ONEK}
ti = [v["isabet"] for v in S["taban"]]
tab, tbant = (ti[0] + ti[1]) / 2, max(ti) - min(ti)
print(f"{'istem':<9} {'onek':>5} {'toplam':>7} {'kosum 1':>8} {'kosum 2':>8} {'etki':>8} "
      f"{'iki kosum':>10} {'bant':>7} {'olculur':>8} {'basina':>7}")
for ad, o in ONEK:
    i = [v["isabet"] for v in S[ad]]
    m = (i[0] + i[1]) / 2
    e, ik, bant = m - tab, abs(i[0] - i[1]), max(i) - min(i)
    t = S[ad][0]["toplam"]
    esik = max(bant, tbant)
    print(f"{ad:<9} {len(belirtecle(o)):>5d} {t:>7d} {i[0]:>8.4f} {i[1]:>8.4f} {e:>+8.4f} "
          f"{ik:>10.4f} {bant:>7.4f} {('evet' if abs(e) > esik else 'hayir'):>8} "
          f"{t / m / len(TALEP):>7.1f}")
```

```
istem      onek  toplam  kosum 1  kosum 2     etki  iki kosum    bant  olculur  basina
taban         0    5856   0.7500   0.7500  +0.0000     0.0000  0.1500    hayir    65.1
rol A         9    6940   0.7083   0.6583  -0.0667     0.0500  0.0667    hayir    84.6
rol B         9    6942   0.7250   0.6583  -0.0583     0.0667  0.1417    hayir    83.6
rol C        17    7863   0.6417   0.4167  -0.2208     0.2250  0.2250    hayir   123.8
davranis     27    9105   0.7083   0.8167  +0.0125     0.1083  0.1083    hayir    99.5
```

## İki Koşum Bandın Alt Sınırıdır

Tablonun ilk satırı ölçütün niçin bu biçimde kurulduğunu gösteriyor. Taban istem iki koşumda da
tam olarak 0,7500 verdi; iki koşum farkı **0,0000**. Bu sayıya bakarak "bu istem kararlıdır"
denebilirdi. Dört tohum koşulduğunda taban 0,7500, 0,7500, 0,8583 ve 0,7083 veriyor ve bandı
**0,1500** çıkıyor. İki koşumun çakışması belirsizliğin yokluğu değil, iki örneğin aynı yere
düşmesidir. **İki koşum bandın ölçüsü değil, alt sınırıdır.**

Ölçüt bu yüzden tutucu kuruldu: bir etki, karşılaştırılan iki istemin bantlarının büyüğünden
büyük değilse ölçülmemiş sayılır. Dört önekten hiçbiri bu eşiği geçemiyor. Rol A'nın etkisi
−0,0667, eşiği 0,1500. Rol B'nin etkisi −0,0583, eşiği 0,1500. Davranış önekinin etkisi +0,0125,
eşiği 0,1500. Rol C'nin etkisi −0,2208 ve eşiği kendi bandı olan 0,2250. Daha gevşek bir okumayla,
yalnız tabanın bandına bakılsaydı rol C eşiği geçerdi — ama geçtiği yön **aşağı** olurdu. Hangi
okuma seçilirse seçilsin sonuç aynıdır: **dört önekten hiçbiri isabeti ölçülebilir biçimde
yükseltmedi.**

Ölçülmüş olan tek şey bedeldir ve bedel bir bant taşımaz. Rol A ve rol B dokuzar belirteç; yüz
yirmi istekte 1080 belirteç ve toplamda 5856'dan 6940 ile 6942'ye çıkış. Rol C on yedi belirteç,
2040 tekrar, toplam 7863. Davranış öneki yirmi yedi belirteç, 3240 tekrar, toplam 9105. Doğru
etiket başına bedel 65,1 belirteçten 84,6, 83,6, 123,8 ve 99,5 belirtece çıkıyor. Doğru etiket
başına en pahalı istem tabanın **1,90 katıdır** ve karşılığında ölçülebilir hiçbir şey vermiyor.

## Rol Metni Yansız Değildir

Rol öneklerinin etkisi ölçülemez çıktı, ama etkilerinin **yönü** rastgele değil. Benzeticinin iz
tablosu koddadır ve okunabilir. Rol A'nın metnindeki `abone` parçası iz tablosunda `tarife`
etiketine bağlıdır; rol C'nin metnindeki `calis` parçası `ariza`ya, `kayit` parçası ise yanıltıcı
bağlar tablosunda yine `ariza`ya bağlıdır. Yani rol C her talepte, talebin içeriğinden bağımsız
olarak `ariza` etiketine ağırlık ekliyor. Rol B'nin metnindeki hiçbir parça iki tabloda da yer
almıyor; etkisi yalnız koşum gürültüsüdür.

Buradan çıkan yapısal sonuç isteme yazılan her metin için geçerlidir. **Rol metni ayrı bir kanal
değildir**; görev metniyle aynı belirteç dizisine girer ve taşıdığı sözcükler kararın içine
karışır. Bir role hangi sözcüklerin seçildiği, o rolün ne kadar inandırıcı yazıldığından daha çok
şey belirler. Bir istem yazarı rol cümlesini üslup olarak görürken, model onu kanıt olarak okur.

Bu, rol belirtmenin her görevde etkisiz olduğu anlamına gelmez; bu ölçüm tek bir görevde, tek bir
küme ve tek bir benzetici üzerinde yapıldı. Anlamına geldiği şey daha dardır ve kurs boyunca
sürer: **rol eklenmiş bir istem, farkı ölçülene kadar iyileştirilmiş bir istem değildir.** Bedeli
ise ölçüme gerek kalmadan bellidir, çünkü her istekte yeniden ödenir.

## Özet

- Tek bir kayıtta rol öneki tabanın yanlış verdiği cevabı düzeltti. Aynı önek 120 kayıtta isabeti
  0,7500'den 0,6833'e indirdi. Tek kayıt üzerinden yapılan gösteri, tabanın kendi oynamasını
  kanıt diye sunar.
- Taban istem iki koşumda da 0,7500 verdi, iki koşum farkı 0,0000. Dört tohumda bandı **0,1500**.
  İki koşum, bandın ölçüsü değil **alt sınırıdır**.
- Ölçülebilirlik ölçütü: bir etki, karşılaştırılan iki istemin bantlarının büyüğünden büyük
  değilse ölçülmemiş sayılır. Rol A −0,0667, rol B −0,0583, rol C −0,2208, davranış +0,0125;
  **dördü de eşiğin altında**.
- Bedel bant taşımaz ve tamamen ölçülüdür: önekler 9 ile 27 belirteç, 120 istekte 1080 ile 3240
  belirteç. Doğru etiket başına bedel 65,1'den 84,6, 83,6, 123,8 ve 99,5 belirtece çıkıyor.
- Rol metni ayrı bir kanal değildir. `abone` parçası iz tablosunda `tarife`ye, `calis` ve `kayit`
  parçaları `ariza`ya bağlıdır; rol cümlesi görev metniyle aynı dizide okunur ve karara karışır.

## Sonraki Adım

Bu derste isteme kimlik ve yordam eklendi, ama **ne istendiği** hiç değişmedi: talep her üç
istemde de aynı cümleydi. Görev tanımının kendisi bir tasarım kararıdır ve belirsiz bırakıldığında
bedeli öneklerinkinden büyüktür. Belirsiz bir talep tek bir yanlış cevap üretmez; **bir dağılım**
üretir ve o dağılım tek koşumda görünmez. Sonraki ders bunu ölçer: aynı belirsiz istem on koşumda
kaç ayrı biçimde yanıtlanıyor, talep ölçülebilir kılındığında bu sayı kaça iniyor, ve dağılımın
daralmasının kaç belirtece mal olduğu.
