```
feat(database): 为MySQL服务添加text函数导入支持 添加了SQLAlchemy的text函数导入,用于支持原始SQL查询操作, 增强数据库交互的灵活性和兼容性。 --- feat(excel): 改进Excel存储服务的列名处理机制 优化了列名清理逻辑,支持UTF8编码包括中文字符,实现唯一列名 生成机制,防止列名冲突。同时切换到pymysql直接插入方式, 提升批量数据插入性能并解决SQLAlchemy异步问题。 --- fix(rag): 改进RAG服务嵌入模型加载策略 当嵌入模型加载失败时,采用更稳健的降级策略,使用简化模式 运行RAG服务而非完全失败,确保系统核心功能可用性。 ```
This commit is contained in:
@@ -40,24 +40,31 @@ class RAGService:
|
||||
def _init_embeddings(self):
|
||||
"""初始化嵌入模型"""
|
||||
if self.embedding_model is None:
|
||||
model_name = getattr(settings, 'EMBEDDING_MODEL', 'all-MiniLM-L6-v2')
|
||||
# 使用轻量级本地模型,避免网络问题
|
||||
model_name = 'all-MiniLM-L6-v2'
|
||||
try:
|
||||
self.embedding_model = SentenceTransformer(model_name)
|
||||
self._dimension = self.embedding_model.get_sentence_embedding_dimension()
|
||||
logger.info(f"RAG 嵌入模型初始化完成: {model_name}, 维度: {self._dimension}")
|
||||
except Exception as e:
|
||||
logger.warning(f"嵌入模型 {model_name} 加载失败,使用默认模型: {e}")
|
||||
# 使用轻量级默认模型
|
||||
self.embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
|
||||
self._dimension = self.embedding_model.get_sentence_embedding_dimension()
|
||||
logger.info(f"RAG 嵌入模型使用默认: all-MiniLM-L6-v2, 维度: {self._dimension}")
|
||||
logger.warning(f"嵌入模型 {model_name} 加载失败: {e}")
|
||||
# 如果本地模型也失败,使用简单hash作为后备
|
||||
self.embedding_model = None
|
||||
self._dimension = 384
|
||||
logger.info("RAG 使用简化模式 (无向量嵌入)")
|
||||
|
||||
def _init_vector_store(self):
|
||||
"""初始化向量存储"""
|
||||
if self.index is None:
|
||||
self._init_embeddings()
|
||||
self.index = faiss.IndexIDMap(faiss.IndexFlatIP(self._dimension))
|
||||
logger.info("Faiss 向量存储初始化完成")
|
||||
if self.embedding_model is None:
|
||||
# 无法加载嵌入模型,使用简化模式
|
||||
self._dimension = 384
|
||||
self.index = None
|
||||
logger.warning("RAG 嵌入模型未加载,使用简化模式")
|
||||
else:
|
||||
self.index = faiss.IndexIDMap(faiss.IndexFlatIP(self._dimension))
|
||||
logger.info("Faiss 向量存储初始化完成")
|
||||
|
||||
async def initialize(self):
|
||||
"""异步初始化"""
|
||||
@@ -86,6 +93,11 @@ class RAGService:
|
||||
if not self._initialized:
|
||||
self._init_vector_store()
|
||||
|
||||
# 如果没有嵌入模型,只记录到日志
|
||||
if self.embedding_model is None:
|
||||
logger.debug(f"字段跳过索引 (无嵌入模型): {table_name}.{field_name}")
|
||||
return
|
||||
|
||||
text = f"表名: {table_name}, 字段: {field_name}, 描述: {field_description}"
|
||||
if sample_values:
|
||||
text += f", 示例值: {', '.join(sample_values)}"
|
||||
@@ -108,6 +120,11 @@ class RAGService:
|
||||
if not self._initialized:
|
||||
self._init_vector_store()
|
||||
|
||||
# 如果没有嵌入模型,只记录到日志
|
||||
if self.embedding_model is None:
|
||||
logger.debug(f"文档跳过索引 (无嵌入模型): {doc_id}")
|
||||
return
|
||||
|
||||
doc = SimpleDocument(
|
||||
page_content=content,
|
||||
metadata=metadata or {"doc_id": doc_id}
|
||||
|
||||
Reference in New Issue
Block a user