feat: 新增文档源和技能管理相关功能

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
This commit is contained in:
qiaoxinjiu
2026-05-18 10:23:07 +08:00
parent 65524de6fc
commit 420b9e37fa
38 changed files with 9613 additions and 0 deletions

74
config/ai_config.py Normal file
View File

@@ -0,0 +1,74 @@
# 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