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:
| Kategori | Alt-tipler |
|---|---|
family (aile) | parent, sibling, child, spouse, ex-spouse |
romantic (romantik) | partner, ex-lover, unrequited, one-night |
mentor | mentor, 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 etmedenPratikte:
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ışı
| Kural | Değer | Neden |
|---|---|---|
| Persona başı en fazla kenar | 50 (engine.ensemble.max_edges yapılandırılabilir) | İstem bağlam penceresini koruyor |
| Döngüye izin | Evet | Aile / sosyal grafikler doğal olarak döngülü |
| Döngü çözümlemesi | Tur başına çalışma zamanı çözümlemesi | Sonsuz 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
Grafiğin teknik anatomisi, çalışma zamanının kenar çözümleme yolu.
Kenarların ensemble oturumunda nasıl konuşulduğu (adım adım eğitim).
Oyun NPC'lerinde kenar grafikleriyle sahne durum makinesi kurmak.
Kenarsız panel = tek tek monolog; kenarlı panel = grup tartışması.