Uygulamayı aç
Moonborn — Developers

Karakterler arası ilişki grafiğini modelle

Persona'lar arasında tipli kenarlar (rakip, eski sevgili, mentor) tanımla; çok karakterli oturumlarda çalışma zamanının grafiği isteme nasıl enjekte ettiğini gör; asimetrik ilişkilerle gerilim yarat.

İlişkisiz bir karakter kadrosu sahnede yan yana monolog söyler. Ensemble grafiği — persona'lar arası tipli ilişki kenarları (edges) — kimin kim hakkında ne bildiğini ve nasıl hissettiğini kodlar. Çok karakterli bir oturumda çalışma zamanı bu grafiğe danışır, ilgili kenarları konuşan persona'nın istemine (prompt) enjekte eder, böylece "Leyla geldi" satırı Leyla'nın eski ortağı için ve Leyla'nın eski mentoru için farklı yanıt üretir.

Bu rehber kenar tiplerini, tanımlama akışını, asimetrik ilişkileri ve çalışma zamanının grafiği isteme nasıl bağladığını anlatır.

Bu rehberi bitirdiğinde

  • Yerleşik kenar tipi kataloğunu bileceksin (aile, romantik, mentor, akran, güç, sosyal).
  • İki persona arasında tipli kenar tanımlayabileceksin.
  • Bir persona'nın tüm ilişkilerini sorgulayabileceksin.
  • Asimetrik kenarlarla (her tarafın diğerini farklı gördüğü) anlatı gerilimi yaratabileceksin.
  • Çalışma zamanının grafiği çok karakterli isteme nasıl bağladığını anlayacaksın.
  • Kenar sayı limitlerini ve döngü (cycle) davranışını bileceksin.

Ön koşul: En az iki persona ve API anahtarı. Çok karakterli akışı ilk kez görüyorsan önce Çok karakterli bir sahne kur eğitimine bak.

Kenar tipi kataloğu

Yerleşik tipler kategori → alt-tip olarak organize edilmiştir:

KategoriAlt-tipler
family (aile)parent, sibling, child, spouse, ex-spouse
romantic (romantik)partner, ex-lover, unrequited, one-night
mentormentor, protégé, former-mentor
peer (akran)colleague, collaborator, rival
power (güç)employer, employee, patron, client
social (sosyal)friend, acquaintance, enemy, nemesis

Bir kenar tanımla

await client.personas.relationships.create({
  personaId: mert.id,
  with: leyla.id,
  type: 'ex-lover',
  note: 'Aynı çeyrekte hem bir şirketi hem bir ortaklığı paylaşıp ayrılan eş-kurucular. Saygılı ama temkinli.',
});

Kenarlar varsayılan olarak çift yönlüdür — iki persona da ilişkiyi aynı tipte ve aynı notla görür.

Bir persona'nın tüm ilişkilerini sorgula

const rels = await client.personas.relationships.list({ id: mert.id });
 
for (const r of rels) {
  console.log(`${r.type.padEnd(15)}${r.with.name.padEnd(20)} : ${r.note}`);
}

Beklenen çıktı:

ex-lover         → Leyla Demir         : Saygılı ama temkinli.
mentor           → Doruk Yıldız        : Mert'i ilk yatırımcı toplantısına o götürdü.
rival            → Selim Kaya          : Aynı pazarda paralel ürün; agresif ama profesyonel.

Çalışma zamanı grafiği nasıl kullanır

Çok karakterli oturumda speaker alanı kimin konuştuğunu söyler. Persona B konuşmacıysa:

1. Çalışma zamanı A ↔ B kenarını grafikten çeker (varsa)
2. edge.type + edge.note B'nin sistem istemine enjekte edilir
3. B'nin yanıtı ilişkiyi yansıtır — sen istemde yeniden ifade etmeden

Pratikte:

const session = await client.chat.sessions.create({
  personaId: mert.id,
  ensemble: [leyla.id],
});
 
const reply = await client.chat.messages.create({
  sessionId: session.id,
  speaker: leyla.id,
  content: 'Geçen çeyrekte ne oldu, anlat.',
});
 
// Leyla'nın yanıtı "ex-lover" + not bağlamından geliyor —
// Mert'in yanlarındaki ortak çeyreğin ağırlığı sezilir.

Asimetrik kenarlar — anlatı gerilimi

Çoğu zaman iki taraf aynı ilişkiyi farklı yorumlar. Mert eski sevgili olarak gördüğü Leyla'yı saygıyla anabilir; Leyla Mert'i fikrini çalan eski ortak olarak görebilir. Bunu modelle:

// Mert → Leyla görüşü
await client.personas.relationships.create({
  personaId: mert.id,
  with: leyla.id,
  type: 'ex-lover',
  note: 'Hâlâ ona saygı duyuyorum. Pişman olduğum şeyler var ama o değil.',
  bidirectional: false,
});
 
// Leyla → Mert görüşü
await client.personas.relationships.create({
  personaId: leyla.id,
  with: mert.id,
  type: 'rival',
  note: 'Fikrimi sahiplendi (co-opt), hiç özür dilemedi. Hâlâ onunla oturmak istemiyorum.',
  bidirectional: false,
});

Aynı sahneyi bu iki kenarla yürüttüğünde:

  • Mert'in yanıtları Leyla'ya karşı naziktir, hatta yumuşaktır.
  • Leyla'nın yanıtları Mert'e karşı temkinli ve serttir.
  • Sahne aynı geçmişin iki yorumu üzerine kurulur — yazılı dramada işlevsel gerilim.

Limitler ve döngü (cycle) davranışı

KuralDeğerNeden
Persona başı en fazla kenar50 (engine.ensemble.max_edges yapılandırılabilir)İstem bağlam penceresini koruyor
Döngüye izinEvetAile / sosyal grafikler doğal olarak döngülü
Döngü çözümlemesiTur başına çalışma zamanı çözümlemesiSonsuz genişleme yok
Kenar ağırlığı (yakınlık)İsteğe bağlı (weight: 0-1)Çok kenar varsa hangileri isteme girer önceliklendirir

Döngü örneği: A → B (kardeş), B → C (kardeş), C → A (kardeş). Bu üç-kardeş grafik geçerlidir; çalışma zamanı her tur kim konuşuyorsa yalnız o tur için ilgili kenarları çekip isteme koyar — sonsuz özyinelemeli (recursive) bağlam patlaması olmaz.

Kenar ağırlığı (önceliklendirme)

Çok kenar taşıyan persona'lar için (örn. 30+ ilişkiyle bir lider karakter) istem penceresini hangi kenarların dolduracağını kontrol et:

await client.personas.relationships.create({
  personaId: mert.id,
  with: leyla.id,
  type: 'ex-lover',
  weight: 0.9, // sahnede yüksek önemli
  note: '...',
});
 
await client.personas.relationships.create({
  personaId: mert.id,
  with: anonymous_intern.id,
  type: 'employee',
  weight: 0.2, // varsayılan yer
  note: 'Bu çeyrekte başladı.',
});

Çalışma zamanı ağırlık sırasına göre yüksekten başlar; bağlam penceresi dolarsa düşük ağırlıklı kenarlar atlanır.

Plan gereksinimi

Pro ve üzeri.

İlgili

Ensemble ilişkileri kavramı

Grafiğin teknik anatomisi, çalışma zamanının kenar çözümleme yolu.

Open →
Çok karakterli bir sahne kur

Kenarların ensemble oturumunda nasıl konuşulduğu (adım adım eğitim).

Open →
NPC sahne orkestrasyonu

Oyun NPC'lerinde kenar grafikleriyle sahne durum makinesi kurmak.

Open →
Sentetik kullanıcı paneli

Kenarsız panel = tek tek monolog; kenarlı panel = grup tartışması.

Open →