Eine Chat-Session aufsetzen
Eine Chat-Session gegen eine Persona öffnen, eine Nachricht senden und die streaming Antwort mit Drift-Envelope lesen.
Eine Chat-Session ist der Runtime-Container der Persona. Sie trägt den Prompt, das Kurzzeit-Context-Window, den Langzeit-Memory-Pointer und das Per-Antwort-Drift-Envelope. Dieses Tutorial setzt voraus, dass du bereits eine Persona hast — wenn nicht, durchlaufe zuerst Baue deine erste Persona.
1. Eine Session öffnen
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);Die Session-ID ist die Adresse für jede nachfolgende Nachricht.
metadata ist ein free-form Key/Value-Beutel (string → string) —
Moonborn liest ihn nicht, aber er taucht im Audit Log und in
Webhook-Deliveries auf, also nutze ihn, um Sessions an deine eigene
Produktoberfläche zurückzubinden.
2. Eine Nachricht senden
const reply = await client.chat.sendMessage({
sessionId: session.id,
content: 'Was treibt dich an, weiter zu bauen?',
});
console.log(reply.content);
console.log(reply.driftScore, reply.driftAlert);Jede Antwort trägt driftScore (0–1 Cosine-Distance zum
Voice Fingerprint der Persona),
driftThreshold (der Workspace-Wert) und einen driftAlert-Boolean.
Unter der Schwelle versenden. Darüber routen — siehe das
Drift-Handling-Tutorial.
3. Die Antwort streamen
Für UX, wo jedes Token zählt, wechsle zur Streaming-Variante. SSE- Chunks kommen mit dieser Form an:
event: token data: { delta: "Was mich antreibt" }
event: token data: { delta: ", ist die Lücke" }
event: completed data: { messageId, driftScore, driftThreshold }
const stream = await client.chat.streamMessage({
sessionId: session.id,
content: 'Was treibt dich an, weiter zu bauen?',
});
for await (const chunk of stream) {
if (chunk.type === 'token') process.stdout.write(chunk.delta);
if (chunk.type === 'completed') console.log('\ndrift:', chunk.driftScore);
}Das detaillierte Wire-Format steht im Streaming patterns guide.
4. Die History lesen
const history = await client.chat.listMessages({ sessionId: session.id });
for (const m of history) {
console.log(`${m.role}: ${m.content}`);
}history paginiert per cursor + limit. Memory jenseits des
Kurzzeit-Windows wurde zusammengefasst — das rohe Transcript endet am
Rand des aktiven Windows. Um Memory-Chunks direkt zu inspizieren,
geh an GET /v1/chat/sessions/{id}/memory.
5. Die Session beenden
await client.chat.endSession({ sessionId: session.id });endSession bewahrt das Transcript + Memory für retrospektive
Queries. Verwende DELETE /v1/chat/sessions/{id}, wenn du
hard-deleten willst (das Soft-Delete-Fenster steuert
privacy.retention.chat_sessions_days).
Weiter
- Drift-Handling und Webhooks: Handle voice drift.
- Multi-Persona-Szenen: Multi-character scenes.
- Chat API reference.