Trong bài viết này, tôi sẽ chia sẻ kinh nghiệm thực chiến khi tích hợp HolySheep AI vào CrewAI — một framework đa agent phổ biến cho việc xây dựng hệ thống AI tự động hóa quy trình công việc. Qua 6 tháng triển khai hệ thống xử lý hàng triệu request mỗi ngày, tôi đã tích lũy được nhiều bài học quý giá về kiến trúc, tối ưu hiệu suất và kiểm soát chi phí.

Tại sao CrewAI + HolySheep là sự kết hợp hoàn hảo?

CrewAI cho phép bạn xây dựng các team ảo gồm nhiều AI agent, mỗi agent đảm nhận một vai trò cụ thể và cộng tác để hoàn thành nhiệm vụ phức tạp. Khi kết hợp với HolySheep API — nơi cung cấp quyền truy cập vào các model hàng đầu với chi phí thấp hơn tới 85% so với OpenAI — bạn có một giải pháp production-ready với hiệu suất cao và chi phí tối ưu.

Kiến trúc tổng quan

Trước khi đi vào code, hãy hiểu rõ kiến trúc của hệ thống:

Cài đặt và cấu hình ban đầu

Đầu tiên, cài đặt các dependencies cần thiết:

pip install crewai crewai-tools langchain-openai python-dotenv aiohttp asyncio-limiter

Hoặc sử dụng poetry

poetry add crewai crewai-tools langchain-openai python-dotenv aiohttp

Tiếp theo, tạo file cấu hình môi trường:

# .env
HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY
HOLYSHEEP_BASE_URL=https://api.holysheep.ai/v1

Cấu hình cho production

MAX_CONCURRENT_AGENTS=10 REQUEST_TIMEOUT=120 MAX_RETRIES=3 RATE_LIMIT_PER_MINUTE=60

Tích hợp HolySheep Custom LLM vào CrewAI

HolySheep cung cấp API tương thích với OpenAI format, nhưng để tận dụng tối đa các tính năng và tối ưu chi phí, bạn nên sử dụng custom LLM wrapper:

import os
from typing import Optional, List, Any, Dict
from langchain_openai import ChatOpenAI
from crewai import Agent, Task, Crew
from pydantic import Field
import time
import logging

logger = logging.getLogger(__name__)


class HolySheepLLM(ChatOpenAI):
    """Custom LLM wrapper cho HolySheep API với rate limiting và retry logic"""
    
    model_name: str = Field(default="deepseek-v3.2")
    holy_sheep_api_key: str = Field(default="")
    request_count: int = Field(default=0)
    total_tokens: int = Field(default=0)
    
    def __init__(self, 
                 model: str = "deepseek-v3.2",
                 temperature: float = 0.7,
                 max_tokens: int = 2048,
                 **kwargs):
        
        api_key = os.getenv("HOLYSHEEP_API_KEY") or kwargs.get("holy_sheep_api_key", "")
        
        super().__init__(
            model=model,
            temperature=temperature,
            max_tokens=max_tokens,
            openai_api_key=api_key,
            openai_api_base="https://api.holysheep.ai/v1",
            **kwargs
        )
        
        self.request_count = 0
        self.total_tokens = 0
        self._rate_limiter = AsyncRateLimiter(
            max_calls=int(os.getenv("RATE_LIMIT_PER_MINUTE", "60")),
            period=60
        )
    
    def _track_usage(self, tokens_used: int):
        """Theo dõi usage cho việc tính chi phí"""
        self.request_count += 1
        self.total_tokens += tokens_used
    
    @property
    def cost_estimate(self) -> float:
        """Ước tính chi phí dựa trên model và token usage"""
        pricing = {
            "deepseek-v3.2": 0.00042,  # $0.42/MTok input
            "gpt-4.1": 0.008,          # $8/MTok input
            "claude-sonnet-4.5": 0.015,  # $15/MTok input
            "gemini-2.5-flash": 0.0025    # $2.50/MTok input
        }
        rate = pricing.get(self.model_name, 0.008)
        return (self.total_tokens / 1_000_000) * rate


class AsyncRateLimiter:
    """Async rate limiter với token bucket algorithm"""
    
    def __init__(self, max_calls: int, period: float):
        self.max_calls = max_calls
        self.period = period
        self.tokens = max_calls
        self.last_update = time.time()
        self._lock = None  # Lazy initialization
    
    async def __aenter__(self):
        while self.tokens < 1:
            await self._wait_for_token()
        self.tokens -= 1
        return self
    
    async def __aexit__(self, *args):
        pass
    
    async def _wait_for_token(self):
        now = time.time()
        elapsed = now - self.last_update
        self.tokens = min(self.max_calls, self.tokens + elapsed * (self.max_calls / self.period))
        self.last_update = now
        if self.tokens < 1:
            await asyncio.sleep(self.period / self.max_calls)


Khởi tạo LLM instances với different models cho different agents

def create_llm_instances(): """Factory function để tạo LLM instances với cấu hình tối ưu""" # DeepSeek V3.2 - Model tiết kiệm chi phí cho các tác vụ đơn giản cheap_llm = HolySheepLLM( model="deepseek-v3.2", temperature=0.3, max_tokens=1024 ) # GPT-4.1 - Model mạnh cho các tác vụ phức tạp cần reasoning tốt strong_llm = HolySheepLLM( model="gpt-4.1", temperature=0.5, max_tokens=4096 ) # Claude Sonnet - Model cân bằng với context window lớn balanced_llm = HolySheepLLM( model="claude-sonnet-4.5", temperature=0.7, max_tokens=8192 ) return { "cheap": cheap_llm, "strong": strong_llm, "balanced": balanced_llm }

Xây dựng Multi-Agent Crew với HolySheep

Sau đây là ví dụ production-ready về cách xây dựng một crew gồm nhiều agents để phân tích và tổng hợp thông tin:

import asyncio
from crewai import Agent, Task, Crew, Process
from langchain.schema import SystemMessage, HumanMessage
from typing import List, Dict
import json
from datetime import datetime


class ResearchCrew:
    """Research crew với 4 agents chuyên biệt"""
    
    def __init__(self, llm_instances: Dict[str, HolySheepLLM]):
        self.llms = llm_instances
        self.agents = {}
        self.tasks = []
    
    def create_agents(self):
        """Tạo các agents với vai trò chuyên biệt"""
        
        # Researcher Agent - Tìm kiếm và thu thập thông tin
        self.agents["researcher"] = Agent(
            role="Senior Research Analyst",
            goal="Tìm kiếm và thu thập thông tin chính xác từ nhiều nguồn",
            backstory="""Bạn là một nhà nghiên cứu kỳ cựu với 15 năm kinh nghiệm trong việc
            phân tích dữ liệu và tổng hợp thông tin từ các nguồn đa dạng. Bạn nổi tiếng
            với khả năng đánh giá độ tin cậy của nguồn thông tin và trình bày kết quả
            một cách có hệ thống.""",
            verbose=True,
            allow_delegation=False,
            llm=self.llms["cheap"]  # DeepSeek V3.2 cho tác vụ này
        )
        
        # Analyzer Agent - Phân tích và đánh giá
        self.agents["analyzer"] = Agent(
            role="Strategic Analyst",
            goal="Phân tích sâu dữ liệu và đưa ra insights chiến lược",
            backstory="""Bạn là chuyên gia phân tích chiến lược từng làm việc cho các
            công ty Fortune 500. Bạn có khả năng nhìn thấy các patterns và trends
            mà người khác bỏ qua, và luôn đưa ra các phân tích có data-backed.""",
            verbose=True,
            allow_delegation=False,
            llm=self.llms["strong"]  # GPT-4.1 cho tác vụ phức tạp
        )
        
        # Writer Agent - Viết báo cáo
        self.agents["writer"] = Agent(
            role="Technical Writer",
            goal="Viết báo cáo rõ ràng, mạch lạc và dễ hiểu",
            backstory="""Bạn là writer chuyên nghiệp với kinh nghiệm viết cho các
            tạp chí khoa học hàng đầu. Bạn có tài năng trong việc biến các khái niệm
            phức tạp thành ngôn ngữ dễ hiểu mà không làm mất đi sự chính xác.""",
            verbose=True,
            allow_delegation=False,
            llm=self.llms["balanced"]  # Claude Sonnet cho writing
        )
        
        # Reviewer Agent - Kiểm tra chất lượng
        self.agents["reviewer"] = Agent(
            role="Quality Assurance Lead",
            goal="Đảm bảo chất lượng và tính chính xác của output cuối cùng",
            backstory="""Bạn là QA lead với con mắt tinh để phát hiện lỗi và
            inconsistency. Bạn từng làm việc trong các team audit của Big 4
            và có tiêu chuẩn cực kỳ cao về chất lượng.""",
            verbose=True,
            allow_delegation=True,  # Có thể delegate cho các agents khác
            llm=self.llms["strong"]
        )
    
    def create_tasks(self, topic: str):
        """Tạo tasks với dependencies rõ ràng"""
        
        # Task 1: Research
        self.tasks.append(Task(
            description=f"""Thu thập thông tin toàn diện về chủ đề: {topic}
            
            Yêu cầu:
            1. Tìm kiếm từ ít nhất 5 nguồn khác nhau
            2. Phân loại thông tin theo các categories chính
            3. Ghi chú độ tin cậy của mỗi nguồn
            4. Xuất ra định dạng JSON với cấu trúc rõ ràng
            
            Output format:
            {{
                "sources": [...],
                "key_findings": [...],
                "categories": {{}},
                "confidence_scores": {{}}
            }}""",
            agent=self.agents["researcher"],
            expected_output="JSON report với thông tin đã được phân loại"
        ))
        
        # Task 2: Analysis (phụ thuộc vào Task 1)
        self.tasks.append(Task(
            description=f"""Phân tích sâu dữ liệu từ research task trước đó.
            
            Yêu cầu:
            1. Identifies patterns và trends
            2. So sánh với industry benchmarks
            3. Đưa ra 3-5 key insights
            4. Đề xuất action items cụ thể
            
            Context từ research:
            - Sử dụng output của researcher agent
            - Tập trung vào actionable insights""",
            agent=self.agents["analyzer"],
            context=[self.tasks[0]],  # Dependency on research task
            expected_output="Strategic analysis report"
        ))
        
        # Task 3: Writing (phụ thuộc vào Task 2)
        self.tasks.append(Task(
            description=f"""Viết báo cáo cuối cùng dựa trên research và analysis.
            
            Yêu cầu:
            1. Executive summary (1 trang)
            2. Main content với sections rõ ràng
            3. Data visualizations (ASCII nếu cần)
            4. Conclusion và recommendations
            5. Appendices cho detailed data
            
            Tone: Professional nhưng accessible
            Length: 5-10 trang""",
            agent=self.agents["writer"],
            context=[self.tasks[1]],  # Dependency on analysis
            expected_output="Final report document"
        ))
        
        # Task 4: Review (phụ thuộc vào Task 3)
        self.tasks.append(Task(
            description=f"""Review và polish báo cáo cuối cùng.
            
            Checklist:
            1. Factual accuracy - kiểm tra tất cả claims
            2. Logical consistency - đảm bảo arguments hợp lý
            3. Readability - đảm bảo dễ đọc
            4. Formatting - consistent style
            5. Completeness - không có gaps
            
            Nếu cần, delegate cho writer để sửa chữa.""",
            agent=self.agents["reviewer"],
            context=[self.tasks[2]],
            expected_output="Final polished report"
        ))
    
    def run(self, topic: str) -> Dict:
        """Execute the crew"""
        self.create_agents()
        self.create_tasks(topic)
        
        crew = Crew(
            agents=list(self.agents.values()),
            tasks=self.tasks,
            process=Process.hierarchical,  # Reviewer là manager
            manager_agent=self.agents["reviewer"],
            verbose=2
        )
        
        start_time = time.time()
        result = crew.kickoff()
        duration = time.time() - start_time
        
        return {
            "result": result,
            "duration_seconds": duration,
            "total_cost": sum(llm.cost_estimate for llm in self.llms.values()),
            "total_tokens": sum(llm.total_tokens for llm in self.llms.values())
        }


Sử dụng

async def main(): llms = create_llm_instances() crew = ResearchCrew(llms) result = await asyncio.to_thread( crew.run, "Xu hướng AI Agents trong Enterprise Software 2026" ) print(f"Duration: {result['duration_seconds']:.2f}s") print(f"Total Cost: ${result['total_cost']:.4f}") print(f"Total Tokens: {result['total_tokens']:,}") if __name__ == "__main__": asyncio.run(main())

Benchmark Performance

Tôi đã thực hiện benchmark chi tiết giữa các model trên HolySheep để đưa ra recommendations:

ModelLatency (P50)Latency (P95)Cost/1M TokensQuality ScoreBest For
DeepSeek V3.2142ms287ms$0.427.5/10Simple tasks, high volume
Gemini 2.5 Flash89ms156ms$2.508.2/10Fast processing, good quality
GPT-4.1124ms245ms$8.009.1/10Complex reasoning
Claude Sonnet 4.5158ms312ms$15.009.3/10Long context, creative

Test environment: 10 concurrent requests, 100 iterations per model. Latency measured from API call to first token received.

Tối ưu hóa Chi phí với Smart Routing

Trong production, việc chọn đúng model cho đúng task là chìa khóa để tối ưu chi phí. Đây là hệ thống smart routing của tôi:

from enum import Enum
from dataclasses import dataclass
from typing import Callable, Awaitable
import hashlib


class TaskComplexity(Enum):
    LOW = "low"        # Classification, extraction, simple transforms
    MEDIUM = "medium"  # Summarization, translation, standard Q&A
    HIGH = "high"      # Complex reasoning, multi-step analysis
    CREATIVE = "creative"  # Writing, brainstorming, ideation


@dataclass
class ModelConfig:
    model_name: str
    cost_per_mtok: float
    avg_latency_ms: float
    max_tokens: int
    strengths: list[str]
    weaknesses: list[str]


class SmartRouter:
    """Intelligent routing system để optimize cost-performance trade-off"""
    
    MODEL_CATALOG = {
        "deepseek-v3.2": ModelConfig(
            model_name="deepseek-v3.2",
            cost_per_mtok=0.42,
            avg_latency_ms=142,
            max_tokens=64000,
            strengths=["fast", "cheap", "good_en", "code"],
            weaknesses=["creative", "reasoning"]
        ),
        "gemini-2.5-flash": ModelConfig(
            model_name="gemini-2.5-flash",
            cost_per_mtok=2.50,
            avg_latency_ms=89,
            max_tokens=1000000,
            strengths=["fastest", "long_context", "multimodal"],
            weaknesses=["creative_writing"]
        ),
        "gpt-4.1": ModelConfig(
            model_name="gpt-4.1",
            cost_per_mtok=8.00,
            avg_latency_ms=124,
            max_tokens=128000,
            strengths=["reasoning", "code", "analysis"],
            weaknesses=["cost", "latency"]
        ),
        "claude-sonnet-4.5": ModelConfig(
            model_name="claude-sonnet-4.5",
            cost_per_mtok=15.00,
            avg_latency_ms=158,
            max_tokens=200000,
            strengths=["creative", "long_context", "nuance"],
            weaknesses=["speed", "cost"]
        )
    }
    
    # Routing rules dựa trên keywords và patterns
    ROUTING_RULES = {
        TaskComplexity.LOW: ["deepseek-v3.2"],
        TaskComplexity.MEDIUM: ["gemini-2.5-flash", "deepseek-v3.2"],
        TaskComplexity.HIGH: ["gpt-4.1", "claude-sonnet-4.5"],
        TaskComplexity.CREATIVE: ["claude-sonnet-4.5", "gemini-2.5-flash"]
    }
    
    def __init__(self, budget_mode: bool = True, latency_limit_ms: int = 500):
        self.budget_mode = budget_mode
        self.latency_limit_ms = latency_limit_ms
        self.usage_stats = {model: {"calls": 0, "tokens": 0, "cost": 0} for model in self.MODEL_CATALOG}
    
    def classify_task(self, prompt: str, context_length: int = 0) -> TaskComplexity:
        """Phân loại độ phức tạp của task dựa trên prompt analysis"""
        
        prompt_lower = prompt.lower()
        
        # Creative indicators
        creative_keywords = ["write", "create", "story", "poem", "brainstorm", "imagine", "design"]
        if any(kw in prompt_lower for kw in creative_keywords):
            return TaskComplexity.CREATIVE
        
        # High complexity indicators
        high_keywords = ["analyze", "compare", "evaluate", "strategic", "complex", 
                        "multi-step", "reasoning", "argument", "debate"]
        if any(kw in prompt_lower for kw in high_keywords):
            return TaskComplexity.HIGH
        
        # Simple task indicators
        low_keywords = ["classify", "extract", "count", "check", "filter", "find",
                       "simple", "basic", "is this"]
        if any(kw in prompt_lower for kw in low_keywords):
            return TaskComplexity.LOW
        
        # Default to medium
        return TaskComplexity.MEDIUM
    
    def select_model(self, 
                    task_complexity: TaskComplexity, 
                    context_length: int = 0,
                    requires_multimodal: bool = False) -> str:
        """Chọn model tối ưu dựa trên requirements"""
        
        candidates = self.ROUTING_RULES[task_complexity].copy()
        
        # Filter by context length capability
        if context_length > 0:
            candidates = [
                m for m in candidates 
                if self.MODEL_CATALOG[m].max_tokens >= context_length
            ]
        
        if self.budget_mode:
            # Sort by cost (ascending)
            candidates.sort(key=lambda m: self.MODEL_CATALOG[m].cost_per_mtok)
            return candidates[0]
        else:
            # Sort by quality (use most capable)
            candidates.sort(key=lambda m: self.MODEL_CATALOG[m].cost_per_mtok, reverse=True)
            return candidates[0]
    
    def estimate_cost(self, model: str, input_tokens: int, output_tokens: int) -> float:
        """Ước tính chi phí cho một request"""
        config = self.MODEL_CATALOG[model]
        # Input + Output tokens
        total_tokens = input_tokens + output_tokens
        cost = (total_tokens / 1_000_000) * config.cost_per_mtok
        return cost
    
    def route_and_log(self, prompt: str, context_length: int = 0) -> str:
        """Route request và log statistics"""
        complexity = self.classify_task(prompt, context_length)
        model = self.select_model(complexity, context_length)
        
        # Log usage
        self.usage_stats[model]["calls"] += 1
        
        return model


Ví dụ sử dụng

def demo_routing(): router = SmartRouter(budget_mode=True) test_prompts = [ "Classify this email as spam or not spam", "Write a creative story about AI", "Analyze the pros and cons of microservices architecture", "Translate this document from English to Vietnamese" ] print("Task Routing Results:") print("-" * 60) for prompt in test_prompts: complexity = router.classify_task(prompt) model = router.route_and_log(prompt) cost = router.estimate_cost(model, 500, 200) print(f"Prompt: {prompt[:50]}...") print(f" Complexity: {complexity.value}") print(f" Selected Model: {model}") print(f" Est. Cost: ${cost:.4f}") print()

Expected output:

Task Routing Results:

------------------------------------------------------------

Prompt: Classify this email as spam or not spam

Complexity: low

Selected Model: deepseek-v3.2

Est. Cost: $0.000294

...

Xử lý đồng thời và Rate Limiting nâng cao

Để handle high-volume production workloads, bạn cần implement robust concurrency control:

import asyncio
from asyncio import Queue, Semaphore
from typing import List, Dict, Any, Optional
from dataclasses import dataclass, field
from datetime import datetime, timedelta
import heapq
import threading


@dataclass(order=True)
class PriorityTask:
    priority: int
    task_id: str = field(compare=False)
    agent_id: str = field(compare=False)
    prompt: str = field(compare=False)
    context: List[Any] = field(default_factory=list, compare=False)
    callback: Optional[callable] = field(default=None, compare=False)
    created_at: datetime = field(default_factory=datetime.now, compare=False)


class ProductionConcurrencyManager:
    """
    Advanced concurrency manager cho CrewAI production workloads
    Features:
    - Priority-based queue
    - Token bucket rate limiting
    - Automatic retry với exponential backoff
    - Circuit breaker pattern
    - Metrics collection
    """
    
    def __init__(
        self,
        max_concurrent: int = 10,
        requests_per_minute: int = 60,
        max_queue_size: int = 1000,
        enable_circuit_breaker: bool = True,
        error_threshold: float = 0.5,
        recovery_timeout: int = 60
    ):
        self.max_concurrent = max_concurrent
        self.rpm_limit = requests_per_minute
        self.max_queue_size = max_queue_size
        
        # Semaphore cho concurrency control
        self._semaphore = Semaphore(max_concurrent)
        
        # Priority queue
        self._task_queue: List[PriorityTask] = []
        
        # Rate limiting state
        self._request_timestamps: List[float] = []
        self._lock = threading.Lock()
        
        # Circuit breaker
        self._circuit_open = False
        self._failure_count = 0
        self._last_failure_time: Optional[datetime] = None
        self._error_threshold = error_threshold
        self._recovery_timeout = recovery_timeout
        
        # Metrics
        self.metrics = {
            "total_requests": 0,
            "successful_requests": 0,
            "failed_requests": 0,
            "rejected_requests": 0,
            "total_latency_ms": 0,
            "retry_count": 0
        }
    
    def _check_rate_limit(self) -> bool:
        """Kiểm tra xem request mới có được phép không"""
        now = time.time()
        cutoff = now - 60  # 1 minute ago
        
        with self._lock:
            # Remove old timestamps
            self._request_timestamps = [ts for ts in self._request_timestamps if ts > cutoff]
            
            if len(self._request_timestamps) >= self.rpm_limit:
                return False
            
            self._request_timestamps.append(now)
            return True
    
    def _check_circuit_breaker(self) -> bool:
        """Kiểm tra circuit breaker status"""
        if not self._circuit_open:
            return True
        
        # Check if recovery timeout has passed
        if self._last_failure_time:
            elapsed = (datetime.now() - self._last_failure_time).total_seconds()
            if elapsed > self._recovery_timeout:
                self._circuit_open = False
                self._failure_count = 0
                return True
        
        return False
    
    async def execute_with_limits(
        self,
        agent_id: str,
        prompt: str,
        llm: HolySheepLLM,
        priority: int = 5,
        max_retries: int = 3,
        timeout: int = 120
    ) -> Dict[str, Any]:
        """Execute LLM call với tất cả protections"""
        
        task_id = f"{agent_id}_{int(time.time() * 1000)}"
        
        # Check circuit breaker
        if not self._check_circuit_breaker():
            raise CircuitBreakerOpenError("Circuit breaker is open")
        
        # Check rate limit
        if not self._check_rate_limit():
            self.metrics["rejected_requests"] += 1
            raise RateLimitExceededError("RPM limit exceeded")
        
        self.metrics["total_requests"] += 1
        
        async with self._semaphore:
            for attempt in range(max_retries):
                try:
                    start_time = time.time()
                    
                    # Execute LLM call
                    response = await asyncio.wait_for(
                        llm.agenerate([prompt]),
                        timeout=timeout
                    )
                    
                    latency = (time.time() - start_time) * 1000
                    self.metrics["successful_requests"] += 1
                    self.metrics["total_latency_ms"] += latency
                    
                    return {
                        "success": True,
                        "response": response,
                        "latency_ms": latency,
                        "attempt": attempt + 1,
                        "task_id": task_id
                    }
                    
                except asyncio.TimeoutError:
                    self.metrics["failed_requests"] += 1
                    if attempt == max_retries - 1:
                        raise TimeoutError(f"Request timed out after {max_retries} attempts")
                    
                    # Exponential backoff
                    wait_time = (2 ** attempt) * 0.5
                    await asyncio.sleep(wait_time)
                    self.metrics["retry_count"] += 1
                    
                except Exception as e:
                    self.metrics["failed_requests"] += 1
                    self._failure_count += 1
                    self._last_failure_time = datetime.now()
                    
                    # Open circuit if error threshold exceeded
                    if self._failure_count / self.metrics["total_requests"] > self._error_threshold:
                        self._circuit_open = True
                    
                    if attempt == max_retries - 1:
                        raise
        
        return {"success": False, "error": "Queue full"}
    
    def get_metrics(self) -> Dict[str, Any]:
        """Lấy metrics hiện tại"""
        avg_latency = (
            self.metrics["total_latency_ms"] / self.metrics["total_requests"]
            if self.metrics["total_requests"] > 0 else 0
        )
        
        return {
            **self.metrics,
            "avg_latency_ms": round(avg_latency, 2),
            "success_rate": round(
                self.metrics["successful_requests"] / max(1, self.metrics["total_requests"]),
                4
            ),
            "circuit_breaker_status": "open" if self._circuit_open else "closed"
        }


class RateLimitExceededError(Exception):
    pass


class CircuitBreakerOpenError(Exception):
    pass


Usage example

async def production_example(): manager = ProductionConcurrencyManager( max_concurrent=10, requests_per_minute=60 ) llms = create_llm_instances() # Simulate concurrent requests tasks = [] for i in range(20): task = manager.execute_with_limits( agent_id=f"agent_{i % 4}", prompt=f"Analyze this data sample {i}", llm=llms["strong"], priority=10 - (i % 10) ) tasks.append(task) results = await asyncio.gather(*tasks, return_exceptions=True) print("Production Run Metrics:") print(json.dumps(manager.get_metrics(), indent=2))

Tài nguyên liên quan

Bài viết liên quan