Uygulamayı aç
Moonborn — Developers

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