---
title: 'Yapay Zekâ Mühendisi Kimdir'
source: 'https://academia.sh/tr/kurslar/yz-muhendisligine-giris/yapay-zeka-muhendisi-kimdir'
course: 'Yapay Zekâ Mühendisliğine Giriş'
language: tr
updated: '2026-08-17T18:06:36+00:00'
license: 'CC BY-SA 4.0'
---

# Yapay Zekâ Mühendisi Kimdir

Model eğitmeden ürün kurmanın ölçü biriminin kurulması: bir dil modeli benzeticisi yazılıyor ve verilmiş bir bileşenin yüzeyi beş sayıyla okunuyor. Aynı 120 kurgu destek talebinde düzeneksiz çağrı 0,6000 etiket isabeti ve 0,3833 etiketsiz yanıt payı veriyor, etiket kümesi ve biçim kısıtı eklenmiş küçük bir düzenek 0,7750 ile 0,0000 veriyor. Bedel yan yana yazılıyor: giriş belirteci 2300'den 5422'ye çıkıyor, çıkış belirteci 1353'ten 197'ye iniyor, çağrı sayısı 120'den 123'e çıkıyor ve doğru etiket başına belirteç 50,7'den 60,4'e yükseliyor.

Önceki müfredat yüz yirmi bir derste bir modeli kurdu, ölçtü, açıkladı ve kime ne yaptığını
saydı. Kapanışında bir eksik yazılıydı: bunların hepsi **tek bir koşumda, tek bir makinede, bir
defterin içinde** oldu. Modelin bir **sisteme** dönüşmesi — sürüm alması, başkalarının çağırdığı
bir yüz kazanması, bozulduğunda geri alınması ve maliyetinin sayılması — hiç ele alınmadı.

Bu müfredat oradan açılır ve bir şey daha ekler: model artık **senin eğittiğin şey de değildir**.
Verilmiş, ağırlığını göremediğin, ayarını değiştiremediğin ve içine bakamadığın bir bileşendir.
Elinde kalan tek şey onun **çevresidir**: ne söylediğin, yanına ne koyduğun, çıktısını nasıl
okuduğun, ne zaman vazgeçtiğin. Bu müfredatın ölçtüğü şey model değil, o çevredir; adı **düzenek**
olacak. Bu ders ölçünün birimini kurar ve yedi kurs boyunca kullanılacak **dil modeli
benzeticisini** yazar.

- **YA1.** Bu müfredatın hiçbir dersinde gerçek bir model uç noktası çağrılmaz. Kod, standart
  kitaplıkla yazılmış bir **benzeticiyi** çağırır. Benzetici bir ürünü taklit etmez; bir uç
  noktanın **ölçülebilir yüzeyini** taşır.
- **YA2.** Benzeticinin belirteçleyicisi kurgudur: sözcükler boşlukta ayrılır ve beş damgadan uzun
  parçalar bölünür. Belirteçlemenin kendisi M27'nin doğal dil işleme kursunda ölçüldü ve burada
  tekrarlanmaz; burada belirteç yalnız bir **bedel birimidir**.
- **YA3.** Yüzey beş ölçüdür: giriş belirteci, çıkış belirteci, **bağlam penceresi** (240 belirteç),
  en büyük çıktı uzunluğu (24 belirteç) ve durum.
- **YA4.** Benzetici tohumla belirlenir (**20260218**). Aynı istem aynı tohumda aynı yanıtı verir;
  sayılar koşumdan koşuma oynamaz. **Belirsizlik tohum değiştirilerek** ölçülür.
- **YA5.** İki başarısızlık kurulur: hız sınırı çağrı sayısına bağlıdır (her otuz yedinci çağrı),
  zaman aşımı istem uzunluğuna bağlıdır. İkisi de başarısızlık payına girer.
- **YA6.** Destek talepleri **kurgudur**: 120 kayıt, beş konu, ve kayıtların bir bölümüne eklenen
  yanıltıcı bir cümle. M26 ve M27'nin bölgesel ölçüm ağı burada bir destek yardımcısına dönüşür.
- **YA7.** Benzeticinin iç işaret tablosunda birkaç **yanıltıcı bağ** vardır. Bir modelin
  sistematik olarak karıştırdığı kavram çiftlerinin kurgu karşılığıdır ve dışarıdan giderilemez.
- **YA8.** Ö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.

## Modelin Ölçülebilir Yüzeyi

Verilmiş bir bileşen içinden ölçülemez. Ağırlığı görünmez, eğitim verisi bilinmez, kararının
gerekçesi okunmaz. Geriye tek bir ölçüm yeri kalır: bileşenin **dışarıya verdiği yüzey**. Kaç
belirteç girdi, kaç belirteç çıktı, sınır neredeydi, aynı girdi iki koşumda ne verdi, çağrı hangi
durumla döndü. **Kursun kuralı budur: verilmiş bir bileşen yüzeyinden ölçülür.**

İlk blok bu yüzeyi kurar. Çağrılan şey bir dil modeli benzeticisidir; gerçek bir uç noktaya hiçbir
istek gitmez.

```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


t = TALEP[0]
b = belirtecle(t["metin"])
print(f"KURGU talep kumesi: {len(TALEP)} kayit, {len(KONU)} konu")
print(f"ornek talep {t['no']}: {t['metin']}")
print(f"belirtec sayisi {len(b)}, ilk alti parca {b[:6]}")
s = cagir("Su destek talebini yanitla: " + t["metin"])
print(f"\ndurum {s['durum']}, giris {s['giris']} belirtec, cikis {s['cikis']} belirtec")
print(f"yanit: {s['yanit']}")
i1 = "Su destek talebini yanitla: " + TALEP[3]["metin"]
for th in (TOHUM, TOHUM + 1):
    print(f"tohum {th}: {cagir(i1, tohum=th)['yanit']}")
u = cagir("Su destek talebini yanitla: " + t["metin"], en_uzun=4)
print(f"\nen buyuk cikti 4 belirtec: {u['yanit']}")
uz = cagir(" ".join(x["metin"] for x in TALEP[:20]))
print(f"pencereyi asan istem: durum {uz['durum']}, giris {uz['giris']} (sinir {PENCERE})")
```

```
KURGU talep kumesi: 120 kayit, 5 konu
ornek talep 4001: planli kesinti duyurusu nereden takip edilir
belirtec sayisi 11, ilk alti parca ['planl', 'i', 'kesin', 'ti', 'duyur', 'usu']

durum tamam, giris 18 belirtec, cikis 14 belirtec
yanit: bu kayit kesinti basligina girer , ilgili ekibe yonlendirildi
tohum 20260218: kaydiniz alindi , konuyu inceleyip donus yapacagiz
tohum 20260219: bu kayit ariza basligina girer , ilgili ekibe yonlendirildi

en buyuk cikti 4 belirtec: bu kayit kesin ti
pencereyi asan istem: durum baglam_asimi, giris 266 (sinir 240)
```

Beş satırın her biri bir sınırı gösteriyor. Altı sözcüklük bir talep **on bir belirteç** ediyor;
"duyurusu" tek başına iki parçaya bölünüyor. Eklemeli bir dilde sözcük sayısı ile belirteç sayısı
aynı şey değildir ve bedel ikincisinden okunur.

Dördüncü ve beşinci satır bu müfredatın en rahatsız edici özelliğidir. **Aynı istem, iki tohumda
iki ayrı yanıt** verdi: birincisinde yanıt hiçbir etiket taşımıyor, ikincisinde `ariza` diyor.
Talebin gerçek konusu da `ariza`. Yani doğru yanıt bir kez çıktı, bir kez çıkmadı ve arada istem
hiç değişmedi. Bir bileşenin aynı girdiye iki ayrı yanıt vermesi, çevresine kurulacak her şeyin
gerekçesidir.

Son iki satır iki sert sınırdır. En büyük çıktı uzunluğu dörde indirildiğinde yanıt `bu kayit
kesin ti` oluyor: **durdurma koşulu etiketin ortasından kesti** ve çıktı okunamaz hâle geldi.
Yirmi talep birleştirilip gönderildiğinde 266 belirteç bağlam penceresini aşıyor ve çağrı hiç
yanıt üretmeden dönüyor. İkisi de modelin "yanlış düşünmesi" değil, yüzeyin verdiği bir sayıdır.

## Çıplak Çağrı ve Düzeneğin Farkı

Görev sabittir: 120 kurgu destek talebinin her biri beş konudan birine atanacak. İki yol yan yana
konur. **Çıplak çağrı** en yalın kullanımdır — talebi olduğu gibi gönderip yanıtı okumak.
**Düzenek** üç küçük parçadır: istemde etiket kümesini saymak, biçimi dayatmak ve okunamayan
yanıtta bir kez yeniden denemek.

```python
YONERGE = ("Talebi su etiketlerden birine ata: fatura , ariza , sayac , tarife , "
           "kesinti . Yanit olarak tek etiket yaz . Talep: ")


def olc(duzenek):
    SAYAC[0] = 0
    g = c = d = bos = yd = hata = 0
    for x in TALEP:
        istem = (YONERGE if duzenek else "Su destek talebini yanitla: ") + x["metin"]
        s = cagir(istem)
        g, c = g + s["giris"], c + s["cikis"]
        hata += s["durum"] != "tamam"
        e = oku(s["yanit"])
        if e is None and duzenek:            # bicim okunamadi: bir kez yeniden dene
            yd += 1
            s = cagir(istem, tohum=TOHUM + 1)
            g, c = g + s["giris"], c + s["cikis"]
            hata += s["durum"] != "tamam"
            e = oku(s["yanit"])
        bos += e is None
        d += e == x["konu"]
    return {"isabet": d / len(TALEP), "bos": bos / len(TALEP), "cagri": SAYAC[0],
            "giris": g, "cikis": c, "yeniden": yd, "hata": hata / SAYAC[0]}


A, B = olc(False), olc(True)
print(f"{'olcu':<22} {'ciplak cagri':>13} {'duzenekle':>11} {'fark':>9}")
for ad, k, bic in (("etiket isabeti", "isabet", "{:.4f}"),
                   ("etiketsiz yanit payi", "bos", "{:.4f}"),
                   ("cagri sayisi", "cagri", "{:d}"), ("giris belirteci", "giris", "{:d}"),
                   ("cikis belirteci", "cikis", "{:d}"),
                   ("basarisizlik payi", "hata", "{:.4f}")):
    f = B[k] - A[k]
    print(f"{ad:<22} {bic.format(A[k]):>13} {bic.format(B[k]):>11} "
          f"{('{:+.4f}' if '.' in bic else '{:+d}').format(f):>9}")
tA, tB = A["giris"] + A["cikis"], B["giris"] + B["cikis"]
print(f"\ntoplam belirtec {tA} -> {tB} ({tB / tA:.2f} kat), yeniden deneme {B['yeniden']}")
print(f"dogru etiket basina bedel: {tA / A['isabet'] / len(TALEP):.1f} -> "
      f"{tB / B['isabet'] / len(TALEP):.1f} belirtec")
```

```
olcu                    ciplak cagri   duzenekle      fark
etiket isabeti                0.6000      0.7750   +0.1750
etiketsiz yanit payi          0.3833      0.0000   -0.3833
cagri sayisi                     120         123        +3
giris belirteci                 2300        5422     +3122
cikis belirteci                 1353         197     -1156
basarisizlik payi             0.0250      0.0244   -0.0006

toplam belirtec 3653 -> 5619 (1.54 kat), yeniden deneme 3
dogru etiket basina bedel: 50.7 -> 60.4 belirtec
```

İlk satır düzeneğin kazancıdır: **0,6000'den 0,7750'ye**, artış **0,1750**. İkinci satır kazancın
nereden geldiğini söylüyor. Çıplak çağrıda yanıtların **0,3833 payından** hiçbir etiket
okunamıyordu; ya yanıt beş etiketin dışında bir sözcükle kapanıyordu ya da "kaydınız alındı"
biçiminde hiçbir konu adı taşımıyordu. Etiket kümesi isteme yazıldığında bu pay **sıfıra**
iniyor. Kazanç modelin daha iyi düşünmesinden değil, **cevabın okunabilir hâle gelmesinden**
geliyor.

## Bedeli Yazılmayan Düzenek Ölçülmemiş Sayılır

Aynı tablonun alt yarısı bedeldir ve bu müfredatta üst yarısı kadar bağlayıcıdır. Giriş belirteci
**2300'den 5422'ye** çıktı: yönergeyi her talebin başına eklemek, istemin uzunluğunu iki katından
fazla artırdı. Çıkış belirteci ters yöne gitti, **1353'ten 197'ye**; tek sözcüklük yanıt üretmek,
cümle üretmekten yedi kat ucuzdur. Çağrı sayısı **120'den 123'e** çıktı; üç fazla çağrının hepsi
hız sınırına takılıp yeniden denenen isteklerdir. Başarısızlık payı iki yolda da yaklaşık aynı
kaldı, çünkü hız sınırı düzeneğin değil **yüzeyin** bir özelliğidir.

Son satır bu dersin asıl sayısıdır. Toplam belirteç **1,54 kat** arttı. İsabet arttığı için doğru
yanıt başına bedel bunun altında kalıyor, ama yine de **50,7 belirteçten 60,4 belirtece** çıkıyor.
Yani düzenek işe yaradı ve **aynı anda pahalılaştı**. İki sayıdan yalnız birini yazan bir rapor,
ölçüm değil savunmadır. **Müfredatın kuralı budur: bir yapay zekâ sisteminin sayısı, modelin sayısı
değil düzeneğin sayısıdır; bedeli yazılmayan düzenek ölçülmemiş sayılır.**

Yapay zekâ mühendisinin işi bu tabloda görünür. Model verilmiştir ve bu tabloda hiç değişmedi:
aynı benzetici, aynı tohum, aynı ağırlık. Değişen tek şey **çevresidir** — isteme yazılan etiket
kümesi, dayatılan biçim, okunamayan yanıtta verilen yeniden deneme kararı, ve gecikme sınıfının
tek çağrıda tutulması. Yüz yirmi bir derste öğrenilen ayarlar burada elde değildir; onların yerine
başka ayarlar vardır ve hepsi modelin **dışında** durur. Bir sonraki ders bu iki ayar kümesini
yan yana koyup sayar.

## Özet

- Verilmiş bir bileşen içinden ölçülemez, **yüzeyinden** ölçülür: giriş belirteci, çıkış belirteci,
  bağlam penceresi, durdurma koşulu ve durum. Bu müfredatın kodu bir **benzetici** çağırır.
- Model belirsiz bir bileşendir. Aynı istem iki tohumda iki ayrı yanıt verdi; birinde doğru etiket
  çıktı, öbüründe yanıt hiçbir etiket taşımadı.
- Aynı 120 kurgu talepte çıplak çağrı **0,6000** etiket isabeti veriyor ve yanıtların **0,3833**
  payından hiçbir etiket okunamıyor. Etiket kümesi, biçim kısıtı ve tek yeniden denemeden oluşan
  düzenek **0,7750** ve **0,0000** veriyor.
- Bedel yan yana yazılır: giriş belirteci 2300'den 5422'ye, çağrı 120'den 123'e çıkıyor, çıkış
  belirteci 1353'ten 197'ye iniyor, toplam belirteç **1,54 kat** artıyor.
- Doğru etiket başına bedel **50,7'den 60,4 belirtece** yükseliyor: düzenek hem işe yaradı hem
  pahalılaştı. Bedeli yazılmayan düzenek ölçülmemiş sayılır.

## Sonraki Adım

Bu derste model hiç değişmedi ve bütün kazanç onun dışından geldi. Bu, önceki müfredatın tam
tersidir: orada kazanç modelin içinden gelirdi ve dışarısı sabit tutulurdu. İki yaklaşım aynı
problemi çözebilir, ama ellerinde tuttukları şey aynı değildir. Sonraki ders bunu sayar: aynı
destek talebi probleminde eğiten yaklaşımın kaç ayarı vardır, kullanan yaklaşımın kaç ayarı
vardır, bu ayarların kaçı sayıyı gerçekten oynatır, ve iki yaklaşımda **hangi kararın kimde
olduğu** nerede ayrılır.
