Selaa lähdekoodia

@
fix: 修复三个运行时错误

1. prompt_loader: template.partial()失败时用字符串替换兜底填充变量,
避免LLM收到未填充的review_content/review_references占位符
2. ai_review_engine: 删除未定义的h1_count/data_count断言,
改为检查reference_basis_review_results是否为空
3. model_handler: OpenAIEmbeddings增加check_embedding_ctx_length=False,
跳过客户端token计数,消除对tiktoken/transformers的隐性依赖

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@

WangXuMing 3 viikkoa sitten
vanhempi
sitoutus
76a2ab191c

+ 2 - 1
core/construction_review/component/ai_review_engine.py

@@ -1188,7 +1188,8 @@ class AIReviewEngine(BaseReviewer):
                         progress_manager=progress_manager,
                         callback_task_id=callback_task_id
                     )
-                    assert h1_count > 0 or data_count > 0, "未找到任何标准引用"
+                    if not reference_basis_review_results:
+                        logger.warning(f"{chapter_code}章节未找到任何标准引用")
 
                 logger.info(f"{chapter_code}章节规范性审查完成,批次数量: {len(reference_basis_review_results)}")
 

+ 12 - 3
core/construction_review/component/reviewers/utils/prompt_loader.py

@@ -195,9 +195,18 @@ class PromptLoader:
                     template = template.partial(**kwargs)
                     logger.info(f"模板变量填充成功: {list(kwargs.keys())}")
                 except Exception as e:
-                    # 如果partial失败,记录错误并返回原始模板
-                    logger.error(f"模板变量填充失败: {kwargs}, 错误: {str(e)}")
-                    pass
+                    # partial失败时,用字符串替换兜底,避免LLM收到未填充的模板变量
+                    logger.error(f"模板变量填充失败,尝试字符串替换兜底: {list(kwargs.keys())}, 错误: {str(e)}")
+                    system_text = prompt_config['system_prompt']
+                    user_text = prompt_config['user_prompt_template']
+                    for key, value in kwargs.items():
+                        placeholder = "{" + key + "}"
+                        system_text = system_text.replace(placeholder, str(value))
+                        user_text = user_text.replace(placeholder, str(value))
+                    template = ChatPromptTemplate.from_messages([
+                        ("system", system_text),
+                        ("user", user_text + " /no_think")
+                    ])
 
             return template
 

+ 3 - 0
foundation/ai/models/model_handler.py

@@ -934,6 +934,7 @@ class ModelHandler:
                 api_key="dummy",  # 本地模型使用虚拟API key
                 timeout=self.REQUEST_TIMEOUT,
                 tiktoken_enabled=False,
+                check_embedding_ctx_length=False,
             )
 
             logger.info(f"本地Qwen3-Embedding-8B模型初始化成功: {model_id}")
@@ -981,6 +982,7 @@ class ModelHandler:
                 api_key=api_key,
                 timeout=self.REQUEST_TIMEOUT,
                 tiktoken_enabled=False,
+                check_embedding_ctx_length=False,
             )
 
             logger.info(f"硅基流动Embedding模型初始化成功: {model_id} (dimensions: {dimensions})")
@@ -1129,6 +1131,7 @@ class ModelHandler:
                 api_key=api_key,
                 timeout=self.REQUEST_TIMEOUT,
                 tiktoken_enabled=False,
+                check_embedding_ctx_length=False,
             )
 
             logger.info(f"蜀天Qwen3-Embedding-8B模型初始化成功: {model_id}")