Voice drift'i yönet
Eşikleri ayarla, `persona.audit_failed` webhook'unu QA kuyruğuna bağla ve (opsiyonel) flag'lenmiş yanıtların kullanıcıya hiç ulaşmaması için auto-recovery'i aç.
Drift, bir personanın voice fingerprint'i ile az önce söylediği şey arasındaki açıklık. Her chat yanıtı bu açıklığı bir skor olarak taşır. Bu tutorial skoru operasyonel bir şeye çevirir: ayarlanmış bir eşik, bir webhook aboneliği ve opsiyonel bir auto-recovery yolu.
1. Eşiği ayarla
Default engine.pipeline.drift_detection.threshold = 0.30 orta yol bir
tercih. Marka açısından kritik yüzeyler için sıkılaştır:
curl -X POST https://api.moonborn.co/v1/config/engine.pipeline.drift_detection.threshold \
-H "Authorization: Bearer $MOONBORN_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "value": 0.20, "scope": "workspace", "scopeId": "ws_..." }'await client.config.setItem({
key: 'engine.pipeline.drift_detection.threshold',
value: 0.2,
scope: 'workspace',
scopeId: 'ws_...',
});Persona başı override'lar personanın runtime contract'ında yaşar — org'daki bir persona katı bir destek temsilcisi, diğeri gevşek bir yaratıcı arkadaşken işe yarar.
2. Alert aksiyonunu seç
engine.pipeline.drift_detection.action_on_alert şunları kabul eder:
warn(default) — yanıt gider, alert loglanır, webhook tetiklenir.auto_recover— Moonborn fingerprint'i yeniden enjekte ederek bir kez regenerate eder, hangi yanıt daha düşük skorlarsa onu gönderir.block— caller409 Conflictile drift envelope alır; downstream karar verir.
Müşteri desteği için auto_recover artı webhook eskalasyonu yaygın
pattern. Yaratıcı oyun için warn artı UI badge yeter.
3. Webhook'a abone ol
persona.audit_failed drift eşiği tetiklendiğinde (diğer audit
hatalarıyla birlikte) tetiklenir. POST /v1/webhooks ile abone ol:
const hook = await client.webhooks.createWebhook({
url: 'https://your-app.com/webhooks/moonborn',
events: ['persona.audit_failed'],
description: 'Drift escalations → CX QA queue',
});
console.log('Bu secret\'ı bir kerelik sakla:', hook.signingSecret);Signing secret tam olarak bir kez döner. Sakla; sonraki delivery'ler
HMAC ile imzalanır (header X-Moonborn-Signature).
4. Doğrula ve aksiyon al
import crypto from 'node:crypto';
export function verify(rawBody: string, signature: string, secret: string): boolean {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(`sha256=${expected}`),
Buffer.from(signature),
);
}Drift alert payload'u şuna benzer:
{
"id": "evt_01H...",
"type": "persona.audit_failed",
"occurredAt": "2026-05-16T12:00:00Z",
"data": {
"personaId": "persona_01H...",
"sessionId": "sess_01H...",
"messageId": "msg_01H...",
"driftScore": 0.41,
"driftThreshold": 0.30,
"reason": "voice_drift"
}
}Bunu QA kuyruğuna, ops Slack kanalına ya da incident runbook'una bağla — ekibinin sahiplendiği pipeline ne ise.
5. Outage sırasında delivery'leri replay et
Webhook'lar beş kez exponential backoff ile retry yapar (1dk → 2dk → 5dk → 30dk → 2sa), sonra dead-letter queue'ya gider. Dashboard'dan ya da API ile manuel replay:
const deliveries = await client.webhooks.listDeliveries({
webhookId: hook.id,
status: 'failed',
});
for (const d of deliveries) {
await client.webhooks.replayDelivery({
webhookId: hook.id,
deliveryId: d.id,
});
}Sonraki
- Skorun kendine derin dalış: Drift detection concept.
- Audience başı daha keskin tuning: Drift threshold tuning.
- Webhooks reference.