Workstation الموجز الفني: كيفية الكشف عن LLM واختناقات الوكلاء المتعددين باستخدام فتح القياس عن بعدومنصات Prometheus/Grafana/Thanos وLLM مثل لانجفيوز / لمنر - بما في ذلك المخططات الممتدة، وإسناد التكلفة، وأخذ العينات، والحد الأقصى للاستخدام الصعب. رفيق: مدونة الأعمال · التقديم: الشحن التوربيني LLMs · المعمل: مختبر الذكاء الاصطناعي للمؤسسات.
- مشكلة: يتم إخفاء تكلفة الوكيل ووقت الاستجابة في القفزات (LLM → الأدوات → RAG → إعادة المحاولة)، وليس في مقياس واحد "النموذج بطيء".
- معيار: أداة مع OpenTelemetry؛ مخطط سمة واحد للرموز المميزة والنموذج والمستأجر والطريق والتكلفة المقدرة_بالدولار الأمريكي.
- مسار المقاييس: بروميثيوس (+ ثانوس) للإشارات الذهبية؛ Grafana لـ SLOs ولوحات FinOps.
- مسار LLM: Langfuse/LMNR للآثار والنتائج ومجموعات البيانات والإصدارات السريعة.
- يتحكم: الرموز المميزة واستدعاءات الأدوات وجولات التصحيح؛ نماذج الطريق بصعوبة الخطوة.
- يفوز: قم بقياس التكلفة لكل مهمة ناجحة قبل شراء المزيد من GPU أو زيادة حصص API.
1. ماذا يعني "عنق الزجاجة" بالنسبة لوكلاء LLM
تختلف اختناقات وقت التدريب (البيانات، FLOPs) عن وقت الخدمة و وقت الوكيل الاختناقات. في عوامل الإنتاج، أنماط النفايات السائدة هي:
- انتفاخ سريع - مطالبات النظام كبيرة الحجم، والسياق غير المستخدم، وفقدان البادئة/ذاكرة التخزين المؤقت.
- مبالغة في النموذج - النماذج الحدودية المستخدمة لتصنيف/توجيه الخطوات التي يمكن لنموذج صغير القيام بها.
- حلقات لا حدود لها - إعادة محاولة الأداة ودورات التصحيح الذاتي بدون ميزانية صعبة (راجع مقايضات Self-Debugging في الشحن التوربيني LLMs).
- الإنتظار الخارجي - قواعد البيانات المتجهة، وSaaS APIs، وبوابات الإنسان داخل الحلقة المنسوبة بشكل خاطئ إلى "زمن استجابة LLM".
- خدمة التجزئة — نفايات ذاكرة التخزين المؤقت KV على منطقة GPU (منطقة PagedAttention/vLLM) بعد التأكد بالفعل من أن الرسم البياني للوكيل سليم.
بدون الآثار الموزعة لا يمكنك فصلها. وبالتالي، فإن إمكانية المراقبة ليست لوحة معلومات من الجيد امتلاكها، بل هي مستوى التحكم لـ FinOps وSRE في منتجات الذكاء الاصطناعي.
2. العمارة المرجعية
User / Orchestrator
→ Agent runtime (tools, RAG, LLM calls)
→ OpenTelemetry SDK (spans + metrics)
→ OTEL Collector (filter, sample, redact)
├─→ Prometheus / Thanos (rates, costs, SLOs)
├─→ Grafana (boards, alerts)
└─→ Langfuse / LMNR (traces, scores, datasets)
FinOps / policy layer reads the same metrics to enforce caps and model routing.
3. مخطط نطاق OpenTelemetry لمكالمات LLM
اعتماد اتفاقية واحدة عبر الأطر (LangChain، ووكلاء Go/Python المخصصون، ومجموعات Bedrock SDK). تفضيل الاصطلاحات الدلالية حيثما وجدت، والتوسع باستخدام سمات Workstation المستقرة:
| يصف | مثال | لماذا |
|---|---|---|
gen_ai.system | openai / أنثروبي / حجر الأساس / vllm | مجموعات الموفر |
gen_ai.request.model | كلود السوناتة-4 / اللاما-3.1-8ب | التكلفة والجودة حسب الموديل |
gen_ai.usage.input_tokens | 1820 | سائق التكلفة الفوري |
gen_ai.usage.output_tokens | 410 | سائق تكلفة الإنجاز |
wsw.estimated_cost_usd | 0.0124 | FinOps دون الانضمام إلى جداول الأسعار لاحقًا |
wsw.tenant_id | ذروة-منتج | رد المبالغ المدفوعة |
wsw.route | support.triage | إسناد ميزة المنتج |
wsw.agent_step | خطة / أداة / نقد | العثور على خطوات باهظة الثمن |
wsw.retry_n | 2 | كشف الحلقة |
wsw.prompt_version | الفرز@v17 | الارتباط الانحدار |
from opentelemetry import trace
from opentelemetry.trace import Status, StatusCode
tracer = trace.get_tracer("workstation.agents")
PRICE_IN = 0.003 / 1000 # example $/token — load from config
PRICE_OUT = 0.015 / 1000
def complete_llm(model: str, prompt: str, tenant: str, route: str):
with tracer.start_as_current_span("gen_ai.chat") as span:
span.set_attribute("gen_ai.system", "openai")
span.set_attribute("gen_ai.request.model", model)
span.set_attribute("wsw.tenant_id", tenant)
span.set_attribute("wsw.route", route)
try:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
usage = resp.usage
cost = usage.prompt_tokens * PRICE_IN + usage.completion_tokens * PRICE_OUT
span.set_attribute("gen_ai.usage.input_tokens", usage.prompt_tokens)
span.set_attribute("gen_ai.usage.output_tokens", usage.completion_tokens)
span.set_attribute("wsw.estimated_cost_usd", round(cost, 6))
return resp.choices[0].message.content
except Exception as e:
span.record_exception(e)
span.set_status(Status(StatusCode.ERROR, str(e)))
raise
يمارس: حساب estimated_cost_usd في المدى. لا تنتظر وظيفة ليلية لضم أعداد الرموز المميزة إلى قوائم الأسعار - يحتاج أصحاب المنتجات عند الطلب وأصحاب المنتجات إلى FinOps مباشرة.
3ب. التسلسل الهرمي والأمتعة المتعددة للوكلاء
تحتاج الرسوم البيانية للوكلاء إلى نموذج ثابت للأصل/الفرع، لذا يتم تجميع التكلفة بشكل صحيح:
session (root)
└─ agent.run {wsw.route, wsw.tenant_id}
├─ rag.retrieve {wsw.agent_step=retrieve}
├─ gen_ai.chat {wsw.agent_step=plan, model=…}
├─ tool.execute {tool=…, wsw.retry_n}
├─ gen_ai.chat {wsw.agent_step=synthesize}
└─ eval.score {score.name, score.value}
- جذر واحد لكل مهمة مستخدم - ليس لكل مكالمة LLM. تكلفة الجلسة = مجموع الأطفال
wsw.estimated_cost_usd. - أمتعة - نشر
wsw.tenant_idوwsw.routeعبر العمال / قوائم الانتظار غير المتزامنة، بحيث ترث امتدادات الأداة تسميات رد المبالغ المدفوعة دون إعادة توصيل كل موقع اتصال. - روابط - عندما يبدأ وكيل فرعي تتبعًا جديدًا (على سبيل المثال، مستهلك قائمة انتظار منفصل)، استخدم روابط الامتداد مرة أخرى إلى الجلسة الرئيسية حتى يتمكن Langfuse/Grafana من دمج الرسم البياني.
- دائما عينة عالية التكلفة - أخذ عينات من الرأس بنسبة 5-20% يعد أمرًا جيدًا للمسارات السعيدة؛ فرض العينة عندما يتجاوز إنفاق الجلسة الحد أو الحالة = خطأ.
4. المقاييس المهمة (بروميثيوس)
تصدير الرسوم البيانية والعدادات (عبر مقاييس OTEL أو عميل Prometheus). الحد الأدنى لمجموعة قابلة للحياة:
llm_requests_total{model,route,status}llm_tokens_total{model,direction}حيث الاتجاه ∈ {الإدخال والإخراج}llm_estimated_cost_usd_total{model,tenant,route}llm_ttft_seconds/llm_e2e_secondsالرسوم البيانيةagent_tool_calls_total{tool,status}agent_retries_total{route}agent_task_success_total{route}- القاسم للتكلفة لكل نجاح
استعلامات FinOps المشتقة (رسومات PromQL):
# Cost per successful task (last 1h), by route sum(rate(llm_estimated_cost_usd_total[1h])) by (route) / sum(rate(agent_task_success_total[1h])) by (route) # Retry tax sum(rate(agent_retries_total[1h])) by (route) / sum(rate(llm_requests_total[1h])) by (route)
ثانوس (أو Mimir/Cortex) مهم عندما يطلب قسم Finance إنفاق نموذج ربع سنوي. يعد بروميثيوس المحلي وحده مناسبًا عند الطلب؛ إنه ليس أرشيف FinOps.
5. لوحات جرافانا والتنبيهات
شحن ثلاثة جماهير من مصدر بيانات واحد:
- عند الطلب: معدل الخطأ، p95 e2e، فشل التبعية (ناقل DB / الأدوات).
- منصة: الرموز المميزة/الرموز، GPU util (إذا كانت مستضافة ذاتيًا)، عمق قائمة الانتظار، TTFT.
- العمليات المالية / المنتج: $/النجاح من قبل المستأجر والطريق، أعلى المطالبات باهظة الثمن، مزيج النماذج.
التنبيه على الحرق، وليس الغرور:
- التكلفة لكل نجاح > ميزانية SLO لـ 30 مليونًا
- معدل إعادة المحاولة > 15% للمسار
- خرق p95 e2e مع ارتفاع رموز الإدخال (الانحدار السريع)
6. منصات LLM الأصلية: Langfuse، وLMNR، والأصدقاء
المقاييس تخبرك الذي - التي ارتفعت التكلفة؛ تخبرك منصات LLM التي موجه الإصدار و ما مدى الأداة فعلت ذلك. لانجفيوز و لمنر أمثلة مفتوحة المصدر لهذه الفئة:
- الآثار الهرمية (الجلسة → الوكيل → LLM / امتدادات الأداة)
- درجات الإنسان وLLM كقاضي
- مجموعات البيانات للتقييم دون الاتصال بالإنترنت عند تغيير المطالبات
- قياس الاستخدام الاختياري عن بعد لتحسين المنتج (احترام سياسات الخصوصية)
نمط التكامل: احتفظ بـ OTEL كنظام تسجيل لـ SRE؛ التصدير المزدوج أو الجسر إلى Langfuse للهندسة السريعة. لا تخترع قاموس سمات ثانيًا غير متوافق.
يمكن للتجارب الإطارية، مثل أوقات تشغيل الوكيل الوظيفي الأول (التي يتم تسويقها تاريخيًا حول وكلاء التدفق المنظمين)، أن تقلل من النمط المعياري، ولكنها تتعامل مع الأطر المتخصصة باعتبارها اختيارية - حيث أن معايير قابلية المراقبة تدوم أكثر من ذلك.
7. خط أنابيب التسجيل: يدوي مقابل تلقائي
| طريقة | تطبيق | وضع الفشل |
|---|---|---|
| يدوي | الإبهام / نماذج التقييم في Langfuse UI؛ تقييمات ومراجعات مجموعة الذهب. | لا مقياس. لا تزال مطلوبة للمعايرة. |
| تلقائي | LLM-كحكم، وفحص الوحدات، ومدققات المخطط، واستدعاء الاسترجاع. | انجراف القاضي؛ الألعاب إذا كان التحسين فقط للقاضي. |
قم بإرفاق النتائج كأحداث ممتدة أو نتائج Langfuse بمفتاح wsw.prompt_version. بوابة الترقيات للمطالبات بنفس الطريقة التي تقوم بها ببوابة إصدارات التطبيق - Ring Promoter للكود؛ بوابات التقييم للمطالبات.
8. عملية توفير التكاليف (تفصيلية)
- الأسبوع الأساسي: لا تغيير في السلوك؛ الأجهزة فقط. احصل على $/النجاح، والرموز المميزة/النجاح، ومعدل إعادة المحاولة.
- الإسناد: ترتيب المسارات حسب الإنفاق × الحجم. اختر الثلاثة الأوائل.
- توجيه النموذج: تقسيم التصنيف/الاستخراج إلى نماذج صغيرة/محلية؛ الحفاظ على الحدود للتوليف. إعادة قياس درجات الجودة.
- الجراحة العاجلة: إزالة مخططات الأدوات غير المستخدمة؛ تقصير عدد قليل من اللقطات. تمكين ذاكرة التخزين المؤقت للبادئة حيثما تكون آمنة.
- قبعات الحلقة: الحد الأقصى لاستدعاءات الأداة، والحد الأقصى لجولات التصحيح الذاتي، والتراجع الأسي باستخدام قواطع الدائرة.
- أخذ العينات: الاحتفاظ بالمقاييس بنسبة 100%؛ تتبعات العينات (على سبيل المثال، 5-20%) بالإضافة إلى أخذ العينات دائمًا بحثًا عن الأخطاء والجلسات عالية التكلفة.
- التنقيح: إزالة معلومات تحديد الهوية الشخصية (PII) من سمات الامتداد قبل التصدير؛ قم بتخزين المطالبات الكاملة فقط في المتاجر المعتمدة مع TTL.
- إيقاع المراجعة: لوحة FinOps الأسبوعية؛ معايرة القاضي الشهرية ضد البشر.
8 ب. إدارة استخدام الوكيل بالميزانيات المباشرة
لوحات المعلومات وحدها لا توقف العملاء الهاربين. فرض الميزانيات في وقت التشغيل، وإصدار القرار كحدث ممتد، والتنبيه عندما تصل الجلسات إلى الحد الأقصى في كثير من الأحيان:
# Pseudocode: hard budget around an agent session
class Budget:
def __init__(self, max_usd=0.50, max_tool_calls=8, max_llm_calls=12):
self.max_usd, self.max_tool_calls, self.max_llm_calls = max_usd, max_tool_calls, max_llm_calls
self.spent = 0.0
self.tools = self.llms = 0
def charge(self, usd: float, kind: str):
self.spent += usd
if kind == "tool":
self.tools += 1
else:
self.llms += 1
if self.spent > self.max_usd or self.tools > self.max_tool_calls or self.llms > self.max_llm_calls:
raise RuntimeError("agent budget exhausted")
- قبعات لكل جلسة - مكالمات USD، LLM، مكالمات الأدوات (أعلاه).
- الحصص اليومية لكل مستأجر - Redis/العداد بمفتاح
wsw.tenant_id; إرجاع مسار متدهور يمكن التحكم فيه عند استنفاده. - سياسة النموذج لكل مسار — نماذج القائمة المسموح بها لـ
support.triageمقابلlegal.draft; رفض أو خفض السرعة في السياسة المفقودة والتسجيلwsw.policy_action=downshift. - مفاتيح أداة عاجزة - وسيطات أداة التجزئة بحيث لا تؤدي عمليات إعادة المحاولة إلى إصدار فاتورة مزدوجة لـ APIs الخارجية.
- صيغة التكلفة —
cost = in_tokens × p_in + out_tokens × p_out + tool_fees; ينعشp_in/p_outمن ورقة أسعار تم إصدارها بحيث تظل بيانات Thanos التاريخية قابلة للمقارنة.
المقياس الذي يجب مراقبته بعد هبوط الأحرف الاستهلالية: agent_budget_exhausted_total{route,reason}. الارتفاع المفاجئ يعني إما إساءة الاستخدام، أو حلقة أدوات معطلة، أو ميزانية ضيقة للغاية بالنسبة لأعباء العمل الحقيقية.
9. رسم تكوين المجمع
# otel-collector-config.yaml (illustrative)
receivers:
otlp:
protocols:
http:
grpc:
processors:
memory_limiter: {}
batch: {}
attributes/redact:
actions:
- key: gen_ai.prompt
action: delete
exporters:
prometheus:
endpoint: "0.0.0.0:8889"
otlp/langfuse:
endpoint: "${LANGFUSE_OTLP_ENDPOINT}"
headers:
Authorization: "Bearer ${LANGFUSE_KEY}"
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, attributes/redact, batch]
exporters: [otlp/langfuse]
metrics:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [prometheus]
10. الإيجابيات والسلبيات، ومتى لا داعي للقلق
الايجابيات: رد المبالغ المدفوعة، وفرز أسرع للحوادث، وعائد استثمار قابل للقياس على التغييرات السريعة/النموذجية، ومسارات التدقيق الملائمة للامتثال، واللغة المشتركة بين فرق تعلم الآلة والمنصة.
سلبيات: ديون الأجهزة؛ تكلفة التخزين إذا احتفظت بكل مطالبة إلى الأبد؛ خطر إرسال معلومات تحديد الهوية الشخصية إلى الواجهة الخلفية الخاطئة؛ وحدة تحكم أخرى للمهندسين للتعلم.
تخطي (في الوقت الحالي) إذا: لديك مهمة مجمعة واحدة غير متصلة بالإنترنت مع إنفاق يومي ثابت ولا يوجد وكلاء تفاعليون. لا تزال الرموز المميزة للسجل؛ تخطي المكدس متعدد الخلفيات بالكامل حتى يظهر التزامن.
11. قائمة التحقق من الهجرة
- ☐ OTEL SDK في وقت تشغيل الوكيل؛ جامع في الكتلة
- ☐ تشمل سمات النطاق النموذج والرموز المميزة والتكلفة والمستأجر والطريق
- ☐ مقاييس بروميثيوس + لوحة Grafana FinOps
- ☐ يتم توصيل Langfuse (أو LMNR) لمسار حرج واحد على الأقل
- ☐ أحرف كبيرة على الرموز / الأدوات / إعادة المحاولة
- ☐ سياسة التنقيح التي تمت مراجعتها من قبل الأمن
- ☐ مراجعة أسبوعية للدولار/النجاح لأفضل الطرق
- ☐ وثيقة ADR تربط إمكانية الملاحظة ← التقديم (vLLM) ← الترويج (Ring Promoter)
12. مادة Workstation ذات الصلة
- رفيق مدونة الأعمال
- الشحن التوربيني LLMs - قم بإصلاح التقديم بعد أن تتمكن من رؤية عنق الزجاجة
- Ring Promoter - تعزيز خدمات الوكيل مع البوابات الصحية
- Muse Glimmer / الوكلاء المحليين
- اتصل بـWorkstation لارتباطات Enterprise AI Lab
مراجع
نشرت من قبل Workstation.