File size: 4,577 Bytes
adec1cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""
多模态智能体系统配置文件
"""
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)