update:1.重构项目数据库初始化和迁移逻辑,使用Alembic数据库管理工具

This commit is contained in:
xiamuceer
2025-12-26 15:05:48 +08:00
parent a5788e75ae
commit f32e51b594
39 changed files with 2249 additions and 2037 deletions
+5 -4
View File
@@ -4,7 +4,8 @@ from openai import AsyncOpenAI
from anthropic import AsyncAnthropic
from app.config import settings as app_settings
from app.logger import get_logger
from app.mcp.adapters import UniversalMCPAdapter, PromptInjectionAdapter
from app.mcp.adapters import PromptInjectionAdapter
from app.mcp.adapters.universal import universal_mcp_adapter
import httpx
import json
import hashlib
@@ -145,11 +146,11 @@ class AIService:
self.default_temperature = default_temperature or app_settings.default_temperature
self.default_max_tokens = default_max_tokens or app_settings.default_max_tokens
# 初始化MCP适配器
# 使用全局MCP适配器单例
self.enable_mcp_adapter = enable_mcp_adapter
if enable_mcp_adapter:
self.mcp_adapter = UniversalMCPAdapter()
logger.info("✅ MCP通用适配器已启用")
self.mcp_adapter = universal_mcp_adapter
logger.info("✅ MCP通用适配器已启用(使用全局单例)")
else:
self.mcp_adapter = None
logger.info("⚠️ MCP适配器已禁用")
+43 -12
View File
@@ -18,21 +18,52 @@ from pathlib import Path
if 'SENTENCE_TRANSFORMERS_HOME' not in os.environ:
# 根据运行环境确定模型目录
if getattr(sys, 'frozen', False):
# PyInstaller 打包后
base_dir = Path(sys.executable).parent
# PyInstaller 打包后 - 需要检查多个可能的位置
exe_dir = Path(sys.executable).parent
# 检查顺序:
# 1. _MEIPASS/backend/embedding (临时解压目录)
# 2. exe同级/_internal/backend/embedding
# 3. exe同级/backend/embedding
possible_paths = []
if hasattr(sys, '_MEIPASS'):
possible_paths.append(Path(sys._MEIPASS) / 'backend' / 'embedding')
possible_paths.extend([
exe_dir / '_internal' / 'backend' / 'embedding',
exe_dir / 'backend' / 'embedding',
exe_dir / '_internal' / 'embedding',
exe_dir / 'embedding'
])
model_dir = None
for path in possible_paths:
if path.exists():
model_dir = path
logger.info(f"🔧 找到打包环境模型目录: {model_dir}")
break
if model_dir:
os.environ['SENTENCE_TRANSFORMERS_HOME'] = str(model_dir)
else:
# 最后降级方案
fallback_dir = exe_dir / 'embedding'
os.environ['SENTENCE_TRANSFORMERS_HOME'] = str(fallback_dir)
logger.warning(f"⚠️ 未找到预打包模型,使用降级目录: {fallback_dir}")
logger.warning(f" 检查过的路径: {[str(p) for p in possible_paths]}")
else:
# 开发模式,从当前文件位置向上找到项目根目录
base_dir = Path(__file__).parent.parent.parent
model_dir = base_dir / 'backend' / 'embedding'
if model_dir.exists():
os.environ['SENTENCE_TRANSFORMERS_HOME'] = str(model_dir)
logger.info(f"🔧 设置模型目录: {model_dir}")
else:
# 降级到项目根目录的 embedding
fallback_dir = base_dir / 'embedding'
os.environ['SENTENCE_TRANSFORMERS_HOME'] = str(fallback_dir)
logger.info(f"🔧 使用降级模型目录: {fallback_dir}")
model_dir = base_dir / 'backend' / 'embedding'
if model_dir.exists():
os.environ['SENTENCE_TRANSFORMERS_HOME'] = str(model_dir)
logger.info(f"🔧 设置开发环境模型目录: {model_dir}")
else:
# 降级到项目根目录的 embedding
fallback_dir = base_dir / 'embedding'
os.environ['SENTENCE_TRANSFORMERS_HOME'] = str(fallback_dir)
logger.info(f"🔧 使用降级模型目录: {fallback_dir}")
class MemoryService: