Просмотр исходного кода

fix: 增加 NER 服务超时时间至 5 分钟

- VectorConfig: RestTemplate 超时从配置读取
- application.properties: NER 超时从 60s 改为 300s
- ner.py: 提取完成后输出实体和关系列表
何文松 1 месяц назад
Родитель
Сommit
abba3c6dd1

+ 6 - 1
backend/graph-service/src/main/java/com/lingyue/graph/config/VectorConfig.java

@@ -30,6 +30,9 @@ public class VectorConfig {
     @Value("${ollama.timeout:60000}")
     private int ollamaTimeout;
 
+    @Value("${ner.python-service.timeout:300000}")
+    private int nerServiceTimeout;
+
     /**
      * Ollama WebClient Bean
      * 用于调用 Ollama Embedding API
@@ -55,12 +58,14 @@ public class VectorConfig {
     /**
      * 通用 RestTemplate Bean
      * 用于调用外部 HTTP 服务(如 Python NER 服务)
+     * NER 服务使用 DeepSeek API,处理长文档需要较长时间
      */
     @Bean
     public RestTemplate restTemplate(RestTemplateBuilder builder) {
+        log.info("初始化 RestTemplate: nerServiceTimeout={}ms", nerServiceTimeout);
         return builder
                 .setConnectTimeout(Duration.ofSeconds(10))
-                .setReadTimeout(Duration.ofSeconds(60))
+                .setReadTimeout(Duration.ofMillis(nerServiceTimeout))
                 .build();
     }
 }

+ 2 - 1
backend/lingyue-starter/src/main/resources/application.properties

@@ -124,7 +124,8 @@ ner.auto-extract.enabled=true
 
 # Python NER 服务配置
 ner.python-service.url=${NER_SERVICE_URL:http://localhost:8001}
-ner.python-service.timeout=60000
+# 超时时间 5 分钟(DeepSeek API 处理长文档需要较长时间)
+ner.python-service.timeout=300000
 ner.python-service.connect-timeout=5000
 ner.python-service.max-retries=3
 ner.python-service.retry-interval=1000

+ 11 - 0
python-services/ner-service/app/routers/ner.py

@@ -46,6 +46,17 @@ async def extract_entities(request: NerRequest):
                    f"entity_count={len(entities)}, relation_count={len(relations)}, "
                    f"processing_time={processing_time}ms")
         
+        # 输出完整的实体列表
+        logger.info(f"========== 实体列表 ({len(entities)} 个) ==========")
+        for i, entity in enumerate(entities, 1):
+            logger.info(f"  [{i}] {entity.type}: {entity.name}")
+        
+        # 输出完整的关系列表
+        if relations:
+            logger.info(f"========== 关系列表 ({len(relations)} 个) ==========")
+            for i, rel in enumerate(relations, 1):
+                logger.info(f"  [{i}] {rel.source_entity} --[{rel.relation_type}]--> {rel.target_entity}")
+        
         return NerResponse.success_response(
             document_id=request.document_id,
             entities=entities,