Chat oturumu kur
Bir personaya karşı chat oturumu aç, mesaj gönder, drift envelope'u eklenmiş streaming yanıtı oku.
Bir chat oturumu, personanın runtime container'ı. Prompt'u, kısa vadeli context window'u, uzun vadeli memory pointer'ı ve yanıt başı drift envelope'u taşır. Bu tutorial zaten bir personan olduğunu varsayar — yoksa önce İlk personanı yarat ile geç.
1. Bir oturum aç
import Moonborn from '@moonborn/sdk';
const client = new Moonborn({ apiKey: process.env.MOONBORN_API_KEY });
const session = await client.chat.createSession({
personaId: 'persona_01H...',
metadata: { ticketId: 'cs-4421' },
});
console.log(session.id);Oturum ID'si sonraki her mesajın adresi. metadata serbest formatlı
bir key/value çantası (string → string) — Moonborn okumaz, ama audit
log ve webhook delivery'lerinde görünür, o yüzden oturumları kendi
ürün yüzeyine bağlamak için kullan.
2. Mesaj gönder
const reply = await client.chat.sendMessage({
sessionId: session.id,
content: 'Üretmeye devam etmeni ne tetikliyor?',
});
console.log(reply.content);
console.log(reply.driftScore, reply.driftAlert);Her yanıt driftScore (personanın
voice fingerprint'ine göre 0–1 cosine
distance), driftThreshold (workspace değeri) ve driftAlert boolean
taşır. Eşiğin altında, gönder. Üstünde, route et — bkz.
drift handling tutorial.
3. Yanıtı stream et
Her token'ın önemli olduğu UX için streaming varyanta geç. SSE chunk'ları şu şekilde gelir:
event: token data: { delta: "Beni tetikleyen" }
event: token data: { delta: " şey aradaki boşluk" }
event: completed data: { messageId, driftScore, driftThreshold }
const stream = await client.chat.streamMessage({
sessionId: session.id,
content: 'Üretmeye devam etmeni ne tetikliyor?',
});
for await (const chunk of stream) {
if (chunk.type === 'token') process.stdout.write(chunk.delta);
if (chunk.type === 'completed') console.log('\ndrift:', chunk.driftScore);
}Detaylı wire format Streaming patterns guide'da.
4. Geçmişi oku
const history = await client.chat.listMessages({ sessionId: session.id });
for (const m of history) {
console.log(`${m.role}: ${m.content}`);
}history cursor + limit ile sayfalanır. Kısa vadeli pencerenin
ötesindeki memory özetlendi — ham transcript aktif pencerenin
kenarında durur. Memory chunk'larını doğrudan incelemek için
GET /v1/chat/sessions/{id}/memory'ye çağrı at.
5. Oturumu bitir
await client.chat.endSession({ sessionId: session.id });endSession retrospective sorgular için transcript + memory'i
korur. Hard-delete istersen DELETE /v1/chat/sessions/{id} kullan
(soft-delete penceresi privacy.retention.chat_sessions_days ile
yönetilir).
Sonraki
- Drift handling ve webhook'lar: Handle voice drift.
- Çoklu persona sahneleri: Multi-character scenes.
- Chat API reference.