MiniMax模型集成Raven智能体框架:中文场景实战指南

📅 2026/7/21 15:34:12 👁️ 阅读次数 📝 编程学习
MiniMax模型集成Raven智能体框架:中文场景实战指南

最近在尝试将大模型能力集成到智能体框架中时,发现MiniMax模型与Raven智能体框架的组合在中文场景下表现尤为出色。不少开发者在集成过程中遇到了API调用、权限配置和框架适配等问题,本文将分享一套完整的MiniMax模型集成Raven智能体框架的实战方案。

1. MiniMax模型与Raven框架核心概念

1.1 MiniMax模型技术特点

MiniMax是一家专注于大模型技术研发的AI公司,其模型在中文理解和生成任务上表现优异。MiniMax模型支持多种模态的AI能力,包括文本生成、语音合成、图像理解等。与传统的开源模型相比,MiniMax模型在中文语境下的语义理解更加准确,生成内容更符合中文表达习惯。

在实际应用中,MiniMax模型提供了完善的API接口体系,开发者可以通过简单的HTTP请求调用模型能力。其API设计遵循RESTful规范,支持JSON格式的数据交互,便于快速集成到现有系统中。

1.2 Raven智能体框架架构解析

Raven是一个开源的智能体框架,专注于构建可扩展的AI应用系统。框架采用模块化设计,将智能体的核心能力拆分为多个功能组件,包括对话管理、任务规划、工具调用等。Raven框架支持多种大模型后端,通过统一的接口规范实现模型的无缝切换。

框架的核心优势在于其灵活的可扩展性。开发者可以基于Raven快速构建自定义的智能体应用,通过配置化的方式定义智能体的行为逻辑。同时,Raven提供了完善的生命周期管理机制,支持智能体的状态持久化和会话管理。

1.3 集成方案的价值与适用场景

将MiniMax模型集成到Raven框架中,可以充分发挥两者在各自领域的优势。MiniMax模型提供强大的中文语言理解能力,而Raven框架则负责智能体的逻辑控制和任务调度。这种组合特别适合需要处理复杂中文场景的AI应用。

典型的应用场景包括智能客服系统、内容创作助手、数据分析工具等。在这些场景中,MiniMax模型负责理解用户意图和生成自然响应,Raven框架则负责管理对话流程和调用外部工具。这种分工协作的模式既保证了响应质量,又提高了系统的可维护性。

2. 环境准备与依赖配置

2.1 系统环境要求

在开始集成之前,需要确保开发环境满足基本要求。推荐使用Python 3.8及以上版本,操作系统可以是Windows、Linux或macOS。需要确保网络连接正常,能够访问MiniMax的API服务。

建议使用虚拟环境来管理项目依赖,避免与系统环境产生冲突。可以使用conda或venv创建独立的Python环境:

# 使用conda创建环境 conda create -n minimax-raven python=3.8 conda activate minimax-raven # 或使用venv创建环境 python -m venv minimax-raven source minimax-raven/bin/activate # Linux/macOS minimax-raven\Scripts\activate # Windows

2.2 核心依赖安装

项目需要安装Raven框架的核心包以及MiniMax的Python SDK。此外,还需要一些辅助工具库来处理网络请求和数据序列化。

# 安装Raven框架 pip install raven-agent-framework # 安装MiniMax官方SDK pip install minimax-api-client # 安装辅助依赖 pip install requests httpx pydantic loguru

如果遇到版本冲突问题,可以尝试指定依赖版本:

pip install raven-agent-framework==1.2.0 pip install minimax-api-client==0.3.1

2.3 MiniMax API密钥配置

使用MiniMax模型需要先获取API密钥。访问MiniMax官方网站注册账号并申请API访问权限。获得密钥后,需要妥善保管并在代码中安全地使用。

建议通过环境变量管理敏感信息,避免将密钥硬编码在代码中:

# 设置环境变量(Linux/macOS) export MINIMAX_API_KEY="your_api_key_here" export MINIMAX_GROUP_ID="your_group_id_here" # Windows PowerShell $env:MINIMAX_API_KEY="your_api_key_here" $env:MINIMAX_GROUP_ID="your_group_id_here"

3. Raven框架基础配置

3.1 框架初始化配置

Raven框架需要通过配置文件或代码方式进行初始化。推荐使用YAML格式的配置文件,便于管理不同环境的配置参数。

创建config.yaml配置文件:

# Raven框架基础配置 raven: agent: name: "minimax-agent" version: "1.0.0" description: "基于MiniMax模型的智能体" # 对话管理配置 dialogue: max_turns: 10 timeout: 30 enable_memory: true # 日志配置 logging: level: "INFO" format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

在Python代码中加载配置并初始化框架:

import yaml from raven import RavenFramework def load_config(): with open('config.yaml', 'r', encoding='utf-8') as f: return yaml.safe_load(f) def initialize_raven(): config = load_config() framework = RavenFramework(config) return framework # 初始化框架实例 raven_framework = initialize_raven()

3.2 智能体基础类定义

在Raven框架中,需要创建自定义的智能体类来封装MiniMax模型的能力。基础智能体类需要继承Raven提供的基类,并实现必要的方法。

from raven.agents import BaseAgent from raven.messages import AgentMessage from typing import Dict, Any, Optional class MiniMaxAgent(BaseAgent): def __init__(self, agent_config: Dict[str, Any]): super().__init__(agent_config) self.minimax_client = None self.setup_minimax_client() def setup_minimax_client(self): """初始化MiniMax客户端""" import os from minimax_api import MiniMaxClient api_key = os.getenv('MINIMAX_API_KEY') group_id = os.getenv('MINIMAX_GROUP_ID') if not api_key or not group_id: raise ValueError("MiniMax API密钥或Group ID未配置") self.minimax_client = MiniMaxClient(api_key, group_id) async def process_message(self, message: AgentMessage) -> AgentMessage: """处理传入消息的核心方法""" try: # 调用MiniMax模型生成响应 response = await self.generate_response(message.content) # 构建返回消息 return AgentMessage( content=response, metadata={ "model": "minimax", "timestamp": message.timestamp } ) except Exception as e: self.logger.error(f"处理消息时发生错误: {e}") return AgentMessage( content="抱歉,我遇到了一些问题,请稍后再试。", metadata={"error": str(e)} )

3.3 消息处理机制配置

Raven框架使用消息队列来管理智能体之间的通信。需要配置消息路由规则和处理器映射,确保消息能够正确传递到MiniMax智能体。

from raven.messaging import MessageRouter from raven.handlers import MessageHandler class MiniMaxMessageHandler(MessageHandler): def __init__(self, agent: MiniMaxAgent): self.agent = agent async def handle(self, message: AgentMessage) -> AgentMessage: """处理消息并返回响应""" return await self.agent.process_message(message) def setup_message_routing(framework: RavenFramework, agent: MiniMaxAgent): """配置消息路由""" router = MessageRouter() handler = MiniMaxMessageHandler(agent) # 注册消息处理器 router.register_handler("minimax", handler) # 设置默认路由规则 router.add_route("user.*", "minimax") framework.set_message_router(router) return router

4. MiniMax模型集成实现

4.1 API客户端封装

为了更好与Raven框架集成,需要对MiniMax的官方SDK进行二次封装,提供更符合框架使用习惯的接口。

import httpx from typing import List, Dict, Any import json import asyncio class MiniMaxService: def __init__(self, api_key: str, group_id: str): self.api_key = api_key self.group_id = group_id self.base_url = "https://api.minimax.chat/v1" self.headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } self.timeout = 30 async def chat_completion(self, messages: List[Dict], model: str = "minimax-01", temperature: float = 0.7, max_tokens: int = 2048) -> Dict[str, Any]: """调用MiniMax聊天补全API""" url = f"{self.base_url}/chat/completion" payload = { "model": model, "messages": messages, "temperature": temperature, "max_tokens": max_tokens, "group_id": self.group_id } async with httpx.AsyncClient(timeout=self.timeout) as client: try: response = await client.post(url, json=payload, headers=self.headers) response.raise_for_status() return response.json() except httpx.HTTPError as e: raise Exception(f"API请求失败: {e}") except json.JSONDecodeError as e: raise Exception(f"响应解析失败: {e}") async def generate_response(self, user_input: str, context: List[Dict] = None) -> str: """生成对话响应""" messages = [] # 添加上下文消息 if context: messages.extend(context) # 添加当前用户输入 messages.append({"role": "user", "content": user_input}) try: result = await self.chat_completion(messages) return result["choices"][0]["message"]["content"] except KeyError as e: raise Exception(f"API响应格式异常: {e}") except IndexError as e: raise Exception(f"未生成有效响应: {e}")

4.2 模型参数优化配置

针对不同的应用场景,需要调整MiniMax模型的参数以获得最佳效果。以下是一些常用的参数配置方案:

from dataclasses import dataclass from enum import Enum class ModelType(Enum): STANDARD = "minimax-01" PRO = "minimax-pro" LITE = "minimax-lite" @dataclass class ModelConfig: model_type: ModelType temperature: float max_tokens: int top_p: float presence_penalty: float @classmethod def get_chat_config(cls) -> 'ModelConfig': """对话场景配置""" return cls( model_type=ModelType.STANDARD, temperature=0.7, max_tokens=1024, top_p=0.9, presence_penalty=0.1 ) @classmethod def get_creative_config(cls) -> 'ModelConfig': """创意生成场景配置""" return cls( model_type=ModelType.PRO, temperature=0.9, max_tokens=2048, top_p=0.95, presence_penalty=0.2 ) @classmethod def get_technical_config(cls) -> 'ModelConfig': """技术问答场景配置""" return cls( model_type=ModelType.STANDARD, temperature=0.3, max_tokens=512, top_p=0.8, presence_penalty=0.0 ) class OptimizedMiniMaxService(MiniMaxService): def __init__(self, api_key: str, group_id: str): super().__init__(api_key, group_id) self.model_configs = {} self.setup_default_configs() def setup_default_configs(self): """设置默认配置""" self.model_configs["chat"] = ModelConfig.get_chat_config() self.model_configs["creative"] = ModelConfig.get_creative_config() self.model_configs["technical"] = ModelConfig.get_technical_config() async def optimized_chat(self, user_input: str, context: List[Dict] = None, scenario: str = "chat") -> str: """根据场景优化的聊天方法""" config = self.model_configs.get(scenario, self.model_configs["chat"]) messages = [] if context: messages.extend(context) messages.append({"role": "user", "content": user_input}) payload = { "model": config.model_type.value, "messages": messages, "temperature": config.temperature, "max_tokens": config.max_tokens, "top_p": config.top_p, "presence_penalty": config.presence_penalty, "group_id": self.group_id } # 调用API的逻辑与父类相同 async with httpx.AsyncClient(timeout=self.timeout) as client: response = await client.post( f"{self.base_url}/chat/completion", json=payload, headers=self.headers ) result = response.json() return result["choices"][0]["message"]["content"]

4.3 错误处理与重试机制

在实际应用中,网络波动和API限制是常见问题。需要实现完善的错误处理和重试机制来保证系统稳定性。

import time from typing import Callable, Any import asyncio from loguru import logger class RetryConfig: def __init__(self, max_retries: int = 3, base_delay: float = 1.0, max_delay: float = 10.0): self.max_retries = max_retries self.base_delay = base_delay self.max_delay = max_delay class RobustMiniMaxService(MiniMaxService): def __init__(self, api_key: str, group_id: str, retry_config: RetryConfig = None): super().__init__(api_key, group_id) self.retry_config = retry_config or RetryConfig() async def execute_with_retry(self, func: Callable, *args, **kwargs) -> Any: """带重试机制的API执行方法""" last_exception = None for attempt in range(self.retry_config.max_retries + 1): try: return await func(*args, **kwargs) except httpx.HTTPError as e: last_exception = e status_code = e.response.status_code if e.response else None if status_code == 429: # 频率限制 wait_time = self.calculate_backoff(attempt) logger.warning(f"频率限制,等待 {wait_time}秒后重试") await asyncio.sleep(wait_time) elif status_code >= 500: # 服务器错误 wait_time = self.calculate_backoff(attempt) logger.warning(f"服务器错误,等待 {wait_time}秒后重试") await asyncio.sleep(wait_time) else: # 客户端错误,不重试 raise e except Exception as e: last_exception = e if attempt == self.retry_config.max_retries: break wait_time = self.calculate_backoff(attempt) logger.warning(f"请求失败,等待 {wait_time}秒后重试: {e}") await asyncio.sleep(wait_time) raise last_exception or Exception("重试次数用尽") def calculate_backoff(self, attempt: int) -> float: """计算指数退避等待时间""" delay = min(self.retry_config.base_delay * (2 ** attempt), self.retry_config.max_delay) return delay + (random.random() * 0.1) # 添加随机抖动 async def robust_chat_completion(self, messages: List[Dict], **kwargs) -> Dict[str, Any]: """带重试的聊天补全""" async def api_call(): return await self.chat_completion(messages, **kwargs) return await self.execute_with_retry(api_call)

5. 完整集成示例与测试

5.1 项目结构规划

一个完整的集成项目应该包含清晰的目录结构和模块划分:

minimax-raven-integration/ ├── src/ │ ├── agents/ │ │ ├── __init__.py │ │ ├── minimax_agent.py │ │ └── agent_factory.py │ ├── services/ │ │ ├── __init__.py │ │ ├── minimax_service.py │ │ └── retry_strategy.py │ ├── config/ │ │ ├── __init__.py │ │ └── settings.py │ └── utils/ │ ├── __init__.py │ └── logger.py ├── tests/ │ ├── __init__.py │ ├── test_minimax_agent.py │ └── test_integration.py ├── config.yaml ├── requirements.txt └── main.py

5.2 主程序入口实现

创建主程序文件,负责初始化所有组件并启动服务:

#!/usr/bin/env python3 """ MiniMax-Raven集成主程序 """ import asyncio import os import signal import sys from pathlib import Path # 添加src目录到Python路径 sys.path.append(str(Path(__file__).parent / 'src')) from src.agents.minimax_agent import MiniMaxAgent from src.config.settings import load_config from raven import RavenFramework class Application: def __init__(self): self.framework = None self.agent = None self.running = False async def initialize(self): """初始化应用""" try: # 加载配置 config = load_config() # 初始化Raven框架 self.framework = RavenFramework(config['raven']) # 创建MiniMax智能体 agent_config = config['agents']['minimax'] self.agent = MiniMaxAgent(agent_config) # 注册智能体到框架 self.framework.register_agent('minimax', self.agent) logger.info("应用初始化完成") return True except Exception as e: logger.error(f"应用初始化失败: {e}") return False async def run(self): """运行主循环""" if not await self.initialize(): return self.running = True logger.info("应用开始运行") # 设置信号处理 loop = asyncio.get_event_loop() for sig in [signal.SIGINT, signal.SIGTERM]: loop.add_signal_handler(sig, self.shutdown) # 主循环 while self.running: try: await asyncio.sleep(1) except KeyboardInterrupt: self.shutdown() logger.info("应用正常退出") def shutdown(self): """关闭应用""" logger.info("收到关闭信号,正在清理资源...") self.running = False if self.framework: self.framework.shutdown() async def main(): """主函数""" app = Application() await app.run() if __name__ == "__main__": # 配置日志 from src.utils.logger import setup_logging setup_logging() logger = setup_logging().getLogger(__name__) try: asyncio.run(main()) except KeyboardInterrupt: logger.info("用户中断程序") except Exception as e: logger.error(f"程序异常退出: {e}") sys.exit(1)

5.3 集成测试用例

编写完整的测试用例,验证集成功能的正确性:

import pytest import asyncio from unittest.mock import Mock, patch from src.agents.minimax_agent import MiniMaxAgent from src.services.minimax_service import RobustMiniMaxService class TestMiniMaxIntegration: @pytest.fixture def mock_minimax_service(self): """创建模拟的MiniMax服务""" service = Mock(spec=RobustMiniMaxService) service.generate_response.return_value = "这是测试响应" return service @pytest.fixture def minimax_agent(self, mock_minimax_service): """创建测试用的智能体实例""" with patch('src.agents.minimax_agent.RobustMiniMaxService') as mock_service: mock_service.return_value = mock_minimax_service agent_config = { "name": "test-agent", "model_config": { "temperature": 0.7, "max_tokens": 1024 } } agent = MiniMaxAgent(agent_config) return agent @pytest.mark.asyncio async def test_agent_initialization(self, minimax_agent): """测试智能体初始化""" assert minimax_agent is not None assert minimax_agent.name == "test-agent" @pytest.mark.asyncio async def test_message_processing(self, minimax_agent, mock_minimax_service): """测试消息处理流程""" from raven.messages import AgentMessage # 创建测试消息 test_message = AgentMessage( content="你好,请介绍一下你自己", sender="user", timestamp=1234567890 ) # 处理消息 response = await minimax_agent.process_message(test_message) # 验证响应 assert response.content == "这是测试响应" assert response.metadata["model"] == "minimax" mock_minimax_service.generate_response.assert_called_once() @pytest.mark.asyncio async def test_error_handling(self, minimax_agent, mock_minimax_service): """测试错误处理""" from raven.messages import AgentMessage # 模拟API调用失败 mock_minimax_service.generate_response.side_effect = Exception("API调用失败") test_message = AgentMessage( content="测试消息", sender="user" ) # 处理消息,应该能正常处理异常 response = await minimax_agent.process_message(test_message) assert "抱歉" in response.content assert "error" in response.metadata class TestEndToEnd: """端到端测试""" @pytest.mark.asyncio async def test_complete_workflow(self): """测试完整工作流程""" # 这个测试需要真实的API密钥,可以在CI/CD环境中运行 api_key = os.getenv('TEST_MINIMAX_API_KEY') group_id = os.getenv('TEST_MINIMAX_GROUP_ID') if not api_key or not group_id: pytest.skip("测试API密钥未配置") # 创建真实的服务实例 service = RobustMiniMaxService(api_key, group_id) # 测试简单的对话 response = await service.generate_response("你好") assert response is not None assert len(response) > 0 # 验证响应是有效的中文文本 assert any(char in response for char in '你好谢谢') if __name__ == "__main__": # 运行测试 pytest.main([__file__, "-v"])

6. 高级功能与定制化开发

6.1 多轮对话上下文管理

在实际对话场景中,维护对话上下文至关重要。需要实现智能的上下文管理机制:

from collections import deque from typing import List, Dict import time class DialogueContextManager: def __init__(self, max_context_length: int = 10, context_timeout: int = 3600): self.max_context_length = max_context_length self.context_timeout = context_timeout self.contexts = {} # 用户ID到对话上下文的映射 def get_user_context(self, user_id: str) -> List[Dict]: """获取用户对话上下文""" if user_id not in self.contexts: self.contexts[user_id] = { 'messages': deque(maxlen=self.max_context_length), 'last_activity': time.time() } context_data = self.contexts[user_id] # 清理过期上下文 if time.time() - context_data['last_activity'] > self.context_timeout: context_data['messages'].clear() context_data['last_activity'] = time.time() return list(context_data['messages']) def add_message(self, user_id: str, role: str, content: str): """添加消息到上下文""" if user_id not in self.contexts: self.contexts[user_id] = { 'messages': deque(maxlen=self.max_context_length), 'last_activity': time.time() } message = { 'role': role, 'content': content, 'timestamp': time.time() } self.contexts[user_id]['messages'].append(message) self.contexts[user_id]['last_activity'] = time.time() def clear_context(self, user_id: str): """清空用户上下文""" if user_id in self.contexts: self.contexts[user_id]['messages'].clear() class EnhancedMiniMaxAgent(MiniMaxAgent): def __init__(self, agent_config: Dict): super().__init__(agent_config) self.context_manager = DialogueContextManager() async def process_message(self, message: AgentMessage) -> AgentMessage: """增强的消息处理方法,支持上下文管理""" user_id = message.sender or "default_user" # 获取对话上下文 context = self.context_manager.get_user_context(user_id) try: # 生成响应 response_content = await self.minimax_service.generate_response( message.content, context ) # 更新上下文 self.context_manager.add_message(user_id, "user", message.content) self.context_manager.add_message(user_id, "assistant", response_content) return AgentMessage( content=response_content, metadata={ "model": "minimax", "context_length": len(context) + 2 } ) except Exception as e: self.logger.error(f"处理消息失败: {e}") return self.create_error_response(e)

6.2 工具调用与外部服务集成

智能体经常需要调用外部工具和服务,Raven框架提供了完善的工具调用机制:

from raven.tools import BaseTool from typing import Dict, Any class WeatherTool(BaseTool): """天气查询工具示例""" def __init__(self): super().__init__( name="weather", description="查询城市天气信息", parameters={ "city": { "type": "string", "description": "城市名称" } } ) async def execute(self, parameters: Dict[str, Any]) -> Dict[str, Any]: """执行天气查询""" city = parameters.get("city", "北京") # 这里可以集成真实的天气API # 示例返回模拟数据 return { "city": city, "temperature": "25°C", "weather": "晴", "humidity": "60%" } class CalculatorTool(BaseTool): """计算器工具示例""" def __init__(self): super().__init__( name="calculator", description="执行数学计算", parameters={ "expression": { "type": "string", "description": "数学表达式" } } ) async def execute(self, parameters: Dict[str, Any]) -> Dict[str, Any]: """执行计算""" expression = parameters.get("expression", "") try: # 安全评估数学表达式 result = eval(expression, {"__builtins__": {}}) return { "expression": expression, "result": result } except Exception as e: return { "expression": expression, "error": str(e) } class ToolEnhancedAgent(MiniMaxAgent): """支持工具调用的增强智能体""" def __init__(self, agent_config: Dict): super().__init__(agent_config) self.tools = {} self.register_tools() def register_tools(self): """注册可用工具""" self.tools["weather"] = WeatherTool() self.tools["calculator"] = CalculatorTool() async def handle_tool_call(self, tool_name: str, parameters: Dict) -> Dict: """处理工具调用""" if tool_name not in self.tools: return {"error": f"工具 {tool_name} 不存在"} tool = self.tools[tool_name] return await tool.execute(parameters)

7. 性能优化与监控

7.1 响应时间优化

在实际生产环境中,响应时间是关键指标。以下是一些优化策略:

import time from functools import wraps from statistics import mean, median from concurrent.futures import ThreadPoolExecutor def timing_decorator(func): """计时装饰器""" @wraps(func) async def wrapper(*args, **kwargs): start_time = time.time() try: result = await func(*args, **kwargs) return result finally: end_time = time.time() duration = end_time - start_time logger.info(f"{func.__name__} 执行时间: {duration:.3f}秒") return wrapper class PerformanceOptimizedService(MiniMaxService): """性能优化的MiniMax服务""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.response_times = [] self.max_history = 1000 self.executor = ThreadPoolExecutor(max_workers=4) @timing_decorator async def optimized_chat_completion(self, messages: List[Dict], **kwargs) -> Dict[str, Any]: """优化的聊天补全方法""" # 预处理消息,减少不必要的上下文 optimized_messages = self.optimize_message_length(messages) # 使用线程池处理IO密集型操作 loop = asyncio.get_event_loop() result = await loop.run_in_executor( self.executor, lambda: self.sync_chat_completion(optimized_messages, **kwargs) ) return result def optimize_message_length(self, messages: List[Dict]) -> List[Dict]: """优化消息长度,避免超过token限制""" optimized = [] total_length = 0 for message in reversed(messages): content = message.get('content', '') message_length = len(content) if total_length + message_length > 3000: # 预留一些空间 break optimized.insert(0, message) total_length += message_length return optimized def sync_chat_completion(self, messages: List[Dict], **kwargs) -> Dict[str, Any]: """同步版本的聊天补全,用于线程池执行""" # 这里使用同步HTTP客户端 import requests import json url = f"{self.base_url}/chat/completion" payload = { "model": kwargs.get('model', 'minimax-01'), "messages": messages, "temperature": kwargs.get('temperature', 0.7), "max_tokens": kwargs.get('max_tokens', 1024), "group_id": self.group_id } response = requests.post(url, json=payload, headers=self.headers, timeout=30) response.raise_for_status() return response.json()

7.2 监控与指标收集

建立完善的监控体系,收集关键性能指标:

from dataclasses import dataclass from typing import Dict, List import time import psutil import asyncio @dataclass class PerformanceMetrics: """性能指标数据类""" timestamp: float response_time: float success: bool error_type: str = None token_usage: int = 0 memory_usage: float = 0 class MonitoringSystem: """监控系统""" def __init__(self): self.metrics: List[PerformanceMetrics] = [] self.start_time = time.time() def record_api_call(self, response_time: float, success: bool, error_type: str = None, token_usage: int = 0): """记录API调用指标""" metrics = PerformanceMetrics( timestamp=time.time(), response_time=response_time, success=success, error_type=error_type, token_usage=token_usage, memory_usage=psutil.virtual_memory().percent ) self.metrics.append(metrics) # 保持最近1000条记录 if len(self.metrics) > 1000: self.metrics = self.metrics[-1000:] def get_summary_stats(self) -> Dict: """获取统计摘要""" if not self.metrics: return {} recent_metrics = self.metrics[-100:] # 最近100次调用 success_calls = [m for m in recent_metrics if m.success] error_calls = [m for m in recent_metrics if not m.success] return { "total_calls": len(recent_metrics), "success_rate": len(success_calls) / len(recent_metrics) if recent_metrics else 0, "avg_response_time": mean([m.response_time for m in success_calls]) if success_calls else 0, "error_breakdown": self._get_error_breakdown(error_calls), "avg_token_usage": mean([m.token_usage for m in success_calls]) if success_calls else 0 } def _get_error_breakdown(self, error_calls: List[PerformanceMetrics]) -> Dict: """获取错误分类统计""" breakdown = {} for metrics in error_calls: error_type = metrics.error_type or "unknown" breakdown[error_type] = breakdown.get(error_type, 0) + 1 return breakdown class MonitoredMiniMaxService(RobustMiniMaxService): """带监控的MiniMax服务""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.monitoring = MonitoringSystem() async def monitored_chat_completion(self, messages: List[Dict], **kwargs) -> Dict[str, Any]: """带监控的聊天补全""" start_time = time.time() try: result = await super().robust_chat_completion(messages, **kwargs) response_time = time.time() - start_time # 计算token使用量 token_usage = result.get('usage', {}).get('total_tokens', 0) self.monitoring.record_api_call( response_time=response_time, success=True, token_usage=token_usage ) return result except Exception as e: response_time = time.time() - start_time self.monitoring.record_api_call( response_time=response_time, success=False, error_type=type(e).__name__ ) raise e

8. 部署与生产环境配置

8.1 Docker容器化