EN
Bölüm 4 Blog · 4.1.1
8 dk okuma

Sıfır bütçeyle
bir asistan kurduk

Yapım notu · Mikrobiyota asistanı · Dört gün

Kısaca§1

Bir takviye gıda markası için, bağırsak mikrobiyotası sorularına cevap veren bir asistan yaptık. Dört günde canlıya çıktı. Asıl uğraştıran şey model seçmek olmadı. “Ücretsiz olsun” demeyi sonradan halledilecek bir detay sanıyordum, öyle değilmiş. Baştan her kararı o belirledi. Aşağıda sırayla ne olduğunu yazdım, yanlış yaptığım yerler de var.

Nasıl başladı§2

İşin başında elimde şartname yoktu. Bir sohbet bağlantısı vardı, “burada konuşulan şeyi bir asistan uygulamasına çevirelim” dedim, o kadar.

Aslında kötü bir başlangıç değil. Şartname size ürünün ne olduğunu anlatır. Sohbet ise insanların gerçekten ne sorduğunu gösteriyor. Asistanın işi de ürünü anlatmak değil, sorulana cevap vermek.

Baştan yanlış kurmuşum§3

İlk sürümde her soruyu markanın bilgi tabanına bağlamıştım. Orada karşılığı olmayan bir şey sorulunca “bu bilgi bende yok” diyordu.

Sonra şunu sordum: tansiyon ve şeker hastalarında hangi probiyotik suşları daha önemli, bunların en iyi prebiyotikleri hangileri? Cevap veremedi. Halbuki markanın ürünü bu sorunun içinde sadece bir örnek. Asistanın sınırını ürüne çekerseniz elinizde asistan değil katalog oluyor.

Kapsamı ikiye ayırdık.

Markanın kendi bilgileri. Ürün konumlandırması, söylenebilecekler, söylenemeyecekler. Burası bağlayıcı. Bilgi yoksa yok diyor, uydurmuyor.

Bilimsel taraf. Suşlar, dozlar, çalışmalar. Burada susmuyor. Ama serbest de değil. Suş kodunu tam yazıyor (cins, tür, suş), her iddianın yanına kanıtın türünü koyuyor (meta-analiz, randomize çalışma, gözlemsel, hayvan, in vitro), ilaç etkileşimi uyarısını atlamıyor.

Bir asistanın “bilmiyorum” demesi kötü. Kaynağını söylemeden biliyormuş gibi yapması daha kötü.

“Ücretsiz olsun” demek ne demek§4

Bunu nasıl ücretsiz çalıştırırım diye sordum. Cevabı ararken iki yere uğradık.

Önce kendi bilgisayarıma model kurmayı denedik. Çalıştı, ama uygulama benim bilgisayarımda değil sunucuda çalışacak. Yani geliştirirken iyi, yayında işe yaramıyor.

Sonra ücretsiz bulut modellerine geçtik. Bunlar iş görüyor ama parayla değil belirsizlikle ödüyorsunuz. İstek kuyruğa giriyor, model bazen kayboluyor, cevap bazen dakikalarca geliyor.

Buradan şunu öğrendim. Ücretsiz kalma kararı sonradan iyileştirilecek bir tercih değil, en baştan mimariyi belirleyen şey. Aşağıdaki iki bölüm de zaten bunun sonucu.

Vercel neden olmadı§5

Ücretsiz modeller cevabı 1,5 ile 5,5 dakika arasında veriyor. Vercel’in ücretsiz planında ise fonksiyonlar 60 saniyede kesiliyor.

Yani model daha cevabı bitirmeden bağlantı kapanıyordu. Ekrana düşen hata da modelle ilgiliymiş gibi duruyor, halbuki sorun sınırın kendisi. Uygulamayı uzun isteklere izin veren bir yere (Render) taşıdık. Ücretsiz modelin yavaşlığı kusur değil, bilinen bir maliyet. Barındırdığınız yerin bunu kaldırması lazım.

İkinci bir yapay zekâ da kod yazıyordu§6

Projede koda dokunan tek yardımcı ben değildim. Editörün içinde çalışan ikinci bir ajan daha vardı, ucuz ve hızlı bir modele bağlıydı. Ona uzun bir kural dosyası yazdım. Ne yapacak, neyi asla yapmayacak, hepsini gerekçesiyle anlattım.

Sonra baktım, bilgi klasörüne kaynağı olmayan klinik rakamlar yazmış. Kural dosyasında “uydurma çalışma, sayı, suş kodu üretme” yazıyordu. Küçük model o satırı gerekçelerin arasında görmemiş.

Üç şey yaptık. Dosyayı sildik. Proje o güne kadar git deposunda değildi, o gün depoyu kurduk, çünkü asıl sorun ajanın ne değiştirdiğini görememekti. Kural dosyasını da baştan yazdık. Gerekçeleri kısalttık, yasakları emir gibi yazdık, bilgi klasörüne yazma yetkisini tamamen kaldırdık.

Küçük ve hızlı modeller uzun açıklamaları atlıyor, kısa ve net yasaklara uyuyor. Kural dosyası ikna metni değilmiş, sınır listesiymiş.

Yanlış anlaşılma§7

Bu hatayı ben yapmadım ama bedelini ben ödedim, o yüzden yazıyorum.

Konuşmanın içinde bir sağlayıcının adı geçti. Ben o cümleyi tekrarladım. Karşı taraf bunu “hadi bunu yapalım” diye anladı ve bütün yapılandırmayı değiştirdi. Ertesi gün kendimi “bu sağlayıcıyı neden açtık, anlamadım” diye sorarken buldum Düzeltme. Haklıydım da, onay vermemiştim, sadece söyleneni tekrarlamıştım.

Geri alması zor olmadı ama saat kaybettik. Buradan çıkan kural hem bana hem karşı tarafa geçerli. Bir ismi tekrarlamak onay değil. Geri dönüşü zahmetli kararlarda tek cümlelik net bir onay, sonradan yapılacak yarım saatlik geri almadan ucuz.

28 Ağustos: kuyruğa girdik§8

Bugün uygulama zaman aşımı vermeye başladı. Kodda bir sorun yoktu. Ücretsiz model katmanı yoğundu, istekler kuyrukta bekliyordu, arada model hiç cevap vermiyordu.

Kolay çözüm ortadaydı. Aynı modelin ücretli hâli soru başına 0,003 dolar civarı, yani ayda birkaç dolar. Onu seçmedik. Hesapta bilerek sıfır bakiye duruyor. Bu projede ücretsiz olmak bir hedef değil, şartname maddesi.

O yüzden çözümü bütçede değil dayanıklılıkta aradık. Birkaç ücretsiz modeli arka arkaya dizdik. Biri kuyruğa girerse ya da kaybolursa istek diğerine geçiyor. Zaman aşımı sınırlarını uygulamanın içinde tanımladık, yarım gelen cevabı da atmıyoruz.

Sistem hâlâ yavaş. Ama artık yavaşlık hata değil, beklenen şey. Fark, kullanıcıya ne söylediğinizde ortaya çıkıyor. “Bir hata oluştu” demekle “ücretsiz modeller şu an yoğun, isteğiniz sırada” demek aynı gecikmeyi bambaşka gösteriyor.

Aklımda kalan üç şey§9

Bir. Kısıtı en baştan söyleyin. “Ücretsiz olacak” cümlesi ilk gün söylenince bir mimari kararı oluyor, dördüncü gün söylenince geri alma işi.

İki. Yapay zekâya kural yazarken onu ikna etmeye çalışmayın. Kısa yazın, emir gibi yazın, yasakları sıralayın. Gerekçeyi başka yere koyun.

Üç. Bir cümleyi tekrarlamak onay değil. Karşınızdaki ister insan olsun ister model, geri dönüşü pahalı işlerde açık onay isteyin.

Ubeyd Gencer · İstanbul, Türkiye Bölüm 4 · Blog Referans kılavuzu · Sürüm 2026.08