""" 多模态智能体系统配置文件 """ import os import json from typing import Optional, Dict, Any from pathlib import Path class Config: """系统配置类""" # API配置文件路径 API_KEYS_FILE: str = "api_keys.json" # OpenAI配置 OPENAI_API_KEY: Optional[str] = None OPENAI_MODEL: str = "gpt-4o" OPENAI_TEMPERATURE: float = 0.7 # Hugging Face配置 HUGGINGFACE_API_KEY: Optional[str] = None # 搜索引擎配置 SEARCH_ENGINE_TYPE: str = "duckduckgo" SEARCH_ENGINE_API_KEY: Optional[str] = None # 模型配置 IMAGE_CAPTION_MODEL: str = "Salesforce/blip-image-captioning-base" IMAGE_CLASSIFICATION_MODEL: str = "microsoft/resnet-50" OBJECT_DETECTION_MODEL: str = "facebook/detr-resnet-50" GIT_MODEL: str = "microsoft/git-base" # 系统配置 DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true" LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO") # 媒体处理配置 MAX_VIDEO_DURATION: int = 300 # 最大视频时长(秒) FRAMES_TO_ANALYZE: int = 5 # 视频分析帧数 MAX_IMAGE_SIZE: int = 1024 # 最大图像尺寸 # 缓存配置 CACHE_DIR: str = "./cache" TEMP_DIR: str = "./temp" @classmethod def load_api_keys(cls) -> bool: """从文件加载API密钥""" try: api_file = Path(cls.API_KEYS_FILE) if not api_file.exists(): print(f"⚠️ API配置文件 {cls.API_KEYS_FILE} 不存在") print("请创建该文件并配置你的API密钥") return False with open(api_file, 'r', encoding='utf-8') as f: api_config = json.load(f) # 加载OpenAI配置 if 'openai' in api_config and api_config['openai'].get('api_key'): cls.OPENAI_API_KEY = api_config['openai']['api_key'] print("✅ OpenAI API密钥已加载") else: print("⚠️ OpenAI API密钥未配置") # 加载Hugging Face配置 if 'huggingface' in api_config and api_config['huggingface'].get('api_key'): cls.HUGGINGFACE_API_KEY = api_config['huggingface']['api_key'] print("✅ Hugging Face API密钥已加载") # 加载搜索引擎配置 if 'search_engine' in api_config: search_config = api_config['search_engine'] cls.SEARCH_ENGINE_TYPE = search_config.get('type', 'duckduckgo') cls.SEARCH_ENGINE_API_KEY = search_config.get('api_key') print(f"✅ 搜索引擎类型: {cls.SEARCH_ENGINE_TYPE}") return True except json.JSONDecodeError as e: print(f"❌ API配置文件格式错误: {e}") return False except Exception as e: print(f"❌ 加载API配置失败: {e}") return False @classmethod def validate(cls) -> bool: """验证配置是否完整""" # 首先尝试从文件加载API密钥 cls.load_api_keys() # 如果文件加载失败,尝试从环境变量加载 if not cls.OPENAI_API_KEY: cls.OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") if not cls.HUGGINGFACE_API_KEY: cls.HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY") # 验证必要的配置 if not cls.OPENAI_API_KEY: print("❌ 缺少OpenAI API密钥") print("请在 api_keys.json 文件中配置或设置环境变量 OPENAI_API_KEY") return False return True @classmethod def print_config(cls): """打印当前配置""" print("=== 多模态智能体系统配置 ===") print(f"OpenAI模型: {cls.OPENAI_MODEL}") print(f"OpenAI温度: {cls.OPENAI_TEMPERATURE}") print(f"OpenAI API密钥: {'已配置' if cls.OPENAI_API_KEY else '未配置'}") print(f"Hugging Face API密钥: {'已配置' if cls.HUGGINGFACE_API_KEY else '未配置'}") print(f"搜索引擎类型: {cls.SEARCH_ENGINE_TYPE}") print(f"图像描述模型: {cls.IMAGE_CAPTION_MODEL}") print(f"图像分类模型: {cls.IMAGE_CLASSIFICATION_MODEL}") print(f"对象检测模型: {cls.OBJECT_DETECTION_MODEL}") print(f"调试模式: {cls.DEBUG}") print(f"日志级别: {cls.LOG_LEVEL}") print("=" * 30)