مع انتقال التطبيقات المدعومة بنماذج اللغة الكبيرة (LLM) من النماذج الأولية أحادية المستأجر إلى منصات SaaS متعددة المستأجرين عالية الحجم، تتضاعف تعقيدات المراقبة. لم يعد كافيًا ببساطة رؤية ما إذا كانت الاستدعاءات ناجحة؛ بل يجب ضمان عدم قدرة المستأجر أ على رؤية بيانات المستأجر ب، ومعرفة التكاليف بدقة لكل عميل على بنيتك التحتية. يوفر Langfuse، وهو منصة هندسة LLM مفتوحة المصدر، اللبنات الأساسية لحل هذه التحديات، لكن تنفيذها بشكل صحيح في الإنتاج يتطلب نهجًا منظمًا.
تحدي الحالة المشتركة في البنى متعددة المستأجرين
في بنية الميكروخدمات التقليدية، غالبًا ما يتم التعامل مع عزل البيانات على مستوى قاعدة البيانات أو الحاوية. ومع ذلك، في مراقبة الذكاء الاصطناعي، تتدفق البيانات عبر مسارات الاستدعاءات (Prompt Traces) والتوليدات والتقييمات. إذا كنت تستخدم مشروع Langfuse عالميًا واحدًا لجميع المستأجرين، فستواجه خطرين حرجين: تسرب البيانات وتشويش التكاليف. لا يجب أن يظهر مسار تتبع من عميل في قطاع الرعاية الصحية أبدًا في لوحة تحكم لخدمات مالية، ولا يمكنك ببساطة حساب متوسط تكاليف الرموز (Tokens) عند فوترة مستويات مختلفة من العملاء.
الاستراتيجية 1: العزل على مستوى المشروع عبر مفاتيح API
أكثر الطرق موثوقية لضمان العزل في Langfuse هي الاستفادة من دعمه الأصلي للمشاريع المتعددة. يعمل كل مشروع Langfuse كمساحة أسماء (Namespace) مميزة بمفاتيح API وسياسات الاحتفاظ بالبيانات وأذونات الوصول الخاصة به.
إنشاء ديناميكي للمشروع عند التسجيل
عندما يسجل مستأجر جديد في منصة SaaS الخاصة بك، يجب على الخلفية (Backend) لديك إنشاء مشروع Langfuse جديد برمجياً (أو إسنادهم إلى مسبق إنشاء) وتوليد مفاتيح عامة وسرية فريدة. خزّن هذه المفاتيح بأمان في مخزن بيانات المستأجر الخاص بك، وليس في كود جهة العميل.
// مثال: إسناد بيانات اعتماد Langfuse أثناء تسجيل المستأجر
async function provisionTenant(tenantId, email) {
// 1. إنشاء أو الحصول على مشروع Langfuse
const project = await langfuseAdminClient.createProject({
name: `tenant-${tenantId}`,
metadata: { ssa_tenant_id: tenantId }
});
// 2. توليد مفاتيح API محددة لهذا المشروع
const keys = await langfuseAdminClient.createApiKeys({
publicKey: `pk-${tenantId}`,
secretKey: await generateSecureSecret(),
projectId: project.id
});
// 3. التخزين الآمن في قاعدة البيانات (مع التشفير)
await db.tenants.update({
where: { id: tenantId },
data: {
langfuse_public_key: keys.publicKey,
langfuse_secret_key: keys.secretKey
}
});
}
الاستراتيجية 2: نسبة دقيقة للتكاليف باستخدام وسوم البيانات الوصفية
إذا كان إنشاء مشروع منفصل لكل مستأجر ثقيلًا تشغيليًا لحالات الاستخدام عالية الحجم (مثل مئات الآلاف من المستأجرين الصغار)، يمكنك استخدام مشروع مشترك واحد مع فرض عزل منطقي صارم باستخدام metadata وtags.
يسمح لك Langfuse بإرفاق أزواج مفتاح-قيمة اختيارية لكل مسار تتبع (Trace) ومدى (Span) وتوليد (Generation). من خلال حقن معرف المستأجر الداخلي الخاص بك بشكل متسق في هذه الحقول، يمكنك تصفية وتجميع التكاليف لكل مستأجر.
تنفيذ تتبع التكاليف
يقوم Langfuse تلقائيًا بالتقاط استخدام الرموز (Tokens) وأسعار النماذج. لنسبة التكاليف، يجب التأكد من وضع الوسوم على مسارات التتبع الخاصة بك بشكل صحيح. إليك كيفية دمج هذا في طبقة التطبيق الخاصة بك:
import { Langfuse } from 'langfuse';
const langfuse = new Langfuse({
publicKey: 'pk-shared',
secretKey: 'sk-shared',
baseUrl: 'https://cloud.langfuse.com'
});
export function logLLMGeneration(tenantId, model, input, output, tokens) {
return langfuse.generation({
name: "customer-support-bot",
model: model,
input: input,
output: output,
usage: {
promptTokens: tokens.prompt,
completionTokens: tokens.completion
},
// حاسم: وضع الوسم بمعرف المستأجر للعزل والفوترة
metadata: {
tenantId: tenantId,
feature: "auto-response",
version: "v2.1"
},
tags: [`tenant:${tenantId}`]
});
}
تكامل الفوترة وخصوصية البيانات
مع وضع الوسوم على البيانات بشكل صحيح أو عزلها، يمكنك الآن بناء خط أنابيب للفوترة. للعزل على مستوى المشروع، يمكنك سحب المقاييس مباشرة من مشروع كل مستأجر. للمشاريع المشتركة، استخدم واجهة برمجة تطبيقات Langfuse للاستعلام عن سجلات التوليد المفلترة بواسطة metadata.tenantId.
الخلاصة
تنفيذ المراقبة متعددة المستأجرين في بيئة SaaS لا يتعلق فقط برؤية السجلات؛ بل يتعلق بحماية حدود البيانات وتوفير رؤية شفافة ودقيقة للتكاليف. سواء اخترت الأمان الصارم لمشاريع Langfuse لكل مستأجر أو قابلية التوسع للوسوم القائمة على البيانات الوصفية في مشروع مشترك، يوفر Langfuse الخطافات (Hooks) اللازمة لبناء مجموعة مراقبة ذكاء اصطناعي بمستوى الإنتاج. ابدأ بتدفق التسجيل الخاص بك، وتأكد من وضع الوسوم بشكل متسق، وابنِ منطق الفوترة الخاص بك فوق بيانات مسارات التتبع الموثقة.