إنتقل إلى المحتوى الرئيسي

الفصل 2: تنسيق النماذج المتعددة

موجه النموذج​

from typing import Callable

class ModelRouter:
def __init__(self):
self.models = {}
self.routing_rules = []

def register_model(self, name: str, client: Callable, config: dict):
self.models[name] = {"client": client, "config": config}

def add_routing_rule(self, condition: Callable, model_name: str):
self.routing_rules.append((condition, model_name))

def route(self, request: dict) -> str:
"""Determine which model to use."""
for condition, model_name in self.routing_rules:
if condition(request):
return model_name
return "default"

async def generate(self, request: dict) -> dict:
model_name = self.route(request)
model = self.models[model_name]

try:
response = await model["client"].generate(request["prompt"])
return {"response": response, "model": model_name}
except Exception as e:
# Fallback to next model
return await self.fallback(request, exclude=[model_name])

# Usage
router = ModelRouter()
router.register_model("gpt-4", gpt4_client, {"cost": "high", "quality": "best"})
router.register_model("gpt-3.5", gpt35_client, {"cost": "low", "quality": "good"})
router.register_model("claude", claude_client, {"cost": "medium", "quality": "best"})

# Route simple queries to cheaper model
router.add_routing_rule(
lambda r: len(r["prompt"]) < 100,
"gpt-3.5"
)

استراتيجية الاسترجاع​

class FallbackChain:
def __init__(self, models: list[str], router: ModelRouter):
self.models = models
self.router = router

async def generate_with_fallback(self, request: dict) -> dict:
last_error = None

for model_name in self.models:
try:
response = await self.router.models[model_name]["client"].generate(
request["prompt"]
)
return {"response": response, "model": model_name}
except Exception as e:
last_error = e
continue

raise FallbackExhaustedException(f"All models failed: {last_error}")

التالي: الفصل 3: بناء منصات النماذج اللغوية الكبيرة