AI ایپلی کیشنز کو کیسے بنایا جائے جو خود بخود ماڈلز کو تبدیل کرتی ہیں۔

بڑے زبان کے ماڈلز (LLMs) نے ہمارے جدید سافٹ ویئر بنانے کے طریقے کو بنیادی طور پر تبدیل کر دیا ہے۔

تاہم، تمام صارف کی درخواستوں کے لیے ایک واحد AI ماڈل پر انحصار کرنے سے پیداوار کے سنگین خطرات لاحق ہوتے ہیں۔ ایک API بندش ہوتی ہے۔ سادہ کاموں کے لیے، ملکیتی ماڈل مہنگے ہو سکتے ہیں۔ اور سستے اوپن سورس ماڈل پیچیدہ منطقی استدلال کا شکار ہو سکتے ہیں۔

جب میں اور میری ٹیم اپنے کسٹمر سپورٹ پلیٹ فارم کے لیے انٹرپرائز-گریڈ AI انجن بنا رہے تھے، تو ہم نے ہر چیز کے لیے ایک واحد اعلیٰ سطحی ماڈل استعمال کیا۔

ایک ماہ کے اندر ہمیں دو بڑے مسائل کا سامنا کرنا پڑا۔ ایک وسیع پیمانے پر API کی بندش نے ایپ کو مکمل طور پر روک دیا اور عام سوالات کا جواب دینے کے لیے مہنگے انفرنس ماڈلز کے استعمال کی وجہ سے ماہانہ API بلوں میں اضافہ ہوا۔

اس مسئلے کو حل کرنے کے لیے، ہم نے ایک لچکدار ملٹی ماڈل آرکیسٹریٹر بنایا ہے۔ اس گائیڈ میں، آپ Python کا استعمال کرتے ہوئے ایک ذہین، کثیر درجے کی AI ایپلیکیشن بنانے کا طریقہ سیکھتے ہیں جو کہ متحرک طور پر پرامپٹ کو روٹ کرتی ہے اور ماڈل کے متبادل کو خود بخود ہینڈل کرتی ہے۔

شرائط اور ترجیحات

اس ٹیوٹوریل کے ساتھ آگے بڑھنے کے لیے، آپ کو درج ذیل ترتیبات کی ضرورت ہوگی۔

  • ازگر اور غیر مطابقت پذیر پروگرامنگ میں بنیادی مہارت۔

  • آپ کے سسٹم پر Python 3.9 یا اس سے زیادہ انسٹال ہے۔

  • ویژول اسٹوڈیو کوڈ جیسا کوڈ ایڈیٹر۔

  • دو یا زیادہ ماڈل فراہم کنندگان (جیسے OpenAI اور Anthropic) یا Ollama کے ذریعے چلنے والے مقامی ماڈل کے لیے ایک API کلید۔

پیکیج انسٹال کریں

ٹرمینل کھولیں اور مطلوبہ انحصار انسٹال کریں۔

pip install openai anthropic python-dotenv pydantic

مقامی ڈائریکٹری ڈھانچہ

اپنے کوڈ کو صاف رکھنے کے لیے، اپنی پروجیکٹ ڈائرکٹری کو اس طرح ترتیب دیں:

ai-model-router/

│

├── .env

├── README.md

└── app.py

ماحولیات کی ترتیب

بنانا .env اپنی پروجیکٹ ڈائرکٹری کے روٹ میں ایک فائل بنائیں اور اپنی اسناد شامل کریں۔

Ini, TOML

OPENAI_API_KEY=your_openai_api_key_here ANTHROPIC_API_KEY=your_anthropic_api_key_here ENVIRONMENT=development

سنگل ماڈل فن تعمیر کے ساتھ مسائل

اگر آپ اپنے تمام سوالات کو فلیگ شپ ماڈلز جیسے GPT-4o یا Claude 3.5 Sonnet پر بھیجتے ہیں، تو آپ کو ایک آسان کام کے لیے زیادہ ادائیگی کرنا پڑے گی۔ اس کے برعکس، اگر آپ پیسے بچانے کے لیے ہر چیز کو چھوٹے، تیز ماڈل جیسے GPT-4o-mini یا Claude 3.5 Haiku کی طرف لے جاتے ہیں، تو آپ کا سسٹم اس وقت ناکام ہو جائے گا جب صارفین پیچیدہ کوڈ جنریشن یا تجزیہ کے کام جمع کرائیں گے۔

لاگت کے مسائل کے علاوہ، سنگل ماڈل سسٹم ناکامی کے ایک ہی نقطہ سے دوچار ہیں۔ اگر آپ کا API فراہم کنندہ نیچے جاتا ہے یا آپ کے اکاؤنٹ کی رفتار کو محدود کر دیتا ہے، تو آپ کی پوری ایپلیکیشن کریش ہو جائے گی۔

اس مسئلے کو حل کرنے کے لیے، آپ کو ایک آرکیسٹریشن پرت کی ضرورت ہے جو LLM کو کال کرنے سے پہلے فوری پیچیدگی کا جائزہ لے، سب سے زیادہ لاگت والے ماڈل کی درخواستوں کو روٹ کرے، اور اگر بنیادی فراہم کنندہ ناکام ہو جائے تو ثانوی فراہم کنندہ کے پاس واپس آجائے۔

ڈائنامک ماڈل روٹنگ لائف سائیکل کو سمجھنا

ذہین ماڈل کے انتخاب اور خودکار فیل اوور کے ساتھ ڈائنامک ملٹی ماڈل AI سسٹم کا فلو ڈایاگرام۔

یہ ہے کہ صارف کی درخواستیں متحرک ملٹی ماڈل سسٹم کے ذریعے کیسے منتقل ہوتی ہیں:

سب سے پہلے، پیچیدگی کا تجزیہ ہے. سسٹم ٹاسک ٹائر (سادہ، درمیانے، یا پیچیدہ) کو تفویض کرنے کے لیے ہلکے وزن کے میٹرکس کا استعمال کرتے ہوئے آنے والے اشارے کی جانچ کرتا ہے۔

دوسرا، ماڈل روٹنگ ہے. نظام درجہ بندی کو مناسب ماڈل کے لیے نقشہ بناتا ہے۔ مثال کے طور پر، ہلکے کام کا بوجھ ہائیکو/منی پر جاتا ہے، اور بھاری قیاسات سونیٹ/GPT-4o پر جاتے ہیں۔

اس میں خودکار فال بیک فیچر بھی ہے۔ اگر ڈیفالٹ فراہم کنندہ کا وقت ختم ہوجاتا ہے یا API کی خرابی کا سامنا ہوتا ہے، تو سسٹم خود بخود سوالات کو ایک مساوی متبادل ماڈل کی طرف بھیج دیتا ہے۔

مرحلہ 1: ٹائر 1 کا نفاذ – تیز رفتار پیچیدگی اور ارادے کا تجزیہ

سب سے پہلے، ہمیں یہ فیصلہ کرنے کے لیے کہ کون سا ماڈل استعمال کرنا ہے، مہنگی API کال کیے بغیر پرامپٹس کو ٹرائیج کرنے کے لیے ایک متعین اور تیز طریقہ کی ضرورت ہے۔

آپ LLM API کالز پر رقم خرچ کرنے سے پہلے اپنے کوڈ میں متن کو براہ راست دیکھ سکتے ہیں تاکہ یہ معلوم کیا جا سکے کہ آپ کے صارفین کیا چاہتے ہیں۔ اس قدم کو سمارٹ گیٹ کیپنگ سمجھیں۔ آپ سادہ چیزوں کو چیک کر سکتے ہیں جیسے کہ متن کی لمبائی، کوڈ کے ٹکڑوں، یا مشکل مطلوبہ الفاظ کو مفت، ملی سیکنڈ کا خیال حاصل کرنے کے لیے کہ کوئی کام کتنا مشکل ہے۔

درجہ بندی کے قواعد کو اندرونی طور پر ترتیب دینے کا طریقہ یہاں ہے: app.py:

import re
from enum import Enum
from pydantic import BaseModel


class TaskComplexity(Enum):
    SIMPLE = "simple"      # FAQs, short summaries, basic translation
    MEDIUM = "medium"      # Standard text generation, content rewriting
    COMPLEX = "complex"    # Code writing, math logic, structural analysis


class PromptAnalyzer:
    def __init__(self):
        # Regex patterns indicative of complex tasks
        self.complex_keywords = [
            r"brefactorb",
            r"bdebugb",
            r"bwrite codeb",
            r"banalyzeb",
            r"balgorithmb",
            r"barchitectureb",
        ]

    def analyze_complexity(self, prompt: str) -> TaskComplexity:
        """
        Evaluates input text deterministically to output
        a TaskComplexity rating.
        """
        normalized = prompt.lower().strip()
        word_count = len(normalized.split())

        # Check for code blocks or complex request patterns
        contains_code = "```" in prompt
        has_complex_keyword = any(
            re.search(pattern, normalized)
            for pattern in self.complex_keywords
        )

        if contains_code or has_complex_keyword or word_count > 300:
            return TaskComplexity.COMPLEX
        elif word_count > 80:
            return TaskComplexity.MEDIUM
        else:
            return TaskComplexity.SIMPLE


# Example Usage
if __name__ == "__main__":
    analyzer = PromptAnalyzer()

    test_prompt = (
        "Write a Python script that implements a trie "
        "data structure with autocomplete."
    )

    complexity = analyzer.analyze_complexity(test_prompt)
    print(f"Prompt Complexity Tier: {complexity.value}")

ٹائر 1 کوڈ کا منطقی تجزیہ

  • TaskComplexity گنتی: آنے والی درخواستوں کے لیے واضح زمرے کی وضاحت کریں (SIMPLE, MEDIUM, COMPLEX)، جو پوری پائپ لائن میں قسم کی حفاظت فراہم کرتا ہے۔

  • مطلوبہ الفاظ کی مماثلت: کہ PromptAnalyzer کلاس ایک باقاعدہ اظہار کا نمونہ ترتیب دیتی ہے جو درج ذیل ایکشن الفاظ سے میل کھاتا ہے: refactor, debugیا algorithm اس کا مطلب ہے بھاری تخمینہ کام۔

  • تعییناتی اصول analyze_complexity:

  • فارمیٹنگ اور لمبائی چیک کریں: تاروں اور مارک ڈاؤن کوڈ بلاکس کو صاف کریں (```)، الفاظ کی تعداد گننے کے لیے۔

  • درجے کی تفویض:

    • اگر کسی پرامپٹ میں کوڈ بلاکس، قابل عمل الفاظ، یا 300 الفاظ سے زیادہ لمبے ہیں، تو اسے فوری طور پر بڑھا دیا جاتا ہے: COMPLEX.

    • کوڈ کلیدی الفاظ کے بغیر 80 اور 300 الفاظ کے درمیان کوئی بھی چیز نقشہ بناتی ہے: MEDIUM.

    • چھوٹا پہلے سے طے شدہ ہے۔ SIMPLE.

جب آپ کوڈ کا یہ ٹکڑا ایک پیچیدہ استفسار کے ساتھ چلاتے ہیں، تو یہ متن کو چیک کرتا ہے، "لکھنے کا کوڈ” تلاش کرتا ہے، اور اسے پرنٹ کرتا ہے۔

فوری پیچیدگی کا درجہ بندی: پیچیدہ

مرحلہ 2: ٹائر 2 کا نفاذ – متحرک ماڈل روٹنگ منطق

اب جب کہ ہم کامیابی کے ساتھ پرامپٹس کو سادہ، درمیانے یا پیچیدہ کے طور پر لیبل کر سکتے ہیں، ہمیں یہ تعین کرنے کے لیے ایک اصولی کتاب کی ضرورت ہے کہ کون سا AI ماڈل انہیں اصل میں ہینڈل کرتا ہے۔

یہ پرت پیچیدگی کی ہر پرت کو ایک بنیادی ماڈل اور ثانوی متبادل ماڈل میں نقشہ بناتی ہے۔ مثال کے طور پر، سادہ سوالات کو بجٹ ماڈل (gpt-4o-mini) پر روٹ کیا جاتا ہے، جبکہ پیچیدہ درخواستوں کو ہیوی ویٹ ماڈل (کلاڈ-3-5-سونیٹ) کی طرف روانہ کیا جاتا ہے۔

درج ذیل ترتیب بھی شامل کریں:

class ModelConfig(BaseModel):
    provider: str
    model_name: str


class ModelRouter:
    def __init__(self):
        # Map task complexity tiers to primary and fallback models
        self.routing_table = {
            TaskComplexity.SIMPLE: {
                "primary": ModelConfig(
                    provider="openai",
                    model_name="gpt-4o-mini",
                ),
                "fallback": ModelConfig(
                    provider="anthropic",
                    model_name="claude-3-5-haiku-20241022",
                ),
            },
            TaskComplexity.MEDIUM: {
                "primary": ModelConfig(
                    provider="openai",
                    model_name="gpt-4o-mini",
                ),
                "fallback": ModelConfig(
                    provider="anthropic",
                    model_name="claude-3-5-haiku-20241022",
                ),
            },
            TaskComplexity.COMPLEX: {
                "primary": ModelConfig(
                    provider="anthropic",
                    model_name="claude-3-5-sonnet-20241022",
                ),
                "fallback": ModelConfig(
                    provider="openai",
                    model_name="gpt-4o",
                ),
            },
        }

    def get_models_for_tier(
        self, complexity: TaskComplexity
    ) -> tuple[ModelConfig, ModelConfig]:
        """
        Returns the primary and fallback models for a given
        task complexity tier.
        """
        config = self.routing_table[complexity]
        return config["primary"], config["fallback"]

ٹائر 2 میں کوڈ منطق کا تجزیہ

  • ModelConfig خاکہ: اس بات کو یقینی بنانے کے لیے Pydantic کا استعمال کریں کہ ہر ماڈل کی تعریف میں دونوں شامل ہیں۔ provider (مثال کے طور پر، "openai") اور مخصوص model_name تار

  • self.routing_table نقشہ سازی: یہ لغت ماڈل اسائنمنٹس کے لیے سچائی کے واحد ذریعہ کے طور پر کام کرتی ہے۔

    • SIMPLE اور MEDIUM درجہ بندی: اصل ہدف ہے۔ gpt-4o-mini ہائی تھرو پٹ، کم لاگت پرنٹنگ کے لیے۔ اگر OpenAI ناکام ہو جاتا ہے، تو اس کی جگہ Anthropic لے لی جائے گی۔ claude-3-5-haiku-20241022.

    • COMPLEX منزل: پہلے سے طے شدہ ہدف کو الٹا دیا جاتا ہے: claude-3-5-sonnet-20241022 ٹاپ لیول کوڈ جنریشن اور انفرنس کے لیے gpt-4o بیک اپ کے طور پر۔

  • get_models_for_tier: ایک مددگار فنکشن جو تجزیہ کردہ درجہ بندی لیتا ہے اور محفوظ طریقے سے ایک ٹپل واپس کرتا ہے۔ (PrimaryModel, FallbackModel).

مرحلہ 3: ٹائر 3 کا نفاذ – خودکار فال بیک

یہاں تک کہ بہترین AI فراہم کرنے والے بھی ڈاؤن ٹائم، رفتار کی حد، یا غیر متوقع ٹائم آؤٹ کا تجربہ کرتے ہیں۔ ایسا ہونے پر پروڈکشن کے لیے تیار ایپ صارف کو ایرر اسکرین نہیں دکھا سکتی۔ ہمیں ایک ایگزیکیوشن انجن کی ضرورت ہے جو بنیادی ماڈل فراہم کنندہ کو کال کرے اور خود بخود غلطیوں کو پکڑ لے۔ اگر کوئی مسئلہ پیش آتا ہے، تو آپ ورک فلو میں خلل ڈالے بغیر فوری طور پر ثانوی فال بیک ماڈل پر چلے جاتے ہیں۔

اپنی اسکرپٹ میں ایگزیکیوشن انجن کوڈ شامل کریں۔

import os
import time

from anthropic import Anthropic, APIError as AnthropicAPIError
from dotenv import load_dotenv
from openai import OpenAI, APIError as OpenAIAPIError

load_dotenv()


class ResilientModelEngine:
    def __init__(self):
        self.openai_client = OpenAI(
            api_key=os.getenv("OPENAI_API_KEY", "dummy")
        )
        self.anthropic_client = Anthropic(
            api_key=os.getenv("ANTHROPIC_API_KEY", "dummy")
        )

    def _call_openai(self, model: str, prompt: str) -> str:
        response = self.openai_client.chat.completions.create(
            model=model,
            messages=[
                {
                    "role": "user",
                    "content": prompt,
                }
            ],
            timeout=10.0,
        )
        return response.choices[0].message.content

    def _call_anthropic(self, model: str, prompt: str) -> str:
        response = self.anthropic_client.messages.create(
            model=model,
            max_tokens=1024,
            messages=[
                {
                    "role": "user",
                    "content": prompt,
                }
            ],
            timeout=10.0,
        )
        return response.content[0].text

    def execute_provider_call(
        self,
        config: ModelConfig,
        prompt: str,
    ) -> str:
        """
        Dispatches prompt execution to the correct provider SDK.
        """
        if config.provider == "openai":
            return self._call_openai(config.model_name, prompt)
        elif config.provider == "anthropic":
            return self._call_anthropic(config.model_name, prompt)
        else:
            raise ValueError(
                f"Unsupported provider: {config.provider}"
            )

    def execute_with_fallback(
        self,
        primary: ModelConfig,
        fallback: ModelConfig,
        prompt: str,
    ) -> tuple[str, str]:
        """
        Attempts execution on the primary model and switches to the
        fallback model if the primary provider fails.

        Returns:
            tuple[str, str]: (Response text, Model used)
        """
        try:
            print(
                f"[Attempt] Calling Primary Provider: "
                f"{primary.provider} ({primary.model_name})"
            )

            result = self.execute_provider_call(primary, prompt)

            return result, (
                f"{primary.provider}:{primary.model_name}"
            )

        except (
            OpenAIAPIError,
            AnthropicAPIError,
            Exception,
        ) as e:
            print(f"[WARNING] Primary call failed due to: {e}")

            print(
                f"[Fallback] Switching to Secondary Provider: "
                f"{fallback.provider} ({fallback.model_name})"
            )

            try:
                result = self.execute_provider_call(
                    fallback,
                    prompt,
                )

                return result, (
                    f"{fallback.provider}:"
                    f"{fallback.model_name} (Fallback)"
                )

            except Exception as fallback_error:
                raise RuntimeError(
                    "Both primary and fallback systems failed. "
                    f"Error: {fallback_error}"
                )

ٹائر 3 میں کوڈ منطق کا تجزیہ

فراہم کنندہ کلائنٹ (_call_openai اور _call_anthropic): مددگار طریقہ فراہم کنندہ SDK کال کو متحد، سخت 10 سیکنڈ کا ٹائم آؤٹ سیٹ کرنے کے لیے لپیٹ دیتا ہے۔ اگر API نیچے چلا جاتا ہے، تو یہ تیزی سے رک جائے گا لہذا صارف کا انتظار کیے بغیر فال بیک آپریشن شروع ہو سکتا ہے۔

execute_provider_call ڈسپیچر: ایک تجریدی برج کے طور پر کام کرتا ہے جو متعلقہ API طریقوں کے ساتھ درخواست کردہ فراہم کنندہ کے تاروں سے میل کھاتا ہے۔

execute_with_fallback لچکدار منطق: پہلے سے طے شدہ فراہم کنندہ کو ٹرائی بلاک کے اندر انجام دیں۔ فراہم کنندہ کے مخصوص استثناء (OpenAIAPIError، AnthropicAPIError) کے ذریعے API کی خرابیوں، شرح کی حدود، یا نیٹ ورک ٹائم آؤٹ کو پکڑیں۔ استثنیٰ بلاک کے اندر ایک متبادل فراہم کنندہ پر عمل درآمد کو منطقی طور پر ری ڈائریکٹ کرتا ہے۔ یہ صرف ناقابل بازیافت غلطیوں کا سبب بنتا ہے۔ RuntimeError جب بنیادی فراہم کنندہ اور فال بیک فراہم کنندہ دونوں ناکام ہوجاتے ہیں۔ اگر بنیادی فراہم کنندہ کے ساتھ کوئی مسئلہ پیش آتا ہے، تو کنسول بحالی کے عمل کو شفاف طریقے سے ٹریک کرتا ہے۔

[Attempt] ڈیفالٹ فراہم کنندہ کال: بشریات (کلاڈ-3-5-سونیٹ-20241022)

[WARNING] بنیادی کال درج ذیل وجہ سے ناکام ہو گئی: کنکشن کا وقت ختم ہو گیا۔

[Fallback] ثانوی فراہم کنندہ پر جائیں: openai (gpt-4o)

آرکیٹیکچرز کو ایک متحد عملدرآمد پائپ لائن میں یکجا کریں۔

تینوں تہوں کو اب ایک مربوط پائپ لائن میں ملایا جا سکتا ہے۔

متعدد ماڈلز اور ورک فلو میں AI ملازمتوں کو چلانے کے لیے ایک مربوط پائپ لائن۔

آپ کا app.py اسکرپٹ جو اس آرکیسٹریشن کلاس کو استعمال کرتی ہے:

class SmartAIEngine:
    def __init__(self):
        self.analyzer = PromptAnalyzer()
        self.router = ModelRouter()
        self.executor = ResilientModelEngine()

    def process_request(self, user_prompt: str) -> dict:
        print("n==========================================")
        print("Processing New Request")
        print("==========================================")

        # Step 1: Analyze prompt complexity
        complexity = self.analyzer.analyze_complexity(
            user_prompt
        )
        print(
            f"[Step 1] Prompt classified as: "
            f"{complexity.value.upper()}"
        )

        # Step 2: Determine routing target
        primary_model, fallback_model = (
            self.router.get_models_for_tier(
                complexity
            )
        )

        print(
            f"[Step 2] Selected Primary: "
            f"{primary_model.model_name}"
        )

        # Step 3: Execute request with resilient fallbacks
        response_text, executed_model = (
            self.executor.execute_with_fallback(
                primary=primary_model,
                fallback=fallback_model,
                prompt=user_prompt,
            )
        )

        return {
            "status": "success",
            "complexity_tier": complexity.value,
            "model_used": executed_model,
            "response": response_text,
        }


# Execution Pipeline Test
if __name__ == "__main__":
    engine = SmartAIEngine()

    # Query 1: Simple task
    simple_query = (
        "What is the capital of Japan? "
        "Answer in one word."
    )

    result_1 = engine.process_request(
        simple_query
    )

    print(f"Model Used: {result_1['model_used']}")
    print(f"Response: {result_1['response']}")

    # Query 2: Complex task
    complex_query = (
        "Write a Python function to debug a "
        "memory leak in a multithreaded "
        "application."
    )

    result_2 = engine.process_request(
        complex_query
    )

    print(f"Model Used: {result_2['model_used']}")
    print(
        f"Response Snippet: "
        f"{result_2['response'][:100]}..."
    )

کوڈ منطق کا تجزیہ

  • مربوط آرکیسٹریشن (SmartAIEngine): تینوں ماڈیولر اجزاء کو شروع کرتا ہے۔PromptAnalyzer, ModelRouterاور ResilientModelEngine– مثال کے طور پر پراپرٹی۔

  • پائپ لائن کے مراحل:

    • تجزیہ: پرامپٹ سٹرنگس کا آف لائن جائزہ لے کر پیچیدگی کی پرتیں حاصل کریں۔

    • پاتھ: بنیادی اور ثانوی ماڈل کے جوڑوں کو ان کے درجہ بندی کی بنیاد پر متعین کرتا ہے۔

    • عمل درآمد: لچکدار طریقے سے ماڈلز کی درخواست کرتا ہے اور غلطی کے منظرناموں کو پکڑتا ہے۔

  • معمول کے مطابق جوابی پے لوڈ: ماڈل کے استعمال، پیچیدگی کی درجہ بندی، اور آؤٹ پٹ ٹیکسٹ کو ٹریک کرنے کے لیے عملدرآمد کی تفصیلات کو ایک مستقل آؤٹ پٹ لغت میں لپیٹ دیتا ہے۔

پیداوار میں متحرک ماڈل ٹرانزیشن سے سیکھے گئے سبق

ایک متحرک AI روٹنگ سسٹم کی تعمیر میں، ہماری ٹیم نے انٹرپرائز LLM فن تعمیر کے بارے میں اہم اسباق سیکھے۔

سب سے پہلے، اپنی درجہ بندی کو ہلکا رکھیں۔ چھوٹے کاموں کے لیے بڑی ایل ایل ایم کالز کا استعمال نہ کریں۔ ریگولر ایکسپریشنز، مطلوبہ الفاظ کی مماثلت، اور ٹوکن کی لمبائی کے اصول استعمال کرتا ہے۔ درجہ بندی کو 5 ملی سیکنڈ کے اندر چلنا چاہیے۔

دوسرا، سسٹم آؤٹ پٹ کو معمول پر لانا۔ ماڈل فراہم کنندہ پر منحصر ہے، آؤٹ پٹ کو مختلف طریقے سے تشکیل دیا جائے گا۔ یوزر انٹرفیس پر ڈیٹا واپس کرنے سے پہلے، اس بات کو یقینی بنائیں کہ آپ کی ایپلیکیشن جواب کو ایک مستقل اسکیما میں لپیٹ دیتی ہے۔

تیسرا، سخت وقت کی حد مقرر کریں۔ فراہم کنندہ APIs اکثر فوری غلطی پھینکنے کے بجائے لٹک جاتے ہیں۔ بیس ماڈل کالز کے لیے سخت ریکوئسٹ ٹائم آؤٹ (5-10 سیکنڈ) کا تعین اس بات کو یقینی بناتا ہے کہ صارفین کو مایوس کیے بغیر فال بیک ایکشنز تیزی سے شروع ہو جائیں۔

آخر میں، استعمال کے میٹرکس کو ٹریک کریں۔ روٹنگ کے تمام فیصلوں، ماڈل کے متبادل اور لاگت میں تبدیلیوں کو ریکارڈ کرتا ہے۔ یہ ڈیٹا ظاہر کرتا ہے کہ آیا آپ کی پیچیدگی کی حد کو وقت کے ساتھ مناسب طریقے سے ایڈجسٹ کیا گیا ہے۔

نتیجہ

AI ایپلی کیشنز کے پیمانے کے طور پر، ایک سنگل LLM پر انحصار غیر پائیدار ہو جاتا ہے۔ انٹیلجنٹ ماڈل روٹنگ آپ کو ردعمل کے معیار پر سمجھوتہ کیے بغیر کارکردگی، تاخیر اور لاگت کو متوازن کرنے کی اجازت دیتی ہے۔

مخصوص ماڈل فراہم کنندگان سے اپنی ایپلی کیشنز کو ڈیکپل کرکے اور خودکار روٹنگ لیئرز، ان پٹ ایویلویشن، پرووائیڈر تجرید، اور لچکدار فال بیکس متعارف کروا کر، آپ لاگت سے موثر، تیز، اور لچکدار پروڈکشن AI سسٹم بنا سکتے ہیں۔

اپنی خود کی ایپلی کیشنز کو تعینات کرتے وقت، LLM فراہم کنندہ کے ساتھ ایک متحرک افادیت کے طور پر برتاؤ کریں۔ روٹین پروسیسنگ کے لیے ہلکے وزن والے ماڈلز کا استعمال کریں، پیچیدہ کاموں کے لیے فلیگ شپ ماڈلز کو محفوظ کریں، اور کوڈ میں صاف ستھرا سوئچنگ فراہم کنندہ کو ہینڈل کریں۔

پڑھنے کے لیے شکریہ!

مجھے امید ہے کہ اس مضمون نے آپ کو اس بارے میں عملی سمجھ دی ہے کہ ملٹی ماڈل آرکیسٹریٹرز اور متحرک روٹنگ حقیقی دنیا کی ایپلی کیشنز میں کیسے کام کرتے ہیں اور انہیں آپ کے اپنے پروجیکٹس میں کیسے لاگو کرنا ہے۔

اگر آپ AI انجینئرنگ، Agentic AI، LLM، RAG، MLOps، Enterprise AI آرکیٹیکچر یا AI گورننس پر بات کرنا چاہتے ہیں تو بلا جھجھک میرے ساتھ فالو کریں، لائک کریں، شیئر کریں اور جڑیں۔

Scroll to Top