Kaynağa Gözat

更新最后相似度匹配逻辑

刘立冬 2 hafta önce
ebeveyn
işleme
b44fd9fdcb
2 değiştirilmiş dosya ile 15 ekleme ve 6 silme
  1. 14 5
      api/pipeline_wrapper.py
  2. 1 1
      api/search_service.py

+ 14 - 5
api/pipeline_wrapper.py

@@ -6,6 +6,7 @@ Pipeline包装器
 """
 
 import os
+import json
 import logging
 import tempfile
 from typing import Dict, List, Any, Optional
@@ -62,7 +63,7 @@ class PipelineWrapper:
         
         logger.info("Pipeline包装器初始化完成")
     
-    def run_stages_3_to_7(
+    async def run_stages_3_to_7(
         self,
         features_data: List[Dict[str, Any]]
     ) -> Dict[str, Any]:
@@ -131,7 +132,8 @@ class PipelineWrapper:
             # 阶段7:相似度分析
             logger.info("阶段7:相似度分析...")
             try:
-                similarity_results = self.pipeline.similarity_analyzer.run(
+                # 在异步环境中直接调用run_async而不是run
+                similarity_results = await self.pipeline.similarity_analyzer.run_async(
                     deep_results,
                     output_path=os.path.join(self.temp_output_dir, "similarity_analysis_results.json")
                 )
@@ -139,9 +141,16 @@ class PipelineWrapper:
                 logger.error(f"阶段7执行失败: {e}", exc_info=True)
                 raise Exception(f"相似度分析失败: {str(e)}")
             
-            # 注意:similarity_analyzer.run会自动更新evaluation_results中的comprehensive_score
-            # 所以我们需要重新加载更新后的evaluation_results
-            # 但由于similarity_analyzer已经更新了内存中的evaluation_results,这里直接使用即可
+            # 重要:similarity_analyzer.run_async会更新文件中的evaluation_results(添加comprehensive_score)
+            # 需要重新加载更新后的文件,因为内存中的evaluation_results变量还没有被更新
+            logger.info("重新加载更新后的评估结果(包含comprehensive_score)...")
+            evaluated_results_path = os.path.join(self.temp_output_dir, "evaluated_results.json")
+            if os.path.exists(evaluated_results_path):
+                with open(evaluated_results_path, 'r', encoding='utf-8') as f:
+                    evaluation_results = json.load(f)
+                logger.info(f"已重新加载评估结果,包含 {len(evaluation_results)} 个原始特征")
+            else:
+                logger.warning(f"评估结果文件不存在: {evaluated_results_path},使用内存中的数据")
             
             logger.info("=" * 60)
             logger.info("阶段3-7执行完成")

+ 1 - 1
api/search_service.py

@@ -159,7 +159,7 @@ async def search(request: SearchRequest):
         # 步骤2:执行阶段3-7
         logger.info("步骤2:执行阶段3-7...")
         try:
-            pipeline_output = pipeline_wrapper.run_stages_3_to_7(features_data)
+            pipeline_output = await pipeline_wrapper.run_stages_3_to_7(features_data)
         except Exception as e:
             logger.error(f"阶段3-7执行失败: {e}", exc_info=True)
             raise HTTPException(status_code=500, detail=f"Pipeline执行失败: {str(e)}")