Metodoloji
paxcreator'ın kim, ne, nasıl, neden sorularına dürüst yanıt veren teknik arka belgesi. Bu döküman; akademik partnerler, kurumsal işbirlikçiler, gazeteciler, ve "siz bunu uydurdunuz mu?" diye soran herkes için yazıldı.
Tarih damgası: 2026-04-29. Set boyutu, sayılar ve kanon sürekli büyüyor; bu döküman bugünkü duruma atıfta bulunuyor.
1. Ne yapıyoruz, ne yapmıyoruz
paxcreator, Türkiye toplumunu temsil eden 70 kurgusal kişiden oluşan sosyolojik bir örneklem üzerinde çalışan bir LLM-tabanlı düşünme aracı. Bir soruyu bu 70 kişiye paralel olarak sorup, çıkan 70 yanıtı tutarlı bir sosyolog okumasıyla bir araya getiriyor.
Yaptığı: gündelik bir soruyu Türkiye'nin farklı kesimlerinden fiktif kişilere sorduğunda nasıl yankılandığını gösteren bir metin. Hipotez kurma, saha-öncesi düşünme, kampanya-öncesi senaryo çalışması, politika-mesajı sınama, içerik araştırması için tasarlandı.
Yapmadığı: gerçek anket. Bu bir görüş yoklaması, kamuoyu araştırması, ya da gerçek-Türkiye iddiası değil. Çıktılarımızda asla "Türkiye'nin %X'i şöyle düşünüyor" demiyoruz; sadece "bu 70 kurgusal kişiden 23'ü şöyle dedi" diyoruz.
2. Persona seti nasıl tasarlandı
2.1. Tasarım disiplini — top-down deductive
Yeni persona ekleme bottom-up (audit-içi gap-detektörü) değil; top-down deductive sosyolog yaklaşımıyla yapılıyor.
Çekirdek belge: `docs/research/tr-50-mikro-orneklem-2026-04.md`. Türkiye'nin demografik ve sosyolojik eksenlerinde (cinsiyet, yaş, etnik köken, mezhep, KONDA tipolojisi, şehir tier'ı, sınıf, eğitim, engellilik) TÜİK + KONDA + Pew + ESS-TR kaynaklı sayısal tablolar.
Her persona kararı bu belgeye atıfla yapılıyor: 1. Demografik plausibility (mikro-örneklem sayılarına uyum) 2. Yapısal güç ekseni (Bourdieu sembolik sermaye eksenleri) 3. "Görünür ses ≠ kalabalık" disiplini (Twitter/akademi söyleminde over-temsil edilen profilleri ampirik nüfusa göre ölçüp dengelemek)
2.2. Persona iki-format disiplini
Her aktif persona için iki dosya zorunlu:
JSON (`personas/json/p_<id>.json`) — strict şema:
- 10 zorunlu çekirdek alan: `id`, `name`, `demographics`, `psychology`,
`tr_specific`, `belonging`, `small_groups`, `current_situation`, `future_arc`, `linguistic_register`
- Modüler alanlar: `finance`, `media`
Prose (`personas/prose/p_<id>.md`) — 200-400 kelime narrative biyografi, Türkçe, 3-bölümlü:
- `## Geçmiş` — biyografik kök
- `## Bugün` — şu anki durum
- `## Yakın gelecek` — hayat-yayı
Prose'da concrete-object anchor (somut bir nesne / mekan / alışkanlık), inner contradiction (iç çelişki), blind spot (göremediği), ya da quiet shame (sessiz utanç) belirgin olmalı. Linguistic register persona'ya uyumlu (Trabzonlu denizci ile İstanbullu doktorun cümle ritmi farklı).
2.3. Sociologist denetimi
Her yeni persona, sociologist agent tarafından denetlenir:
- Kanon-tutarlılığı (`packages/sociology/tr-canon.md` referansları)
- Demografik plausibility (mikro-örneklem ile)
- Stereotip riski (Erder, Yeğen, Saraçoğlu vb. kaynaklara göre)
- İç tutarlılık (psikoloji + finans + medya alanlarının uyumu)
Reddedilen personalar tekrar persona-creator agent'ına döner. Set genişlemesi her zaman bu zinciri izler.
3. Senaryo nasıl çalışır
3.1. Vinyet metodolojisi
Senaryo modunda persona-arası etkileşim yok (ADR-006 askıya alındı; Finch 1987 vinyet metodolojisi). Her persona soruyu sıfırdan, kendi karakter çerçevesinden okuyor; başkalarının ne dediğinden haberdar değil.
Bu, gerçek anket-tipi yöntemden farklı: anket-deneklerinde de "komşumun ne dediği" cevap'ı şekillendirmiyor. Her cevap bağımsız.
3.2. İki-katmanlı çıktı (Goffman front/back-stage)
Her persona iki ayrı metin üretiyor:
- `thought` — back-stage: kafadan geçen, dürüst iç-monolog
- `speech` — front-stage: söze dönüştürülmüş, sosyal bağlamda
söylenen versiyon
`mahremiyet_seviyesi` (kapali / yari-acik / acik) etiketine göre iki metin arasındaki uçurum farklılaşıyor. "Kapalı" personalar düşündüklerini olduğu gibi söze dökmüyor.
3.3. Pipeline
1. Soru girilir. 2. Tüm persona seti paralel cevap üretir (Semaphore=8). 3. Programmatik tally: keyword-tabanlı stance/silence sayımı (`scripts/_scenario_tally.py`). 4. Web bundle yazılır: `apps/web/data/scenarios/<slug>.json`. 5. Manifest auto-update: `apps/web/data/scenarios/manifest.json`. 6. Sosyolog sentez raporu üretilir (`scripts/sociolog_synth.py`).
Her run'da kullanılan model, maliyet, süre, persona sayısı, ve birey düzeyinde active_modules (ADR-007: hangi habitus modülleri aktifleşti) bundle'a kaydedilir.
3.4. Sosyolog sentez disiplini
Sentez prompt'u (`scripts/sociolog_synth.py:_SOCIOLOG_SYSTEM_TEMPLATE`) sıkı kurallarla yazıldı:
- Akademik atıf yasak (Mardin, Göle, Bourdieu vb. isim listesi yok)
- Jargon yasak ("modern mahrem", "habitus", "tampon mekanizma" vb. yok)
- Her bölümde 2-3 spesifik kişi alıntısı (isim + p_xxx parantez)
- Yüzde icat etme — sadece tally'den gelen rakamlar
- "Türkiye'nin %X'i" iddiası yasak
- Persona sayısı (örn. 70) tek-doğru-kaynaktan dinamik enjekte edilir;
hardcoded yazılmaz
Sentez `apps/web/data/observations/scenario-<slug>.md` olarak yazılıyor; blog sayfasında bu dosyadan okunup render ediliyor.
4. Reproducibility
Her senaryo run'ı için tam kayıt tutuluyor:
| Alan | Anlam |
|---|---|
| `model` | Hangi LLM (örn. `claude-sonnet-4-6`) |
| `total_cost_usd` | Toplam Bedrock maliyeti |
| `duration_sec` | Toplam wall-clock süresi |
| `persona_count` | Run anındaki set boyutu |
| `active_modules_baseline` | Soruyu ele almak için classifier'ın seçtiği baz modül seti |
| `responses[].active_modules` | Persona-bazlı override (mahremiyet=kapali için zorla mahremiyet-baglam ekleniyor) |
| `responses[].thought` / `.speech` | Her personanın iki katmanı |
| `tally` | Programmatik sayım (keyword-tabanlı) |
Tüm bunlar `apps/web/data/scenarios/<slug>.json` içinde, repo'da versiyonlanmış olarak saklanıyor. Aynı senaryo aynı persona seti üzerinde tekrar koşturulabilir; LLM stochasticity nedeniyle birebir reproduction beklenmesin (bu notu rapora yazıyoruz).
4.1. Sayı disiplini
Set boyutu hardcoded yazılmaz. Tek-doğru-kaynak runtime'da `len(all_personas())` (Python) ya da `PERSONA_CANON.length` (TS).
CI guard (`apps/api/tests/unit/test_canon_sync.py`) backend ile frontend persona kanonunun (count + id seti) eşitliğini doğruluyor; desync'te kırmızı oluyor.
4.2. Tarih-damgalı snapshot disiplini
Eski senaryolar (set 25 personayken yapılmış) eski rakamlarıyla korunuyor. Başlığa "snapshot tarihi + güncel set" notu düşülmüş ama runtime sayılarıyla değiştirilmiyor. Bu kanon-disiplinli arkeoloji; zaman-içinde nasıl büyüdüğünü göstermek için.
Yeni rapor regen ettiğimizde (`scripts/sociolog_synth.py --slug X`) bundle JSON'un `persona_count`'unu okuyup sosyolog template'e geçirir; eski markdown silinip yeniden yazılır.
5. Mimari
5.1. Hexagonal + Event-Sourced
- Domain pure Python (`apps/api/pax/domain/`) — anthropic, sqlalchemy,
fastapi gibi dış bağımlılıklar import edilemez. Test edilebilir, taşınabilir.
- Engine (`apps/api/pax/engine/`) — iş kuralları; domain'i kullanır,
adapter'ları `Protocol` üzerinden çağırır.
- Adapters (`apps/api/pax/adapters/`) — LLM, storage, cache, pubsub
somut implementasyonlar.
- API (`apps/api/pax/api/`) — FastAPI routers.
- Worker (`apps/api/pax/worker/`) — RQ task'ları.
- Web (`apps/web/`) — Next.js 15 App Router; dili Türkçe.
5.2. LLM disiplini
- Anthropic Claude (Bedrock üzerinden). Mevcutta `claude-sonnet-4-6`,
zamanla en yeni Claude'a geçiş.
- Prompt caching zorunlu — sistem prompt cache'lenir, persona-stabil
session'da 5dk TTL içinde reuse → ~4× ucuz.
- Sıcaklık (temperature) 0.7 (persona response), 0.4 (sosyolog sentez).
- Her LLM çağrısı `cost_usd` + `tokens_in/out` ile structlog'a yazılıyor.
5.3. Yan deneyler
`apps/web/data/experiments/` altında — paxcreator-ana setiyle alakasız, mimarinin başka bağlamlarda nasıl çalıştığını gösteren tek-seferlik deneyler. Şu anki:
- Mars-koloni: 6 astronot × 12 ay (kapalı izolasyon)
- Saga: 6 kişi × 50 yıl (1955 doğumlu kuşak)
- Diary: 1 kişi × 365 gün (gündelik mikro-iç-monolog)
- Trial: 12 jüri × 1 dava (ilk persona-arası diyalog)
Her yan deney kendi `run.py` + `synth.py` + frontend route'una sahip; kanon-bağlantısı yok, kanonu bozmuyor.
6. Sınırlar — neyi göstermez
Bu netleştirme akademik dürüstlük için kritik:
1. LLM stochasticity: Aynı set, aynı soru, farklı bir run'da farklı detaylar verir. Yapısal örüntüler (KONDA dağılımı, ana tematik kalıplar) stabil; ama bireysel cevap-tek-kelime düzeyinde varyans var.
2. Kurgusal kişi ≠ gerçek kişi: Personalar TÜİK + KONDA + akademik literatür temelli ama gerçek 70 kişiyi temsil etmiyor. Aynı şekilde Türkiye'nin tamamını da temsil etmiyor — set küçük, sınırlı, ve modernler + Y-millennial + lisans+ + İstanbul yönünde kasıtlı over-rep'lı (vinyet metodolojisi için).
3. Türkçe dil katmanı: LLM Türkçesinde çeviri-tabanlı bias var ("bir tür X", "öte yandan", "açısından" gibi kalıplar). Bunu prompt-disiplini ile asgariye indirdik; ama %100 doğal-Türkçe değil.
4. Sosyolog sentez yorumlu metin: Tally rakamları nesnel; ama "ne ortak, ne ayrışan" bölümlerinde sosyolog asistan yorum yapıyor. Tally'den çıkmayan bir desen önerisi onun seçimi.
5. Tek-yönlü vinyet: Persona-arası etkileşim yok. Gerçek hayatta "komşum ne dedi" cevabı şekillendirir; bizde şekillendirmiyor.
7. Neyi açıkça söyleriz, neyi söylemeyiz
Sosyolog raporlarında ve frontend'de aşağıdaki disipline uyuyoruz:
| Söyleriz | Söylemeyiz |
|---|---|
| "Bu 70 kurgusal kişiden 23'ü şöyle dedi" | "Türkiye'nin %33'ü" |
| "Şükriye (p_025), İzmirli çiçekçi, dedi ki..." | (anonim referans) |
| "Modernler kümesi farklı bir kalıp gösterdi" | "Modern Türkler" |
| "Aynı set yeniden sorulsa farklı çıkar" | "Sonuçlar tutarlı" |
| Maliyet + süre + model versiyonu | (gizli teknik detay) |
| "Bu bir düşünme aracı, anket değil" | "Bu bir araştırma sonucu" |
8. Ne için kullanılır, ne için kullanılmaz
Uygun:
- Saha-öncesi hipotez kurma
- Mesaj sınama (kampanya öncesi)
- Senaryo çalışması (kriz iletişimi, ürün tasarımı)
- Eğitim (sosyoloji öğrencisi, derste bir tartışma açma)
- Gazetecilik (köşe yazısı için bir okuma açısı bulma)
Uygun değil:
- Karar verme (politika, ürün, pazar)
- Kamuoyu yoklaması yerine geçirmek
- Yüzde-istatistik üretmek için "%34 modern Türk şöyle der" demek
- Akademik araştırmanın yerine geçirmek
- Gerçek-saha çalışmasının yerine
paxcreator'ın hedefi gerçek araştırmayı ikame etmek değil; saha-öncesi, hipotez-kurma, ya da hızlı-okuma katmanında kullanışlı bir aracı sunmak.
9. Sürüm + iletişim
Mevcut sürüm: paxcreator v1 (kurumsal demo aşaması).
İletişim:
- E-posta: aytac@magnuscreative.org
- Web: [paxcreator.com](https://paxcreator.com)
- Github: [marbas-dev/paxcreator](https://github.com/marbas-dev/paxcreator)
Bu metodoloji belgesinde gördüğünüz bir şey hatalı, eksik, ya da daha açık yazılmalı diyorsanız — iletişime geçin. Açık-kanıt + akademik dürüstlük öncelikli; eleştiriye açığız.
Son güncelleme: 2026-04-29 · Sürüm 1.0