1. 新增文档源管理模块(documentSource) - 控制器:documentSourceController.py - DAO层:documentSourceDao.py - 模型:documentSourceModel.py - 服务层:documentSourceService.py 2. 新增技能管理模块(skill) - 控制器:skillController.py - DAO层:skillDao.py - 模型:skillModel.py - 服务层:skillService.py 3. 新增AI服务(aiService.py) 4. 新增配置文件 - AI配置:config/ai_config.py - 技能配置:config/skills/test-case-generator/ 5. 新增SQL脚本 - 文档权限:add_document_permissions.sql - 模块状态字段:add_module_status_field.sql - 文档源表:create_document_source_table.sql - 技能规则:skills_rules_pgsql.sql
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
# encoding: UTF-8
|
||
"""
|
||
AI大模型配置文件
|
||
支持多种模型提供商:OpenAI、自定义API等
|
||
"""
|
||
import os
|
||
from pathlib import Path
|
||
from dotenv import load_dotenv
|
||
|
||
# 加载项目根目录.env,避免进程工作目录不同导致读取到其他配置
|
||
ENV_PATH = Path(__file__).resolve().parents[1] / '.env'
|
||
load_dotenv(ENV_PATH, override=True)
|
||
|
||
class AIConfig:
|
||
"""AI配置类"""
|
||
|
||
# OpenAI配置
|
||
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY', '')
|
||
OPENAI_API_BASE = os.getenv('OPENAI_API_BASE', 'https://api.openai.com/v1')
|
||
OPENAI_MODEL = os.getenv('OPENAI_MODEL', 'gpt-4o')
|
||
OPENAI_MAX_TOKENS = int(os.getenv('OPENAI_MAX_TOKENS', '4096'))
|
||
OPENAI_TEMPERATURE = float(os.getenv('OPENAI_TEMPERATURE', '0.7'))
|
||
|
||
# Routin/Meteor API配置(兼容OpenAI格式的API)
|
||
METEOR_API_KEY = os.getenv('METEOR_API_KEY', '')
|
||
ROUTIN_API_KEY = os.getenv('ROUTIN_API_KEY', '')
|
||
CUSTOM_API_KEY = os.getenv('CUSTOM_API_KEY', '')
|
||
CUSTOM_API_BASE = os.getenv('CUSTOM_API_BASE', 'https://api.routin.ai/v1')
|
||
CUSTOM_MODEL = os.getenv('CUSTOM_MODEL', 'gpt-4o')
|
||
|
||
# 模型提供商:openai, custom
|
||
MODEL_PROVIDER = os.getenv('MODEL_PROVIDER', 'openai')
|
||
|
||
# 超时配置(秒)
|
||
CONNECT_TIMEOUT = int(os.getenv('AI_CONNECT_TIMEOUT', '60'))
|
||
READ_TIMEOUT = int(os.getenv('AI_READ_TIMEOUT', '120'))
|
||
|
||
# 重试配置
|
||
MAX_RETRIES = int(os.getenv('AI_MAX_RETRIES', '3'))
|
||
RETRY_DELAY = float(os.getenv('AI_RETRY_DELAY', '2.0'))
|
||
|
||
@staticmethod
|
||
def get_api_key():
|
||
"""获取API密钥"""
|
||
if AIConfig.MODEL_PROVIDER == 'openai':
|
||
return AIConfig.OPENAI_API_KEY
|
||
return AIConfig.METEOR_API_KEY or AIConfig.ROUTIN_API_KEY or AIConfig.CUSTOM_API_KEY
|
||
|
||
@staticmethod
|
||
def get_api_key_source():
|
||
"""获取当前API密钥来源,用于排查配置加载问题"""
|
||
if AIConfig.MODEL_PROVIDER == 'openai':
|
||
return 'OPENAI_API_KEY'
|
||
if AIConfig.METEOR_API_KEY:
|
||
return 'METEOR_API_KEY'
|
||
if AIConfig.ROUTIN_API_KEY:
|
||
return 'ROUTIN_API_KEY'
|
||
if AIConfig.CUSTOM_API_KEY:
|
||
return 'CUSTOM_API_KEY'
|
||
return 'EMPTY'
|
||
|
||
@staticmethod
|
||
def get_api_base():
|
||
"""获取API基础URL"""
|
||
if AIConfig.MODEL_PROVIDER == 'openai':
|
||
return AIConfig.OPENAI_API_BASE
|
||
return AIConfig.CUSTOM_API_BASE
|
||
|
||
@staticmethod
|
||
def get_model():
|
||
"""获取模型名称"""
|
||
if AIConfig.MODEL_PROVIDER == 'openai':
|
||
return AIConfig.OPENAI_MODEL
|
||
return AIConfig.CUSTOM_MODEL
|