hugh2023
Add multi-modal agent system with media analysis, web scraping, and enhanced configuration management
adec1cb
"""
多模态智能体系统配置文件
"""
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)