AI Observability

رمزگشایی از جعبه سیاه: پیاده‌سازی OpenTelemetry برای برنامه‌های هوش مصنوعی

با تبدیل شدن مدل‌های زبانی بزرگ (LLMs) به ستون فقرات محصولات نرم‌افزاری مدرن، چالش مشاهده‌پذیری از متریک‌های سنتی به درک معنایی تغییر کرده است. توسعه‌دهندگان اغلب در عیب‌یابی دلیل هالوسیناسیون مدل یا افزایش تأخیر در یک استنتاج خاص مشکل دارند. OpenTelemetry (OTel)، استاندارد صنعتی برای مشاهده‌پذیری، تکامل یافته تا این نیازهای منحصربه‌فرد را برطرف کند. با پذیرش یک چارچوب ردیابی استاندارد، می‌توانید بینش عمیقی از چرخه حیات برنامه‌های هوش مصنوعی خود، از ساخت پرامپت تا تولید توکن، به دست آورید.

تغییر به سمت قرارداد‌های معنایی

در گذشته، ردیابی یک برنامه هوش مصنوعی شامل پیچیدن فراخوانی‌های API خارجی با متریک‌های HTTP عمومی بود. با این حال، این کار جزئیات حیاتی که عملکرد هوش مصنوعی را تعریف می‌کنند را پنهان می‌کند: تعداد توکن‌ها، پارامترهای مدل و زمینه پرامپت. بنیاد محاسبات بومی ابر (CNCF) اخیراً قرارداد‌های معنایی را به طور خاص برای هوش مصنوعی مولد معرفی کرده است. این قرارداد‌ها ویژگی‌هایی مانند gen_ai.system، gen_ai.request.model و gen_ai.response.token_count را تعریف می‌کنند. با پایبندی به این استانداردها، داده‌های مشاهده‌پذیری شما قابل حمل و قابل مقایسه در بین بک‌اند‌های مختلف می‌شود، چه از OpenAI، Anthropic یا LLMهای محلی استفاده کنید.

ابزارسازی فراخوانی‌های LLM شما

اگرچه کتابخانه‌های خودکارسازی برای فریمورک‌های محبوب وجود دارند، اما ابزارسازی صریح کنترل بیشتری ارائه می‌دهد. در زیر یک مثال عملی با استفاده از SDK Python OpenTelemetry برای ردیابی یک تعامل ساده LLM آورده شده است. این رویکرد اطمینان می‌بخشد که استفاده از توکن و جزئیات مدل به عنوان اسپن‌ها ثبت می‌شوند، که به شما امکان می‌دهد هزینه را با درخواست‌های خاص کاربر همبسته کنید.

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.trace import Status, StatusCode

# Initialize the tracer provider
provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
tracer = trace.get_tracer(__name__)

def call_llm(prompt: str, model: str):
    with tracer.start_as_current_span("llm.inference") as span:
        span.set_attribute("gen_ai.system", "openai")
        span.set_attribute("gen_ai.request.model", model)
        span.set_attribute("gen_ai.prompt", prompt)

        # Simulate LLM call
        response = "This is a simulated response."
        input_tokens = len(prompt.split())
        output_tokens = len(response.split())

        # Record token metrics
        span.set_attribute("gen_ai.usage.input_tokens", input_tokens)
        span.set_attribute("gen_ai.usage.output_tokens", output_tokens)
        span.set_attribute("gen_ai.response.text", response)

        if "error" in response:
            span.set_status(Status(StatusCode.ERROR, "LLM Error"))
        else:
            span.set_status(Status(StatusCode.OK))
        
        return response

# Example usage
call_llm("Explain quantum entanglement simply", "gpt-4")

جمع‌بندی متریک‌ها برای هزینه و عملکرد

ردیابی‌ها (Traces) سفر یک درخواست واحد را نشان می‌دهند، اما متریک‌ها سلامت سیستم شما را در طول زمان آشکار می‌کنند. شما باید تعداد توکن‌ها را به داده‌های سری زمانی تجمیع کنید. این کار به شما امکان می‌دهد هشدارهایی برای جهش‌های غیرعادی در استفاده تنظیم کنید که اغلب نشان‌دهنده یک باگ در مهندسی پرامپت شما (مثلاً یک حلقه بی‌نهایت که زمینه را اضافه می‌کند) یا یک افزایش ترافیک است. با نگاشت این متریک‌ها به ارائه‌دهنده صورتحساب خود، می‌توانید یک داشبورد هزینه بلادرنگ ایجاد کنید که هزینه‌ها را بر اساس مدل، ویژگی یا سطح کاربر تفکیک می‌کند.

عیب‌یابی «چرا»

قدرت واقعی OpenTelemetry در هوش مصنوعی در توانایی آن برای پیوند دادن علت و معلول نهفته است. وقتی کاربری پاسخ بدی را گزارش می‌دهد، می‌توانید درخواست را از طریق جستجوی پایگاه داده برداری، منطق مونتاژ پرامپت و در نهایت فراخوانی LLM ردیابی کنید. با شامل کردن امتیازات بازیابی و نسخه‌های پرامپت به عنوان ویژگی‌های اسپن، می‌توانید تعیین کنید که آیا مدل به دلیل کیفیت بازیابی ضعیف شکست خورده است یا صرفاً یک پرامپت مبهم. این سطح از دقت، عیب‌یابی را از حدس و گمان به یک فرآیند مبتنی بر داده تبدیل می‌کند.

نتیجه‌گیری

یکپارچه‌سازی OpenTelemetry در استک هوش مصنوعی شما دیگر برای سیستم‌های سطح تولید اختیاری نیست. این کار شفافیت لازم برای پایش هزینه‌ها، بهبود عملکرد مدل و اطمینان از قابلیت اطمینان را فراهم می‌کند. با بهره‌گیری از قرارداد‌های معنایی، استراتژی مشاهده‌پذیری خود را برای آینده آماده می‌کنید و اطمینان می‌دهید که با تکامل مدل‌های هوش مصنوعی، قابلیت‌های پایش شما نیز گام برمی‌دارند. با ابزارسازی فراخوانی‌های LLM اصلی خود شروع کنید و به تدریج گسترش دهید تا جستجوی برداری و منطق عامل (Agent) را شامل شود و یک نمای جامع از رفتار برنامه هوش مصنوعی خود بسازید.

Share: