Character AI uygulaması nasıl inşa edilir: mimari, kod ve maliyet hesabı

Updated 2026-07-15

Bir character AI uygulaması, OpenAI uyumlu bir sohbet endpoint'ine bağlı dört bileşendir: bir persona system prompt'u, bir hafıza katmanı, bir moderasyon kapısı ve bir model yönlendirici. 200 satırın altında Python ile çalışan bir prototip gönderebilir ve doğru model seçimleriyle aylık aktif kullanıcı başına bir doların çok altında çalıştırabilirsiniz.

Hızlı yanıt: dört bileşenli mimari

Bir modeli eğitmeniz veya fine-tune etmeniz gerekmez. Bugün piyasadaki her ciddi companion uygulaması, milyonlarca kullanıcıya hizmet edenler dahil, barındırılan LLM API'leri üzerinde ince bir orkestrasyon katmanıdır. Karakter, ağırlıklarda değil, prompt'ta ve veritabanında yaşar. Bu rehberin geri kalanı, standart bir OpenAI uyumlu endpoint'e karşı çalışan kodla her bileşeni inşa eder, sonra lansman öncesi aylık aktif bir kullanıcının gerçekte ne kadara mal olduğunu bilmeniz için token hesabını gözden geçirir.

  • Persona prompt'u: karakterin kim olduğunu ve nasıl konuştuğunu tanımlayan yapılandırılmış bir system prompt'u (500 ila 1.000 token).
  • Hafıza: son turların dönen bir penceresi artı düzenli olarak yenilenen bir özet, böylece konuşmalar context limitinin ötesinde hayatta kalır.
  • Moderasyon: bir yaş doğrulaması, bir girdi sınıflandırıcısı ve yönlendirdiğiniz modelle eşleşen içerik politikaları.
  • Yönlendirme: sıradan sohbet için ucuz bir model ve uzun sahneler için daha güçlü bir model seçen küçük bir fonksiyon.

Bileşen 1: persona prompt'u

Persona prompt'u üründür. Her istekle birlikte gönderilen ve tipik olarak beş parça içeren bir system mesajıdır: kimlik (isim, yaş, geçmiş hikaye), kişilik özellikleri, iki veya üç örnek satırla konuşma tarzı, sert davranışsal kurallar (asla karakterden çıkma, yanıtları bir uzunluk sınırının altında tut) ve mevcut senaryo. 500 ila 1.000 token arasında tutun. Daha kısa persona'lar kayar; çok daha uzun olanlar her tek mesajda input bütçesini yakar ve nadiren uyumu iyileştirir. Kullanıcıların karakterler oluşturup düzenleyebilmesi için persona'ları veritabanınızda satır olarak saklayın; bu, Character.AI tarzı ürünlerin temel döngüsüdür. İşte eksiksiz bir istek. Aynı şekil herhangi bir OpenAI uyumlu arka uçla çalışır; bu örnek, modelleri tek bir dizeyi değiştirerek değiştirebilmeniz için çoklu-model bir gateway endpoint'i kullanıyor:

curl https://api.apisrouter.com/v1/chat/completions \
  -H "Authorization: Bearer $KEAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "system", "content": "You are Mira, a sarcastic starship engineer in her 30s. Personality: dry wit, fiercely loyal, hates small talk. Speech style: short technical sentences, occasional teasing. Example: \"The coupling is fried. Again. Did you touch it?\" Rules: never break character, never mention being an AI, keep replies under 120 words."},
      {"role": "user", "content": "Mira, the reactor is making that noise again."}
    ],
    "temperature": 0.9,
    "max_tokens": 300,
    "stream": true
  }'

Bileşen 2: uzun konuşmalarda hayatta kalan hafıza

Companion uygulama oturumları uzun sürer. Üç katmanlı bir hafıza yığını, her seferinde tüm geçmişi göndermeden context'i tutarlı tutar: Katman 1, dönen penceredir: son 10 ila 14 ham tur, olduğu gibi gönderilir. Katman 2, çalışan özettir: her ~20 turda bir, ucuz bir model daha eski mesajları isimleri, ilişki durumunu ve açık olay örgüsü ipliklerini takip eden bir paragrafa sıkıştırır. Katman 3, sabitlenmiş gerçeklerdir: kalıcı kullanıcı detayları (isim, tercihler, karakterin hatırlaması gereken geçmiş olaylar) veritabanınıza çıkarılır ve kısa bir system mesajı olarak enjekte edilir. İşte resmi OpenAI SDK ile Python'daki uygulamanın tamamı:

Gerçekçi bir istek başına input bütçesi yaklaşık 3.300 token'a iner.
Context yuvasıTipik boyutYenileme sıklığı
Persona system prompt'u500 ila 1.000 tokenKarakter başına statik
Sabitlenmiş kullanıcı gerçekleri100 ila 200 tokenÇıkarım olaylarında
Çalışan özet300 ila 500 tokenHer ~20 turda bir
Dönen pencere (12 tur)~1.800 ila 2.200 tokenHer mesajda
Yeni kullanıcı mesajı~100 tokenHer mesajda
from openai import OpenAI

client = OpenAI(
    api_key="sk-...",
    base_url="https://api.apisrouter.com/v1",
)

def build_context(persona, summary, pinned_facts, recent_turns, user_msg):
    facts = "\n".join(f"- {f}" for f in pinned_facts)
    return [
        {"role": "system", "content": persona},
        *([{"role": "system", "content": f"Facts to remember:\n{facts}"}]
          if pinned_facts else []),
        *([{"role": "system", "content": f"Story so far: {summary}"}]
          if summary else []),
        *recent_turns[-12:],
        {"role": "user", "content": user_msg},
    ]

def refresh_summary(old_turns, prev_summary):
    prompt = (
        "Update this running summary of a roleplay chat. Keep names, "
        "relationship state, and open plot threads. Max 150 words.\n\n"
        f"Current summary: {prev_summary}\n\nNew messages: {old_turns}"
    )
    resp = client.chat.completions.create(
        model="deepseek-v4-flash",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=400,
    )
    return resp.choices[0].message.content

Bileşen 3: moderasyon ve içerik politikaları

Bir companion uygulamasında moderasyonun üç farklı görevi vardır ve bunları birbirine karıştırmak en yaygın lansman hatasıdır. Birincisi, kitlenizi kapıdan geçirin. Uygulamanız olgun kurgusal temalara izin veriyorsa, bunları yetişkin bir yaş doğrulamasının arkasına koyun ve ayrı bir tüm-yaşlar varsayılanı tutun. App Store ve Play Store incelemesi ikisi de bunu kontrol ediyor ve ödeme işlemcileri de önemsiyor. İkincisi, girdileri tarayın. Kullanıcı mesajları karakter modeline ulaşmadan önce üzerlerinden ucuz bir sınıflandırıcı geçişi çalıştırın, hiçbir sağlayıcının izin vermediği kategorileri engelleyin: reşit olmayanları içeren içerik, güvenilir gerçek dünya zararı ve yasa dışı talimatlar. Evet/hayır bir kural setiyle tek bir deepseek-v4-flash çağrısı, bir sentin küçük bir kesrine mal olur ve bir saniyenin altında gecikme ekler. Üçüncüsü, içerik politikasını modelle eşleştirin. Sağlayıcılar kurguda farklılık gösterir: xAI'nin yayınlanmış politikası yetişkin kullanıcılar için olgun kurgusal temalara açıkça izin verir, DeepSeek ve diğer açık-ağırlık türevi modeller rol yapma için topluluk favorileridir çünkü barındırılan politikaları kurgu için esnektir, Anthropic'in politikası ise açık içeriği yasaklar ve Claude'u yalnızca tüm-yaşlar yaratıcı yazım için doğru seçim yapar. Trafiği yönlendirmeden önce bu politikaları anlamak, üretimde ret fırtınalarından sizi kurtarır. Ne inşa ederseniz edin, çağırdığınız her sağlayıcının hizmet şartlarına saygı göstermelidir.

Bileşen 4: model yönlendirme ve seçim matrisi

Bir companion uygulamasındaki çoğu mesaj, bir bütçe modelinin mükemmel şekilde ele aldığı kısa sıradan turlardır. Bir azınlık, düzyazı kalitesinin ürün olduğu uzun duygusal sahneler veya yaratıcı set parçalarıdır. Sahne derinliğine göre yönlendirme, kullanıcılar fark etmeden maliyetleri çarpıcı biçimde düşürür:

Her rotayı, hizmet ettiği kitleye uyan içerik politikasına sahip bir modelle eşleştirin.
ModelAPI model IDOran (1M token, input/output)Companion uygulama uyumu
DeepSeek V4 Flashdeepseek-v4-flash$0.126 / $0.252Varsayılan sohbet modeli. Rol yapma için topluluk favorisi, katalogda en iyi değer.
DeepSeek V4 Prodeepseek-v4-pro$0.3915 / $0.783Daha uzun sahneler, daha güçlü talimat takibi, hâlâ ucuz.
GLM-5glm-5$0.514 / $2.314Güçlü yaratıcı yazımla değer seçeneği.
Kimi K2.6kimi-k2.6/pricing'e bakınUzun-context oturumlar için değer seçeneği. MiMo benzer bir bütçe seçeneğidir.
grok-4.5grok-4.5$1.60 / $4.80xAI'nin yayınlanmış politikasına göre yetişkin kullanıcılar için olgun kurgusal temalar. 500K context penceresi.
Claude Sonnet 4.6claude-sonnet-4-6$2.40 / $12.00En yüksek düzyazı kalitesi. Yalnızca tüm-yaşlar yaratıcı yazım; Anthropic açık içeriği yasaklar.
Gemini 3.5 Flashgemini-3.5-flash$1.20 / $7.20Hızlı, avatar tepkileri gibi görüntü farkındalıklı özellikler için iyi.
ROUTES = {
    "casual": "deepseek-v4-flash",
    "scene": "deepseek-v4-pro",
    "prose": "claude-sonnet-4-6",  # yalnızca tüm-yaşlar yaratıcı yazım
}

def pick_model(user_msg: str, turns_in_scene: int) -> str:
    if turns_in_scene > 6 or len(user_msg) > 400:
        return ROUTES["scene"]
    return ROUTES["casual"]

Aylık aktif bir kullanıcı gerçekte ne kadara mal oluyor

Lansman öncesi token hesabı, sonrasında gelen bir faturalandırma sürprizinden iyidir. Hafıza tablosundaki context bütçesini kullanarak: mesaj başına kabaca 3.300 input token ve 250 output token. Companion uygulama kullanıcıları ağırdır; topluluk tarafından bildirilen rakamlar, meşgul kullanıcıları günde düzinelerce mesajda konumlandırıyor, bu yüzden 20 aktif günde günde yaklaşık 40 mesaj, yani MAU başına ayda yaklaşık 800 mesaj varsayın. Bu, MAU başına ayda 2.64M input token ve 0.2M output token veriyor. Katalog oranlarıyla çarpınca:

3.300 input + 250 output token/mesaj, MAU başına ayda ~800 mesaj varsayılır.
ModelMAU başına input maliyetiMAU başına output maliyetiMAU başına aylık toplam
deepseek-v4-flash$0.33$0.05$0.38
deepseek-v4-pro$1.03$0.16$1.19
glm-5$1.36$0.46$1.82
gemini-3.5-flash$3.17$1.44$4.61
grok-4.5$4.22$0.96$5.18
claude-sonnet-4-6$6.34$2.40$8.74
gpt-5.5$10.56$4.80$15.36

Matristeki her model için tek bir endpoint

Bir yönlendiriciyi çalıştırmak için beş sağlayıcı hesabına kaydolmak gerçek bir yüktür: beş anahtar, beş faturalandırma paneli, beş hız sınırı seti. Çoklu-model bir gateway bunu ortadan kaldırır. APIsRouter, yukarıdaki her modeli tek bir OpenAI uyumlu temel URL olan https://api.apisrouter.com/v1 üzerinden sunar, bu yüzden yönlendirici kod parçası yalnızca model dizesini değiştirerek olduğu gibi çalışır. Faturalandırma abonelik olmadan kullandıkça ödedir, küresel modeller resmi fiyatlandırmanın %20 altında çalışır ve Çin modelleri resmi oranların altında kalır, ve /topup adresindeki kayıt gerektirmeyen ödeme, ödemeden sonra e-postanıza bir anahtar gönderir, ilk yükleme +%100 bakiye ekler. Anahtarınızla GET /v1/models, kendi admin arayüzünüzde bir model seçici doldurmak için de kullanışlı olan canlı model listesini döndürür.

Gerçek para ve acı tasarrufu sağlayan üretim ipuçları

  • Her şeyi stream edin. İlk-token'a-kadar-geçen-süre, kullanıcıların hissettiği metriktir; 2 saniyede stream edilen bir yanıt, 4 saniyede tamamlanan bir yanıttan daha hızlı hissettirir.
  • Stabil öneki stabil tutun. Persona ve sabitlenmiş gerçekler, prefix caching'i destekleyen arka uçların bundan yararlanabilmesi için istekler arasında bayt-özdeş olmalıdır.
  • Rota başına max_tokens'ı sınırlayın. Sıradan turlar nadiren 300'den fazla output token'a ihtiyaç duyar; sınırsız, saçmalayan bir model output faturanızı ikiye katlar.
  • İstek başına değil, kullanıcı başına maliyeti kaydedin. Ağır kullanıcıların küçük bir kısmı harcamaya hakim olacak; adil kullanım katmanları tasarlamak için onları görmeniz gerekir.
  • Yönlendiriciye yedekleme inşa edin. Birincil model zaman aşımına uğrarsa veya reddederse, bir hata göstermeden önce bir kardeş modelde bir kez daha deneyin.
  • Dönen pencereyi tur sayısına göre değil token'a göre kırpın, böylece uzun bir yapıştırma bütçeyi patlatmaz.
  • Retleri karakter içinde ele alın. Bir reti ham API metni göstermek yerine zarif bir hikaye-içi sapmayla eşleştirin.
  • Ham sohbetleri gerekenden uzun süre saklamayın ve bunu gizlilik politikanızda belirtin. Companion sohbet günlükleri doğası gereği hassastır.

Sık sorulan sorular

Bir character AI uygulaması inşa etmek ne kadara mal olur?

Geliştirme maliyeti çoğunlukla zamanınızdır: çalışan bir prototip, model eğitimi içermediği için bir hafta sonu projesidir. Çalışma maliyeti gerçek rakamdır ve kullanımla ölçeklenir. deepseek-v4-flash gibi bütçe bir modelde, ağır bir aylık aktif kullanıcı token'larda kabaca $0.38'e mal olur; gpt-5.5 gibi premium bir modelde aynı kullanıcı yaklaşık $15'e mal olur. Marjinizi altyapı değil, model seçimi belirler.

Bir character AI uygulaması için hangi AI modeli en iyisi?

DeepSeek V4 ailesi rol yapma için topluluk favorisi ve en iyi değerdir: sıradan sohbet için Flash, daha uzun sahneler için Pro. GLM-5, Kimi K2.6 ve MiMo sağlam değer seçenekleridir. Grok, xAI'nin yayınlanmış politikasına göre yetişkinlere olgun kurgusal temalar sunan uygulamalara uyar. Claude Sonnet 4.6 en iyi düzyazıyı yazar ama Anthropic açık içeriği yasakladığı için yalnızca tüm-yaşlar yaratıcı yazım için uygundur.

Character AI uygulamaları geçmiş konuşmaları nasıl hatırlıyor?

Model hafızası değil, prompt mühendisliği yoluyla. Uygulama, son mesajların dönen bir penceresini, daha eskilerin periyodik olarak sıkıştırılmış bir özetini ve bir veritabanına çıkarılan kısa sabitlenmiş gerçekler listesini yeniden gönderir. Modelin kendisi durumsuzdur; her istek karakterin "hatırladığı" her şeyi içerir.

Bir AI companion uygulaması inşa etmek için kendi modelimi eğitmem gerekir mi?

Hayır. Fine-tuning pahalıdır, iterasyonu yavaştır ve karakter tutarlılığı için gereksizdir. 500 ila 1.000 token'lık iyi yapılandırılmış bir persona prompt'u artı bir hafıza katmanı, kullanıcıların özel bir modelden ayırt edemeyeceği karakter uyumu sağlar ve daha iyi modeller yayınlandıkça temel modelleri serbestçe değiştirmenize izin verir.

Bir companion uygulamasında olgun içeriği nasıl ele alırım?

Bunu bir politika-eşleştirme sorunu olarak ele alın. Olgun kurgusal temaları yetişkin bir yaş doğrulamasının arkasına koyun, hiçbir sağlayıcının izin vermediği kategoriler için girdileri tarayın ve o trafiği yalnızca xAI'nin politikası altındaki Grok gibi yetişkinler için kurguya izin veren yayınlanmış politikaları olan modellere yönlendirin. Daha katı modellerde tüm-yaşlar varsayılan bir yol tutun ve her sağlayıcının hizmet şartlarına uyun.

Diğer modellerle bir character AI uygulaması için OpenAI SDK'sını kullanabilir miyim?

Evet. DeepSeek, GLM, Kimi, Gemini, Claude ve Grok'un hepsine, ister kendi sağlayıcılarından ister bir gateway aracılığıyla, OpenAI uyumlu endpoint'ler üzerinden ulaşılabilir. Uygulama kodunuz standart chat.completions arayüzünde kalır ve model dizesini değiştirerek modelleri değiştirir; bu da mesaj başına yönlendirmeyi inşa etmeyi ucuzlaştıran tam olarak şeydir.