Metlivi Blog

Net Kurallara, Hafızaya ve Oyuncu Seçimine Sahip Bir Yapay Zekâ Bot Oyunu Nasıl Tasarlanır?

Oynanabilir bir yapay zekâ bot oyunu tasarlamak için küçük ve tekrarlanabilir bir döngü tanımlayın, oyun durumunu sohbetin dışında saklayın ve her oyuncu eylemine net bir sonuç verin. İstekleri botun yorumlamasını ve olayları betimlemesini sağlayın; maliyetleri, ilerlemeyi ve sonları ise açık kuralların belirlemesine izin verin. Bu rehber, yapay zekâlı bir karakter veya anlatıcı içeren metin tabanlı bir oyun geliştiren oyun yapımcıları içindir. Buradaki görev, oyuncuların seçeneklerini anladığı, kararlarının önemini gördüğü ve geçerli bir sona ulaştığı kısa ve test edilebilir tek bir oturum oluşturmaktır. Aşağıdaki teslimat oyunu örnek bir tasarımdır; test edilmiş bir ürün veya raporlanmış bir vaka çalışması değildir.

22 Eylül 20263 dakikalık okumaOkuma, sanat ve kültürYazan: Metlivi Editorial Team
Bölüm 1

Yapay zekâ olmadan da oynayabileceğiniz bir çekirdek döngüyle başlayın

Döngüyü tek bir cümlede yazın: Durumu göster → bir eylemi kabul et → kuralları kontrol et → durumu güncelle → sonucu ve sıradaki seçenekleri göster. Her tur bu döngüyü tamamlamalı veya neden ilerleyemediğini açıklamalıdır.

Bir kişilik istemi (personality prompt) yazmadan önce hedefi, mevcut eylemleri, eylem maliyetlerini ve bitiş koşullarını tanımlayın. Oyunu dizin kartlarıyla veya bir elektronik tabloyla yürütebilmelisiniz. Bu, üretilen diyaloglar çeşitlilik katmadan önce mekanikleri incelemeyi mümkün kılar.

*Festival Parcel* (Festival Paketi) adında küçük bir oyunu ele alalım. Oyuncunun bir paketi teslim etmek için beş zaman birimi vardır. Doğrudan bir rotayı veya bahçe rotasını seçebilir ve isteğe bağlı olarak yola çıkmadan önce dekoratif bir kurdele alabilir. Bir bot, rotaları açıklayan ve teslimat hakkında yorum yapan festival kuryesini oynar.

Önerilen kurallar kasıtlı olarak yalındır:

Bu kuralları ilk seçimden önce gösterin. Teslimat eylemlerinin oturumu sonlandırdığını, bu nedenle oyuncuların kurdeleyi önceden alması gerektiğini açıklayın. Son zaman birimini harcayan bir teslimat yine de başarılı olur çünkü başarı kontrolü ilk sırada gelir.

Bu prototip eksiksiz bir başlangıca, karar alanına ve sona sahiptir. Ek karakterler veya mekânlar, bu döngüye faydalı kararlar ekleyerek yerlerini hak etmelidir.

Depoda paketle, beş zaman birimiyle ve kurdele olmadan başlayın.
Kurdeleyi almak bir zaman birimine mal olur ve yalnızca bir kez yapılabilir.
Doğrudan teslimat üç zaman birimine mal olur ve oturumu başarıyla sonlandırır.
Bahçe yoluyla teslimat dört zaman birimine mal olur ve sona bir bahçe kartpostalı ekleyerek oturumu başarıyla sonlandırır.
Beklemek bir zaman birimine mal olur.
Durum kontrolleri, kural soruları ve açıklama talepleri hiçbir maliyet getirmez.
Bir eyleme yalnızca tam maliyetini karşılayacak kadar zaman kaldığında izin verilir.
Geçerli bir eylemin ardından öncelikle teslimatın başarılı olup olmadığını kontrol edin. Paket hâlâ teslim edilmediyse ve karşılanabilir hiçbir rota yoksa, kaçırılmış teslimat sonucuyla bitirin.
Bölüm 2

Sonuçlar için açık durumu (explicit state) tek yetkili kılın

Durumu (state), neyin doğru olduğuna dair oyunun resmi kaydı olarak kabul edin. Sohbet metni bu kaydı açıklayabilir ancak onu sessizce değiştirmemelidir.

Robert Nystrom'un *Game Programming Patterns* kitabındaki State (Durum) bölümü (https://gameprogrammingpatterns.com/state.html), sonlu durum makinelerini durumlar, girdiler ve izin verilen geçişler üzerinden açıklar. Ayrıca gevşek bir şekilde birleştirilmiş Boole bayraklarının nasıl geçersiz kombinasyonlar üretebileceğini gösterir. Bu ilkeyi oyununuzun yaşam döngüsüne uygulayın: tanımlanmış geçişlere sahip, active (aktif), delivered (teslim edildi) veya missed (kaçırıldı) gibi tek bir oturum durumu kullanın.

Teslimat prototipi için küçük bir durum belirtimi yeterlidir:

Bahçe kartpostalını, onunla çelişebilecek ikinci bir değer olarak saklamak yerine seçilen rotadan türetin. Benzer şekilde, o an mevcut olan eylemleri durumdan ve kurallardan hesaplayın.

Sabit bir işlem sırası kullanın: isteği yorumlayın, eylemini ve parametrelerini doğrulayın, sonucu hesaplayın, durum değişikliğini işleyin (commit), ardından bunu anlatın. Anlatıcıya işlenmiş sonucu ve izin verilen sıradaki eylemleri verin. Anlatıcı ikinci bir hesaplama uydurmamalıdır.

Örneğin, kurdele alındıktan sonra kesin sonuç şudur: dört zaman birimi kalmıştır, kurdele alınmıştır ve her iki rota da karşılanabilir durumdadır. Bot, kurdelenin rengini mekanik bir etkisi olmadığı sürece betimleyebilir. Ancak habersiz bir zaman maliyeti ekleyemez veya ikinci bir kurdele veremez.

Bu koşulların prototipini mevcut bir anlatı aracıyla oluşturabilirsiniz. Inkle'ın resmi etkileşimli kurgu öğreticisi (https://www.inklestudios.com/ink/web-tutorial/), koşullu seçimleri, daha önce ziyaret edilen içeriğin takibini, değişkenleri ve açık sonları açıklar. Bu özellikler, yapay zekâ anlatımı eklemeden önce kurgulanan oyunu test etmek için faydalı bir temel sunar.

Alan — Başlangıç değeri — Kural
Oturum durumu — active — Yalnızca aktif oturumlar oynanış eylemlerini kabul eder
Kalan zaman — 5 — Sıfırın altına düşemez
Kurdele alındı mı — false — Bir kez true olarak değişebilir
İzlenen rota — none — Teslimat sırasında direct veya garden olur
İşlenen eylem sayısı — 0 — Kabul edilen her oynanış eyleminde bir artar
Bölüm 3

Oyunculara anlayabilecekleri ve etkileyebilecekleri seçimler sunun

Bu tasarım için oyuncu iradesini (agency), oyuncunun anlamlı bir farkı öngörüp öngöremediğine ve ardından bunu sonuçta gözlemleyip gözlemleyemediğine göre değerlendirin. Aynı sonuca çıkan farklı ifadelerle yazılmış birkaç buton bunu test etmek için pek bir işe yaramaz.

*Festival Parcel* oyununda rota kararı farklı oyuncu tercihlerini destekler:

Bunlar belirtilen kurallardan çıkarılan örnek hesaplamalardır. Basit bir karar desteği sağlarlar: daha erken bitirmek için doğrudan teslimatı seçin, süsleme için kurdeleyi alın veya kartpostal için bahçe rotasını tercih edin. Kalan zaman burada bir son ayrıntısıdır; gizlice puan kazandırmaz.

Oyun daha sonra belirli bir sonucu ödüllendirecekse, bu puanlamayı karardan önce açıklayın. Aksi takdirde oyuncular hedeflediğiniz ödünleşimleri (tradeoff) değerlendiremezler.

Görünür eylemlerin yanı sıra serbest metin girişini de destekleyin. "Manzaralı yoldan gidelim", bahçe teslimatı ile eşleşebilir. "Özel bir şey olsun" ise belirsizdir: kurdeleyi almak, bahçe rotasını seçmek veya her ikisi anlamına gelebilir. Zaman harcamadan kısa bir açıklama isteyin.

İlk prototip için mesaj başına bir oynanış eylemi kabul edin. Oyuncu bir eylem dizisi talep ederse adımlarını sunun ve ilk eylemi seçmesini isteyin. Bu, sonraki adımlarının kullanılamaz olduğu anlaşılan bir planın kısmen yürütülmesini önler.

Desteklenmeyen isteklerin bilgilendirici olmasını sağlayın. Oyuncu uçmak isterse, mevcut rotaların doğrudan ve bahçe olduğunu maliyetleriyle birlikte açıklayın. Serbest metin ifade özgürlüğünü genişletebilirken, eylem sistemi öngörülebilir bir yetenek kümesini korur.

Plan — Toplam zaman maliyeti — Görünür sonuç
Doğrudan teslimat — 3 — Kalan 2 zaman birimiyle teslim edilen sade paket
Kurdeleyi al, ardından doğrudan teslimat — 4 — Kalan 1 zaman birimiyle teslim edilen süslü paket
Bahçe teslimatı — 4 — Bir bahçe kartpostalıyla teslim edilen sade paket
Kurdeleyi al, ardından bahçe teslimatı — 5 — Bir bahçe kartpostalıyla teslim edilen süslü paket
Bölüm 4

Botun neyi hatırladığını ve neyi bilebileceğini tanımlayın

Hafızayı her biri farklı bir amaca sahip üç katmana ayırın.

Kesin oturum durumu (authoritative session state); kaynakları, ilerlemeyi, seçilen rotaları ve sonları saklar. Kaydetme ve yeniden yükleme işlemlerinde kalıcılığını korur ve yalnızca doğrulanmış eylemlerle değişir.

Oturum olay günlüğü, işlenen eylemleri ve bunların sonuçlarını kaydeder. Bir girdi, 2 numaralı eylemin kurdeleyi aldığını ve zamanı beşten dörde düşürdüğünü belirtebilir. Bu, hata ayıklamayı ve doğru özetleri destekler. Tekrarlanan bir isteğin aynı olayı iki kez uygulayamaması için eylem tanımlayıcılarını saklayın.

Anlatı bağlamı, tonu ve sürekliliği korumak için kullanılan son diyalogları ve kısa bir özeti içerir. Gerçek oyun durumu silinmeden kısaltılabilir.

Anthropic'in etkili bağlam mühendisliği rehberi (https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents), hem konuşma geçmişini özetlemeyi hem de bağlam penceresinin dışında kalıcı notlar tutmayı ele alır. Ayrıca agresif özetlemenin önemli ayrıntıları kaybettirebileceği konusunda uyarır. Buradaki tasarım çıkarımı, kesin mekanik olguları yapılandırılmış depolamada tutmak ve özetleri konuşma sürekliliği için kullanmaktır.

Depolama sınırlarının yanı sıra bilgi sınırlarını da belirleyin. Bir karakter yalnızca bilmesine izin verilen olguları almalıdır. Sonraki bir sürüm gizli bir rota içeriyorsa, keşif koşulu karşılanana kadar bunu o karakterin bağlamının dışında tutun. Oyun motorunun erişebildiği durumun tamamının anlatıcıya sunulması gerekmez.

Bu küçük oyun için ilerlemeyi kaydedilen oturum içinde tutun ve yeni bir tura başlarken temizleyin. Tek bir rota seçiminden kalıcı oyuncu tercihleri çıkarmaktan kaçının. Daha kısa açıklamalar gibi kaydedilen bir tercih eklerseniz, bunu açık ve düzenlenebilir yapın.

Hafızayı somut bir diziyle test edin: kurdeleyi alın, kaydedin, yeniden yükleyin, durum sorun ve bahçe teslimatını seçin. Kurdele alınmış olarak kalmalı, teslimattan önce dört zaman birimi kalmalı ve son zaman sıfır olmalıdır.

Bölüm 5

Oyun başarısızlığı ve sistem arızası için ayrı yanıtlar tasarlayın

Kaçırılan bir hedef oyunun bir parçasıdır. Başarısız bir üretim isteği ise bir uygulama sorunudur. Bunlara farklı sonuçlar verin.

Oyun başarısızlığında, turun sona ermesine neden olan kuralı belirtin. Üç kez bekledikten sonra yalnızca iki zaman birimi kalır, bu nedenle hiçbir teslimat rotası karşılanamaz. Oyuncuyu kazanılamaz aktif bir oturumda bırakmak yerine, net bir açıklama ve yeniden başlatma seçeneğiyle oyunu hemen sonlandırın.

Uygulama arızaları için ayrıntılı anlatım eklemeden önce kurtarma davranışını tanımlayın:

Okunamayan bir kayıt dosyasını sessizce yeni bir oyunla değiştirmeyin. Bu durum kaybedilen ilerlemeyi gizler ve bir sonraki yanıtı yanıltıcı hale getirir.

Her eylem için sade bir sonuç mesajı oluşturun: ne oldu, ne değişti ve sırada ne var. Botun etkileyici anlatımı bu sonuca eşlik edebilir. Bir zaman aşımı veya çelişkili yanıt durumunda, sade mesaj yine de oyuncunun devam etmesini sağlar.

Sonları doğru bir özetle tamamlayın. Kurdeleden yalnızca alındıysa, kartpostaldan ise yalnızca bahçe rotası seçildiyse bahsedin. Üretilen metin, oyuncunun oturum boyunca seçerek oluşturduğu ayrımları korumalıdır.

Durum — Gerekli davranış
Belirsiz oyuncu isteği — Açıklama isteyin; durumu koruyun
Kullanılamayan eylem — Karşılanmayan koşulu açıklayın; durumu koruyun
Geçersiz yapay zekâ eylem önerisi — Reddedin ve geçerli eylemleri sunun
Bir eylem işlendikten sonra anlatım başarısız olursa — İşlenen durumdan yola çıkarak önceden yazılmış bir sonuç gösterin
Mükerrer gönderim — Yeniden maliyet yansıtmadan mevcut sonucu döndürün
Kayıtlı durum yüklenemiyor — Sorunu bildirin ve kurtarma ya da açık bir yeniden başlatma seçeneği sunun
Bölüm 6

Önce kuralları, ardından botun yorumlamasını test edin

Öncelikle oyunu sabit metinlerle test edin. Her eylemi, sonu ve sınır koşulunu ele alın. Ardından botu ekleyin ve bu testleri farklı ifadeler kullanarak tekrarlayın. Bu sayede bozuk bir kural ile yanlış anlaşılan bir istek birbirinden ayırt edilir.

Temsili oyuncuları yönlendirme yapmadan bir teslimatı tamamlamaya davet edin. Seçim yapmadan önce ne beklediklerini ve sonrasında neyin değiştiğine inandıklarını açıklamalarını isteyin. Nielsen Norman Group'un sesli düşünme kullanılabilirlik testi rehberi (https://www.nngroup.com/articles/thinking-aloud-the-1-usability-tool/), katılımcıların konuşmasına izin verirken temsili katılımcılar ve görevler kullanılmasını önerir; ayrıca kolaylaştırıcı yönlendirmelerinin davranışı etkileyebileceği konusunda uyarır.

Eylem günlüğünün yanı sıra gözlemi de kullanın. Denenen eylemleri, açıklama isteklerini, beklenmeyen sonuçları ve anlatım ile işlenen durum arasındaki her türlü uyuşmazlığı kaydedin. Oyuncuların seçenekleri anlayıp anlamadıklarını, aralarından seçim yapmaktan keyif alıp almadıklarından ayrı olarak sorun.

Kısa oyun testi kontrol listesi. Dünyayı genişletmeden önce kurallardaki ve durum yönetimindeki hataları düzeltin. Oyuncular seçimleri anlıyor ancak ilginç bulmuyorsa ödünleşimleri değiştirin. Kararlardan keyif alıyor ancak maliyetleri tahmin edemiyorlarsa sunumu geliştirin. Mevcut seçimleri farklı ifadeler, kaydedilmiş oturumlar ve hata yolları genelinde anlaşılır kalmaya devam ettiğinde prototipi genişletin.

Açılış: Yeni bir oyuncu hedefi, zaman bütçesini ve bitiş eylemlerini tanımlayabiliyor mu?
Döngü: Kabul edilen her eylem görünür bir sonuç ve geçerli bir sonraki adım ya da son üretiyor mu?
Seçim: Oyuncular neden belirli bir rotayı veya süsleme seçeneğini seçtiklerini açıklayabiliyor mu?
Sınır: Kurdele alımının ardından gelen bahçe teslimatı tam olarak sıfır zamanda başarıyla sonuçlanıyor mu?
Doğrulama: Belirsiz, tekrarlanan ve kullanılamayan istekler doğru durumu koruyor mu?
Hafıza: Kaydetme ve yeniden yükleme işlemleri kaynakları, seçimleri ve mevcut eylemleri koruyor mu?
Başarısızlık: Karşılanamaz bir teslimat durumu, yeniden başlatma seçeneği sunularak net bir şekilde sona eriyor mu?
Kurtarma: Anlatım başarısız olduğunda ikinci bir maliyet yansıtılmadan oyuna devam edilebiliyor mu?
Tutarlılık: Her son, işlenen rota ve kurdele durumuyla eşleşiyor mu?
İlgili okumalar

Bu konuyu keşfetmeye devam et