config_util.py 2.84 KB
# -*- coding: utf-8 -*-
"""
AIfeng/2025-06-30
配置管理工具模块
统一管理项目配置参数
"""

import json
import os
from typing import Dict, Any

class ConfigManager:
    """配置管理器"""
    
    def __init__(self):
        self._config = {}
        self._load_default_config()
        self._load_config_files()
    
    def _load_default_config(self):
        """加载默认配置"""
        self._config.update({
            # FunASR配置
            'local_asr_ip': '127.0.0.1',
            'local_asr_port': 10197,
            
            # 音频设备配置
            'local_audio_ip': '127.0.0.1',
            
            # 阿里云NLS配置
            'key_ali_nls_key_id': '',
            'key_ali_nls_key_secret': '',
            'key_ali_nls_app_key': '',
            
            # 其他ASR配置
            'asr_timeout': 30,
            'asr_reconnect_delay': 1,
            'asr_max_reconnect_attempts': 5,
        })
    
    def _load_config_files(self):
        """加载配置文件"""
        config_files = [
            'config/asr_config.json',
            'config/llm_config.json',
            'config/doubao_config.json'
        ]
        
        for config_file in config_files:
            if os.path.exists(config_file):
                try:
                    with open(config_file, 'r', encoding='utf-8') as f:
                        file_config = json.load(f)
                        self._config.update(file_config)
                except Exception as e:
                    print(f"警告: 加载配置文件 {config_file} 失败: {e}")
    
    def get(self, key: str, default=None):
        """获取配置值"""
        return self._config.get(key, default)
    
    def set(self, key: str, value: Any):
        """设置配置值"""
        self._config[key] = value
    
    def update(self, config_dict: Dict[str, Any]):
        """批量更新配置"""
        self._config.update(config_dict)
    
    def save_to_file(self, file_path: str):
        """保存配置到文件"""
        os.makedirs(os.path.dirname(file_path), exist_ok=True)
        with open(file_path, 'w', encoding='utf-8') as f:
            json.dump(self._config, f, ensure_ascii=False, indent=2)
    
    def __getattr__(self, name):
        """支持属性访问方式"""
        if name in self._config:
            return self._config[name]
        raise AttributeError(f"配置项 '{name}' 不存在")

# 全局配置实例
_config_manager = ConfigManager()

# 兼容原有的属性访问方式
local_asr_ip = _config_manager.local_asr_ip
local_asr_port = _config_manager.local_asr_port
local_audio_ip = _config_manager.local_audio_ip
key_ali_nls_key_id = _config_manager.key_ali_nls_key_id
key_ali_nls_key_secret = _config_manager.key_ali_nls_key_secret
key_ali_nls_app_key = _config_manager.key_ali_nls_app_key

# 导出配置管理器
config = _config_manager