#104 合并

닫힘
tangle CRBC-MaaS-Platform-Project/dev 에서 CRBC-MaaS-Platform-Project/test 로 20 commits 를 머지하려 합니다
96개의 변경된 파일9872개의 추가작업 그리고 585개의 파일을 삭제
  1. 12 0
      config/model_setting.yaml
  2. 43 4
      core/construction_review/component/ai_review_engine.py
  3. 30 163
      core/construction_review/component/desensitize/model_client.py
  4. 28 13
      core/construction_review/component/infrastructure/parent_tool.py
  5. 2 1
      core/construction_review/component/minimal_pipeline/chunk_assembler.py
  6. 1 1
      core/construction_review/component/report_generator.py
  7. 282 27
      core/construction_review/component/reviewers/grammar_check_reviewer.py
  8. 23 7
      core/construction_review/component/reviewers/prompt/basic_reviewers.yaml
  9. 95 52
      core/construction_review/component/reviewers/prompt/query_extract.yaml
  10. 36 17
      core/construction_review/component/reviewers/prompt/technical_reviewers.yaml
  11. 0 47
      core/construction_review/component/reviewers/sensitive_words/色情词库.txt
  12. 8 7
      core/construction_review/component/reviewers/timeliness_reviewer.py
  13. 37 4
      core/construction_review/component/reviewers/utils/inter_tool.py
  14. 7 5
      core/construction_review/component/reviewers/utils/prompt_loader.py
  15. 207 0
      core/construction_review/component/reviewers/utils/text_preprocessor.py
  16. 17 0
      core/construction_review/workflows/ai_review_workflow.py
  17. 54 4
      core/construction_review/workflows/core_functions/ai_review_core_fun.py
  18. 86 82
      foundation/ai/models/rerank_model.py
  19. 194 56
      foundation/ai/rag/retrieval/entities_enhance.py
  20. 63 73
      foundation/ai/rag/retrieval/query_rewrite.py
  21. 34 22
      foundation/ai/rag/retrieval/retrieval.py
  22. 230 0
      utils_test/Grammar_Check_Test/analyze_grammar_quality.py
  23. 251 0
      utils_test/Grammar_Check_Test/full_scan_results/all_results.json
  24. 45 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk24_boundary_analysis.txt
  25. 123 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk24_split_results.json
  26. 79 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk24_split_review_new.json
  27. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_00_basis.json
  28. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_01_basis.json
  29. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_02_basis.json
  30. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_03_basis.json
  31. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_04_overview.json
  32. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_05_overview.json
  33. 8 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_05_retest2.json
  34. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_06_overview.json
  35. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_07_overview.json
  36. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_08_overview.json
  37. 8 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_08_retest2.json
  38. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_09_overview.json
  39. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_10_overview.json
  40. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_11_plan.json
  41. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_12_plan.json
  42. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_13_plan.json
  43. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_14_plan.json
  44. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_15_plan.json
  45. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_16_technology.json
  46. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_17_technology.json
  47. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_18_technology.json
  48. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_19_technology.json
  49. 6 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_20_retest2.json
  50. 10 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_20_technology.json
  51. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_21_technology.json
  52. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_22_safety.json
  53. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_23_safety.json
  54. 7 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_24_retest.json
  55. 8 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_24_retest2.json
  56. 10 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_24_safety.json
  57. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_25_safety.json
  58. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_26_safety.json
  59. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_27_quality.json
  60. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_28_environment.json
  61. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_29_management.json
  62. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_30_management.json
  63. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_31_management.json
  64. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_32_management.json
  65. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_33_acceptance.json
  66. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_34_acceptance.json
  67. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_35_acceptance.json
  68. 12 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_36_acceptance.json
  69. 10 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_37_acceptance.json
  70. 6 0
      utils_test/Grammar_Check_Test/full_scan_results/chunk_37_retest2.json
  71. 9 0
      utils_test/Grammar_Check_Test/grammar_check_result.json
  72. 93 0
      utils_test/Grammar_Check_Test/run_full_scan.py
  73. 341 0
      utils_test/Grammar_Check_Test/test_grammar_check_prompt_fix.py
  74. 197 0
      utils_test/Grammar_Check_Test/test_grammar_check_split.py
  75. 0 0
      utils_test/RAG_Pipeline_Test/__init__.py
  76. 32 0
      utils_test/RAG_Pipeline_Test/conftest.py
  77. 103 0
      utils_test/RAG_Pipeline_Test/print_review_results.py
  78. 499 0
      utils_test/RAG_Pipeline_Test/rag_evaluator.py
  79. 195 0
      utils_test/RAG_Pipeline_Test/rag_pipeline_runner.py
  80. 129 0
      utils_test/RAG_Pipeline_Test/reports/rag_pipeline_test_report.md
  81. 314 0
      utils_test/RAG_Pipeline_Test/reports/review_results_detail.txt
  82. 2180 0
      utils_test/RAG_Pipeline_Test/reports/test_run_output.txt
  83. 78 0
      utils_test/RAG_Pipeline_Test/run_tests.py
  84. 204 0
      utils_test/RAG_Pipeline_Test/test_data.py
  85. 1964 0
      utils_test/RAG_Pipeline_Test/test_output.txt
  86. 26 0
      utils_test/sgfa_test_file/308085f5-9a44-4760-8a91-66f71c1ffb84.pdf.json
  87. 75 0
      utils_test/sgfa_test_file/4bddabe6-8f1b-46bb-9e99-cab2fb4380f4.pdf.json
  88. 91 0
      utils_test/sgfa_test_file/a053a18c-ac35-4429-9f50-b25380d0bae1.pdf.json
  89. 26 0
      utils_test/sgfa_test_file/完整性1.docx.json
  90. 171 0
      utils_test/sgfa_test_file/标准结构测试文件.pdf.json
  91. 143 0
      utils_test/sgfa_test_file/测试模版-四川路桥专项施工方案框架以及编制说明(2025修订第三版)- v0.2.pdf.json
  92. 98 0
      utils_test/sgfa_test_file/测试模版1_语句语法审查.docx.json
  93. 91 0
      utils_test/sgfa_test_file/测试模版2_语义逻辑审查.docx.json
  94. 121 0
      utils_test/sgfa_test_file/测试模版4_规范性.docx.json
  95. 91 0
      utils_test/sgfa_test_file/测试模版5_敏感词.docx.json
  96. 121 0
      utils_test/sgfa_test_file/测试模版(目录缺失)-四川路桥专项施工方案框架以及编制说明(2025修订第三版).docx.json

+ 12 - 0
config/model_setting.yaml

@@ -66,6 +66,12 @@ model_settings:
     enable_thinking: false
     description: "查询提取,从审查条文中提取实体和关键词,蜀天35B"
 
+  # 审查要点提取(从施工方案中生成规范检索语句,替代 query_extract)
+  review_point_extract:
+    model: shutian_qwen3_5_35b
+    enable_thinking: false
+    description: "审查要点提取,从施工方案中生成规范检索语句,蜀天35B"
+
   # 相关性判断(判断两个文本是否相关)
   relevance_judge:
     model: shutian_qwen3_5_122b
@@ -126,6 +132,12 @@ model_settings:
     enable_thinking: true
     description: "目录完整性审查,对比OCR提取目录与标准目录,找出缺失项,蜀天122B"
 
+  # 文档智能脱敏(PII/地理/企业/财务信息替换)
+  desensitize:
+    model: shutian_qwen3_5_122b
+    enable_thinking: false
+    description: "文档智能脱敏,蜀天122B"
+
   # ============================================================
   # 施工方案编写模块(construction_write)
   # 说明:编写模块各功能可用的模型集中在此分组,新增编写功能请在此处添加。

+ 43 - 4
core/construction_review/component/ai_review_engine.py

@@ -230,8 +230,8 @@ class AIReviewEngine(BaseReviewer):
 
         logger.info(f"[RAG增强] 提取到 {len(query_pairs)} 个查询对")
 
-        # Step 3: 根据查询对主实体、辅助实体,进行实体增强召回
-        bfp_result_lists = entity_enhance.entities_enhance_retrieval(query_pairs)
+        # Step 3: 审查要点检索 — 直接搜索规范条文
+        bfp_result_lists = entity_enhance.review_point_retrieval(query_pairs)
 
         # Step 4: 检查检索结果
         if not bfp_result_lists:
@@ -249,7 +249,7 @@ class AIReviewEngine(BaseReviewer):
             enhancement_result = enhance_with_parent_docs_grouped(
                 self.milvus,
                 bfp_result_lists,
-                score_threshold=0.5,  # bfp_rerank_score 阈值
+                score_threshold=0.4,  # bfp_rerank_score 阈值 (略低于最终阈值0.5, 允许边界结果参与父文档增强)
                 max_parents_per_pair=3,  # 每个查询对最多3个父文档
                 max_parent_text_length=8000  # 单个父文档最大8000字符(约5300 tokens)
             )
@@ -265,13 +265,52 @@ class AIReviewEngine(BaseReviewer):
             # 失败时使用原始结果
             enhanced_results = bfp_result_lists
 
-        # Step 5: 提取查询对结果(只保留得分>0.5的结果)
+        # Step 6: 提取查询对结果(只保留得分>0.5的结果)
         entity_results = extract_query_pairs_results(enhanced_results, query_pairs, score_threshold=0.5)
 
         # 保存最终结果用于调试
         # with open(rf"temp\construction_review/ai_review_engine\extract_query_pairs_results.json", "w", encoding='utf-8') as f:
         #     json.dump(entity_results, f, ensure_ascii=False, indent=4)
 
+        # Step 7: 内容质量验证 — 过滤无效 entity_results(防御性检查)
+        MIN_TEXT_CONTENT_LENGTH = 50
+        validated_entity_results = []
+        for er_idx, er in enumerate(entity_results):
+            text_content = er.get('text_content', '')
+            file_name = er.get('file_name', '')
+            final_score = er.get('final_score', 0)
+            entity_name = er.get('entity', f'entity_{er_idx}')
+
+            if not text_content or len(text_content.strip()) < MIN_TEXT_CONTENT_LENGTH:
+                logger.warning(
+                    f"[RAG增强][内容验证] 实体 '{entity_name}' "
+                    f"text_content过短(len={len(text_content.strip())}<{MIN_TEXT_CONTENT_LENGTH}), 跳过"
+                )
+                continue
+
+            if not file_name or not file_name.strip():
+                logger.warning(
+                    f"[RAG增强][内容验证] 实体 '{entity_name}' file_name为空, 跳过"
+                )
+                continue
+
+            if final_score < 0.5:
+                logger.warning(
+                    f"[RAG增强][内容验证] 实体 '{entity_name}' "
+                    f"final_score={final_score:.4f}<0.5, 跳过"
+                )
+                continue
+
+            validated_entity_results.append(er)
+
+        skipped_count = len(entity_results) - len(validated_entity_results)
+        if skipped_count > 0:
+            logger.info(
+                f"[RAG增强][内容验证] 过滤了 {skipped_count} 个无效实体, "
+                f"剩余 {len(validated_entity_results)} 个有效实体"
+            )
+        entity_results = validated_entity_results
+
         # 如果没有结果通过阈值过滤,返回空结果
         if not entity_results:
             logger.warning("[RAG增强] 没有结果通过阈值过滤(得分>0.5),返回空结果")

+ 30 - 163
core/construction_review/component/desensitize/model_client.py

@@ -1,36 +1,35 @@
-"""
-本地大模型脱敏客户端
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-支持两阶段配置:
-- 阶段一(测试):使用外部API测试候选模型
-- 阶段二(生产):使用本地部署模型(Qwen3-8B / Qwen3.5-122B-A10B)
+"""
+大模型脱敏客户端
 
-根据 wlast.md 文档第3.2节和8.3节设计
+通过统一模型调用链(generate_model_client + model_setting.yaml)
+实现文档智能脱敏,模型配置由 model_setting.yaml 的 desensitize 功能统一管理。
 """
 
 import re
-from typing import Optional, Dict, Any, List
-from openai import AsyncOpenAI
-
-from foundation.infrastructure.config.config import config_handler
+import uuid
+from typing import List
 
+from foundation.ai.agent.generate.model_generate import generate_model_client
 from foundation.observability.logger.loggering import desensitize_logger as logger
 
 
 class DesensitizeModelClient:
-    """本地大模型脱敏客户端(仅限内网 Qwen3-8B / Qwen3.5-122B)
-
-    ⚠️ 安全约束:
-      - 生产阶段 SERVER_URL 必须为内网地址(192.168.x.x / 10.x.x.x / 172.x.x.x)
-      - 禁止配置任何外部公网大模型 API 地址
-      - 脱敏处理必须在调用外部审查 API 之前完成
+    """大模型脱敏客户端
 
-    阶段配置:
-      - DEPLOY_PHASE=test: 使用外部API测试(仅测试数据集)
-      - DEPLOY_PHASE=local: 使用本地部署模型(生产环境)
+    使用统一的 generate_model_client 调用 LLM,
+    模型选择通过 model_setting.yaml 的 desensitize 功能配置。
     """
 
-    # 脱敏 Prompt 模板(根据 wlast.md 文档附录B)
+    # 最大输入长度(字符数),超出则截断
+    MAX_INPUT_LENGTH = 8192
+
+    # 选择性推理标志(scheme A 补充识别,当前未启用)
+    selective = False
+
+    # 脱敏 Prompt 模板
     DESENSITIZE_PROMPT_TEMPLATE = """你是专业的施工方案数据脱敏专家,请对以下内容进行{level}级别脱敏:
 
 【脱敏规则】
@@ -69,106 +68,7 @@ class DesensitizeModelClient:
 
     def __init__(self):
         """初始化模型客户端"""
-        self._load_config()
-        self.client = AsyncOpenAI(
-            base_url=self.server_url,
-            api_key=self.api_key
-        )
-
-        logger.info(f"[DesensitizeModelClient] 初始化完成: "
-                   f"phase={self.deploy_phase}, model={self.model}, "
-                   f"scheme={self.scheme if self.deploy_phase == 'local' else 'N/A'}")
-
-    def _load_config(self):
-        """加载配置"""
-        base_cfg = config_handler.get_section("desensitize")
-        self.deploy_phase = base_cfg.get("DEPLOY_PHASE", "test")
-
-        if self.deploy_phase == "test":
-            # 阶段一:外部 API 测试验证
-            self._load_test_config()
-        else:
-            # 阶段二:本地部署生产模式
-            self._load_local_config()
-
-    def _load_test_config(self):
-        """加载测试阶段配置"""
-        test_cfg = config_handler.get_section("desensitize_model_test")
-        test_model = test_cfg.get("TEST_MODEL", "gemma3_12b")
-        cfg = config_handler.get_section(f"desensitize_model_test_{test_model}")
-
-        self.server_url = cfg.get("SERVER_URL", "")
-        self.api_key = cfg.get("API_KEY", "dummy")
-        self.model = cfg.get("MODEL_NAME", "")
-        self.max_tokens = int(cfg.get("MAX_TOKENS", "4096"))
-        self.temperature = float(cfg.get("TEMPERATURE", "0.1"))
-
-        # 测试阶段特有配置
-        self.selective = False
-        self.confidence_threshold = 0.0
-        self.scheme = "test"
-
-        # 打印警告
-        logger.warning(
-            f"[脱敏] 当前为测试阶段(DEPLOY_PHASE=test),"
-            f"使用外部模型 {self.model},请勿传入真实生产文档"
-        )
-
-        # 检查 API KEY 是否为环境变量引用
-        if self.api_key.startswith("${") and self.api_key.endswith("}"):
-            env_var = self.api_key[2:-1]
-            import os
-            self.api_key = os.environ.get(env_var, "")
-
-    def _load_local_config(self):
-        """加载本地生产配置"""
-        base_cfg = config_handler.get_section("desensitize")
-        self.scheme = base_cfg.get("DESENSITIZE_SCHEME", "scheme_a")
-
-        cfg = config_handler.get_section(f"desensitize_model_{self.scheme}")
-        self.server_url = cfg.get("SERVER_URL", "")
-        self.api_key = cfg.get("API_KEY", "dummy")
-        self.model = cfg.get("MODEL_NAME", "")
-        self.max_tokens = int(cfg.get("MAX_TOKENS", "2048"))
-        self.temperature = float(cfg.get("TEMPERATURE", "0.1"))
-
-        # 本地特有配置
-        self.selective = cfg.get("SELECTIVE_INFERENCE", "false").lower() == "true"
-        self.confidence_threshold = float(cfg.get("CONFIDENCE_THRESHOLD", "0.7"))
-        self.max_input_length = int(cfg.get("MAX_INPUT_LENGTH", "8192"))
-
-        # 生产阶段:强制校验必须为内网地址
-        if not self._is_internal_ip(self.server_url):
-            raise ValueError(
-                f"[脱敏] 生产阶段只允许内网地址,拒绝外网地址: {self.server_url}\n"
-                f"请将 DEPLOY_PHASE 改为 test,或将 SERVER_URL 改为内网地址"
-            )
-
-    def _is_internal_ip(self, url: str) -> bool:
-        """检查是否为内网地址"""
-        internal_prefixes = [
-            "http://192.168.",
-            "http://10.",
-            "http://172.16.",
-            "http://172.17.",
-            "http://172.18.",
-            "http://172.19.",
-            "http://172.20.",
-            "http://172.21.",
-            "http://172.22.",
-            "http://172.23.",
-            "http://172.24.",
-            "http://172.25.",
-            "http://172.26.",
-            "http://172.27.",
-            "http://172.28.",
-            "http://172.29.",
-            "http://172.30.",
-            "http://172.31.",
-            "https://192.168.",
-            "https://10.",
-        ]
-        return any(url.startswith(p) for p in internal_prefixes)
+        logger.info("[DesensitizeModelClient] 初始化完成,使用 model_setting.yaml 的 desensitize 配置")
 
     async def desensitize_text(self, text: str, level: str = "standard") -> str:
         """使用大模型进行智能脱敏
@@ -180,27 +80,22 @@ class DesensitizeModelClient:
         Returns:
             脱敏后的文本
         """
-        # 截断过长的输入
-        if len(text) > self.max_input_length:
-            logger.warning(f"[DesensitizeModelClient] 输入文本过长({len(text)}), 截断至{self.max_input_length}")
-            text = text[:self.max_input_length]
+        if len(text) > self.MAX_INPUT_LENGTH:
+            logger.warning(f"[DesensitizeModelClient] 输入文本过长({len(text)}), 截断至{self.MAX_INPUT_LENGTH}")
+            text = text[:self.MAX_INPUT_LENGTH]
 
         system_prompt = self.DESENSITIZE_PROMPT_TEMPLATE.format(level=level)
+        trace_id = f"desensitize_{uuid.uuid4().hex[:12]}"
 
         try:
-            response = await self.client.chat.completions.create(
-                model=self.model,
-                messages=[
-                    {"role": "system", "content": system_prompt},
-                    {"role": "user", "content": text}
-                ],
-                temperature=self.temperature,
-                max_tokens=self.max_tokens
+            result = await generate_model_client.get_model_generate_invoke(
+                trace_id=trace_id,
+                system_prompt=system_prompt,
+                user_prompt=text,
+                timeout=120,
+                function_name="desensitize"
             )
 
-            result = response.choices[0].message.content
-
-            # 清理可能的代码块标记
             result = self._clean_code_blocks(result)
 
             logger.debug(f"[DesensitizeModelClient] 脱敏完成: {len(text)} -> {len(result)} chars")
@@ -228,39 +123,11 @@ class DesensitizeModelClient:
                 logger.debug(f"[DesensitizeModelClient] 块{i+1}/{len(chunks)}脱敏完成")
             except Exception as e:
                 logger.error(f"[DesensitizeModelClient] 块{i+1}脱敏失败: {e}")
-                # 失败时保留原文(或可根据策略阻断)
                 results.append(chunk)
         return results
 
     def _clean_code_blocks(self, text: str) -> str:
         """清理代码块标记"""
-        # 移除 markdown 代码块标记
         text = re.sub(r'^```\w*\n?', '', text)
         text = re.sub(r'\n?```$', '', text)
         return text.strip()
-
-    async def check_confidence(self, text: str) -> Dict[str, Any]:
-        """检查文本脱敏置信度(用于方案A的选择性推理)
-
-        返回置信度分数和可能需要人工检查的片段
-        """
-        # 简单启发式检查
-        risk_patterns = [
-            (r'\b1[3-9]\d{9}\b', 'phone'),
-            (r'\b\d{17}[\dXx]\b', 'id_card'),
-            (r'[\u4e00-\u9fa5]{2,4}(?:集团|有限公司|局)', 'company'),
-        ]
-
-        risks = []
-        for pattern, risk_type in risk_patterns:
-            if re.search(pattern, text):
-                risks.append(risk_type)
-
-        confidence = 1.0 - (len(risks) * 0.3)  # 简单线性计算
-        confidence = max(0.0, min(1.0, confidence))
-
-        return {
-            "confidence": confidence,
-            "risks": risks,
-            "needs_review": confidence < self.confidence_threshold
-        }

+ 28 - 13
core/construction_review/component/infrastructure/parent_tool.py

@@ -95,7 +95,7 @@ def fetch_parent_chunks_by_parent_id(
             output_fields=output_fields,
             limit=1000,  # 足够大的数字,获取所有片段
         )
-        
+
         if not rows:
             logger.warning(f"[父文档工具] parent_id {parent_id} 没有召回任何片段")
             return None
@@ -294,11 +294,8 @@ def enhance_with_parent_docs_grouped(
                     start_cut = (original_length - target_length) // 2
                     compressed_text = text[start_cut:start_cut + target_length]
 
-                    # 添加压缩提示
-                    compressed_text = f"...[已按比例压缩{compression_ratio:.2%}]...\n{compressed_text}\n...[已压缩]..."
-                    parent_id_to_doc[pid] = compressed_text
-
                     logger.info(f"[分组增强] parent_id={str(pid)[:8]}... 压缩前={original_length}字符,压缩后={len(compressed_text)}字符")
+                    parent_id_to_doc[pid] = compressed_text
 
             # 重新计算总长度
             total_length_after = sum(len(text) for text in parent_id_to_doc.values())
@@ -313,8 +310,15 @@ def enhance_with_parent_docs_grouped(
                 # 获取父文档和元数据
                 parent_text = parent_id_to_doc[parent_id]
                 metadata = parent_id_to_metadata.get(parent_id, {})
-                file_name = metadata.get('file_name', '')
-                title = metadata.get('title', '')
+                result_meta = result.get('metadata', {})
+                # 优先使用可读名称 (chinese_name),回退到 file_name(数字ID)
+                file_name = (
+                    metadata.get('chinese_name', '')
+                    or result_meta.get('chinese_name', '')
+                    or str(metadata.get('file_name', ''))
+                    or str(result_meta.get('file_name', ''))
+                )
+                title = metadata.get('title', '') or result_meta.get('title', '')
                 top_rank = metadata.get('top_rank', 0)
 
                 # 构建头部信息
@@ -326,7 +330,11 @@ def enhance_with_parent_docs_grouped(
 
                 enhanced_list.append({
                     'text_content': enhanced_content,
-                    'metadata': result.get('metadata', {}),
+                    'metadata': {
+                        **result.get('metadata', {}),
+                        'file_name': file_name,
+                        'title': title,
+                    },
                     'hybrid_similarity': result.get('hybrid_similarity'),
                     'rerank_score': result.get('rerank_score'),
                     'bfp_rerank_score': result.get('bfp_rerank_score'),
@@ -405,10 +413,10 @@ def extract_query_pairs_results(bfp_result_lists: List, query_pairs: List[Dict]
 
         total_count += 1
 
-        # 获取查询对信息
+        # 获取查询对信息 — 兼容新旧字段名
         query_pair = query_pairs[query_idx] if query_pairs and query_idx < len(query_pairs) else {}
-        entity = query_pair.get('entity', '')
-        background = query_pair.get('background', '')
+        entity = query_pair.get('entity', query_pair.get('label', ''))
+        background = query_pair.get('background', query_pair.get('original_text', ''))
         parameter = query_pair.get('parameter', '')
 
         # 组合完整查询条文: 实体 + 背景 + 参数
@@ -448,14 +456,21 @@ def extract_query_pairs_results(bfp_result_lists: List, query_pairs: List[Dict]
 
         # 只保留得分超过阈值的结果
         if final_score > score_threshold:
+            # file_name: 优先使用 chinese_name(可读标准名称),回退到 file_name(数字ID)或 standard_number
+            best_meta = best_result['metadata']
+            display_name = (
+                best_meta.get('chinese_name', '')
+                or str(best_meta.get('file_name', ''))
+                or best_meta.get('standard_number', '')
+            )
             result_item = {
                 'entity': entity,
                 'background': background,
                 'parameter': parameter,
                 'combined_query': combined_query,
-                'file_name': best_result['metadata'].get('file_name', 'unknown'),
+                'file_name': display_name,
                 'text_content': best_result['text_content'],
-                'metadata': best_result['metadata'],
+                'metadata': best_meta,
                 'bfp_rerank_score': bfp_score,
                 'rerank_score': rerank_score,
                 'final_score': final_score,

+ 2 - 1
core/construction_review/component/minimal_pipeline/chunk_assembler.py

@@ -8,6 +8,7 @@ import re
 from typing import Dict, Any, List
 
 from foundation.observability.logger.loggering import review_logger as logger
+from core.construction_review.component.reviewers.utils.text_preprocessor import preprocess_review_text
 
 
 def assemble_chunks(
@@ -71,7 +72,7 @@ def assemble_chunks(
         title_number = _extract_chapter_number(chapter_title)
 
         for section_title, section_data in sections.items():
-            content = section_data.get("content", "")
+            content = preprocess_review_text(section_data.get("content", ""))
             if not content.strip():
                 continue
 

+ 1 - 1
core/construction_review/component/report_generator.py

@@ -370,7 +370,7 @@ class ReportGenerator:
             'completeness_check': '完整性审查',
             'semantic_logic_check': '语义逻辑审查',
             'reference_check': '参考文献审查',
-            'sensitive_word_check': '敏感词审查',
+            'sensitive_word_check': '词句语法检查',
             'grammar_check': '词句语法检查',
             'mandatory_standards_check': '强制性标准审查',
             'technical_parameters_check': '技术参数审查',

+ 282 - 27
core/construction_review/component/reviewers/grammar_check_reviewer.py

@@ -1,17 +1,33 @@
 """
 词句语法检查模块
 使用通用模型底座进行错别字、标点、重复字词等词句语法检查
+
+支持长文本自动切分:
+- 内容长度 > SPLIT_THRESHOLD(默认5000字)时,自动切分为多个段落并行审查
+- 切分使用句子边界对齐 + 重叠策略,避免断句引入误报
+- 多段审查结果自动合并去重
 """
 
+import json
+import re
 import time
 import asyncio
-from typing import Dict, Any
+from typing import Dict, Any, List, Optional
 from core.construction_review.component.reviewers.base_reviewer import ReviewResult
 from core.construction_review.component.reviewers.utils.prompt_loader import prompt_loader
+from core.construction_review.component.reviewers.utils.text_split import split_text_with_overlap
 from foundation.ai.agent.generate.model_generate import generate_model_client
 from foundation.observability.logger.loggering import review_logger as logger
 
 
+# 长文本切分阈值和参数
+SPLIT_THRESHOLD = 5000       # 超过此长度的文本触发切分
+SEGMENT_MIN_LENGTH = 2500    # 每段最小长度
+SEGMENT_TARGET_LENGTH = 3000 # 每段目标长度
+SEGMENT_OVERLAP = 50         # 段间重叠字数
+MAX_CONCURRENT_SEGMENTS = 4  # 最大并行审查段数
+
+
 class GrammarCheckReviewer:
     """词句语法检查审查器"""
 
@@ -30,6 +46,9 @@ class GrammarCheckReviewer:
         """
         执行词句语法检查
 
+        当文本长度超过 SPLIT_THRESHOLD 时,自动切分为多个段落并行审查,
+        然后合并去重所有段的审查结果。
+
         Args:
             trace_id: 追踪ID
             review_content: 待审查内容
@@ -40,33 +59,25 @@ class GrammarCheckReviewer:
             ReviewResult: 审查结果对象
         """
         start_time = time.time()
+        content_length = len(review_content)
 
         try:
-            logger.info(f"开始词句语法检查,trace_id: {trace_id}, 内容长度: {len(review_content)}")
-
-            # 构造提示词参数
-            prompt_kwargs = {}
-            prompt_kwargs["review_content"] = review_content
+            logger.info(f"开始词句语法检查,trace_id: {trace_id}, 内容长度: {content_length}")
 
-            # 获取提示词模板
-            prompt_template = prompt_loader.get_prompt_template(
-                "basic",
-                "grammar_check",
-                **prompt_kwargs
-            )
-
-            # 格式化提示词消息
-            messages = prompt_template.format_messages()
-
-            logger.info("调用词句语法检查模型")
-
-            # 使用 function_name 从 model_setting.yaml 加载模型配置
-            model_response = await self.model_client.get_model_generate_invoke(
-                trace_id=trace_id,
-                messages=messages,
-                function_name="grammar_check",
-                enable_thinking=enable_thinking,
-            )
+            # 判断是否需要切分
+            if content_length > SPLIT_THRESHOLD:
+                logger.info(f"[grammar_check] 内容长度 {content_length} > {SPLIT_THRESHOLD},触发切分审查")
+                model_response = await self._check_grammar_with_split(
+                    trace_id=trace_id,
+                    review_content=review_content,
+                    enable_thinking=enable_thinking,
+                )
+            else:
+                model_response = await self._check_grammar_single(
+                    trace_id=trace_id,
+                    review_content=review_content,
+                    enable_thinking=enable_thinking,
+                )
 
             logger.info(f"词句语法检查模型响应成功,响应长度: {len(model_response)}")
 
@@ -87,7 +98,7 @@ class GrammarCheckReviewer:
             # 推送审查完成信息
             if state and state.get("progress_manager"):
                 review_result_data = {
-                    'name': 'grammar_check',
+                    'name': 'sensitive_word_check',
                     'success': result.success,
                     'details': result.details,
                     'error_message': result.error_message,
@@ -127,7 +138,7 @@ class GrammarCheckReviewer:
             # 推送失败信息
             if state and state.get("progress_manager"):
                 review_result_data = {
-                    'name': 'grammar_check',
+                    'name': 'sensitive_word_check',
                     'success': False,
                     'details': result.details,
                     'error_message': error_msg,
@@ -150,5 +161,249 @@ class GrammarCheckReviewer:
             return result
 
 
+    async def _check_grammar_single(
+        self,
+        trace_id: str,
+        review_content: str,
+        enable_thinking: bool = False,
+    ) -> str:
+        """
+        单段词句语法检查(原始逻辑)
+
+        Args:
+            trace_id: 追踪ID
+            review_content: 待审查内容
+            enable_thinking: 是否启用思考模式
+
+        Returns:
+            str: 模型原始响应
+        """
+        prompt_kwargs = {"review_content": review_content}
+        prompt_template = prompt_loader.get_prompt_template(
+            "basic", "grammar_check", **prompt_kwargs
+        )
+        messages = prompt_template.format_messages()
+
+        model_response = await self.model_client.get_model_generate_invoke(
+            trace_id=trace_id,
+            messages=messages,
+            function_name="grammar_check",
+            enable_thinking=enable_thinking,
+        )
+        return model_response
+
+    async def _check_grammar_with_split(
+        self,
+        trace_id: str,
+        review_content: str,
+        enable_thinking: bool = False,
+    ) -> str:
+        """
+        长文本切分后并行审查,合并去重结果
+
+        流程:
+        1. 按句子边界切分为多个段落(带重叠)
+        2. 并行调用模型审查每个段落(信号量控制并发)
+        3. 解析每段的 JSON 响应,提取 issue 列表
+        4. 代码层面去重(相同 location + suggestion 的只保留一条)
+        5. 合并为单个 JSON 数组返回
+
+        Args:
+            trace_id: 追踪ID
+            review_content: 待审查内容
+            enable_thinking: 是否启用思考模式
+
+        Returns:
+            str: 合并后的 JSON 字符串
+        """
+        # 1. 切分文本
+        segments = split_text_with_overlap(
+            review_content,
+            min_length=SEGMENT_MIN_LENGTH,
+            target_length=SEGMENT_TARGET_LENGTH,
+            overlap=SEGMENT_OVERLAP,
+        )
+        logger.info(f"[grammar_check] 切分为 {len(segments)} 段")
+
+        if not segments:
+            return "无明显问题"
+
+        # 2. 并行审查(信号量控制并发)
+        semaphore = asyncio.Semaphore(MAX_CONCURRENT_SEGMENTS)
+
+        async def check_segment(seg_idx: int, seg_content: str) -> tuple:
+            async with semaphore:
+                seg_trace_id = f"{trace_id}_seg{seg_idx}"
+                try:
+                    response = await self._check_grammar_single(
+                        trace_id=seg_trace_id,
+                        review_content=seg_content,
+                        enable_thinking=enable_thinking,
+                    )
+                    logger.info(f"[grammar_check] 段{seg_idx} 审查完成,响应长度: {len(response)}")
+                    return (seg_idx, response)
+                except Exception as e:
+                    logger.error(f"[grammar_check] 段{seg_idx} 审查失败: {e}", exc_info=True)
+                    return (seg_idx, "无明显问题")
+
+        tasks = [
+            check_segment(i, seg) for i, seg in enumerate(segments)
+        ]
+        results = await asyncio.gather(*tasks)
+
+        # 3. 解析每段的 JSON 响应
+        all_issues = []
+        for seg_idx, response in results:
+            issues = self._parse_segment_response(response)
+            logger.info(f"[grammar_check] 段{seg_idx} 解析出 {len(issues)} 个问题")
+            all_issues.extend(issues)
+
+        logger.info(f"[grammar_check] 合并前共 {len(all_issues)} 个问题")
+
+        # 4. 代码层面去重
+        unique_issues = self._deduplicate_issues(all_issues)
+        logger.info(f"[grammar_check] 去重后剩余 {len(unique_issues)} 个问题")
+
+        # 5. 返回合并结果
+        if not unique_issues:
+            return "无明显问题"
+
+        return json.dumps(unique_issues, ensure_ascii=False, indent=2)
+
+    def _parse_segment_response(self, response: str) -> List[Dict[str, Any]]:
+        """
+        解析单段的模型响应,提取 issue 列表
+
+        Args:
+            response: 模型原始响应字符串
+
+        Returns:
+            List[Dict]: 解析出的 issue 列表
+        """
+        if not response or not response.strip():
+            return []
+
+        # 检查"无明显问题"
+        no_issue_keywords = ["无明显问题", "无问题", "符合要求", "无风险"]
+        if any(kw in response for kw in no_issue_keywords):
+            # 但需要确认不是 JSON 中包含了这些词(如 reason 字段)
+            # 先尝试解析 JSON,如果解析失败才认为是真的无问题
+            pass
+
+        # 尝试提取 JSON
+        response_stripped = response.strip()
+
+        # 移除 markdown 代码块标记
+        code_block_match = re.search(r'```(?:json)?\s*([\s\S]*?)\s*```', response_stripped)
+        if code_block_match:
+            response_stripped = code_block_match.group(1).strip()
+
+        # 尝试解析为 JSON 数组
+        try:
+            if response_stripped.startswith('['):
+                data = json.loads(response_stripped)
+                if isinstance(data, list):
+                    return [item for item in data if isinstance(item, dict)]
+            elif response_stripped.startswith('{'):
+                data = json.loads(response_stripped)
+                if isinstance(data, dict):
+                    return [data]
+        except json.JSONDecodeError:
+            pass
+
+        # 尝试从文本中提取 JSON 块
+        json_patterns = [
+            r'\[[\s\S]*\]',   # 数组模式
+            r'\{[^{}]*"issue_point"[^{}]*\}',  # 单个对象模式
+        ]
+        for pattern in json_patterns:
+            matches = re.findall(pattern, response_stripped)
+            for match in matches:
+                try:
+                    data = json.loads(match)
+                    if isinstance(data, list):
+                        return [item for item in data if isinstance(item, dict)]
+                    elif isinstance(data, dict) and "issue_point" in data:
+                        return [data]
+                except json.JSONDecodeError:
+                    continue
+
+        # 如果都解析失败,返回空列表
+        logger.warning(f"[grammar_check] 无法解析段响应为 JSON: {response[:100]}...")
+        return []
+
+    def _deduplicate_issues(self, issues: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+        """
+        对多个段落的审查结果进行去重
+
+        去重策略:
+        1. 提取每个 issue 的"修正目标"(suggestion 中"将X改为Y"的 X 和 Y)
+        2. 如果两个 issue 的修正目标完全相同,视为重复
+        3. 过滤掉 suggestion 为"无明显问题"或 risk_level 为空的条目
+
+        Args:
+            issues: 所有段落的 issue 列表
+
+        Returns:
+            List[Dict]: 去重后的 issue 列表
+        """
+        if not issues:
+            return []
+
+        unique_issues = []
+        seen_correction_keys = set()
+
+        for issue in issues:
+            if not isinstance(issue, dict):
+                continue
+
+            suggestion = issue.get("suggestion", "").strip()
+            risk_level = issue.get("risk_level", "").strip()
+
+            # 过滤无效条目
+            if not suggestion or suggestion in ["无明显问题", "无", "无问题"]:
+                continue
+            if not risk_level:
+                continue
+
+            # 提取修正目标作为去重键
+            correction_key = self._extract_correction_key(suggestion)
+
+            if correction_key in seen_correction_keys:
+                continue
+
+            seen_correction_keys.add(correction_key)
+            unique_issues.append(issue)
+
+        return unique_issues
+
+    @staticmethod
+    def _extract_correction_key(suggestion: str) -> str:
+        """
+        从 suggestion 中提取修正目标,用于去重比较。
+
+        策略:
+        - 提取所有"将X改为Y"模式中的 (X, Y) 对,排序后拼接为 key
+        - 如果没有匹配模式,使用 suggestion 本身作为 key
+
+        示例:
+        - "将'珩架梁'改为'桁架梁'" → "珩架梁→桁架梁"
+        - "将"走过档"改为"走过道";将"二台"改为"两台"" → "二台→两台,走过档→走过道"
+        """
+        # 匹配 "将'X'改为'Y'" 或 "将"X"改为"Y"" 或 "将X改为Y"
+        # 支持单引号、双引号、中文引号
+        quote_chars = "['\"“”『』]"
+        pattern = rf"将{quote_chars}(.*?){quote_chars}\s*改为\s*{quote_chars}(.*?){quote_chars}"
+        pairs = re.findall(pattern, suggestion)
+
+        if pairs:
+            # 排序后拼接,确保顺序无关的去重
+            sorted_pairs = sorted(pairs)
+            return ",".join(f"{a}→{b}" for a, b in sorted_pairs)
+
+        # 没有匹配到标准模式,使用 suggestion 本身
+        return suggestion
+
+
 # 全局单例实例
 grammar_check_reviewer = GrammarCheckReviewer()

+ 23 - 7
core/construction_review/component/reviewers/prompt/basic_reviewers.yaml

@@ -22,8 +22,12 @@ grammar_check:
     2. 如果出现了错字,大概率是因为拼音拼写错误导致的错字,请根据其相似读音推测正确的字,如果拿不准请不给出修改为xx的建议。
     3. 如”供气”错打为了”供器”,应当结合上下文推测”供qi”应该为是什么。
     4. 对于条款编号而言,'一)'这样的结构是正确的,符合中文规范
-    5. 所有建议都要基于审查内容给出忠实建议,禁止给出不符合逻辑的错误建议,如建议将A修改成A,例如:”将'确定的'改为'确定的'(原字为'确',应为'确')”,这种建议就是错误的
+    5. 如果你对某个词或表述犹豫不决、无法确定它是否真的是错误,说明原文可能是正确的,此时应直接输出”无明显问题”,而不是勉强凑出一个修改建议。
     6. 请对汉语中经典易错字如”辩”与”辨”等等的混用请多加注意。
+    7. **施工领域复合词误判警示**:施工方案中存在大量你不认识的专业复合词(如”挡防措施””锚喷支护””仰拱衬砌””湿喷工艺”等),这些词在通用词典中不存在,但在施工领域是标准术语。当你遇到一个你不认识的二字或多字组合时,请遵循以下判定流程:
+       - 第一步:该组合中的每个字是否能独立表意且在上下文中语义合理?(如”挡”=挡土/阻挡,”防”=防护/防御 → “挡防”=挡土防护)
+       - 第二步:该组合是否出现在施工/工程语境中?(如前后文有”安全网””衬砌””支护”等工程词汇)
+       - 如果以上两步均为”是”,则该组合极大概率是施工专业术语,**不得将其判为错别字**,直接跳过。
 
     ## rule
     - 不需要强求要输出问题,除非是非常明显的错误。小问题可以忽略。
@@ -38,11 +42,19 @@ grammar_check:
     - 遵循以下**强制**规范:
         1. 务必结合语境进行分析检查。
         2. 对于**表格制表符**、**表格内容**不需要检查。
-        3. 对于术语概念不得曲解。
+        3. 对于术语概念不得曲解。**施工方案中的任何你不认识的复合词(如"挡防""锚喷""仰拱"等),默认都是专业术语,不是错别字。** 禁止因为你没见过某个词就将其判定为错别字。
         4. 没有明显词句语法错误、标点错误的内容不予检查,输出无明显问题。
         5. 已检查出的问题项仅输出一次检查结果,禁止对同一内容重复检查。
         6. 统一解释:如果表格中出现了多列相同的表头标题,不是错误,而是解析时这几个是合并的表头。
-        7. 所有建议都要基于审查内容给出忠实建议,禁止给出不符合逻辑的错误建议,如建议将A修改成A,例如:将'若'改为'若'(应为'若'),这种建议就是错误的
+        7. suggestion 字段必须是简洁明确的最终结论,禁止在建议中包含推理过程或自我辩论。如果你对某个表述反复犹豫、自我反驳,说明原文没有问题,应输出”无明显问题”。
+        8. **输出前自检(强制执行)**:在输出 JSON 之前,逐条检查每个 issue:
+           - 如果某条的 reason 中出现了”可能””暂定””不确定””重新审视””然而””不过””似乎”等犹豫措辞,说明你不确定,**必须删除该条**
+           - 如果某条的 suggestion 中修改前后的文字相同或几乎相同,**必须删除该条**
+           - 如果某条的 suggestion 为”无明显问题”,**必须删除该条**(”无明显问题”不应作为 JSON issue 输出)
+           - 如果某条涉及技术操作规程的正确性(如操作步骤顺序、工艺参数选择),**必须删除该条**
+           - 如果多条 issue 指向同一个错误位置或同一个修改建议,**只保留一条,删除重复项**
+           - 如果删除后没有任何 issue 了,直接输出”无明显问题”
+        9. risk_level 字段必须填写(高风险/中风险/低风险),不得为空。如果你无法判定风险等级,说明该问题本身不确定,应删除该条。
 
     ## ⚠️ 严格禁止审查以下内容(与词句语法无关)
     **你只负责检查词句语法层面的问题**,以下类型的问题**一律跳过,不输出任何 issue**:
@@ -56,8 +68,10 @@ grammar_check:
     8. **业务逻辑问题**:如施工方案不合理、工艺流程错误
     9. **数据单位/格式**:如单位使用不当、数字格式问题
     10. **语义逻辑问题**:任何与语义、逻辑、事实相关的内容
+    11. **技术操作规程**:操作步骤的顺序是否正确、工艺参数是否合理、安全操作规范的技术正确性 —— 这些由专业技术审查流程处理,你只检查其中的文字书写错误(如错别字、漏字)
+
+    **你的职责范围仅限于**:错别字(如”混泥土”→”混凝土”)、多字/少字、重复字词(如”公司公司”)、标点符号错误、”的地得”混用、明显的语法结构错误。必须给出具体类别(如”错别字”)的修改建议,而不是笼统的说”有个错别字”,你需要指出哪个字是错别字,并给出正确的字是什么。
 
-    **你的职责范围仅限于**:错别字(如”混泥土”→”混凝土”)、多字/少字、重复字词(如”公司公司”)、标点符号错误、”的地得”混用、明显的语法结构错误。
     超出以上范围的所有问题,请忽略并输出”无明显问题”。
 
     ## output
@@ -87,10 +101,12 @@ grammar_check:
     - 数值计算错误、单位格式问题
     - 语义歧义、条件结论不匹配
     - 任何与逻辑、语义、事实相关的问题
+    - 技术操作规程的正确性(如操作步骤顺序、工艺参数选择)
 
     输出格式:务必须严格按照以下标准json格式输出审查结果
     如果未发现明显的词句语法错误,请输出:无明显问题。
-    **禁止**输出建议类似于"将'设'改为'设'(原字为'设',应为'设')",没有问题就是没有问题,不可造假,谢谢。
+    **关键原则**:宁可漏报,不可误报。如果你无法确定某处是否有错误,必须输出"无明显问题"。suggestion 字段只写最终结论(如"将'混泥土'改为'混凝土'"),禁止在字段内展开分析或自我辩论。
+    **输出前自检**:输出 JSON 前逐条检查——如果某条 reason 中有犹豫措辞("可能""暂定""不确定""重新审视"),或 suggestion 修改前后文字相同,必须删除该条。risk_level 必须填写,不得为空。
     如果发现问题,请按以下格式输出:
     location字段直接输出原字段内容,不得猜测。若有多个错误,请写到同一个以下json对象内,谢谢。
     ## 示例
@@ -150,8 +166,8 @@ semantic_logic_check:
     9. 禁止对所谓的”表述不恰当”、”表述过于严格”当做错误点,如你不能将”禁止夜间施工”改为”应在增加照明条件下允许夜间施工”这样的建议端上来
     10. **禁止审查过于专业的知识**,你只是审查通用的语义逻辑关系,而并非需要你根据你的知识去审查过多的部分如涉及到架桥参数、施工参数等等一些列的问题,这些问题有后续流程会处理,你暂且跳过
     11. **禁止对专业知识进行点评**,如技术参数、技术规范、技术条文,你对这方面知识还是较为落后的,你不需要对这方便进行涉猎
-    12. 所有建议都要基于审查内容给出忠实建议,禁止给出不符合逻辑的错误建议,如建议将A修改成A,例如:”将'确定的'改为'确定的'(原字为'确',应为'确')”,这种建议就是错误的
-    13. **禁止回复**如A修改为A这种假回答,文段没有问题必须直接输出:无明显问题
+    12. suggestion 字段必须是简洁明确的最终结论,禁止在建议中包含推理过程或自我辩论。如果你对某个表述反复犹豫、自我反驳,说明原文没有问题,应输出”无明显问题”。
+    13. 文段没有问题必须直接输出:无明显问题。宁可漏报,不可勉强凑出一个不确定的修改建议。
     14. **禁止审查词句语法问题**:错别字、多字、少字、重复字词、标点符号错误、”的地得”混用、语法结构等,这些问题由词句语法审查模块负责,不属于你的职责范围
     15. **禁止审查敏感词问题**:政治敏感、商业机密、表述适宜性等,这些问题由敏感词审查模块负责,不属于你的职责范围
 

+ 95 - 52
core/construction_review/component/reviewers/prompt/query_extract.yaml

@@ -1,87 +1,130 @@
-query_extract:
+# 审查要点提取 — RAG 检索查询生成
+# 从施工方案文本中提取需要用规范条文验证的审查要点
+
+review_point_extract:
   system: |
     # 角色
     你是一个**交通路桥工程领域的施工方案审查专家**。
-    你的目标是:从文本中提取**最具检索区分度**的工程概念,用于构建高精度的数据库查询索引
+    你的目标是:从施工方案文本中提取**需要用规范条文验证的审查要点**,用于高精度检索国标/行标/地标文档
 
     # 任务
-    将非结构化的施工文本,拆解为标准化的【原子实体】、【扩展检索词】、【作业背景】与【技术参数】
+    将非结构化的施工方案文本,拆解为若干个【审查要点】。每个审查要点代表一个需要用规范条文来验证合规性的技术主张
 
     # 核心定义(严格执行)
-    1. **entity (原子实体)**: 
-       - 定义:文本中最核心的**具体工程对象**(特定的结构物、特定的机械、特定的工艺、特定的材料类型)。
-       - **🚀 关键约束(具象优先)**:
-         - ❌ **严禁提取通用泛化名词**:绝对不要提取 "材料"、"设备"、"机械"、"人员"、"措施"、"方案"、"工具"、"环境" 等抽象词汇。
-         - ✅ **必须提取具体下位词**:
-           - 遇到 "材料" -> 提取具体材料名(如 "扣件"、"钢丝绳"、"C35混凝土");若文中未提及具体材料名但提及了所属结构,则提取所属结构(如 "大型临时设施")。
-           - 遇到 "设备" -> 提取具体机型(如 "汽车吊"、"架桥机")。
-           - 遇到 "部位" -> 提取具体位置(如 "基坑"、"边坡"、"盖梁")。
-       - **原子化约束**:保持词汇独立,不包含长修饰语(如提取 "钢筋笼" 而非 "桩基钢筋笼")。
-    
-    2. **search_keywords (扩展检索词)**: 
-       - 定义:将 entity 翻译为 **国标规范/通用术语** 或 **紧密关联词**。
-       - 作用:消除口语与书面语的差异。
-       - 示例: entity="便桥" -> keywords=["钢便桥", "临时桥梁", "施工通道"]
-    
-    3. **background (作业背景)**: 
-       - 定义:描述实体的 **施工部位**、**地质环境**、**作业动作**、**工况条件** 或 **时间阶段**。
-       - 作用:提供语境,过滤无关文档。
-    
-    4. **parameter (参数)**: 
-       - 定义:具体的数值指标、型号规格、物理性能要求、验收频率或标准。
+
+    1. **label (审查要点标签)**:
+       - 定义:对该审查要点的简短命名(8字以内),概括核心技术主题。
+       - 示例:"深基坑变形监测"、"架桥机轨道安装偏差"、"混凝土浇筑温度控制"
+
+    2. **search_queries (规范检索语句)**:
+       - 定义:以**规范条文的表述方式**构造的检索语句,模拟国标/行标中的条文标题或条款内容。
+       - **关键约束**:
+         - 使用规范术语:"应"、"不得"、"允许偏差"、"检验频率"、"安全系数"、"限值"、"要求"
+         - 包含具体的技术对象和参数维度
+         - 不要使用口语化表述
+         - 不要猜测规范中不存在的术语
+       - 数量:每个审查要点 **2个** 检索语句(视复杂度可1-3个)
+       - 示例:
+         - "基坑变形监测精度等级及观测频率要求"
+         - "架桥机轨道安装允许偏差及检验方法"
+
+    3. **original_text (原文摘录)**:
+       - 定义:从源文本中**逐字摘录**触发该审查要点的原始语句或段落。
+       - **关键约束**:
+         - 必须是原文的精确摘录,不得改写、概括或推断
+         - 保留原始数值、条件、限定语
+         - 长度50-300字,涵盖完整的技术描述
+       - 作用:作为语义锚点,确保检索结果与施工文本的实际语境对齐
+
+    4. **parameter (技术参数)**:
+       - 定义:该审查要点涉及的具体数值指标、型号规格、频率要求或验收标准。
+       - 如果原文未提及具体参数,填写"未明确"。
+
+    # 提取策略
+    - 根据文本信息密度,提取 **1到5个** 审查要点
+    - 优先提取:高风险作业(深基坑、高空、起重吊装)、关键受力构件、强制性条文相关
+    - 忽略:无实质工程内容的管理性描述、客套话、纯叙述性文字
+    - 每个审查要点必须能独立对应到具体的规范条文
 
     # 限制
-    - 忽略无实质工程内容的客套话。
-    - 仅输出 JSON 字符串,且使用```json``` 包装。
-    - background 尽量提取完整,避免信息丢失。
-    - background 务必忠实与原文,不得胡编乱造,且提取完整
-    - 务必遵循<任务> 中的提取数量要求。
+    - 仅输出 JSON 字符串,使用```json``` 包装
+    - original_text 必须忠实于原文,严禁编造
+    - search_queries 必须使用规范条文的表述风格
+    - 忽略无实质工程内容的客套话
 
   user_template: |
     ## 任务
-    从文本中提取 **3个** 最关键的实体对象。视信息密度而定,优先关注**高风险工程部位**(如基坑、支架)和**核心受力构件**。
+    从以下施工方案文本中提取审查要点。根据信息密度提取 1-5 个要点,优先关注高风险工程和核心技术参数
 
-    ## 示例 1 (避免泛化词提取)
-    文本: "大型临时设施选用的原材料、构件、扣件和其他重要受力的辅助材料进行质量验收。严禁使用不合格材料。"
+    ## 示例 1(多要点提取)
+    文本: "深度大于5m的基坑开挖期间,应设置变形监测点,监测精度不低于三等水准,监测频率不少于2次/天。基坑周边1.5倍开挖深度范围内的建(构)筑物应进行安全评估。"
     ### 分析过程:
-    - "原材料"、"材料" -> 太泛化,**丢弃**。
-    - "扣件" -> 具体材料,**保留**。
-    - "大型临时设施" -> 核心工程对象,**保留**。
+    - 文本包含两个独立的技术要求:变形监测 和 周边建筑安全评估
+    - 两者需要不同的规范条文来验证
     ### 输出:
     ```json
     [
       {{
-        "entity": "大型临时设施",
-        "search_keywords": ["临时结构物", "施工临建", "临时工程"],
-        "background": "原材料及构件质量验收阶段",
-        "parameter": "需进行试验验证,严禁使用不合格材料"
+        "label": "基坑变形监测",
+        "search_queries": [
+          "基坑变形监测精度等级及观测频率要求",
+          "深基坑监测点位布置及中误差限值"
+        ],
+        "original_text": "深度大于5m的基坑开挖期间,应设置变形监测点,监测精度不低于三等水准,监测频率不少于2次/天",
+        "parameter": "监测精度≥三等水准,频率≥2次/天"
       }},
       {{
-        "entity": "扣件",
-        "search_keywords": ["钢管脚手架扣件", "连接件", "紧固件"],
-        "background": "大型临时设施受力辅助材料",
-        "parameter": "需取样送检"
+        "label": "基坑周边安全评估",
+        "search_queries": [
+          "基坑开挖影响范围内建构筑物安全评估要求",
+          "基坑周边建筑物安全距离及保护措施"
+        ],
+        "original_text": "基坑周边1.5倍开挖深度范围内的建(构)筑物应进行安全评估",
+        "parameter": "影响范围=1.5倍开挖深度"
+      }}
+    ]
+    ```
+
+    ## 示例 2(单要点提取——信息密度低)
+    文本: "架桥机安装前,应对设备散件进行全面检查、清理,如发现有损伤、腐蚀或其它缺陷,应在安装前予以处理,合格后方可安装。"
+    ### 分析过程:
+    - 文本只描述了一个技术要求:安装前设备检查
+    - 信息密度较低,只需1个审查要点
+    ### 输出:
+    ```json
+    [
+      {{
+        "label": "架桥机安装前检查",
+        "search_queries": [
+          "架桥机安装前设备构件检查验收要求",
+          "起重设备安装前零部件质量检验标准"
+        ],
+        "original_text": "架桥机安装前,应对设备散件进行全面检查、清理,如发现有损伤、腐蚀或其它缺陷,应在安装前予以处理,合格后方可安装",
+        "parameter": "未明确"
       }}
     ]
     ```
 
-    ## 示例 2 (提取隐性核心实体)
-    文本: "深度大于3m的基坑开挖、有地下水侵扰的基坑清底封底,每个工作班至少巡查两遍。"
+    ## 示例 3(高密度文本——含多个独立技术参数)
+    文本: "轨道安装的允许偏差:轨道实际中心线对设计中心线位置偏移允许偏差为3毫米;轨距允许偏差为±5毫米;轨道纵向不平度应小于1/1500且全行程不超过10毫米;同一断面两轨道标高相对偏差不超过5毫米。"
     ### 分析过程:
-    - 核心对象是 "基坑"(特指深基坑)。
-    - 这是一个具体的工程部位,具有高检索价值。
+    - 文本围绕"轨道安装允许偏差"这一主题
+    - 虽然包含多个具体数值,但它们属于同一技术规范范畴
+    - 合并为一个审查要点,将所有参数整合
     ### 输出:
     ```json
     [
       {{
-        "entity": "基坑",
-        "search_keywords": ["深基坑", "沟槽", "土方开挖"],
-        "background": "深度>3m的开挖作业,或有地下水侵扰的清底封底阶段",
-        "parameter": "深度>3m,巡查频次≥2次/班"
+        "label": "架桥机轨道安装偏差",
+        "search_queries": [
+          "架桥机运梁轨道安装允许偏差及检验标准",
+          "起重机轨道中心线偏移轨距及平整度限值"
+        ],
+        "original_text": "轨道安装的允许偏差:轨道实际中心线对设计中心线位置偏移允许偏差为3毫米;轨距允许偏差为±5毫米;轨道纵向不平度应小于1/1500且全行程不超过10毫米;同一断面两轨道标高相对偏差不超过5毫米",
+        "parameter": "中心线偏移≤3mm,轨距偏差±5mm,纵向不平度<1/1500且≤10mm,标高偏差≤5mm"
       }}
     ]
     ```
 
     ## 待处理文本块
     {{review_content}}
-    

+ 36 - 17
core/construction_review/component/reviewers/prompt/technical_reviewers.yaml

@@ -7,8 +7,17 @@ non_parameter_compliance_check:
 
   user_prompt_template: |
     ## 审查规则
-    1. **核心原则**:仅基于【参考依据】进行审查,若参考依据无法回答待审查问题或相关性过低,必须输出"无明显问题"
-    2. **审查重点**:检查安全相关非参数性条文、安全防护措施、安全风险评估、安全管理要求
+    1. **审查原则**:
+       你的任务是参照【参考依据】中的技术要求,审查【待审查问题】中的施工方案内容是否符合这些要求。
+       - 即使【参考依据】来自相近领域(如公路/铁路/桥梁/市政等基础设施建设标准),其中的安全技术要求、管理措施、操作规程等仍具有参考价值,应重点审查其中与【待审查问题】相关的条款
+       - 从【参考依据】中提取与【待审查问题】直接相关的技术要求,逐条比对施工方案是否满足这些要求
+       - 只有当【参考依据】为空、内容过短(少于2句话)、或确实完全不涉及施工方案安全/质量/管理相关内容时,才输出"无明显问题"
+    2. **审查重点**:
+       - 安全防护措施是否完整、是否符合参考依据中的安全规定
+       - 安全管理要求是否到位、是否遗漏关键的安全程序
+       - 安全风险评估是否充分
+       - 施工方案中的操作流程是否符合参考依据中的操作规程
+       - 是否存在参考依据中明确禁止或限制的做法
     3. **禁止事项**:
        - 禁止编造审查依据或引用【参考依据】以外的信息
        - 禁止对表格制表符进行检查
@@ -25,18 +34,19 @@ non_parameter_compliance_check:
     ## 待审查问题
     {review_content}
 
-    ## 输出结构
-    - 如果【参考依据】无法回答【待审查问题】或相关性过低,输出:无明显问题
-    - 如果发现问题,严格按以下JSON格式输出(location字段直接输出原文,不得猜测):
+    ## 输出要求
+    请仔细从【参考依据】中找出与【待审查问题】相关的技术要求,对比施工方案内容是否满足。
+    - 如果发现不符合或遗漏,严格按以下JSON格式输出(location字段直接输出原文,不得猜测):
     ```json
     {{
       "issue_point": "问题标题描述",
-      "location": "当前问题对应的原始条款内容及位置,如六、验收标准 (页码: 85),以及其语境上下文",
+      "location": "当前问题对应的原始施工方案内容及位置,以及参考依据中对应的条款",
       "suggestion": "具体的修改建议内容",
-      "reason": "问题的原因分析和依据说明",
+      "reason": "问题的原因分析和依据说明,引用参考依据中的具体条款",
       "risk_level": "高风险/中风险/低风险"
     }}
     ```
+    - 如果审查后确实没有发现问题,输出:无明显问题
 
 
 # 参数合规性检查功能 - 审查 实体概念/工程术语相关知识库
@@ -46,14 +56,22 @@ parameter_compliance_check:
 
   user_prompt_template: |
     ## 审查规则
-    1. **核心原则**:仅基于【参考依据】进行审查,若参考依据无法回答待审查问题或相关性过低,必须输出"无明显问题"
-    2. **审查重点**:检查技术参数的准确性和合理性、实体概念和工程术语的参数正确性、设计值与标准的符合性
+    1. **审查原则**:
+       你的任务是参照【参考依据】中的技术参数和标准,审查【待审查问题】中的施工方案内容是否准确、合理。
+       - 即使【参考依据】来自相近领域(如公路/铁路/桥梁/市政等基础设施建设标准),其中的技术参数、设计值、验收标准等仍具有参考价值
+       - 重点检查:施工方案中的技术参数是否与参考依据一致,是否存在参数错误、单位错误、数值偏差等问题
+       - 只有当【参考依据】为空、内容过短(少于2句话)、或确实完全不包含任何可比较的技术参数时,才输出"无明显问题"
+    2. **审查重点**:
+       - 技术参数的准确性和合理性(数值、单位、范围)
+       - 实体概念和工程术语的使用是否正确
+       - 设计值与参考标准的符合性
+       - 施工方案中引用的标准参数是否过时或错误
+       - 计算公式和计算结果是否正确
     3. **禁止事项**:
        - 禁止编造审查依据或引用【参考依据】以外的信息
        - 禁止对表格制表符进行检查
        - 禁止曲解术语概念
        - 禁止对同一内容重复检查
-       - 禁止检查无明显参数问题的内容
     4. **风险分级**:
        - 高风险:影响审查结论、可能导致法律问题或严重安全隐患
        - 中风险:影响专业表达、可能导致理解偏差或一般性问题
@@ -65,15 +83,16 @@ parameter_compliance_check:
     ## 待审查问题
     {review_content}
 
-    ## 输出结构
-    - 如果【参考依据】无法回答【待审查问题】或相关性过低,输出:无明显问题
-    - 如果发现问题,严格按以下JSON格式输出(location字段直接输出原文,不得猜测):
+    ## 输出要求
+    请仔细从【参考依据】中找出与【待审查问题】相关的技术参数和标准,对比施工方案内容是否准确。
+    - 如果发现参数错误或不一致,严格按以下JSON格式输出(location字段直接输出原文,不得猜测):
     ```json
     {{
       "issue_point": "问题标题描述",
-      "location": "当前问题对应的原始条款内容及位置,如六、验收标准 (页码: 85),以及其语境上下文",
-      "suggestion": "具体的修改建议内容",
-      "reason": "问题的原因分析和依据说明",
+      "location": "当前问题对应的原始施工方案内容及位置,以及参考依据中对应的参数标准",
+      "suggestion": "具体的修改建议内容,给出正确参数",
+      "reason": "问题的原因分析和依据说明,引用参考依据中的具体参数",
       "risk_level": "高风险/中风险/低风险"
     }}
-    ```
+    ```
+    - 如果审查后确实没有发现参数问题,输出:无明显问题

+ 0 - 47
core/construction_review/component/reviewers/sensitive_words/色情词库.txt

@@ -25,14 +25,12 @@
 操我
 厕奴
 插比
-插b
 插逼
 插你
 插我
 插阴
 潮吹
 潮喷
-成人dv
 成人电影
 成人论坛
 成人小说
@@ -55,9 +53,6 @@
 成人游戏
 吃精
 赤裸
-抽插
-扌由插
-抽一插
 春药
 大波
 大力抽送
@@ -125,7 +120,6 @@
 铃木麻
 凌辱
 漏乳
-露b
 乱交
 乱伦
 轮暴
@@ -162,7 +156,6 @@
 屁眼
 品香堂
 前凸后翘
-强jian
 强奸处女
 情趣用品
 情色
@@ -203,7 +196,6 @@
 色情网站
 色诱
 色欲
-色b
 少年阿宾
 射爽
 射颜
@@ -242,7 +234,6 @@
 小逼
 校鸡
 小穴
-小xue
 写真
 性感妖娆
 性感诱惑
@@ -304,7 +295,6 @@
 淫样
 淫液
 淫照
-阴b
 幼交
 幼男
 幼女
@@ -326,7 +316,6 @@
 作爱
 18禁
 a片
-fuck
 gay片
 g点
 g片
@@ -336,8 +325,6 @@ sm女王
 xing伴侣
 yin荡
 贱人
-装b
-大sb
 傻逼
 傻b
 煞逼
@@ -390,9 +377,6 @@ cao你
 全家死绝
 白痴
 无耻
-sb
-杀b
-你吗b
 你妈的
 婊子
 贱货
@@ -416,7 +400,6 @@ sb
 屁股
 下体
-a片sss
 内裤
 咪咪
 白嫩
@@ -424,7 +407,6 @@ a片sss
 兽性
 风骚
 呻吟
-sm
 阉割
 一丝不挂
 脱光
@@ -556,7 +538,6 @@ sm
 操我
 厕奴
 插比
-插b
 插逼
 插你
 插我
@@ -573,9 +554,6 @@ sm
 成人游戏
 吃精
 赤裸
-抽插
-扌由插
-抽一插
 春药
 大波
 大乳
@@ -595,7 +573,6 @@ sm
 肛门
 龟头
 裹本
-国产av
 好嫩
 豪乳
 黑逼
@@ -645,7 +622,6 @@ sm
 铃木麻
 凌辱
 漏乳
-露b
 乱交
 乱伦
 轮暴
@@ -682,7 +658,6 @@ sm
 屁眼
 品香堂
 前凸后翘
-强jian
 强奸处女
 情趣用品
 情色
@@ -759,12 +734,10 @@ sm
 舞女
 无修正
 吸精
-夏川纯
 相奸
 小逼
 校鸡
 小穴
-小xue
 写真
 性感妖娆
 性感诱惑
@@ -826,7 +799,6 @@ sm
 淫样
 淫液
 淫照
-阴b
 幼交
 幼男
 幼女
@@ -839,7 +811,6 @@ sm
 玉穴
 原味内衣
 援助交际
-张筱雨
 招鸡
 招妓
 中年美妇
@@ -847,22 +818,4 @@ sm
 自拍
 自慰
 作爱
-18禁
-99bb
-a4u
-a4y
-adult
-amateur
-anal
-a片
-fuck
-gay片
-g点
-g片
-hardcore
-h动画
-h动漫
 
-sm女王
-xing伴侣
-yin荡

+ 8 - 7
core/construction_review/component/reviewers/timeliness_reviewer.py

@@ -529,14 +529,10 @@ class StandardTimelinessReviewer:
                 "check_item_code": check_item_code,
                 "check_result": {
                     "location": f"《{result.standard_name}》({result.standard_number})",
-                    "description": result.reason or result.final_result,
+                    "issue_point": result.issue_type or result.reason or result.final_result,
                     "suggestion": result.suggestion,
-                    "issue_type": result.issue_type,
-                    "standard_name": result.standard_name,
-                    "standard_number": result.standard_number,
-                    "replacement_name": result.replacement_name,
-                    "replacement_number": result.replacement_number,
-                    "mismatch_analysis": result.mismatch_analysis,
+                    "reason": result.reason or result.final_result,
+                    "risk_level": self._risk_level_to_chinese(result.risk_level),
                 },
                 "exist_issue": True,
                 "risk_info": {"risk_level": result.risk_level}
@@ -544,6 +540,11 @@ class StandardTimelinessReviewer:
 
         return standardized_results
 
+    @staticmethod
+    def _risk_level_to_chinese(level: str) -> str:
+        """将英文风险等级转换为中文,与其他审查器 check_result 格式对齐"""
+        return {"high": "高风险", "medium": "中风险", "low": "低风险"}.get(level, "中风险")
+
     def _normalize(self, text: str) -> str:
         """规范化文本用于比较"""
         if not text:

+ 37 - 4
core/construction_review/component/reviewers/utils/inter_tool.py

@@ -474,6 +474,15 @@ class InterTool:
                             logger.warning(f"第 {idx} 个问题格式不符合预期:{item}")
                             processed_issues.append(item)
 
+                    # 展平 check_result 内嵌套字段到顶层,避免前端读到 undefined 显示 unknown
+                    FLATTEN_FIELDS = ["location", "suggestion", "reason", "issue_point",
+                                      "review_references", "reference_source"]
+                    for flat_item in processed_issues:
+                        if isinstance(flat_item, dict) and isinstance(flat_item.get("check_result"), dict):
+                            for field in FLATTEN_FIELDS:
+                                if field in flat_item["check_result"] and field not in flat_item:
+                                    flat_item[field] = flat_item["check_result"][field]
+
                     # 计算风险等级并添加到review_lists
                     for processed_issue in processed_issues:
                         if isinstance(processed_issue, dict):
@@ -503,6 +512,13 @@ class InterTool:
                 logger.warning(f"检查项 {check_key} 格式不符合要求,缺少details或response字段")
                 logger.warning(f"check_result内容: {check_result}")
 
+        # 过滤掉 exist_issue=false 的审查项(无问题的项不返回到最终结果)
+        # 同时过滤掉 check_result 为字符串的项(解析失败的 malformed JSON)
+        review_lists = [
+            item for item in review_lists
+            if item.get("exist_issue", False) and not isinstance(item.get("check_result"), str)
+        ]
+
         # 统计风险等级
         for issue in review_lists:
             risk_level = issue.get("risk_info", {}).get("risk_level", "low")
@@ -578,19 +594,24 @@ class InterTool:
 
             # 3. 如果JSON解析失败,回退到文本解析
             if not review_lists:
-                # 🔧 修复:检查响应是否为空或只包含空白字符
                 response_stripped = response.strip() if isinstance(response, str) else ""
                 is_empty_response = not response_stripped or response_stripped in ["", "null", "None", "undefined"]
 
+                # 检测是否为格式错误的 JSON(包含 JSON 标记但解析失败)
+                # 这类情况不应作为有效 issue 输出
+                looks_like_broken_json = any(marker in response_stripped for marker in ['```json', '{', '[', '"issue_point"'])
+
                 risk_level = self._determine_risk_level(response)
 
-                # 如果响应为空,则设置 exist_issue=False
+                # 空响应或格式错误的 JSON → exist_issue=False(不输出到最终结果)
+                should_exist = not is_empty_response and not looks_like_broken_json
+
                 review_lists.append({
                     "check_item": check_name,
                     "chapter_code": chapter_code,
                     "check_item_code": check_item_code,
                     "check_result": response,
-                    "exist_issue": not is_empty_response,  # 🔧 修复:空响应不存在问题
+                    "exist_issue": should_exist,
                     "risk_info": {"risk_level": risk_level}
                 })
 
@@ -601,7 +622,7 @@ class InterTool:
                 "chapter_code": chapter_code,
                 "check_item_code": check_item_code,
                 "check_result": response,
-                "exist_issue": True,
+                "exist_issue": False,
                 "risk_info": {"risk_level": "low"}
             })
 
@@ -699,6 +720,18 @@ class InterTool:
         # 只有当内容不为空,且风险等级不是"无风险"类时,才认为存在问题
         exist_issue = not is_empty and original_risk_level not in ["无风险", "无", "通过", "符合要求"]
 
+        # 额外验证:dict 类型的 issue_data 必须至少包含一个有意义字段
+        # 防止空壳 dict(如 {"risk_level": "中风险"})通过过滤
+        if exist_issue and isinstance(issue_data, dict):
+            meaningful_fields = ["issue_point", "location", "suggestion"]
+            has_meaningful_content = any(
+                bool(issue_data.get(field, "").strip() if isinstance(issue_data.get(field), str) else issue_data.get(field))
+                for field in meaningful_fields
+            )
+            if not has_meaningful_content:
+                exist_issue = False
+                logger.debug(f"检查项 {check_name} 的 issue_data 缺少有意义字段 (issue_point/location/suggestion),设置 exist_issue=False")
+
         # 记录调试信息
         if is_empty:
             logger.debug(f"检查项 {check_name} 的 issue_data 为空,设置 exist_issue=False")

+ 7 - 5
core/construction_review/component/reviewers/utils/prompt_loader.py

@@ -74,7 +74,7 @@ class PromptLoader:
                 config_file = os.path.join(self.prompt_config_dir, "ai_suggestion.yaml")
             elif reviewer_type == 'outline':
                 config_file = os.path.join(self.prompt_config_dir, "catalog_reviewers.yaml")
-            elif reviewer_type == 'query_extract':
+            elif reviewer_type in ('query_extract', 'review_point_extract'):
                 config_file = os.path.join(self.prompt_config_dir, "query_extract.yaml")
             else:
                 config_file = os.path.join(self.prompt_config_dir, f"{reviewer_type}_reviewers.yaml")
@@ -112,7 +112,7 @@ class PromptLoader:
                 config_file = os.path.join(self.prompt_config_dir, "ai_suggestion.yaml")
             elif reviewer_type == 'outline':
                 config_file = os.path.join(self.prompt_config_dir, "catalog_reviewers.yaml")
-            elif reviewer_type == 'query_extract':
+            elif reviewer_type in ('query_extract', 'review_point_extract'):
                 config_file = os.path.join(self.prompt_config_dir, "query_extract.yaml")
             else:
                 config_file = os.path.join(self.prompt_config_dir, f"{reviewer_type}_reviewers.yaml")
@@ -128,7 +128,7 @@ class PromptLoader:
             prompt_config = config[prompt_name]
 
             # 处理 query_extract.yaml 的特殊格式
-            if reviewer_type == 'query_extract':
+            if reviewer_type in ('query_extract', 'review_point_extract'):
                 if 'system' in prompt_config and 'user_template' in prompt_config:
                     # 转换双花括号为单花括号,以便LangChain能够识别变量
                     user_template = prompt_config['user_template'].replace('{{review_content}}', '{review_content}')
@@ -137,7 +137,7 @@ class PromptLoader:
                         'user_prompt_template': user_template
                     }
                 else:
-                    raise ValueError(f"query_extract 配置缺少必要字段: {prompt_name}")
+                    raise ValueError(f"{reviewer_type} 配置缺少必要字段: {prompt_name}")
             else:
                 # 验证必要的字段
                 if 'system_prompt' not in prompt_config or 'user_prompt_template' not in prompt_config:
@@ -172,9 +172,11 @@ class PromptLoader:
         Returns:
             ChatPromptTemplate: LangChain ChatPromptTemplate实例
         """
-        # 特殊处理:对于query_extract类型,只有一个键
+        # 特殊处理:对于query_extract/review_point_extract类型,使用对应的prompt_name作为cache key
         if reviewer_type == "query_extract":
             cache_key = "query_extract_query_extract"
+        elif reviewer_type == "review_point_extract":
+            cache_key = "review_point_extract_review_point_extract"
         elif prompt_name is None:
             cache_key = f"{reviewer_type}"
         else:

+ 207 - 0
core/construction_review/component/reviewers/utils/text_preprocessor.py

@@ -0,0 +1,207 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+@Project   : lq-agent-api
+@File      : text_preprocessor.py
+@IDE       : Cursor
+@Author    : AI Assistant
+@Date      : 2026-05-27
+@Description: 审查文本预处理 — 合并 PDF 物理折行 + 异体字/形近字标准化,消除排版与输入法导致的审查误报
+"""
+
+import re
+
+# ============================================================================
+# 异体字 / 形近字标准化映射表
+# ============================================================================
+# 施工方案多由五笔输入法编写,字形相近的罕见异体字或形近字容易被误输入,
+# LLM(尤其是 qwen 系列)对这些罕见字符的 token 级识别能力弱,会将其误读为
+# 另一个形近字并编造错误理由。在文本进入审查流水线前做字符级标准化替换,
+# 从源头消除此类误报。
+#
+# 映射来源:
+#   1. 《第一批异体字整理表》中在现代文档中仍可能出现的异体字
+#   2. 五笔输入法形近字误输入(编码相近,候选窗中选错)
+#   3. 日语汉字变体(日文文献 OCR / 日文输入法混入)
+# ============================================================================
+
+_VARIANT_CHAR_MAP = {
+    # ── 山部异体 / 五笔形近 ──────────────────────────────
+    # 岀 (U+5C80) 是"出"的异体字,LLM(尤其是 qwen 系列)极易将其误读为"岌"
+    # 然后编造出"应为岌"的虚假审查理由。这是本映射表要解决的核心问题。
+    '岀': '出',
+    '峯': '峰',
+    '峩': '峨',
+
+    # ── 常用高频异体字(第一批异体字整理表)────────────────
+    '爲': '为',
+    '啓': '启',
+    '卽': '即',
+    '旣': '既',
+    '衞': '卫',
+    '眞': '真',
+    '衆': '众',
+    '竝': '并',
+    '並': '并',
+    '幷': '并',
+
+    # ── 五笔形近误输入(编码相近,候选窗中选错)───────────
+    '畧': '略',
+    '皁': '皂',
+    '牀': '床',
+    '觧': '解',
+    '舩': '船',
+    '袐': '秘',
+
+    # ── 传统 / 繁简对应(现代文档中不应出现但偶尔残留)─────
+    '靑': '青',
+    '隣': '邻',
+    '陞': '升',
+    '閙': '闹',
+    '滙': '汇',
+    '溼': '湿',
+    '洩': '泄',
+    '遊': '游',
+
+    # ── 施工文档场景常见的异体字 ──────────────────────────
+    '迺': '乃',
+    '逈': '迥',
+    '邨': '村',
+    '躰': '体',
+    '軆': '体',
+    '靁': '雷',
+    '麤': '粗',
+    '羣': '群',
+
+    # ── 日语汉字变体(日文输入法 / OCR 混入)──────────────
+    '黒': '黑',
+    '査': '查',
+    '汚': '污',
+    '涙': '泪',
+    '淸': '清',
+    '渕': '渊',
+    '弾': '弹',
+    '鶏': '鸡',
+    '鉱': '矿',
+
+    # ── 常见五笔末笔识别码错误(横竖撇捺差一笔)───────────
+    # 以下为极易混淆对,其中罕见字映射到常用字
+    '妺': '妹',  # 妺(mò, U+59BA) vs 妹(mèi, U+59B9), 五笔 VFY vs VFIY
+}
+
+
+
+def _build_variant_trans_table():
+    """构建 str.translate 用的字符映射表,过滤掉占位条目"""
+    return str.maketrans({k: v for k, v in _VARIANT_CHAR_MAP.items() if k != v})
+
+
+# 预编译转换表(模块加载时一次性构建)
+_VARIANT_TRANS_TABLE = _build_variant_trans_table()
+
+
+def normalize_variant_chars(text: str) -> str:
+    """
+    将文本中的异体字、形近字替换为标准常用字。
+
+    覆盖场景:
+    - 异体字(如 岀→出、峯→峰、啓→启)
+    - 五笔输入形近误输入(如 畧→略、皁→皂)
+    - 日语汉字变体(如 査→查、汚→污)
+
+    所有映射均为单字符→单字符,不改变文本长度和位置索引。
+    """
+    if not text:
+        return text
+    return text.translate(_VARIANT_TRANS_TABLE)
+
+
+# 句末标点:这些字符后的换行保留(段落/句子边界)
+_SENTENCE_END_RE = re.compile(r'[。!?]$')
+
+# 空行
+_BLANK_RE = re.compile(r'^\s*$')
+
+# 结构化编号:以这些模式开头的行保留换行(章节/条款/图表标题)
+_STRUCTURAL_START_PATTERNS = [
+    re.compile(r'^\d+\.\d'),                              # 4.9.2.、3.1.2
+    re.compile(r'^第[一二三四五六七八九十百千]+[、章节条]'),    # 第一章、第一节
+    re.compile(r'^[一二三四五六七八九十]+[、.]'),              # 一、二、三.
+    re.compile(r'^[((][一二三四五六七八九十\d]+[))]'),       # (1)、(2)、(一)
+    re.compile(r'^[((][a-zA-Z][))]'),                     # (a)、(b)
+    re.compile(r'^[①②③④⑤⑥⑦⑧⑨⑩]'),                       # ①②③...
+    re.compile(r'^图\s*\d'),                                # 图4.9.2-1
+    re.compile(r'^表\s*\d'),                                # 表3-1
+]
+
+
+def _is_structural_line(line: str) -> bool:
+    """判断是否为结构化行(章节标题、编号条款、图表标题等)"""
+    stripped = line.strip()
+    if not stripped:
+        return False
+    return any(p.match(stripped) for p in _STRUCTURAL_START_PATTERNS)
+
+
+def preprocess_review_text(text: str) -> str:
+    """
+    合并段落内的 PDF 物理折行,消除排版断行对 LLM 审查的干扰。
+
+    PDF 提取时,长句在行宽限制处被物理折行(如 "漆膜" 拆为 "漆\\n膜"),
+    这些换行在整个审查流水线中从未被处理,直接传入 LLM prompt,
+    导致审查器将排版断行误判为文字错误。
+
+    保留换行的条件(满足任一即保留):
+    - 当前行为空行(段落分隔)
+    - 上一行以句末标点(。!?)结尾(句子边界)
+    - 当前行以结构化编号开头(章节标题、条款编号、图表编号)
+
+    其余情况一律合并(去掉 \\n,直接拼接)。
+
+    附加处理:
+    - \\r\\n → \\n 统一换行符
+    - 连续 3+ 换行 → 2 换行
+    """
+    if not text:
+        return text
+
+    # 异体字/形近字标准化:在 PDF 换行合并前执行,
+    # 因为这些罕见字符可能导致后续 LLM 审查误判
+    text = normalize_variant_chars(text)
+
+    # 统一换行符
+    text = text.replace('\r\n', '\n').replace('\r', '\n')
+
+    # 压缩连续空行(3+ → 2)
+    text = re.sub(r'\n{3,}', '\n\n', text)
+
+    lines = text.split('\n')
+    if len(lines) <= 1:
+        return text
+
+    result = [lines[0]]
+    for line in lines[1:]:
+        prev = result[-1]
+
+        # 当前行为空行 → 保留(段落分隔)
+        if _BLANK_RE.match(line):
+            result.append(line)
+
+        # 上一行以句末标点结尾 → 保留(句子/段落边界)
+        elif _SENTENCE_END_RE.search(prev.rstrip()):
+            result.append(line)
+
+        # 上一行是结构化编号 → 保留(标题/图表后不合并正文)
+        elif _is_structural_line(prev.rstrip()):
+            result.append(line)
+
+        # 当前行是结构化编号 → 保留(章节/条款/图表标题)
+        elif _is_structural_line(line):
+            result.append(line)
+
+        # 其余:PDF 物理折行 → 合并
+        else:
+            result[-1] = prev + line
+
+    return '\n'.join(result)

+ 17 - 0
core/construction_review/workflows/ai_review_workflow.py

@@ -407,6 +407,23 @@ class AIReviewWorkflow:
                 completed_chunks += chunks_completed
 
             # ===== Phase 5: 结果汇总 =====
+            # 最终兜底过滤:移除 exist_issue=false 的审查项,确保无问题项不进入最终结果
+            # 同时过滤 check_result 为字符串的项(解析失败/异常兜底)
+            filtered_issues = []
+            for issue_wrapper in all_issues:
+                for issue_id, issue_detail in issue_wrapper.items():
+                    review_lists = issue_detail.get('review_lists', [])
+                    filtered_lists = [
+                        item for item in review_lists
+                        if item.get("exist_issue", False) and not isinstance(item.get("check_result"), str)
+                    ]
+                    if filtered_lists:
+                        issue_detail['review_lists'] = filtered_lists
+                        filtered_issues.append(issue_wrapper)
+            if len(filtered_issues) < len(all_issues):
+                logger.info(f"最终过滤: {len(all_issues)} → {len(filtered_issues)} 个issues (移除了 {len(all_issues) - len(filtered_issues)} 个无问题项)")
+            all_issues = filtered_issues
+
             summary = self.inter_tool._aggregate_results(all_issues)
 
             review_results = {

+ 54 - 4
core/construction_review/workflows/core_functions/ai_review_core_fun.py

@@ -381,10 +381,11 @@ class AIReviewCoreFun:
         if func_name == "grammar_check":
             raw_result = await method(trace_id, review_content, state, stage_name)
             # 基础审查方法,放入 basic_compliance
+            # 注意:前端传的配置键是 sensitive_word_check,basic_compliance 的 key 必须保持这个名称
             return UnitReviewResult(
                 unit_index=chunk_index,
                 unit_content=chunk,
-                basic_compliance={func_name: raw_result},
+                basic_compliance={"sensitive_word_check": raw_result},
                 technical_compliance={},
                 rag_enhanced={},
                 overall_risk=self._calculate_single_result_risk(raw_result),
@@ -617,17 +618,46 @@ class AIReviewCoreFun:
 
         logger.info(f"[{func_name}] 开始处理 {len(entity_results)} 个查询对的审查")
 
-        # 为每个查询对创建审查任务
+        # 质量门控常量
+        MIN_REFERENCE_LENGTH = 50
+        MIN_FINAL_SCORE = 0.5
+
+        # 为每个查询对创建审查任务(先过滤不合格的)
         review_tasks = []
+        skipped_entities = []
+
         for idx, entity_item in enumerate(entity_results):
             combined_query = entity_item.get('combined_query', '')
             entity = entity_item.get('entity', f'entity_{idx}')
             text_content = entity_item.get('text_content', '')
             file_name = entity_item.get('file_name', '')
+            final_score = entity_item.get('final_score', 0)
+
+            # ===== 质量门控 =====
+            if not text_content or len(text_content.strip()) < MIN_REFERENCE_LENGTH:
+                skip_reason = f"text_content过短(len={len(text_content.strip())})"
+                logger.warning(f"[{func_name}] 跳过查询对 {idx} ({entity}): {skip_reason}")
+                skipped_entities.append({'entity': entity, 'index': idx, 'reason': skip_reason})
+                continue
+
+            if not file_name or not file_name.strip():
+                skip_reason = "file_name为空"
+                logger.warning(f"[{func_name}] 跳过查询对 {idx} ({entity}): {skip_reason}")
+                skipped_entities.append({'entity': entity, 'index': idx, 'reason': skip_reason})
+                continue
 
-            logger.info(f"[{func_name}] 为查询对 {idx} ({entity}) 创建审查任务")
+            if final_score < MIN_FINAL_SCORE:
+                skip_reason = f"final_score={final_score:.4f}<{MIN_FINAL_SCORE}"
+                logger.warning(f"[{func_name}] 跳过查询对 {idx} ({entity}): {skip_reason}")
+                skipped_entities.append({'entity': entity, 'index': idx, 'reason': skip_reason})
+                continue
+
+            # ===== 通过门控,创建审查任务 =====
+            logger.info(
+                f"[{func_name}] 为查询对 {idx} ({entity}) 创建审查任务 "
+                f"(score={final_score:.4f}, ref_len={len(text_content)})"
+            )
 
-            # 创建审查任务
             task = asyncio.create_task(
                 method(
                     trace_id_idx=f"{trace_id}_entity_{idx}",
@@ -641,6 +671,25 @@ class AIReviewCoreFun:
             )
             review_tasks.append((idx, entity, task))
 
+        # 记录跳过统计
+        if skipped_entities:
+            logger.info(
+                f"[{func_name}] 质量门控: 跳过 {len(skipped_entities)}/{len(entity_results)} 个实体"
+            )
+
+        # 所有实体都被跳过 → 返回空结果(不触发LLM)
+        if not review_tasks:
+            logger.warning(
+                f"[{func_name}] 所有 {len(entity_results)} 个实体均未通过质量门控, 跳过审查"
+            )
+            return {
+                'review_mode': 'entity_based',
+                'func_name': func_name,
+                'total_entities': len(entity_results),
+                'skipped_entities': skipped_entities,
+                'entity_review_results': []
+            }
+
         # 并发执行所有查询对的审查任务
         results = []
         if review_tasks:
@@ -678,6 +727,7 @@ class AIReviewCoreFun:
             'review_mode': 'entity_based',
             'func_name': func_name,
             'total_entities': len(entity_results),
+            'skipped_entities': skipped_entities,
             'entity_review_results': results
         }
 

+ 86 - 82
foundation/ai/models/rerank_model.py

@@ -8,11 +8,15 @@
 支持的重排序模型:
 - BGE Reranker (本地部署)
 - Qwen3-Reranker-8B (本地部署)
+- Qwen3-Reranker-8B (蜀天算力)
 - Qwen3-Reranker-8B (硅基流动API)
+
+配置加载策略: 懒加载(首次调用时从 config.ini 读取该后端的凭证并缓存)
+路由决策: 由 retrieval.py 通过 model_setting.yaml 的 rerank 功能决定使用哪个后端
 """
 import json
 import requests
-from typing import List, Dict, Any
+from typing import List, Dict, Any, Optional
 from foundation.infrastructure.config.config import config_handler
 from foundation.observability.logger.loggering import review_logger as server_logger
 
@@ -20,67 +24,91 @@ from foundation.observability.logger.loggering import review_logger as server_lo
 class LqReranker:
     """
     重排序执行器
+
+    各后端配置按需加载:首次调用某后端时才从 config.ini 读取其凭证,
+    避免初始化时加载所有 4 个后端的配置。
     """
 
     def __init__(self):
-        # BGE Reranker 配置
-        self.bge_api_url = config_handler.get('bge_rerank_model', 'BGE_RERANKER_SERVER_URL')
-        self.bge_model = config_handler.get('bge_rerank_model', 'BGE_RERANKER_MODEL')
-        self.bge_top_k = int(config_handler.get('bge_rerank_model', 'BGE_RERANKER_TOP_N', 10))
-
-        # 本地Qwen3-Reranker-8B配置
-        self.lq_rerank_api_url = config_handler.get('lq_rerank_model', 'LQ_RERANKER_SERVER_URL')
-        self.lq_rerank_model = config_handler.get('lq_rerank_model', 'LQ_RERANKER_MODEL')
-        self.lq_rerank_top_k = int(config_handler.get('lq_rerank_model', 'LQ_RERANKER_TOP_N', 10))
-
-        # SHUTIAN Qwen3-Reranker-8B配置(蜀天云算力 25426端口)
-        self.shutian_rerank_api_url = config_handler.get('shutian', 'SHUTIAN_RERANK_SERVER_URL')
-        self.shutian_rerank_model = config_handler.get('shutian', 'SHUTIAN_RERANK_MODEL_ID')
-        self.shutian_rerank_api_key = config_handler.get('shutian', 'SHUTIAN_RERANK_API_KEY')
-
-        # 硅基流动Qwen3-Reranker-8B配置
-        self.silicoflow_rerank_api_url = config_handler.get('silicoflow_rerank_model', 'SILICOFLOW_RERANKER_API_URL', 'https://api.siliconflow.cn/v1/rerank')
-        self.silicoflow_rerank_api_key = config_handler.get('silicoflow_rerank_model', 'SILICOFLOW_RERANKER_API_KEY')
-        self.silicoflow_rerank_model = config_handler.get('silicoflow_rerank_model', 'SILICOFLOW_RERANKER_MODEL', 'Qwen/Qwen3-Reranker-8B')
-
-    def bge_rerank(self,query: str, candidates: List[str],top_k :int = None) -> List[Dict[str, Any]]:
+        # 各后端配置缓存(首次调用时加载)
+        self._bge_config: Optional[Dict[str, Any]] = None
+        self._lq_config: Optional[Dict[str, Any]] = None
+        self._shutian_config: Optional[Dict[str, Any]] = None
+        self._silicoflow_config: Optional[Dict[str, Any]] = None
+
+    def _get_bge_config(self) -> Dict[str, Any]:
+        """懒加载 BGE Reranker 配置"""
+        if self._bge_config is None:
+            self._bge_config = {
+                'api_url': config_handler.get('bge_rerank_model', 'BGE_RERANKER_SERVER_URL'),
+                'model': config_handler.get('bge_rerank_model', 'BGE_RERANKER_MODEL'),
+                'top_k': int(config_handler.get('bge_rerank_model', 'BGE_RERANKER_TOP_N', 10)),
+            }
+        return self._bge_config
+
+    def _get_lq_config(self) -> Dict[str, Any]:
+        """懒加载本地 Qwen3-Reranker 配置"""
+        if self._lq_config is None:
+            self._lq_config = {
+                'api_url': config_handler.get('lq_rerank_model', 'LQ_RERANKER_SERVER_URL'),
+                'model': config_handler.get('lq_rerank_model', 'LQ_RERANKER_MODEL'),
+                'top_k': int(config_handler.get('lq_rerank_model', 'LQ_RERANKER_TOP_N', 10)),
+            }
+        return self._lq_config
+
+    def _get_shutian_config(self) -> Dict[str, Any]:
+        """懒加载蜀天 Qwen3-Reranker 配置"""
+        if self._shutian_config is None:
+            self._shutian_config = {
+                'api_url': config_handler.get('shutian', 'SHUTIAN_RERANK_SERVER_URL'),
+                'model': config_handler.get('shutian', 'SHUTIAN_RERANK_MODEL_ID'),
+                'api_key': config_handler.get('shutian', 'SHUTIAN_RERANK_API_KEY'),
+            }
+        return self._shutian_config
+
+    def _get_silicoflow_config(self) -> Dict[str, Any]:
+        """懒加载硅基流动 Qwen3-Reranker 配置"""
+        if self._silicoflow_config is None:
+            self._silicoflow_config = {
+                'api_url': config_handler.get('silicoflow_rerank_model', 'SILICOFLOW_RERANKER_API_URL',
+                                              'https://api.siliconflow.cn/v1/rerank'),
+                'api_key': config_handler.get('silicoflow_rerank_model', 'SILICOFLOW_RERANKER_API_KEY'),
+                'model': config_handler.get('silicoflow_rerank_model', 'SILICOFLOW_RERANKER_MODEL',
+                                            'Qwen/Qwen3-Reranker-8B'),
+            }
+        return self._silicoflow_config
+
+    def bge_rerank(self, query: str, candidates: List[str], top_k: int = None) -> List[Dict[str, Any]]:
         """
-        执行重排序的全局函数
+        使用本地 BGE-reranker-v2-m3 进行重排序
 
         Args:
             query: 查询文本
             candidates: 候选文档列表
-            top_k: 调用时chaurnum参数,默认为None
-
+            top_k: 返回前k个结果,默认使用配置文件的top_k
 
         Returns:
             List[Dict]: 重排序后的结果列表
         """
         try:
-            # self.top_k 是config.ini生产环境中实际使用的重排序数量,bge_rerank中的top_k,用于开发环境中快速效果调试
-            if not top_k:# 如果开发top_k未指定,则使用配置文件中的top_k
-                top_k = self.bge_top_k
-            
+            cfg = self._get_bge_config()
+            if not top_k:
+                top_k = cfg['top_k']
 
             server_logger.info(f"开始执行重排序,查询: '{query}', 候选文档数量: {len(candidates)}")
 
-            # 构建重排序请求
             rerank_request = {
-                "model": self.bge_model,
+                "model": cfg['model'],
                 "query": query,
-                "candidates": candidates
+                "documents": candidates
             }
 
-            # 直接调用重排序API
-            url = self.bge_api_url
-            headers = {
-                "Content-Type": "application/json"
-            }
+            headers = {"Content-Type": "application/json"}
 
-            server_logger.debug(f"调用重排序API: {url}")
+            server_logger.debug(f"调用重排序API: {cfg['api_url']}")
             server_logger.debug(f"请求数据: {json.dumps(rerank_request, ensure_ascii=False)}")
 
-            response = requests.post(url, headers=headers, json=rerank_request, timeout=30)
+            response = requests.post(cfg['api_url'], headers=headers, json=rerank_request, timeout=30)
 
             if response.status_code == 200:
                 result = response.json()
@@ -97,7 +125,6 @@ class LqReranker:
 
         except Exception as e:
             server_logger.error(f"执行重排序失败: {str(e)}")
-            # 返回原始顺序作为fallback
             return [{"text": doc, "score": "0.0"} for doc in candidates[:top_k]]
 
     def lq_rerank(self, query: str, candidates: List[str], top_k: int = None) -> List[Dict[str, Any]]:
@@ -111,28 +138,19 @@ class LqReranker:
 
         Returns:
             List[Dict[str, Any]]: 重排序后的结果列表
-                [
-                    {
-                        "text": str,        # 文档文本内容
-                        "score": float,      # 相关性得分
-                        "index": int         # 原始索引
-                    },
-                    ...
-                ]
         """
         try:
+            cfg = self._get_lq_config()
             if not top_k:
-                top_k = self.lq_rerank_top_k
+                top_k = cfg['top_k']
 
-            # 检查query是否为空
             if not query or not query.strip():
                 server_logger.warning(f"本地Qwen3重排序跳过:query为空")
                 return [{"text": doc, "score": 0.0} for doc in candidates[:top_k]]
 
             server_logger.info(f"开始执行本地Qwen3重排序,查询: '{query}', 候选文档数量: {len(candidates)}")
 
-            # 定义变量(与测试脚本完全一致)
-            url = self.lq_rerank_api_url
+            url = cfg['api_url']
             prefix = '<|im_start|>system\nJudge whether the Document meets the requirements based on the Query and the Instruct provided. Note that the answer can only be "yes" or "no".<|im_end|>\n<|im_start|>user\n'
             suffix = "<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n"
 
@@ -146,31 +164,24 @@ class LqReranker:
             documents = [document_template.format(doc=doc, suffix=suffix) for doc in candidates]
 
             data = {
-                "model": self.lq_rerank_model,
+                "model": cfg['model'],
                 "query": query,
                 "documents": documents
             }
 
             headers = {"Content-Type": "application/json"}
 
-
             response = requests.post(url, headers=headers, json=data, timeout=30)
 
             if response.status_code == 200:
                 result = response.json()
-  
 
                 if "results" in result:
-                    # 格式化结果:将嵌套的 document.text 提取到外层,并清理模板标记
                     formatted_results = []
                     for item in result["results"]:
-                        # 获取包含模板的原始文本
                         raw_text = item.get("document", {}).get("text", "")
 
-                        # 清理模板标记:去除 <Document>: 和 <|im_end|>...assistant 之后的内容
-                        # 文本格式: <Document>: 原始内容<|im_end|>\n<|im_start|>assistant\n...
                         if "<Document>:" in raw_text:
-                            # 提取 <Document>: 和 <|im_end|> 之间的内容
                             start = raw_text.find("<Document>:") + len("<Document>:")
                             end = raw_text.find("<|im_end|>")
                             if end > start:
@@ -179,7 +190,7 @@ class LqReranker:
                                 cleaned_text = raw_text[start:].strip()
                         else:
                             cleaned_text = raw_text
-                    
+
                         formatted_results.append({
                             "text": cleaned_text,
                             "score": float(item.get("relevance_score", 0.0)),
@@ -205,8 +216,9 @@ class LqReranker:
         接口为标准 OpenAI 兼容 rerank API,无需模板包装,直接传原始 query/documents
         """
         try:
+            cfg = self._get_shutian_config()
             if not top_k:
-                top_k = self.lq_rerank_top_k
+                top_k = self._get_lq_config()['top_k']
 
             if not query or not query.strip():
                 server_logger.warning("SHUTIAN重排序跳过:query为空")
@@ -215,7 +227,7 @@ class LqReranker:
             server_logger.info(f"开始执行SHUTIAN Qwen3重排序,查询: '{query}', 候选文档数量: {len(candidates)}")
 
             data = {
-                "model": self.shutian_rerank_model,
+                "model": cfg['model'],
                 "query": query,
                 "documents": candidates,
                 "top_n": top_k
@@ -223,22 +235,20 @@ class LqReranker:
 
             headers = {
                 "Content-Type": "application/json",
-                "Authorization": f"Bearer {self.shutian_rerank_api_key}"
+                "Authorization": f"Bearer {cfg['api_key']}"
             }
 
-            response = requests.post(self.shutian_rerank_api_url, headers=headers, json=data, timeout=30)
+            response = requests.post(cfg['api_url'], headers=headers, json=data, timeout=30)
 
             if response.status_code == 200:
                 result = response.json()
 
-                # SHUTIAN API直接返回列表: [{"score": x, "document": "文本", "index": 0}, ...]
                 results_list = result.get("results", result) if isinstance(result, dict) else result
 
                 if isinstance(results_list, list) and results_list:
                     formatted_results = []
                     for item in results_list:
                         doc = item.get("document", "")
-                        # document 可能是字符串或 {"text": "..."} 对象
                         text = doc if isinstance(doc, str) else doc.get("text", "")
                         formatted_results.append({
                             "text": text,
@@ -266,45 +276,42 @@ class LqReranker:
         Args:
             query: 查询文本
             documents: 文档列表
-            top_k: 返回前k个结果,默认使用配置文件的top_k
+            top_k: 返回前k个结果,默认10
             instruction: 重排序指令
 
         Returns:
             List[Dict]: 重排序后的结果列表,包含 text 和 score
         """
         try:
+            cfg = self._get_silicoflow_config()
             if not top_k:
-                top_k = 10  # 默认值
+                top_k = 10
 
-            if not self.silicoflow_rerank_api_key:
+            if not cfg['api_key']:
                 server_logger.error("硅基流动 Reranker API Key 未配置")
                 return []
 
             server_logger.info(f"开始执行硅基流动Qwen3重排序,查询: '{query}', 文档数量: {len(documents)}")
 
-            
-            # 构建请求数据
             request_data = {
-                "model": self.silicoflow_rerank_model,
+                "model": cfg['model'],
                 "query": query,
                 "documents": documents,
                 "instruction": instruction,
                 "top_n": top_k,
                 "return_documents": True,
-                # "max_chunks_per_doc": 123,
-                # "overlap_tokens": 79
             }
 
             headers = {
-                "Authorization": f"Bearer {self.silicoflow_rerank_api_key}",
+                "Authorization": f"Bearer {cfg['api_key']}",
                 "Content-Type": "application/json"
             }
 
-            server_logger.debug(f"调用硅基流动Qwen3 Reranker API: {self.silicoflow_rerank_api_url}")
+            server_logger.debug(f"调用硅基流动Qwen3 Reranker API: {cfg['api_url']}")
             server_logger.debug(f"请求数据: {json.dumps(request_data, ensure_ascii=False)}")
 
             response = requests.post(
-                self.silicoflow_rerank_api_url,
+                cfg['api_url'],
                 headers=headers,
                 json=request_data,
                 timeout=30
@@ -315,7 +322,6 @@ class LqReranker:
                 server_logger.debug(f"硅基流动Qwen3 API响应: {json.dumps(result, ensure_ascii=False)}")
 
                 if "results" in result:
-                    # 格式化结果为统一格式
                     formatted_results = []
                     for item in result["results"]:
                         formatted_results.append({
@@ -334,9 +340,7 @@ class LqReranker:
 
         except Exception as e:
             server_logger.error(f"执行硅基流动Qwen3重排序失败: {str(e)}")
-            # 返回原始顺序作为fallback
             return [{"text": doc, "score": 0.0} for doc in documents[:top_k]]
 
-rerank_model = LqReranker()
-
 
+rerank_model = LqReranker()

+ 194 - 56
foundation/ai/rag/retrieval/entities_enhance.py

@@ -1,25 +1,50 @@
-import json
 import asyncio
 from foundation.observability.monitoring.time_statistics import track_execution_time
 from foundation.ai.rag.retrieval.retrieval import retrieval_manager
 from foundation.observability.logger.loggering import review_logger as server_logger
+from foundation.infrastructure.config.config import config_handler
 
 
+class ReviewPointRetriever():
+    """
+    审查要点检索器 — 直接从施工方案文本搜索规范条文
 
-class EntitiesEnhance():
+    替代旧的 EntitiesEnhance(实体增强检索),新流程:
+    1. 对每个 search_query → hybrid_search(CHILDREN_COLLECTION) → 一次重排序(rerank)
+    2. 合并所有 search_query 的候选结果并去重
+    3. 用 original_text 做二次重排序(语义锚点对齐)
+    4. 返回 top-K 结果
+
+    核心改进:
+    - 跳过 ENTITY_COLLECTION 中间跳,直接搜索规范条文集合
+    - 用原文摘录(而非 LLM 概括的 background)做二次重排序,语义更精确
+    """
 
     def __init__(self):
-        self.bfp_result_lists = []
-        self._entity_recall_cache = {}  # 实体检索结果缓存
-        self._bfp_recall_cache = {}     # BFP召回结果缓存
+        self.result_lists = []
+        self._search_cache = {}  # 检索结果缓存
+
+    def _get_cache_key(self, query: str) -> str:
+        return f"search::{query[:100]}"
 
-    def _get_cache_key(self, entity: str, search_keywords: list, background: str = "") -> str:
-        """生成缓存键"""
-        keywords_str = "|".join(sorted(search_keywords)) if search_keywords else ""
-        return f"{entity}::{keywords_str}::{background[:50]}"
+    def _get_children_collection(self) -> str:
+        return config_handler.get('rag_collections', 'CHILDREN_COLLECTION', 'rag_children_hybrid')
 
     @track_execution_time
-    def entities_enhance_retrieval(self, query_pairs):
+    def review_point_retrieval(self, review_points):
+        """
+        审查要点检索 — 替代 entities_enhance_retrieval
+
+        Args:
+            review_points: 审查要点列表, 每个要点包含:
+                - label: 标签
+                - search_queries: 规范检索语句列表
+                - original_text: 原文摘录
+                - parameter: 技术参数
+
+        Returns:
+            list[list[dict]]: 二维列表, 每个子列表对应一个审查要点的检索结果
+        """
         def run_async(coro):
             """在合适的环境中运行异步函数"""
             try:
@@ -31,56 +56,169 @@ class EntitiesEnhance():
             except RuntimeError:
                 return asyncio.run(coro)
 
-        # 清空之前的结果
-        self.bfp_result_lists = []
-
-        for query_pair in query_pairs:
-            entity = query_pair['entity']
-            search_keywords = query_pair['search_keywords']
-            background = query_pair['background']
-            server_logger.info(f"正在处理实体:{entity},辅助搜索词:{search_keywords},背景:{background}")
-
-            # 检查 entity_recall 缓存
-            recall_cache_key = self._get_cache_key(entity, search_keywords)
-            if recall_cache_key in self._entity_recall_cache:
-                entity_list = self._entity_recall_cache[recall_cache_key]
-                server_logger.info(f"[缓存命中] entity_recall: {entity}")
+        self.result_lists = []
+        children_collection = self._get_children_collection()
+
+        for point_idx, point in enumerate(review_points):
+            # 兼容新旧字段名
+            label = point.get('label', point.get('entity', ''))
+            search_queries = point.get('search_queries', point.get('search_keywords', []))
+            original_text = point.get('original_text', point.get('background', ''))
+
+            server_logger.info(
+                f"正在处理审查要点 [{point_idx}]: {label}, "
+                f"检索语句数: {len(search_queries)}, "
+                f"原文长度: {len(original_text)}"
+            )
+
+            # Step 1: 对每个 search_query 执行 hybrid_search + 一次重排序
+            all_candidates = []
+
+            for query in search_queries:
+                cache_key = self._get_cache_key(query)
+                if cache_key in self._search_cache:
+                    query_results = self._search_cache[cache_key]
+                    server_logger.info(f"[缓存命中] search_query: {query[:30]}...")
+                else:
+                    query_results = run_async(
+                        retrieval_manager.async_multi_stage_recall(
+                            collection_name=children_collection,
+                            query_text=query,
+                            hybrid_top_k=10,
+                            top_k=5
+                        )
+                    )
+                    self._search_cache[cache_key] = query_results
+                    server_logger.info(
+                        f"[检索完成] search_query: {query[:30]}... "
+                        f"召回 {len(query_results)} 个候选"
+                    )
+
+                all_candidates.extend(query_results)
+
+            if not all_candidates:
+                server_logger.warning(f"审查要点 '{label}' 所有检索语句均无结果")
+                self.result_lists.append([])
+                continue
+
+            # Step 2: 去重 (基于 text_content)
+            seen_texts = set()
+            unique_candidates = []
+            for item in all_candidates:
+                text = item.get('text_content', '')
+                if text and text not in seen_texts:
+                    seen_texts.add(text)
+                    unique_candidates.append(item)
+
+            server_logger.info(
+                f"审查要点 '{label}': 合并 {len(all_candidates)} 个候选, "
+                f"去重后 {len(unique_candidates)} 个"
+            )
+
+            # Step 3: 筛选高分候选 (rerank_score > 0.5)
+            high_score = [c for c in unique_candidates if (c.get('rerank_score') or 0) > 0.5]
+
+            if not high_score:
+                # 无高分候选 → 该审查要点无相关规范,直接跳过(不进入后续流程)
+                max_score = max((c.get('rerank_score') or 0) for c in unique_candidates) if unique_candidates else 0
+                server_logger.warning(
+                    f"审查要点 '{label}': 无高分候选(>0.5), 共 {len(unique_candidates)} 个候选均低于阈值, "
+                    f"最高分={max_score:.4f}, 跳过该审查要点"
+                )
+                self.result_lists.append([])
+                continue
+
+            # Step 4: 二次重排序 — 用 original_text 作为语义锚点
+            if original_text and len(original_text) > 10 and len(high_score) > 1:
+                final_results = self._secondary_rerank(original_text, high_score, top_k=5)
+                server_logger.info(
+                    f"审查要点 '{label}': 二次重排序完成, "
+                    f"返回 {len(final_results)} 个结果"
+                )
             else:
-                entity_list = run_async(retrieval_manager.entity_recall(
-                    entity,
-                    search_keywords,
-                    recall_top_k=5,      # 主实体返回数量
-                    max_results=5       # 最终最多返回5个实体文本
-                ))
-                self._entity_recall_cache[recall_cache_key] = entity_list
-                server_logger.info(f"[缓存存储] entity_recall: {entity}")
-
-            # 检查 bfp_recall 缓存
-            bfp_cache_key = self._get_cache_key(entity, search_keywords, background)
-            if bfp_cache_key in self._bfp_recall_cache:
-                bfp_result = self._bfp_recall_cache[bfp_cache_key]
-                server_logger.info(f"[缓存命中] bfp_recall: {entity}")
-            else:
-                # BFP背景增强召回
-                bfp_result = run_async(retrieval_manager.async_bfp_recall(entity_list, background, top_k=2))  # 降低到2,减少上下文量
-                self._bfp_recall_cache[bfp_cache_key] = bfp_result
-                server_logger.info(f"[缓存存储] bfp_recall: {entity}")
-
-            # 为每个结果添加实体信息
-            for result in bfp_result:
-                result['source_entity'] = entity
-
-            self.bfp_result_lists.append(bfp_result)
-
-        return self.bfp_result_lists
+                final_results = high_score[:5]
+                server_logger.info(
+                    f"审查要点 '{label}': 跳过二次重排序 "
+                    f"(原文长度={len(original_text)}, 候选数={len(high_score)})"
+                )
+
+            # Step 5: 标记来源信息 (backward compat)
+            for result in final_results:
+                result['source_entity'] = label
+
+            self.result_lists.append(final_results)
+
+        return self.result_lists
+
+    def _secondary_rerank(self, original_text, candidates, top_k=5):
+        """
+        二次重排序: 用 original_text(原文摘录)作为 query,对候选文档重排序
+
+        核心创新: 用施工原文(而非 entity description 或 LLM 概括的 background)做 rerank,
+        确保检索到的规范条文与施工文本的语义精确对齐
+        """
+        # 提取候选文本(去重)
+        candidate_texts = []
+        seen = set()
+        for item in candidates:
+            text = item.get('text_content', '')
+            if text and text not in seen:
+                seen.add(text)
+                candidate_texts.append(text)
+
+        if not candidate_texts:
+            return candidates[:top_k]
+
+        try:
+            rerank_results = retrieval_manager._get_rerank_results(
+                original_text, candidate_texts, top_k
+            )
+        except Exception as e:
+            server_logger.error(f"二次重排序失败: {e}")
+            return candidates[:top_k]
+
+        # 将 rerank 分数映射回原始结果
+        text_to_items = {}
+        for item in candidates:
+            text = item.get('text_content', '')
+            if text not in text_to_items:
+                text_to_items[text] = []
+            text_to_items[text].append(item)
+
+        final_results = []
+        added_texts = set()
+        for rerank_item in rerank_results:
+            text = rerank_item.get('text', '')
+            score = rerank_item.get('score', 0.0)
+
+            if text in text_to_items and text not in added_texts:
+                best_candidate = max(
+                    text_to_items[text],
+                    key=lambda x: x.get('rerank_score', 0.0)
+                )
+                result_item = best_candidate.copy()
+                result_item['bfp_rerank_score'] = score  # 二次重排序分数 (backward compat)
+                result_item['bfp_rerank_parent_id'] = result_item.get(
+                    'metadata', {}
+                ).get('parent_id', '')
+                final_results.append(result_item)
+                added_texts.add(text)
+
+        return final_results
 
     def clear_cache(self):
-        """清空缓存"""
-        self._entity_recall_cache.clear()
-        self._bfp_recall_cache.clear()
-        server_logger.info("[缓存清理] 实体检索缓存已清空")
+        """清空检索缓存"""
+        self._search_cache.clear()
+        server_logger.info("[缓存清理] 审查要点检索缓存已清空")
 
+    # 向后兼容:旧代码调用 entities_enhance_retrieval 时自动转发
+    def entities_enhance_retrieval(self, query_pairs):
+        """向后兼容入口,转发到 review_point_retrieval"""
+        return self.review_point_retrieval(query_pairs)
 
 
+# 全局实例 — 新名称
+review_point_retriever = ReviewPointRetriever()
 
-entity_enhance = EntitiesEnhance()
+# 向后兼容:旧代码 import entity_enhance 时不会报错
+entity_enhance = review_point_retriever

+ 63 - 73
foundation/ai/rag/retrieval/query_rewrite.py

@@ -1,17 +1,15 @@
 
 
 import uuid
-import asyncio
 from foundation.observability.logger.loggering import review_logger as server_logger
 from foundation.ai.agent.generate.model_generate import generate_model_client
 
 class QueryRewriteManager():
     """
-    召回管理器,实现多路召回功能
+    查询改写管理器 — 从施工方案文本中提取审查要点
     """
 
     def __init__(self):
-        # 获取部署的模型列表
         self.generate_model_client = generate_model_client
 
     @property
@@ -22,83 +20,92 @@ class QueryRewriteManager():
 
     def query_extract(self, review_content):
         """
-        从审查条文中提取query
+        从审查条文中提取审查要点 (review points)
 
         Args:
             review_content: 审查内容文本
 
         Returns:
-            list: 标准格式的查询列表
+            list: 审查要点列表
             [
                 {
-                    "entity": str,           # 实体名称
-                    "search_keywords": list, # 搜索关键词列表
-                    "background": str,       # 背景信息
-                    "parameter": str         # 技术参数
+                    "label": str,             # 审查要点标签
+                    "search_queries": list,    # 规范检索语句
+                    "original_text": str,      # 原文摘录
+                    "parameter": str,          # 技术参数
+                    # --- 向后兼容别名 (由 _add_backward_compat_aliases 自动添加) ---
+                    "entity": str,             # = label
+                    "search_keywords": list,   # = search_queries
+                    "background": str,         # = original_text
                 }
             ]
             或 None(提取失败时)
         """
         try:
-            # 获取提示词模板并组装
+            # 获取提示词模板并组装 — 优先使用新 key,回退到旧 key
             task_prompt = self.prompt_loader.get_prompt_template(
-                reviewer_type="query_extract",  # 审查器类型
-                review_content=review_content   # 传入审查内容作为参数
+                reviewer_type="review_point_extract",
+                prompt_name="review_point_extract",
+                review_content=review_content
             )
 
-            # 构建任务提示信息 - 参考标准模式
             task_prompt_info = {
-                "task_prompt": task_prompt,  # 使用组装好的提示词
-                "task_name": "query_extract"
+                "task_prompt": task_prompt,
+                "task_name": "review_point_extract"
             }
 
-            # 生成唯一的trace_id用于追踪
             trace_id = str(uuid.uuid4())
 
-            # 调用模型生成接口(处理异步调用)
-            try:
-                loop = asyncio.get_running_loop()
-                # 如果已有运行中的事件循环,使用create_task
-                import concurrent.futures
-                with concurrent.futures.ThreadPoolExecutor() as executor:
-                    future = executor.submit(
-                        asyncio.run,
-                        self.generate_model_client.get_model_generate_invoke(
-                            trace_id=trace_id,
-                            task_prompt_info=task_prompt_info,
-                            timeout=60,
-                            function_name="query_extract"
-                        )
-                    )
-                    model_response = future.result()
-            except RuntimeError:
-                # 没有运行中的事件循环,直接使用asyncio.run
-                model_response = asyncio.run(self.generate_model_client.get_model_generate_invoke(
-                    trace_id=trace_id,
-                    task_prompt_info=task_prompt_info,
-                    timeout=60,
-                    function_name="query_extract"
-                ))
+            # 调用模型 — function_name 对应 model_setting.yaml 中的配置
+            model_response = self.generate_model_client.get_model_generate_invoke_sync(
+                trace_id=trace_id,
+                task_prompt_info=task_prompt_info,
+                timeout=60,
+                function_name="review_point_extract"
+            )
 
             # 格式化模型响应
             formatted_response = self.ai_respose_format(model_response)
-            # 检查 formatted_response 是否为 None
-            if formatted_response is not None:
-                server_logger.info(f"查询对构建完成,构建 {len(formatted_response)}条。")
-            else:
-                server_logger.warning("查询对构建失败,formatted_response 为 None")
-            # 记录日志
+
             if formatted_response:
-                server_logger.info(f"Query 提取成功, 提取到 {len(formatted_response)} 个实体")
+                # 添加向后兼容字段别名
+                formatted_response = self._add_backward_compat_aliases(formatted_response)
+                server_logger.info(f"审查要点提取完成, 提取到 {len(formatted_response)} 个要点")
             else:
-                server_logger.warning(f"Query 提取失败, 格式化后为空")
+                server_logger.warning("审查要点提取失败, 格式化后为空")
 
             return formatted_response
 
         except Exception as e:
-            server_logger.error(f"Query 提取失败: {str(e)}")
+            server_logger.error(f"审查要点提取失败: {str(e)}")
             return None
-    
+
+    def _add_backward_compat_aliases(self, review_points):
+        """
+        为每个审查要点添加双向字段别名,确保新旧格式都能工作
+
+        新字段 → 旧字段: label→entity, search_queries→search_keywords, original_text→background
+        旧字段 → 新字段: entity→label, search_keywords→search_queries, background→original_text
+        """
+        for point in review_points:
+            # 新 → 旧(LLM 使用新格式时)
+            if 'label' in point and 'entity' not in point:
+                point['entity'] = point['label']
+            if 'search_queries' in point and 'search_keywords' not in point:
+                point['search_keywords'] = point['search_queries']
+            if 'original_text' in point and 'background' not in point:
+                point['background'] = point['original_text']
+
+            # 旧 → 新(LLM 使用旧格式时)
+            if 'entity' in point and 'label' not in point:
+                point['label'] = point['entity']
+            if 'search_keywords' in point and 'search_queries' not in point:
+                point['search_queries'] = point['search_keywords']
+            if 'background' in point and 'original_text' not in point:
+                point['original_text'] = point['background']
+
+        return review_points
+
     def ai_respose_format(self, model_response):
         """
         将模型返回的响应格式化为标准格式
@@ -107,16 +114,7 @@ class QueryRewriteManager():
             model_response: AI模型返回的原始响应(可能是字符串或已解析的JSON)
 
         Returns:
-            list: 标准格式的查询列表
-            [
-                {
-                    "entity": str,           # 实体名称
-                    "search_keywords": list, # 搜索关键词列表
-                    "background": str,       # 背景信息
-                    "parameter": str         # 技术参数
-                }
-            ]
-            或 None(解析失败时)
+            list: 标准格式的审查要点列表, 或 None(解析失败时)
         """
         import re
         import json
@@ -124,7 +122,7 @@ class QueryRewriteManager():
         try:
             # 1. 如果model_response已经是list,直接返回
             if isinstance(model_response, list):
-                server_logger.info(f"模型响应已是list格式, 包含 {len(model_response)} 个实体")
+                server_logger.info(f"模型响应已是list格式, 包含 {len(model_response)} 个要点")
                 return model_response
 
             # 2. 如果是dict,包装成list返回
@@ -135,37 +133,29 @@ class QueryRewriteManager():
             # 3. 如果是字符串,需要解析
             if isinstance(model_response, str):
                 response_text = model_response.strip()
-                server_logger.debug(f"原始响应字符串长度: {len(response_text)}")
 
                 # 3.1 尝试去除 ```json 和 ``` 标记
-                # 匹配 ```json ... ``` 或 ``` ... ```
                 json_pattern = r'```(?:json)?\s*\n?(.*?)\n?```'
                 json_match = re.search(json_pattern, response_text, re.DOTALL | re.IGNORECASE)
 
                 if json_match:
-                    # 提取代码块中的JSON内容
                     json_str = json_match.group(1).strip()
-                    server_logger.debug("检测到markdown代码块, 已提取纯JSON内容")
                 else:
-                    # 如果没有代码块标记,尝试直接解析整个字符串
                     json_str = response_text
-                    server_logger.debug("未检测到markdown代码块, 尝试直接解析")
 
                 # 3.2 去除可能的Markdown注释或多余空白
-                json_str = re.sub(r'\n+', '\n', json_str)  # 多个换行压缩为一个
+                json_str = re.sub(r'\n+', '\n', json_str)
                 json_str = json_str.strip()
 
-                server_logger.debug(f"待解析的JSON字符串: {json_str[:200]}...")
-
                 # 3.3 解析JSON
                 parsed_data = json.loads(json_str)
 
                 # 3.4 确保返回list格式
                 if isinstance(parsed_data, list):
-                    server_logger.info(f"JSON解析成功, 提取到 {len(parsed_data)} 个实体")
+                    server_logger.info(f"JSON解析成功, 提取到 {len(parsed_data)} 个审查要点")
                     return parsed_data
                 elif isinstance(parsed_data, dict):
-                    server_logger.info("JSON解析成功, 单个实体包装为list")
+                    server_logger.info("JSON解析成功, 单个要点包装为list")
                     return [parsed_data]
 
                 server_logger.warning(f"无法识别的JSON格式: {type(parsed_data)}")
@@ -184,4 +174,4 @@ class QueryRewriteManager():
             return None
 
 
-query_rewrite_manager = QueryRewriteManager()
+query_rewrite_manager = QueryRewriteManager()

+ 34 - 22
foundation/ai/rag/retrieval/retrieval.py

@@ -272,11 +272,11 @@ class RetrievalManager:
         self.logger.info(f"[async_bfp_recall] 第一阶段召回完成, 共召回 {len(bfp_results)} 个文档")
 
         # BFP召回结果已经通过multi_stage_recall进行了重排序,保持原有顺序
-        # 只对第一次重排序得分大于0.8的文档进行二次重排序
-        high_score_results = [item for item in bfp_results if (item.get('rerank_score') or 0) > 0.8]
-        low_score_results = [item for item in bfp_results if (item.get('rerank_score') or 0) <= 0.8]
+        # 只对第一次重排序得分大于0.6的文档进行二次重排序
+        high_score_results = [item for item in bfp_results if (item.get('rerank_score') or 0) > 0.6]
+        low_score_results = [item for item in bfp_results if (item.get('rerank_score') or 0) <= 0.6]
 
-        self.logger.info(f"筛选结果:高分文档(>0.8) {len(high_score_results)} 个,低分文档(≤0.8) {len(low_score_results)} 个")
+        self.logger.info(f"筛选结果:高分文档(>0.6) {len(high_score_results)} 个,低分文档(≤0.6) {len(low_score_results)} 个")
 
         # 如果没有高分文档,直接返回top_k个结果(按hybrid_similarity排序)
         if not high_score_results:
@@ -567,17 +567,23 @@ class RetrievalManager:
                 duplicate_count = rerank_result.get('duplicate_count', 1)
 
                 # 如果内层有metadata字段,将其提取到外层
-                if 'metadata' in metadata and isinstance(metadata['metadata'], str):
-                    import json
-                    try:
-                        # 解析JSON格式的metadata
-                        inner_metadata = json.loads(metadata['metadata'])
+                if 'metadata' in metadata:
+                    inner_raw = metadata['metadata']
+                    inner_metadata = None
+
+                    if isinstance(inner_raw, dict):
+                        # Milvus JSON 字段直接返回 dict
+                        inner_metadata = inner_raw
+                    elif isinstance(inner_raw, str):
+                        import json
+                        try:
+                            inner_metadata = json.loads(inner_raw)
+                        except (json.JSONDecodeError, TypeError):
+                            pass
+
+                    if inner_metadata and isinstance(inner_metadata, dict):
                         metadata.update(inner_metadata)
-                        # 移除内层的metadata字符串,避免重复
                         del metadata['metadata']
-                    except (json.JSONDecodeError, TypeError):
-                        # 如果解析失败,保持原样
-                        pass
 
                 # 移除重复的content字段
                 if 'content' in metadata:
@@ -651,17 +657,23 @@ class RetrievalManager:
                 duplicate_count = rerank_result.get('duplicate_count', 1)
 
                 # 如果内层有metadata字段,将其提取到外层
-                if 'metadata' in metadata and isinstance(metadata['metadata'], str):
-                    import json
-                    try:
-                        # 解析JSON格式的metadata
-                        inner_metadata = json.loads(metadata['metadata'])
+                if 'metadata' in metadata:
+                    inner_raw = metadata['metadata']
+                    inner_metadata = None
+
+                    if isinstance(inner_raw, dict):
+                        # Milvus JSON 字段直接返回 dict
+                        inner_metadata = inner_raw
+                    elif isinstance(inner_raw, str):
+                        import json
+                        try:
+                            inner_metadata = json.loads(inner_raw)
+                        except (json.JSONDecodeError, TypeError):
+                            pass
+
+                    if inner_metadata and isinstance(inner_metadata, dict):
                         metadata.update(inner_metadata)
-                        # 移除内层的metadata字符串,避免重复
                         del metadata['metadata']
-                    except (json.JSONDecodeError, TypeError):
-                        # 如果解析失败,保持原样
-                        pass
 
                 # 移除重复的content字段
                 if 'content' in metadata:

+ 230 - 0
utils_test/Grammar_Check_Test/analyze_grammar_quality.py

@@ -0,0 +1,230 @@
+"""
+分析最新审查结果中词句语法审查的质量
+
+检查项:
+1. "将A改为A" 模式(修正前后相同)
+2. suggestion/reason 中的自我辩论(犹豫措辞)
+3. risk_level 为空
+4. 技术操作规程越界审查
+5. 重复问题
+6. JSON 解析失败
+7. suggestion 过长(>200字,可能包含推理过程)
+"""
+
+import json
+import re
+import sys
+import os
+
+project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+sys.path.insert(0, project_root)
+
+
+def extract_correction_pairs(suggestion: str):
+    """从 suggestion 中提取所有 '将X改为Y' 的 (X, Y) 对"""
+    quote_chars = r"""['""''「」]"""
+    pattern = rf"将{quote_chars}(.*?){quote_chars}\s*改为\s*{quote_chars}(.*?){quote_chars}"
+    return re.findall(pattern, suggestion)
+
+
+def check_hesitation_words(text: str):
+    """检查文本中是否包含犹豫措辞"""
+    hesitation_words = [
+        '可能', '暂定', '不确定', '重新审视', '然而', '不过', '似乎',
+        '但是', '其实', '实际上', '再细看', '再想想', '仔细想想',
+        '反过来', '另一方面', '换个角度'
+    ]
+    found = [w for w in hesitation_words if w in text]
+    return found
+
+
+def is_technical_procedure(issue_point: str, reason: str):
+    """检查是否为技术操作规程越界审查"""
+    technical_keywords = [
+        '操作步骤', '工艺参数', '施工顺序', '操作规程',
+        '技术规范', '施工方案', '工艺流程'
+    ]
+    combined = issue_point + reason
+    return [kw for kw in technical_keywords if kw in combined]
+
+
+def analyze_grammar_check_results(result_file: str):
+    """分析词句语法审查结果质量"""
+    with open(result_file, encoding='utf-8') as f:
+        data = json.load(f)
+
+    issues = data.get('issues', [])
+    grammar_items = []
+
+    for issue_wrapper in issues:
+        for issue_id, issue_detail in issue_wrapper.items():
+            review_lists = issue_detail.get('review_lists', [])
+            metadata = issue_detail.get('metadata', {})
+            for item in review_lists:
+                check_item = item.get('check_item', '')
+                if check_item in ['sensitive_word_check', 'grammar_check']:
+                    grammar_items.append({
+                        'item': item,
+                        'issue_id': issue_id,
+                        'location_label': metadata.get('review_location_label', '')
+                    })
+
+    print(f"Total grammar_check items: {len(grammar_items)}")
+    print()
+
+    # Quality checks
+    a_to_a_issues = []
+    hesitation_issues = []
+    empty_risk_issues = []
+    technical_issues = []
+    duplicate_issues = []
+    parse_failures = []
+    long_suggestion_issues = []
+
+    seen_corrections = {}
+
+    for i, entry in enumerate(grammar_items):
+        item = entry['item']
+        check_result = item.get('check_result', {})
+
+        # STRING format = parse failure
+        if isinstance(check_result, str):
+            parse_failures.append({
+                'index': i + 1,
+                'raw': check_result[:200],
+                'location_label': entry['location_label']
+            })
+            continue
+
+        issue_point = check_result.get('issue_point', '')
+        location = check_result.get('location', '')
+        suggestion = check_result.get('suggestion', '')
+        reason = check_result.get('reason', '')
+        risk_level = check_result.get('risk_level', '')
+
+        # Check 1: Empty risk_level
+        if not risk_level or risk_level.strip() == '':
+            empty_risk_issues.append({
+                'index': i + 1,
+                'issue_point': issue_point,
+                'suggestion': suggestion[:80]
+            })
+
+        # Check 2: A→A pattern
+        pairs = extract_correction_pairs(suggestion)
+        for before, after in pairs:
+            if before.strip() == after.strip():
+                a_to_a_issues.append({
+                    'index': i + 1,
+                    'issue_point': issue_point,
+                    'before': before,
+                    'after': after
+                })
+
+        # Check 3: Hesitation words in suggestion
+        sug_hesitation = check_hesitation_words(suggestion)
+        if sug_hesitation:
+            hesitation_issues.append({
+                'index': i + 1,
+                'field': 'suggestion',
+                'words': sug_hesitation,
+                'text': suggestion[:100]
+            })
+
+        # Check 4: Hesitation words in reason
+        reason_hesitation = check_hesitation_words(reason)
+        if reason_hesitation:
+            hesitation_issues.append({
+                'index': i + 1,
+                'field': 'reason',
+                'words': reason_hesitation,
+                'text': reason[:100]
+            })
+
+        # Check 5: Technical procedure
+        tech_kws = is_technical_procedure(issue_point, reason)
+        if tech_kws:
+            technical_issues.append({
+                'index': i + 1,
+                'issue_point': issue_point,
+                'keywords': tech_kws
+            })
+
+        # Check 6: Long suggestion (>200 chars)
+        if len(suggestion) > 200:
+            long_suggestion_issues.append({
+                'index': i + 1,
+                'issue_point': issue_point,
+                'length': len(suggestion),
+                'text': suggestion[:100]
+            })
+
+        # Check 7: Duplicates (same correction key)
+        if pairs:
+            sorted_pairs = sorted(pairs)
+            correction_key = ",".join(f"{a}→{b}" for a, b in sorted_pairs)
+        else:
+            correction_key = suggestion.strip()
+
+        if correction_key in seen_corrections:
+            duplicate_issues.append({
+                'index': i + 1,
+                'first_index': seen_corrections[correction_key],
+                'correction_key': correction_key,
+                'issue_point': issue_point
+            })
+        else:
+            seen_corrections[correction_key] = i + 1
+
+    # Print results
+    print("=" * 60)
+    print("QUALITY ANALYSIS RESULTS")
+    print("=" * 60)
+
+    sections = [
+        ("A->A Pattern (will A change to A)", a_to_a_issues),
+        ("Self-debate / Hesitation words", hesitation_issues),
+        ("Empty risk_level", empty_risk_issues),
+        ("Technical procedure (out of scope)", technical_issues),
+        ("Duplicate corrections", duplicate_issues),
+        ("JSON parse failures", parse_failures),
+        ("Long suggestions (>200 chars)", long_suggestion_issues),
+    ]
+
+    total_problems = 0
+    for title, items in sections:
+        count = len(items)
+        total_problems += count
+        status = "PASS" if count == 0 else "FAIL"
+        print(f"\n[{status}] {title}: {count}")
+        if items:
+            for item in items:
+                print(f"  - #{item.get('index', '?')}: {json.dumps(item, ensure_ascii=False)[:150]}")
+
+    print(f"\n{'=' * 60}")
+    print(f"TOTAL: {len(grammar_items)} items, {total_problems} quality issues")
+    print(f"Quality rate: {(len(grammar_items) - total_problems) / len(grammar_items) * 100:.1f}%")
+
+    # Print valid items summary
+    print(f"\n{'=' * 60}")
+    print("VALID ITEMS SUMMARY")
+    print("=" * 60)
+    for i, entry in enumerate(grammar_items):
+        item = entry['item']
+        check_result = item.get('check_result', {})
+        if isinstance(check_result, str):
+            print(f"  [{i+1}] [PARSE_FAIL] {check_result[:60]}...")
+            continue
+        issue_point = check_result.get('issue_point', '')
+        suggestion = check_result.get('suggestion', '')
+        risk_level = check_result.get('risk_level', '')
+        print(f"  [{i+1}] [{risk_level}] {issue_point}: {suggestion[:60]}...")
+
+
+if __name__ == "__main__":
+    result_file = os.path.join(
+        project_root,
+        "temp", "construction_review", "final_result",
+        "67d45692fb97aeef8f896e78475ce539-1779785718.json"
+    )
+    analyze_grammar_check_results(result_file)

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 251 - 0
utils_test/Grammar_Check_Test/full_scan_results/all_results.json


+ 45 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk24_boundary_analysis.txt

@@ -0,0 +1,45 @@
+Chunk 24 total length: 21274
+Segments: 7
+
+=== Segment 0 (len=2993) ===
+  START: 1、架桥机安、拆安全技术保证措施(1)架桥机安装前对设备进行检查清理,合格后方可进行安装。(2)安装场地平整、无障碍物且有排水设施。(3)吊装作业区无高压线及其他电力线路通过。(4)安装人员必须熟悉本机结构、技术特征,电器元件安装必须专业电
+  END:   三个职能组,所有人员做到职责明确、责任到人。(3)安全负责人要向班组进行安全交底。(4)运输队固定人员持证上岗作业,主车和副车佩戴对讲机保持通信。并配专人观察运输过程梁板支撑牢固情况,持信号彩旗指挥。运输道路沿线危险地段需设置明显警示标志。
+  >> issue1: diao_zhuang_gong_cheng_zhong at pos 257/2993
+  >> issue2: bu_he_zhi_tui at pos 311/2993
+  >> issue3: heng_jia_liang at pos 401/2993
+  >> issue3: heng_jia_liang at pos 524/2993
+  >> issue4: sha_che at pos 1314/2993
+  >> issue8: lian_jie at pos 1923/2993
+  >> issue9: lian_jie2 at pos 2616/2993
+  >> issue9: lian_jie2 at pos 2635/2993
+  >> issue10: tong_guo_zhu_liang at pos 1575/2993
+
+=== Segment 1 (len=3029) ===
+  START: 通信。并配专人观察运输过程梁板支撑牢固情况,持信号彩旗指挥。运输道路沿线危险地段需设置明显警示标志。(5)严格按施工方案选定机械及使用机械,不得超载使用。运梁车应定期保养和检修,检查轮胎、制动的良好情况。运梁便道定期予以维护。运行前进行车辆
+  END:   ,均符合国家现行规定章程的规定。(10)夜间架梁必须有足够的照明,所配备的工作灯采用安全电压,并注意防漏电工作,必须拥有良好的通讯,便于信号指挥。(11)架梁工作人员作业区域根据工地具体情况安装必要的防护栏杆、上下梯子、人行走道等安全设备。
+  >> issue3: heng_jia_liang at pos 2178/3029
+  >> issue5: juan_bo at pos 481/3029
+
+=== Segment 2 (len=3045) ===
+  START: 指挥。(11)架梁工作人员作业区域根据工地具体情况安装必要的防护栏杆、上下梯子、人行走道等安全设备。(12)架梁作业中,向下传递和向上提升工具设备时,加强观察,建立相应的呼应制度。(13)安保科人员现场巡逻、警戒,非架梁人员不得进入架梁作业
+  END:   备拆装按设计图纸,说明书施工,未经有关设计制造部门同意,不得任意修改。②起重、变幅、回转、行走机电设备的安装,机座稳固,安全装置(如制动机构,限位器、安全阀、负荷指示器等)齐全,灵敏、可靠。③施工用电线路及电气设备的绝缘必须良好,布线整齐。
+  >> issue8: lian_jie at pos 327/3045
+
+=== Segment 3 (len=3018) ===
+  START: ,限位器、安全阀、负荷指示器等)齐全,灵敏、可靠。③施工用电线路及电气设备的绝缘必须良好,布线整齐。④露天使用的电气设备均应采取防水措施、防止设备受潮,漏电、损坏等。⑤在有易燃易爆气体场所,电气设备及线路均应满足防火、防爆要求。⑥热元件和熔
+  END:   处。根据工地实际情况,尽可能快速组织劳动力,采取勤倒班的方法,缩短一次连续作业时间。16、冬季架梁安全保证措施(1)现场作业人员配备防寒服,防寒手套及安全带等防护用品。(2)架桥机在入冬前进行全面检查保养,对钢结构连接螺栓、主销、钢梁梁缝、
+
+=== Segment 4 (len=3042) ===
+  START: 防寒手套及安全带等防护用品。(2)架桥机在入冬前进行全面检查保养,对钢结构连接螺栓、主销、钢梁梁缝、各支腿及挂臂、架梁小车等参照使用说明书检查,发现问题及时整改,确保状况良好。(3)为了防止冬季气温低,各部件变脆、绝缘破损,发生漏电事故,对
+  END:   随同吊装设备升降,在吊装过程中,如因故(停电等)中断,必须采取措施进行处理,不得使吊装物体悬空过夜。卷扬机除牢固固定外,电气设备必须接电接零,卷扬机操作人员一定要熟悉机械性能,严禁非操作人员操作,下班之后应切断电源。在工作时,钢丝绳不得有扭
+  >> issue6: qian_jin_xiang at pos 2838/3042
+
+=== Segment 5 (len=3012) ===
+  START: ,卷扬机操作人员一定要熟悉机械性能,严禁非操作人员操作,下班之后应切断电源。在工作时,钢丝绳不得有扭转、急剧弯曲、压绳、绳与绳之间排列太松等现象,否则应停机排除。不允许在雨雪天、夜间、雾天和六级风以上等情况下进行吊装工作。梁板起吊前对吊环进
+  END:   执行操作规程,操作人员持证作业 ||---|---|---|---|---|| 4 | 运梁 | 炮车制动失灵,梁体未支护,捆绑不牢靠 | 车辆伤害、物体打击 | 严格执行操作规程、定期作业检查 ||---|---|---|---|---|
+  >> issue7: zou_guo_dang at pos 425/3012
+
+=== Segment 6 (len=2594) ===
+  START: 车辆伤害、物体打击 | 严格执行操作规程、定期作业检查 ||---|---|---|---|---|| 5 | 运梁 | 人站在梁上随车前行,运梁车速度过快 | 车辆伤害、高处坠落、物体打击 | 进行教育和交底,严格执行操作规程 ||---
+  END:   害(暴风雨等恶劣天气)因夏季可能会出现暴风雨等恶劣天气,给施工带来了重大不确定安全隐患。为此项目部专门编制了“三防”应急预案,并进行演练。施工管理人员及时收听了解气象信息,在恶劣天气来临前,按照应急预案要求及时进行设备加固、人员撤离等工作。
+

+ 123 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk24_split_results.json

@@ -0,0 +1,123 @@
+{
+  "total_segments": 7,
+  "total_issues": 13,
+  "issues": [
+    {
+      "issue_point": "错别字",
+      "location": "1、架桥机安、拆安全技术保证措施(8)主梁在吊装工程中,保持与支腿保持1 米距离...",
+      "suggestion": "将“吊装工程中”改为“吊装过程中”",
+      "reason": "“工程”指代整个建设项目或任务,此处描述吊装这一具体动作过程,应使用“过程”,属于典型错别字。",
+      "risk_level": "中风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字",
+      "location": "1、架桥机安、拆安全技术保证措施(8)...严格保证主梁不和支腿碰撞...",
+      "suggestion": "将“不和”改为“不得”",
+      "reason": "在安全规范表述中,禁止性要求通常使用“不得”,“不和”口语化且不符合规范用语习惯,属于用词错误。",
+      "risk_level": "中风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字",
+      "location": "1、架桥机安、拆安全技术保证措施(10)...在珩架梁以上作业的人员必须系好安全带。",
+      "suggestion": "将“珩架梁”改为“桁架梁”",
+      "reason": "“珩”为错字,建筑与机械结构中指代三角形结构部件的正确用字为“桁”,属于典型错别字。",
+      "risk_level": "中风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字",
+      "location": "1、架桥机安、拆安全技术保证措施(13)拆卸珩架梁时要用枕木垛支撑...",
+      "suggestion": "将“珩架梁”改为“桁架梁”",
+      "reason": "同上,“珩”应为“桁”,属于错别字。",
+      "risk_level": "中风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字",
+      "location": "2、梁板运输安全措施(12)运梁台车运梁时,应先试刹车制动是否可靠。",
+      "suggestion": "将“试刹车”改为“测试刹车”或“试刹车制动”",
+      "reason": "原文“试刹车制动”语义重复且不通顺,“试”即测试之意,与“制动”搭配不当,建议改为“测试刹车制动”或保留“试刹车”去掉“制动”,此处视为词语搭配/多字错误。",
+      "risk_level": "低风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "多字/语病",
+      "location": "2、梁板运输安全措施(12)运梁台车运梁时,应先试刹车制动是否可靠。",
+      "suggestion": "将“试刹车制动”改为“测试制动系统”",
+      "reason": "“试刹车”与“制动”语义重复,且“试...是否可靠”句式杂糅,建议修改为规范的“测试制动系统是否可靠”或“试制动是否可靠”。",
+      "risk_level": "低风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字/用词不当",
+      "location": "3、架桥机使用过程中的安全技术措施...在前支腿行走至前方墩台时,通过主梁行走至墩台作业人员安全。",
+      "suggestion": "将“通过主梁行走至墩台作业人员安全”改为“确保主梁行走至墩台时作业人员安全”",
+      "reason": "原句“通过...作业人员安全”语法结构混乱,缺少谓语动词(如“确保”),导致语义不通,属于明显的语法结构错误。",
+      "risk_level": "中风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字",
+      "location": "3、架桥机使用过程中的安全技术措施...检查每一个销轴联结是否牢固...",
+      "suggestion": "将“联结”改为“连接”",
+      "reason": "在机械结构语境中,销轴、螺栓等部件的固定通常用“连接”,“联结”多用于抽象概念或特定地理/逻辑连接,此处为用词不规范。",
+      "risk_level": "低风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字",
+      "location": "5、落梁安全措施...及时对横隔板联接主筋施焊...",
+      "suggestion": "将“联接”改为“连接”",
+      "reason": "同上,钢筋焊接固定应使用“连接”,“联接”为不规范用词。",
+      "risk_level": "低风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "重复字词",
+      "location": "2、梁板运输安全措施(12)运梁台车运梁时,应先试刹车制动是否可靠。",
+      "suggestion": "删除“刹车”或“制动”,改为“应先试制动是否可靠”",
+      "reason": "“刹车”与“制动”同义,连用造成语义重复,属于多字错误。",
+      "risk_level": "低风险",
+      "_segment": 0,
+      "_seg_len": 2993
+    },
+    {
+      "issue_point": "错别字修正",
+      "location": "(8)...同时检修人员每天定时检查卷拨抱闸、供电系统...",
+      "suggestion": "将'卷拨'改为'卷扬'",
+      "reason": "在起重机械和架桥机语境中,'卷拨'为错别字,正确术语应为'卷扬'(指卷扬机或卷扬机构),'拨'与'扬'字形或读音易混淆导致误写。",
+      "risk_level": "中风险",
+      "_segment": 1,
+      "_seg_len": 3029
+    },
+    {
+      "issue_point": "错别字",
+      "location": "(2)起重工安全操作规程 ... 使用千斤项时,底基要坚实 ...",
+      "suggestion": "将“千斤项”改为“千斤顶”",
+      "reason": "“千斤项”为明显错别字,正确术语应为“千斤顶”,指一种起重工具。",
+      "risk_level": "中风险",
+      "_segment": 4,
+      "_seg_len": 3042
+    },
+    {
+      "issue_point": "错别字",
+      "location": "(3)高空作业安全操作规程...不得“走过档”和跳跃架子...",
+      "suggestion": "将“走过档”改为“走过当”",
+      "reason": "“走过档”为错别字,结合上下文语境“跳跃架子”,此处应为“走过当”,指在脚手架的横档上行走,是安全操作规程中的常用术语。",
+      "risk_level": "中风险",
+      "_segment": 5,
+      "_seg_len": 3012
+    }
+  ]
+}

+ 79 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk24_split_review_new.json

@@ -0,0 +1,79 @@
+[
+  {
+    "issue_point": "错别字:'珩架梁'应为'桁架梁'",
+    "location": "(10)拆卸现场应封闭...在珩架梁以上作业的人员必须系好安全带。",
+    "suggestion": "将'珩架梁'改为'桁架梁'",
+    "reason": "'珩'为错别字,在桥梁工程术语中,指代由杆件组成的格构式梁结构应为'桁架'(héng jià),'珩'(héng)通常指佩玉上面的横玉,属同音错别字。",
+    "risk_level": "中风险"
+  },
+  {
+    "issue_point": "错别字:'铰花'应为'绞花'",
+    "location": "(1)捆梁时两边铁瓦要对正放牢...无铰花和两股互压现象...",
+    "suggestion": "将'铰花'改为'绞花'",
+    "reason": "在钢丝绳使用规范中,钢丝绳出现扭曲、打结的现象称为'绞花'(或乱丝),'铰'指铰接、铰链,此处为同音错别字。",
+    "risk_level": "中风险"
+  },
+  {
+    "issue_point": "漏字/语病:'通过主梁行走至墩台作业人员安全'表述不通",
+    "location": "在前支腿行走至前方墩台时,通过主梁行走至墩台作业人员安全。",
+    "suggestion": "改为'通过主梁行走至墩台,确保作业人员安全'",
+    "reason": "原句'通过主梁行走至墩台作业人员安全'缺少谓语动词,导致语义断裂,'安全'一词悬空,结合上下文语境,应为'确保...安全'。",
+    "risk_level": "中风险"
+  },
+  {
+    "issue_point": "错别字/用词不当:'联接'应为'连接'",
+    "location": "在两片梁相邻就位后,及时对横隔板联接主筋施焊...",
+    "suggestion": "将'联接'改为'连接'",
+    "reason": "在工程结构语境中,指代构件之间的结合通常使用'连接'(如钢筋连接、螺栓连接),'联接'虽偶有使用,但'连接'更为规范和通用,且前文已多次使用'连接'(如'全部连接为整体'),此处建议统一。",
+    "risk_level": "低风险"
+  },
+  {
+    "issue_point": "错别字:先择",
+    "location": "使用起重机作业时,必须正确先择吊点的位置",
+    "suggestion": "将'先择'改为'选择'",
+    "reason": "'先择'为明显的错别字,结合上下文语境,此处应为'选择'吊点位置。",
+    "risk_level": "中风险"
+  },
+  {
+    "issue_point": "错别字:部份",
+    "location": "重点要害部份及重要场所",
+    "suggestion": "将'部份'改为'部分'",
+    "reason": "'部份'为'部分'的异形词或非规范写法,在规范公文中应使用'部分'。",
+    "risk_level": "低风险"
+  },
+  {
+    "issue_point": "错别字:采以",
+    "location": "焊割附近有易燃易爆品未作清除或采以安全措施之前不能割焊",
+    "suggestion": "将'采以'改为'采取'",
+    "reason": "'采以'为明显的错别字,固定搭配为'采取安全措施'。",
+    "risk_level": "中风险"
+  },
+  {
+    "issue_point": "错别字:不殉私",
+    "location": "做到有奖有罚,公正严明,不枉法、不殉私",
+    "suggestion": "将'不殉私'改为'不徇私'",
+    "reason": "'殉私'意为为私情而死,此处语境为不偏私,应为'徇私'(曲从私情)。",
+    "risk_level": "低风险"
+  },
+  {
+    "issue_point": "错别字:电钨丝",
+    "location": "以防止焊条或杂物落在电钨丝上",
+    "suggestion": "将'电钨丝'改为'电热丝'",
+    "reason": "烘箱加热元件通常为'电热丝','电钨丝'属于错别字或术语误用。",
+    "risk_level": "低风险"
+  },
+  {
+    "issue_point": "错别字:灭绝火种",
+    "location": "检查现场,灭绝火种",
+    "suggestion": "将'灭绝'改为'熄灭'",
+    "reason": "'灭绝'通常指生物物种完全消失,此处指消除火源,应为'熄灭'。",
+    "risk_level": "中风险"
+  },
+  {
+    "issue_point": "错别字:钢瓶(气焊)",
+    "location": "氧气、乙炔钢瓶禁止曝晒",
+    "suggestion": "将'钢瓶'改为'气瓶'或保留(视上下文统一性,但通常规范术语为气瓶,此处'钢瓶'虽非绝对错字但建议统一为'气瓶',若严格判定错字则'钢瓶'本身无误,但后文多次出现'乙炔钢瓶',此处'氧气、乙炔钢瓶'表述略显累赘,但非明显错字。重新审视:'钢瓶'是气瓶的一种材质描述,不算错字。但后文'乙炔钢瓶内留有一定的余压',此处'钢瓶'用法尚可。再检查:'氧气、乙炔钢瓶'中'氧气'后缺'瓶'字,导致并列结构不对称,应改为'氧气瓶、乙炔钢瓶'或统一为'氧气瓶、乙炔瓶'。",
+    "reason": "并列短语中,'氧气'后缺少中心语'瓶',导致与'乙炔钢瓶'结构不对称,建议补全为'氧气瓶、乙炔钢瓶'或统一为'氧气瓶、乙炔瓶'。",
+    "risk_level": "低风险"
+  }
+]

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_00_basis.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 0,
+  "chapter": "basis",
+  "section": "第一章 编制依据->一、 法律法规",
+  "content_length": 1078,
+  "content_preview": "(1)《中华人民共和国建筑法》;\n(2)《中华人民共和国安全生产法》;\n(3)《中华人民共和国环境保护法》;\n(4)《中华人民共和国环境影响评价法》;\n(5)《建设项目环境保护管理条例》;\n(6)《建设工程质量管理条例》(国务院第279 号令);\n(7)《建设工程安全生产管理条例》(国务院第393 号令);\n(8)《公路水运工程安全生产监督管理办法》(交通运输部2017 年第25 号令);\n(9)",
+  "success": true,
+  "error": null,
+  "wall_time": 0.32,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_01_basis.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 1,
+  "chapter": "basis",
+  "section": "第一章 编制依据->三、 文件制度",
+  "content_length": 406,
+  "content_preview": "(1)《危险性较大的分部分项工程安全管理规定》住建部37 号令;\n(2)《四川省危险性较大的分部分项工程安全管理规定实施细则》(川建行规\n〔2018〕3 号);\n(3)《危险性较大的分部分项工程专项施工方案编制指南》(建办质〔2021〕\n48 号);\n(4)住房城乡建设部办公厅关于实施《危险性较大的分部分项工程安全管理规\n定》有关问题的通知(住建部31 号令);\n(5)\n《四川路桥集团超危大工程专",
+  "success": true,
+  "error": null,
+  "wall_time": 0.2,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_02_basis.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 2,
+  "chapter": "basis",
+  "section": "第一章 编制依据->四、 编制原则",
+  "content_length": 106,
+  "content_preview": "编制原则应认真贯彻执行国家方针、政策、标准和设计文件,严格执行基本建\n设程序,实现工程项目的全部功能;全面履行工程合同,满足建设单位要求,有效\n地集中施工力量,按期完成;按照工序关系,合理安排施工顺序,统筹考虑。",
+  "success": true,
+  "error": null,
+  "wall_time": 0.19,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_03_basis.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 3,
+  "chapter": "basis",
+  "section": "第一章 编制依据->五、 编制范围",
+  "content_length": 42,
+  "content_preview": "本方案适用于都四山地轨道交通项目DSZH 标项目指挥部二分部T 梁运输及安装\n施工。",
+  "success": true,
+  "error": null,
+  "wall_time": 0.18,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_04_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 4,
+  "chapter": "overview",
+  "section": "第二章 工程概况->一、 设计概况",
+  "content_length": 4147,
+  "content_preview": "1、工程简介\n本工程位于四川省阿坝藏族羌族自治州汶川县卧龙镇,地势由西北向东南逐渐\n降低。地形主要分为西北部山地地形与东南部河谷地形,平均海拔2500m 左右。主\n要河道为烧汤河,发源于巴朗山东麓,从西南向东北流,贯穿卧龙镇全境,全长约\n40 千米,最终抵达映秀注入岷江。气候属温带季风气候,其特点是冬季寒冷干燥,\n夏季暖热多雨。\n本工程起止桩号为D1K86+279.91- D1K101+360.6",
+  "success": true,
+  "error": null,
+  "wall_time": 0.37,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_05_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 5,
+  "chapter": "overview",
+  "section": "第二章 工程概况->二、 工程地质与水文气象",
+  "content_length": 2710,
+  "content_preview": "1、工程地质\n(1)地形地貌\n项目地处横断山脉东缘,青藏高原与四川盆地过渡的中山区,桥梁沿皮条河行\n进,两岸地形陡峻,起伏大,海拔2340~2800m,自然横坡30°~50°,局部陡峻,\n坡角大于70°。坡面植被发育好,基岩露头少,仅国道G350 开挖坡脚处出零星出露。\n桥梁线位布设基本沿山谷紧挨G350 国道,与G350 国道平行或上跨G350 国道,交通\n较便利。\n(2)地质状况\n1)新店子特",
+  "success": true,
+  "error": null,
+  "wall_time": 3.72,
+  "response_length": 923,
+  "raw_response": "```json\n[\n  {\n    \"issue_point\": \"漏字错误\",\n    \"location\": \"5) 野牛特大桥 桥址区覆第四系全新统滑坡堆积层\",\n    \"suggestion\": \"将“桥址区覆”改为“桥址区上覆”\",\n    \"reason\": \"结合上下文其他段落(如新店子特大桥、映雪特大桥等)均使用“桥址区上覆”的表述,此处“覆”字前明显漏掉了“上”字,导致语句不通顺。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"漏字错误\",\n    \"location\": \"5) 野牛特大桥 质砂岩、板岩不等厚互层单轴饱和抗压强度\",\n    \"suggestion\": \"将“质砂岩”改为“变质砂岩”\",\n    \"reason\": \"前文描述该地层为“变质砂岩、板岩不等厚互层”,此处“质砂岩”显然是“变质砂岩”的漏字错误,且“质砂岩”并非标准地质术语。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"多字/语病\",\n    \"location\": \"2、水文气象 (1)水文 地下水主来源主要为基岩裂隙水\",\n    \"suggestion\": \"将“地下水主来源主要为”改为“地下水主要来源为”\",\n    \"reason\": \"“主来源”与“主要为”语义重复,造成语病。应删除“主”字或“主要”中的一个,改为“主要来源为”更符合汉语规范。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"标点符号多余\",\n    \"location\": \"2、水文气象 (1)水文 裂隙水为T2z、T1b、和C+P 地层中的板岩\",\n    \"suggestion\": \"删除“T1b”后的顿号,改为\"T2z、T1b 和 C+P\"\"\",\n    \"reason\": \"在并列词语“T2z、T1b、和 C+P\"中,连词“和”前面不应再加顿号,属于标点符号使用不规范。\",\n    \"risk_level\": \"低风险\"\n  }\n]\n```"
+}

+ 8 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_05_retest2.json

@@ -0,0 +1,8 @@
+{
+  "chunk_index": 5,
+  "section": "第二章 工程概况->二、 工程地质与水文气象",
+  "content_length": 2710,
+  "wall_time": 0.44,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_06_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 6,
+  "chapter": "overview",
+  "section": "第二章 工程概况->三、 周边环境",
+  "content_length": 119,
+  "content_preview": "本项目处于国道G350 线卧龙至邓生沟段国道两侧交通便捷。沿线公路网分布仅\n有G350 国道,交通方便,运输条件总体较好。\n据现场调查,架梁线路未出现既有高压线、光纤线等输电、网络线路;架梁线\n路跨越既有道路G350 国道,共计10 处。",
+  "success": true,
+  "error": null,
+  "wall_time": 0.17,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_07_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 7,
+  "chapter": "overview",
+  "section": "第二章 工程概况->四、 施工平面及立面布置",
+  "content_length": 560,
+  "content_preview": "1、拌和站\n混凝土采用项目拌和站集中拌和,设置HZS120+HZS180 型双机拌和站,位于项\n目线路中段D1K90+000 综合场站,距离最远位置约10Km;\n图2\n项目拌和站\n2、钢筋加工场\n钢筋加工采用集中配送,由分部进行报送计划指挥部统一进行配送。\n3、材料(临时)堆码区域\n项目钢筋临时存放场位于D1K90+000 综合场站,距离最远运输距离约10Km。\n图3\n项目综合场站\n4、产业工人驻",
+  "success": true,
+  "error": null,
+  "wall_time": 0.19,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_08_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 8,
+  "chapter": "overview",
+  "section": "第二章 工程概况->五、 施工要求和技术保证条件",
+  "content_length": 1851,
+  "content_preview": "1、施工要求\n(1)工期目标\n跨线龙门吊计划在10 月底完成前期建设及安装验收,11 月底完成架桥机安装及\n验收,12 月初开始正常梁板架设。梁板架设计划:3 片/2 天,即一个月架设45 片,\n施工工期690 天(23 个月),施工时间:2025 年12 月~2027 年11 月。详见施工计\n划进度表。\n(2)质量目标\n1)通过教育宣传、总结、反馈、分析原因,制定措施,树立全员全过程质量意\n识,",
+  "success": true,
+  "error": null,
+  "wall_time": 2.23,
+  "response_length": 636,
+  "raw_response": "```json\n[\n  {\n    \"issue_point\": \"重复字词\",\n    \"location\": \"(2)质量目标 ... 任何与施工承包合同有关的施工活动,经监理工程师批准后再进行。。\",\n    \"suggestion\": \"删除末尾多余的句号,改为“再进行。”\",\n    \"reason\": \"句尾出现了两个连续的句号,属于标点符号重复错误。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"错别字/重复词\",\n    \"location\": \"2、技术保证条件(1)施工要求 5) ... 需要变更已批复的方案,则应经公司总工程师或或其授权委托...\",\n    \"suggestion\": \"将“或或其”修改为“或其”\",\n    \"reason\": \"“或”字重复输入,导致语法错误。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"错别字\",\n    \"location\": \"2、技术保证条件(1)施工要求 4) ... 发现方案有不可实施的部份...\",\n    \"suggestion\": \"将“部份”修改为“部分”\",\n    \"reason\": “部分”是现代汉语规范写法,“部份”多为旧式写法或方言用法,在规范公文中应使用“部分”。\",\n    \"risk_level\": \"低风险\"\n  }\n]\n```"
+}

+ 8 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_08_retest2.json

@@ -0,0 +1,8 @@
+{
+  "chunk_index": 8,
+  "section": "第二章 工程概况->五、 施工要求和技术保证条件",
+  "content_length": 1851,
+  "wall_time": 0.86,
+  "response_length": 198,
+  "raw_response": "```json\n{\n  \"issue_point\": \"重复字词与多余标点\",\n  \"location\": \"1、施工要求(2)质量目标 第5)条后段落:'经监理工程师批准后再进行。。'\",\n  \"suggestion\": \"将'进行。。'修改为'进行。'\",\n  \"reason\": \"句尾出现了两个连续的句号,属于标点符号重复错误。\",\n  \"risk_level\": \"低风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_09_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 9,
+  "chapter": "overview",
+  "section": "第二章 工程概况->六、 风险辨识与分级",
+  "content_length": 2261,
+  "content_preview": "表3 T 梁运输及安装风险源及防范措施表\n|  |  |  |  |  |\n| --- | --- | --- | --- | --- |\n|---|---|---|---|---|\n| 序号 | 作业活动 | 风险源 | 可能导致事故 | 防范措施 |\n|---|---|---|---|---|\n| 1 | 捆梁 | 捆梁千斤绳不要求断丝或断股 | 物体打击 | 选用合格千斤绳,定期检查 |\n|",
+  "success": true,
+  "error": null,
+  "wall_time": 1.26,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_10_overview.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 10,
+  "chapter": "overview",
+  "section": "第二章 工程概况->七、 参建各方责任主体单位",
+  "content_length": 483,
+  "content_preview": "表4 参建各方责任主体单位\n|  |  |  |\n| --- | --- | --- |\n|---|---|---|\n| 序号 | 参建各方责任主体 | 单位名称 |\n|---|---|---|\n| 1 | 建设单位 | 都金山地轨道交通有限公司 |\n|---|---|---|\n| 2 | 设计单位 | 中铁二院工程集团有限责任公司 |\n|---|---|---|\n| 3 | 监理单位 | 成都大",
+  "success": true,
+  "error": null,
+  "wall_time": 0.18,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_11_plan.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 11,
+  "chapter": "plan",
+  "section": "第三章 施工计划->一、 施工进度计划",
+  "content_length": 1033,
+  "content_preview": "1、主要工序作业时间分析\n梁板架设计划:跨线龙门吊计划在10 月底完成前期建设及安装验收,11 月底完\n成架桥机安装及验收,12 月初开始正常梁板架设。梁板架设计划:3 片/2 天,即一\n个月架设45 片,施工工期690 天(23 个月),施工时间:2025 年12 月~2027 年\n11 月。\n2、关键工程(工序)节点安排\n梁板架设顺序及重点节点工程完成时间:映雪桥66#~69#墩跨线龙门吊范围",
+  "success": true,
+  "error": null,
+  "wall_time": 0.22,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_12_plan.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 12,
+  "chapter": "plan",
+  "section": "第三章 施工计划->二、 施工材料计划",
+  "content_length": 797,
+  "content_preview": "表5\n施工材料计划表\n|  |  |  |  |  |  |\n| --- | --- | --- | --- | --- | --- |\n|---|---|---|---|---|---|\n| 序号 | 材料名称 | 规格 | 数量 | 重量(kg) | 来源 |\n|---|---|---|---|---|---|\n| 1 | 钢丝绳 | Φ36mm\\*5m | 8根 | / | 队伍提供 |\n|",
+  "success": true,
+  "error": null,
+  "wall_time": 0.2,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_13_plan.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 13,
+  "chapter": "plan",
+  "section": "第三章 施工计划->三、 施工设备计划",
+  "content_length": 745,
+  "content_preview": "表6\n施工设备计划表\n|  |  |  |  |  |\n| --- | --- | --- | --- | --- |\n|---|---|---|---|---|\n| 序号 | 设备名称 | 规格 | 数量 | 来源 |\n|---|---|---|---|---|\n| 1 | 架桥机 | DJ40180 | 2台 | 队伍提供 |\n|---|---|---|---|---|\n| 2 | 运梁车 |",
+  "success": true,
+  "error": null,
+  "wall_time": 1.2,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_14_plan.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 14,
+  "chapter": "plan",
+  "section": "第三章 施工计划->四、 劳动力计划",
+  "content_length": 182,
+  "content_preview": "表7\n劳动力计划表\n|  |  |  |  |\n| 序号 | 工种 | 人数 | 职能 |\n| 1 | 架桥机操作手 | 4 | 梁板安装 |\n架桥机操作手\n梁板安装\n架桥机指挥\n梁板安装\n运梁车司机\n梁板运输\n运梁车监护\n梁板运输\n电工\n1 电力设备安装维护\n焊工\n5 桥面系施工\n钢筋工\n2 桥面系施工\n混凝土工\n2 桥面系施工\n杂工\n6 梁板安装、桥面系施工",
+  "success": true,
+  "error": null,
+  "wall_time": 0.18,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_15_plan.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 15,
+  "chapter": "plan",
+  "section": "第三章 施工计划->五、 安全生产费用使用计划",
+  "content_length": 568,
+  "content_preview": "表8 安全生产费用使用计划表\n|  |  |  |  |\n| 序号 | 费用名称 | 费用类别 | 单项投入金额 |\n| 1 | 设置、安装、改造和维护安全防护设施设备支出 | 高处作业 | 5000 |\n| 2 | 配备、维护、保养应急救援器材、设备 | 应急物资 | 5000 |\n| 3 | 重大危险源和事故隐患评估、监控和整改 | 风险辨识评估 | 50000 |\n| 4 | 安全生产检查、",
+  "success": true,
+  "error": null,
+  "wall_time": 0.2,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_16_technology.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 16,
+  "chapter": "technology",
+  "section": "第四章 施工工艺技术->一、 主要施工方法概述",
+  "content_length": 487,
+  "content_preview": "本项目无路基采用跨线门式起重机在映雪特大桥66~69#墩位置提梁上桥,先使\n用门式起重机进行映雪特大桥第67~69 跨9 片T 梁安装,再使用门式起重机将在地\n面上拼好的架桥机提至第67~69 跨上,使用门式起重机将炮车提至桥面。T 梁预制\n预应力张拉、压浆及封锚工作,并进行梁体编号,用98T 龙门吊将已施工完成的梁\n板从台座上起吊横移到运梁炮车上,由运梁炮车将梁拉至跨墩龙门吊处,由两台龙\n门吊将",
+  "success": true,
+  "error": null,
+  "wall_time": 3.31,
+  "response_length": 653,
+  "raw_response": "```json\n{\n  \"issue_point\": \"错别字与漏字\",\n  \"location\": \"T 梁预制预应力张拉、压浆及封锚工作,并进行梁体编号,用 98T 龙门吊将已施工完成的梁板从台座上起吊横移到运梁炮车上,由运梁炮车将梁拉至跨墩龙门吊处,由两台龙门吊将梁台吊至桥面炮车上,吊龙门吊落梁加固,运梁平车将梁板运到安装跨,运梁平车运梁过跨时未浇湿接缝时平车轮距 T 梁翼板边不得小于 15cm,已浇湿接缝的尽量不要压湿接缝行走。运梁平车喂梁时架桥机前上跑边必须与运梁平车同步,架桥起起吊就位落梁,安装就位后横向连接不得小于三道(即中横隔板和端隔板必须连接)且端横隔板端头必须用枕木支垫,边梁侧必须打斜撑,斜撑必须采用直径不于 100mm,壁厚不得小 5mm 钢管,采用方木作斜撑断面不得小于 15x15cm。\",\n  \"suggestion\": \"1. 将“梁台吊”改为“梁吊装”;2. 将“架桥起起吊”改为“架桥机起吊”;3. 将“直径不于”改为“直径不小于”;4. 将“壁厚不得小”改为“壁厚不得小于”。\",\n  \"reason\": \"1. '梁台吊'语义不通,结合上下文'吊至...吊龙门吊',应为'吊装'或'吊至',此处'台'为'装'的形近/音近误用或漏字导致语意不明;2. '架桥起'应为'架桥机',多字且导致名词错误;3. '不于'为'不小于'的漏字,导致语法不完整;4. '不得小'为'不得小于'的漏字,导致语法不完整。\",\n  \"risk_level\": \"中风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_17_technology.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 17,
+  "chapter": "technology",
+  "section": "第四章 施工工艺技术->二、 技术参数",
+  "content_length": 2050,
+  "content_preview": "1、T 梁运架设备介绍\n(1)DJ40180 架桥机介绍\n1)结构组成\n架桥机由机臂、吊重行车、曲梁、0 号柱、1 号柱、2 号柱、3 号柱、1/2 号柱\n横移轨道、机臂横移机构、尾部托架、电气系统、液压系统以及及机臂调平系统等\n构成,如图4。\n```markdown\n|  |  |  |  |  |  |  |  |\n| --- | --- | --- | --- | --- | --- | -",
+  "success": true,
+  "error": null,
+  "wall_time": 1.18,
+  "response_length": 220,
+  "raw_response": "```json\n{\n  \"issue_point\": \"重复字词错误\",\n  \"location\": \"1、T 梁运架设备介绍 (1)DJ40180 架桥机介绍 1)结构组成 ... 以及及机臂调平系统等构成,如图4。\",\n  \"suggestion\": \"将“以及及”修改为“以及”\",\n  \"reason\": \"原文中“以及”一词重复输入,属于多字错误,应删除多余的“及”字。\",\n  \"risk_level\": \"低风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_18_technology.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 18,
+  "chapter": "technology",
+  "section": "第四章 施工工艺技术->三、 工艺流程",
+  "content_length": 305,
+  "content_preview": "```markdown\n流程图:\n吊装梁、安装支座\n运梁至喂梁位置\n架桥机就位\n运梁车与架桥机\n前行车提梁\n运梁车与前行车前\n后行车起吊,两行车同步\n运梁车返回\n两行车落梁到位,梁片\n安装支座锚固螺栓\n调整 T 梁水平\n支座灌浆、锚固\n制作灌浆试件\n强度≥20MPa\n拆卸\nT 梁就位\n安装防落梁\n安装其他梁片\n```\n吊装梁、安装支座\n运梁车与架桥机\n运梁至喂梁位置\n前行车提梁\n运梁车与前行车前\n",
+  "success": true,
+  "error": null,
+  "wall_time": 0.44,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_19_technology.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 19,
+  "chapter": "technology",
+  "section": "第四章 施工工艺技术->四、 施工准备",
+  "content_length": 2909,
+  "content_preview": "1、测量放样\n水准点、轴线点引测及布设,复检盖梁、挡块、支承垫石标高、平面位置及垫\n石表面平整度,将支承中心线及梁轴线用墨线在垫石上标十字线,梁端线也要用墨\n线弹出。\n2、临时用水、用电\n施工用水、结构物养护用水等采用渔子溪河流。水质定期检测,确保施工用水\n合格。在生产过程中,做到不对水资源造成破坏。且取水证相关手续已办理完善。\n提梁区域配置1 台1250KVA 变压器供应后场用电,该区域配备一台",
+  "success": true,
+  "error": null,
+  "wall_time": 2.3,
+  "response_length": 428,
+  "raw_response": "```json\n{\n  \"issue_point\": \"错别字及用词错误\",\n  \"location\": \"8、架桥机过孔前检查内容 -> 第二段:'确认高强度螺栓连接合格目拧紧力矩达标,部需检查钢丝绳的规格、断丝和磨损情况,确保件、附件安装产全可靠。同时,其未达报废标准,固定和编插符合国标'\",\n  \"suggestion\": \"将“目”改为“且”;将“部”改为“并”;将“件”改为“配件”;将“产全”改为“安全”。\",\n  \"reason\": \"1. '合格目'应为'合格且','目'为'且'的形近或音近错字,导致语义不通。2. '部需'应为'并需','部'为'并'的错字,表示并列关系。3. '确保件、附件'中'件'字缺失,应为'配件'或'构件',结合上下文指代零部件,补全为'配件'更通顺。4. '安装产全可靠'中'产全'明显为'安全'的错别字,'产'与'安'字形相近且语境为安全检查。\",\n  \"risk_level\": \"中风险\"\n}\n```"
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_20_retest2.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 10 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_20_technology.json


+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_21_technology.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 21,
+  "chapter": "technology",
+  "section": "第四章 施工工艺技术->六、 检查要求",
+  "content_length": 1284,
+  "content_preview": "检查要求包含所用的材料,构配件进场质量检查、抽查,以及施工过程中各道\n工序检查内容及标准。\n1、安装前检查\n核心检查项目:T 梁强度、T 梁尺寸与外观、支座、桥墩与盖梁、技术文件与人\n员。\n关键标准/要求:\nT 梁及墩台混凝土强度均需达到设计强度的100% ;\nT 梁长度允许+5,-10mm;翼板宽度允许±20mm;\n备注/要点:需用回弹仪现场实测强度。\n2、运输过程检查\n核心检查项目:运输路线、",
+  "success": true,
+  "error": null,
+  "wall_time": 0.22,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_22_safety.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 22,
+  "chapter": "safety",
+  "section": "第五章 安全保证措施->一、 安全保证体系",
+  "content_length": 753,
+  "content_preview": "```markdown\n安全生产保证体系\n法制保证\n依法“治”安\n安全生产法及其他相关法律法规\n合规性评价\n各级人员法定安全生产职责\n持证上岗\n思想保证\n提升全员安全意识\n三级、四新安全教育\n安全知识宣贯\n安全宣传标语、图画\n组织保证\n公司安委会\n项目安全领导小组\n项目安保科\n专职安全员\n兼职安全员\n制度保证\n各项安全生产管理制度\n各种机械安全操作规程\n监督制度、规程执行情况,纠罚过\n措施保证\n危",
+  "success": true,
+  "error": null,
+  "wall_time": 0.2,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_23_safety.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 23,
+  "chapter": "safety",
+  "section": "第五章 安全保证措施->二、 组织保证措施",
+  "content_length": 1661,
+  "content_preview": "1、安全管理组织机构\n项目部成立安全生产领导小组,以项目经理为组长,项目书记、项目副经理、\n项目总工为副组长,各科室部门负责人为组员,贯彻管生产必须管安全的原则,建\n立健全岗位责任制,从组织、制度上保证安全生产,做到规范生产,安全操作。\n表11 安全管理组织机构\n|  |  |  |  |  |\n| --- | --- | --- | --- | --- |\n|---|---|---|---|--",
+  "success": true,
+  "error": null,
+  "wall_time": 1.71,
+  "response_length": 389,
+  "raw_response": "```json\n{\n  \"issue_point\": \"错别字及用词不规范\",\n  \"location\": \"2、建立安全管理责任制 (10) 建全生产规章制度,带领本班组成员安全作业,拒绝违章指挥,开好班前五分钟安全生产讲话。\",\n  \"suggestion\": \"将“建全”改为“健全”;将“班前五分钟安全生产讲话”改为“班前五分钟安全生产讲话会”或“班前五分钟安全讲话”(建议补全为“班前安全讲话会”以符合语法规范,或仅修正错字“建全”为“健全”)。\",\n  \"reason\": \"1. “建全”为错别字,规范写法应为“健全”,指使完善、完备。2. “开好班前五分钟安全生产讲话”存在动宾搭配不当,“讲话”通常指行为,此处语境指代一种会议或活动形式,建议改为“讲话会”或“会议”,或者简化为“开好班前安全讲话”。\",\n  \"risk_level\": \"低风险\"\n}\n```"
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 7 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_24_retest.json


+ 8 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_24_retest2.json

@@ -0,0 +1,8 @@
+{
+  "chunk_index": 24,
+  "section": "第五章 安全保证措施->三、 技术保障措施",
+  "content_length": 21274,
+  "wall_time": 1.61,
+  "response_length": 248,
+  "raw_response": "```json\n{\n  \"issue_point\": \"错别字\",\n  \"location\": \"1、架桥机安、拆安全技术保证措施 (10) ... 在珩架梁以上作业的人员必须系好安全带。\",\n  \"suggestion\": \"将“珩架梁”改为“桁架梁”\",\n  \"reason\": \"“珩”为错别字,在桥梁工程术语中,指由杆件组成的三角形格构梁应为“桁架梁”。文中第13条及第7条(5)也出现了同样的“珩架梁”错误,均应为“桁架梁”。\",\n  \"risk_level\": \"中风险\"\n}\n```"
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 10 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_24_safety.json


+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_25_safety.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 25,
+  "chapter": "safety",
+  "section": "第五章 安全保证措施->五、 监测监控措施",
+  "content_length": 1425,
+  "content_preview": "1、监测内容\n(1)梁体预制时制梁基础的稳定性。\n(2)运梁通道边坡稳定性监测。\n2、梁体预制时制梁基础的稳定性监测方法\n在台座基础上预埋观测点,通过水准仪进行沉降观测的方法进行监测,具体的\n要求如下:\n每台座布设10 个观测点,分别设置于台座基础两侧梁支点、1/4、3/4 和跨中位\n置,观测点距离地面高度5cm,观测点采用直径20mm 的圆钢,长度10cm,外露长度\n1cm,作防锈处理并用油漆进",
+  "success": true,
+  "error": null,
+  "wall_time": 0.81,
+  "response_length": 190,
+  "raw_response": "```json\n{\n  \"issue_point\": \"重复字词错误\",\n  \"location\": \"3、运梁通道边坡稳定性监测监测方法\",\n  \"suggestion\": \"删除多余的“监测”,改为“3、运梁通道边坡稳定性监测方法”\",\n  \"reason\": \"标题中“监测”一词重复出现,属于明显的重复字词错误。\",\n  \"risk_level\": \"低风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_26_safety.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 26,
+  "chapter": "safety",
+  "section": "第五章 安全保证措施->六、 应急处置措施",
+  "content_length": 3262,
+  "content_preview": "1、应急处置程序\n|  |  |\n| 事故发生 | |\n| 接警 | 信息反馈 |\n| 警情判断响应级别 | |\n| 应急启动 |  |\n| 救援行动 | |\n| 事态控制 |  |\n| 人员救助 |  |\n| 工程抢险 |  |\n| 警戒与现场封闭 |  |\n| 医疗救护 |  |\n| 人员疏散 |  |\n| 现场监测 |  |\n| 专家支持 |  |\n| 现场清理 |  |\n| 解除警戒 | ",
+  "success": true,
+  "error": null,
+  "wall_time": 1.36,
+  "response_length": 280,
+  "raw_response": "```json\n{\n  \"issue_point\": \"错别字\",\n  \"location\": \"(3)触电事故应急处置措施 -> B.现场急救 -> 第二段:‘触电者呼吸困难、稀少,或发生痉挛,并速请医务员处理并协同值班车送往医院’\",\n  \"suggestion\": \"将‘并速请’改为‘应速请’\",\n  \"reason\": \"此处语境为提出建议或要求,‘并’字表示并列或递进,用在此处导致语句逻辑不通,结合上下文‘应使触电者...’的句式,此处应为‘应速请’,属于明显的错别字或漏字导致的语病。\",\n  \"risk_level\": \"中风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_27_quality.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 27,
+  "chapter": "quality",
+  "section": "第六章 质量保证措施->一、 质量保证体系",
+  "content_length": 4198,
+  "content_preview": "1、质量保证体系框图\n| 施工组织设计阶段 | 施工规范 | 设计要求 | 招标要求 | 质量要求 | 具体施工质量要求 | 安全操作规程 | 测量方法 | 材料取样试验 | 配合比试验 |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n|---|---|---|---|---|---|---|---|---|---|\n",
+  "success": true,
+  "error": null,
+  "wall_time": 0.47,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_28_environment.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 28,
+  "chapter": "environment",
+  "section": "第七章 环境保证措施->一、 环境保证体系",
+  "content_length": 4576,
+  "content_preview": "|  |  |  |  |  |  |  |\n| --- | --- | --- | --- | --- | --- | --- |\n|---|---|---|---|---|---|---|\n| 环境保护及水土保持保证体系 | | | | | | |\n| 思想保证 | 组织保证 | 过程保证 | 目标保证 | 制度保证 | 经济保证 |  |\n|---|---|---|---|---|---|\n",
+  "success": true,
+  "error": null,
+  "wall_time": 0.33,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_29_management.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 29,
+  "chapter": "management",
+  "section": "第八章 施工管理及作业人员配备与分工->一、 施工管理人员",
+  "content_length": 880,
+  "content_preview": "针对工程,项目经理部成立了一支经验丰富,技术过硬的管理团队进行组织施\n工。具体人员计划见下表:\n表19 主要施工管理人员表\n|  |  |  |  |\n| 序号 | 姓名 | 职务 | 岗位职责 |\n| 1 | 卓越 | 项目经理 | 全面负责 |\n| 2 | 杨治 | 项目副经理 | 全线施工安全生产负责 |\n| 3 | 蒲映先 | 项目总工 | 全线施工技术负责 |\n| 4 | 张宇 | 工程",
+  "success": true,
+  "error": null,
+  "wall_time": 0.2,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_30_management.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 30,
+  "chapter": "management",
+  "section": "第八章 施工管理及作业人员配备与分工->二、 专职安全生产管理人员",
+  "content_length": 391,
+  "content_preview": "在各工序交叉作业中,为加强安全监控力度,本工程配置专职安全管理人员,\n全过程检查施工作业安全。\n表20 专职安全生产管理人员表\n|  |  |  |  |  |\n| --- | --- | --- | --- | --- |\n|---|---|---|---|---|\n| 序号 | 姓名 | 类别 | 合格证号 | 有效期 |\n|---|---|---|---|---|\n| 1 | 黄彦霖 | C",
+  "success": true,
+  "error": null,
+  "wall_time": 0.18,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_31_management.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 31,
+  "chapter": "management",
+  "section": "第八章 施工管理及作业人员配备与分工->三、 特种作业人员",
+  "content_length": 1290,
+  "content_preview": "本工程所涉及特种作业人员有电工、电焊工、施工机械操作手等。\n1、特种作业人员在独立上岗作业前,按照国家有关规定进行与本工种相适应的、\n专业技术理论学习和实践操作训练。经专业培训并考试合格后,持有关行政管理机\n构颁发的有效操作证件方能上岗作业。\n2、特种作业人员要熟知本岗位及工种的安全技术操作规程,严格按照相关规程\n进行操作。\n3、特种作业人员作业前对设备及周围环境进行检查,清除周围影响安全作业的\n",
+  "success": true,
+  "error": null,
+  "wall_time": 0.33,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_32_management.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 32,
+  "chapter": "management",
+  "section": "第八章 施工管理及作业人员配备与分工->四、 其他作业人员",
+  "content_length": 238,
+  "content_preview": "其他作业人员包含专业分包单位(协作队伍)管理人员数量,不同工种(班组、\n区域)的作业人员数量等。\n表22 其他作业人员\n|  |  |  |  |\n| 工种名称 | 人数 | 工种名称 | 人数 |\n| 架桥机操作手 | 2 |  |  |\n| 架桥机操作手 | 2 |  |  |\n架桥机操作手\n架桥机操作手\n|  |  |  |  |\n| 杂工 | 6 |  |  |\n| 运梁车司机 | 3 |",
+  "success": true,
+  "error": null,
+  "wall_time": 0.32,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_33_acceptance.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 33,
+  "chapter": "acceptance",
+  "section": "第九章 验收要求->一、 验收标准",
+  "content_length": 396,
+  "content_preview": "1、《山地(齿轨)轨道交通技术规范》(DB 51/T 2542-2018)\n2、《铁路混凝土工程施工质量验收标准》(TB 10424-2018)\n3、《铁路桥涵工程施工质量验收标准》(TB 10415-2018)\n4、《铁路工程基本作业施工安全技术规程》(TB 10301-2020 )\n5、《铁路桥涵工程施工技术规程》Q/CR9603-2015;\n6、《施工现场临时用电安全技术规范》(JGJ46-",
+  "success": true,
+  "error": null,
+  "wall_time": 1.37,
+  "response_length": 298,
+  "raw_response": "```json\n{\n  \"issue_point\": \"标准编号括号不匹配\",\n  \"location\": \"10、《预应力混凝土用钢绞线》GBT224-2014);\",\n  \"suggestion\": \"将'GBT224-2014)'改为'(GB/T 224-2014)',即补充左括号并修正标准号格式\",\n  \"reason\": \"原文第10项中,标准号前缺少左括号,且右括号存在,导致括号不匹配;同时标准号'GBT224-2014'通常应写作'GB/T 224-2014'(虽主要属格式规范,但结合括号缺失,属于明显的书写错误)。\",\n  \"risk_level\": \"低风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_34_acceptance.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 34,
+  "chapter": "acceptance",
+  "section": "第九章 验收要求->二、 验收程序",
+  "content_length": 277,
+  "content_preview": "1、预制场作业管理人员组织对关键环节施工前条件进行自检自评,自检自评合\n格后,向项目部提交关键环节验收申请。\n2、质检处组织验收,验收组成员包括:项目总工办、工程处、安环处、试验室、\n机料处和合同处负责人等。\n3、验收组成员按照检查表所列项目内容逐项验收,形成明确验收结论,报质检\n处备案。对于验收存在不合格项时由质检员督促进行整改,重新组织验收。\n4、多次验收不合格项时,未按验收组意见及时整改、逾",
+  "success": true,
+  "error": null,
+  "wall_time": 0.19,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_35_acceptance.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 35,
+  "chapter": "acceptance",
+  "section": "第九章 验收要求->三、 验收内容",
+  "content_length": 8509,
+  "content_preview": "针对项目认定的关键工序进行验收,按照相关规范进行验收,其检验方法:检\n查质量证明文件、观察、尺量、测量、砼强度检测等。验收内容及合格标准如下:\n1、材料、机具检查验收\n对所有材料和机械进行进场登记验收,清退不合格材料和机械。钢筋、预应力\n钢绞线、锚夹具、波纹管、压浆料、起吊钢绳、吊具等材料应具有出厂质量证明书\n和试验报告单,进场时除检查其外观和标志外,按不同的品种、等级、牌号、规格\n及生产厂家分批",
+  "success": true,
+  "error": null,
+  "wall_time": 2.58,
+  "response_length": 434,
+  "raw_response": "```json\n{\n  \"issue_point\": \"错别字及术语错误\",\n  \"location\": \"表24 架桥机作业过程检查表 中:'过孔到位后用水平仪超平并将前支腿支垫好';表25 运梁车作业过程检查表 中:'旋转装置保险1解除'、'旋转装置保险2固定'、'旋转装置保险1固定';以及多处'吊、后梁天车'表述。\",\n  \"suggestion\": \"将'超平'改为'抄平';将'旋转装置保险1/2'改为'旋转装置锁销1/2'或'旋转装置锁定销1/2';将'吊、后梁天车'改为'前、后吊梁天车'。\",\n  \"reason\": \"1. '超平'为常见错别字,工程测量中正确术语为'抄平'(意为抄测水平)。2. '保险'在此处语境下指机械锁定装置,规范术语通常为'锁销'或'锁定销','保险'易产生歧义且不符合工程习惯。3. '吊、后梁天车'明显漏字,结合上下文'前吊梁天车',应为'前、后吊梁天车'。\",\n  \"risk_level\": \"中风险\"\n}\n```"
+}

+ 12 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_36_acceptance.json

@@ -0,0 +1,12 @@
+{
+  "chunk_index": 36,
+  "chapter": "acceptance",
+  "section": "第九章 验收要求->四、 验收时间",
+  "content_length": 144,
+  "content_preview": "验收时间根据《专项施工方案管理实施细则》表12《专项施工方案验收条件一\n览表》所预估的时间,时间可以根据实际进度进行调整,但应在具备验收条件后15\n日内项目组织验收,对于风险较大的临时设施搭建、安装完毕项目验收合格后,报\n公司技术质量部,由公司总工程师或公司技术主管部门组织联合检查验收。",
+  "success": true,
+  "error": null,
+  "wall_time": 0.17,
+  "response_length": 5,
+  "raw_response": "无明显问题"
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 10 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_37_acceptance.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
utils_test/Grammar_Check_Test/full_scan_results/chunk_37_retest2.json


+ 9 - 0
utils_test/Grammar_Check_Test/grammar_check_result.json

@@ -0,0 +1,9 @@
+{
+  "chunk_section": "第二章 工程概况->五、 施工要求和技术保证条件",
+  "chunk_length": 1851,
+  "success": true,
+  "wall_time": 4.51,
+  "response_length": 936,
+  "is_no_issue": false,
+  "raw_response": "```json\n[\n  {\n    \"issue_point\": \"句尾标点重复\",\n    \"location\": \"(2)质量目标 5) ... 经监理工程师批准后再进行。。\",\n    \"suggestion\": \"将句尾的“。。”修改为“。”\",\n    \"reason\": \"句尾出现了两个句号,属于标点符号重复错误。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"错别字(形近字)\",\n    \"location\": \"2、技术保证条件(1)施工要求 4) ... 发现方案有不可实施的部份 ...\",\n    \"suggestion\": \"将“部份”修改为“部分”\",\n    \"reason\": \"“部分”为规范写法,“部份”为旧式或错误写法,在正式公文中应使用规范汉字。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"重复字词\",\n    \"location\": \"2、技术保证条件(1)施工要求 5) ... 由公司总工程师或或其授权委托 ...\",\n    \"suggestion\": \"删除多余的“或”,改为“由公司总工程师或其授权委托”\",\n    \"reason\": \"“或或”为明显的输入重复错误。\",\n    \"risk_level\": \"低风险\"\n  },\n  {\n    \"issue_point\": \"错别字(同音/形近字)\",\n    \"location\": \"2、技术保证条件(2)技术保障条件 ... 进量采用电子计量 ...\",\n    \"suggestion\": \"将“进量”修改为“尽量”或“进料量”(结合上下文推测应为“进料量”或“尽量”)\",\n    \"reason\": \"“进量”在此处语意不通,结合上下文“电子计量”及混凝土拌和场景,极大概率为“进料量”(指投入材料的量)的漏字或“尽量”的误打。考虑到“进量”并非标准术语,且后文紧跟“采用电子计量”,推测原文想表达“进料量采用电子计量”,故建议修正为“进料量”。\",\n    \"risk_level\": \"中风险\"\n  }\n]\n```"
+}

+ 93 - 0
utils_test/Grammar_Check_Test/run_full_scan.py

@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""全量 chunk 词句语法审查 — 保存所有原始响应用于人工分析"""
+
+import sys, os, json, asyncio, time
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)).split('utils_test')[0])
+
+RESULT_JSON = os.path.join(
+    os.path.dirname(os.path.abspath(__file__)).split('utils_test')[0],
+    "temp", "construction_review", "final_result",
+    "67d45692fb97aeef8f896e78475ce539-1779781589.json"
+)
+OUTPUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "full_scan_results")
+
+async def main():
+    from core.construction_review.component.reviewers.grammar_check_reviewer import GrammarCheckReviewer
+
+    with open(RESULT_JSON, 'r', encoding='utf-8') as f:
+        data = json.load(f)
+    chunks = data['document_result']['structured_content']['chunks']
+
+    os.makedirs(OUTPUT_DIR, exist_ok=True)
+    reviewer = GrammarCheckReviewer()
+
+    all_results = []
+
+    for i, chunk in enumerate(chunks):
+        content = chunk['content']
+        section = chunk.get('section_label', f'chunk_{i}')
+        chapter = chunk.get('chapter_classification', 'unknown')
+        trace_id = f"full_scan_{i}_{int(time.time())}"
+
+        print(f"[{i:02d}/{len(chunks)}] {chapter}/{section[:40]}... (len={len(content)})")
+
+        start = time.time()
+        try:
+            result = await reviewer.check_grammar(
+                trace_id=trace_id,
+                review_content=content,
+                state=None, stage_name=None,
+                enable_thinking=False,
+            )
+            wall_time = time.time() - start
+            response_text = result.details.get('response', '')
+            success = result.success
+            error = result.error_message
+        except Exception as e:
+            wall_time = time.time() - start
+            response_text = ""
+            success = False
+            error = str(e)
+            print(f"      ERROR: {e}")
+
+        record = {
+            "chunk_index": i,
+            "chapter": chapter,
+            "section": section,
+            "content_length": len(content),
+            "content_preview": content[:200],
+            "success": success,
+            "error": error,
+            "wall_time": round(wall_time, 2),
+            "response_length": len(response_text),
+            "raw_response": response_text,
+        }
+        all_results.append(record)
+
+        is_no_issue = '无明显问题' in response_text and len(response_text) < 50
+        status = "NO_ISSUE" if is_no_issue else f"ISSUES(response_len={len(response_text)})"
+        print(f"      {wall_time:.2f}s | {status}")
+
+    # 保存汇总
+    summary_path = os.path.join(OUTPUT_DIR, "all_results.json")
+    with open(summary_path, 'w', encoding='utf-8') as f:
+        json.dump(all_results, f, ensure_ascii=False, indent=2)
+    print(f"\nSaved {len(all_results)} results to {summary_path}")
+
+    # 保存每个 chunk 的独立文件(方便逐条阅读)
+    for record in all_results:
+        idx = record["chunk_index"]
+        chunk_path = os.path.join(OUTPUT_DIR, f"chunk_{idx:02d}_{record['chapter']}.json")
+        with open(chunk_path, 'w', encoding='utf-8') as f:
+            json.dump(record, f, ensure_ascii=False, indent=2)
+
+    print(f"Saved individual files to {OUTPUT_DIR}/")
+
+    # 打印统计
+    no_issue_count = sum(1 for r in all_results if '无明显问题' in r['raw_response'] and len(r['raw_response']) < 50)
+    issue_count = len(all_results) - no_issue_count
+    error_count = sum(1 for r in all_results if not r['success'])
+    print(f"\nStats: {no_issue_count} no-issue, {issue_count} has-issues, {error_count} errors")
+
+asyncio.run(main())

+ 341 - 0
utils_test/Grammar_Check_Test/test_grammar_check_prompt_fix.py

@@ -0,0 +1,341 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+词句语法审查 — Prompt 修复验证测试
+
+验证目标:修复 "将A改为A" 的离谱错误
+- 旧 prompt 包含否定示例(如"禁止输出将'设'改为'设'"),反而给模型植入了错误模式
+- 新 prompt 使用肯定式规则("犹豫时输出无明显问题")
+
+测试数据:temp/construction_review/final_result/67d45692fb97aeef8f896e78475ce539-1779781589.json
+其中 chunk[8] 包含触发 bug 的原文:"必须采取充分的安全保证措施"
+
+运行方式:
+    $env:PYTHONPATH = (Get-Location)
+    pytest utils_test/Grammar_Check_Test/test_grammar_check_prompt_fix.py -v -s
+"""
+
+import sys
+import os
+import json
+import re
+import time
+import asyncio
+from pathlib import Path
+
+# 项目根目录注入
+PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
+if PROJECT_ROOT not in sys.path:
+    sys.path.insert(0, PROJECT_ROOT)
+
+import pytest
+
+# ============================================================
+# 测试数据
+# ============================================================
+RESULT_JSON = os.path.join(
+    PROJECT_ROOT,
+    "temp", "construction_review", "final_result",
+    "67d45692fb97aeef8f896e78475ce539-1779781589.json"
+)
+
+
+def _load_chunks():
+    """加载文档 chunks"""
+    with open(RESULT_JSON, 'r', encoding='utf-8') as f:
+        data = json.load(f)
+    return data['document_result']['structured_content']['chunks']
+
+
+# ============================================================
+# Bug 检测工具函数
+# ============================================================
+def detect_a_to_a_pattern(response_text: str) -> list:
+    """
+    检测模型输出中是否包含 "将X改为X" 模式(X相同)
+
+    匹配模式:
+    - 将"充分"改为"充分"
+    - 将'设'改为'设'
+    - 把"X"修改为"X"
+    - 建议将X改为X
+
+    Returns:
+        list: 匹配到的问题片段列表
+    """
+    if not response_text:
+        return []
+
+    issues = []
+
+    # 模式1: 将"X"改为"X" / 将'X'改为'X' / 把"X"改为"X"
+    pattern_quoted = re.compile(
+        r'(?:将|把)["“\'](.{1,10})["”\']\s*(?:改为|修改为|替换为|换成)\s*["“\'](.{1,10})["”\']'
+    )
+    for m in pattern_quoted.finditer(response_text):
+        original, replacement = m.group(1).strip(), m.group(2).strip()
+        if original == replacement:
+            issues.append(m.group(0))
+
+    # 模式2: suggestion 字段过长且包含自我辩论关键词
+    debate_keywords = ['然而', '再细看', '重新审视', '其实', '但', '不过', '似乎', '略显生硬']
+    debate_count = sum(1 for kw in debate_keywords if kw in response_text)
+    if debate_count >= 3:
+        issues.append(f"[自我辩论] 响应中包含 {debate_count} 个犹豫/反驳关键词: "
+                      f"{[kw for kw in debate_keywords if kw in response_text]}")
+
+    return issues
+
+
+def parse_json_from_response(response_text: str) -> list:
+    """从模型响应中提取 JSON 结果"""
+    if not response_text:
+        return []
+
+    # 先尝试直接解析
+    try:
+        data = json.loads(response_text)
+        if isinstance(data, list):
+            return data
+        elif isinstance(data, dict):
+            return [data]
+    except (json.JSONDecodeError, TypeError):
+        pass
+
+    # 尝试从 markdown 代码块中提取
+    json_blocks = re.findall(r'```(?:json)?\s*\n?(.*?)\n?```', response_text, re.DOTALL)
+    for block in json_blocks:
+        try:
+            data = json.loads(block.strip())
+            if isinstance(data, list):
+                return data
+            elif isinstance(data, dict):
+                return [data]
+        except (json.JSONDecodeError, TypeError):
+            continue
+
+    # 尝试找到第一个 [ 或 { 开始解析
+    for start_char, end_char in [('[', ']'), ('{', '}')]:
+        start = response_text.find(start_char)
+        if start >= 0:
+            # 从后往前找匹配的结束符
+            for end in range(len(response_text) - 1, start, -1):
+                if response_text[end] == end_char:
+                    try:
+                        data = json.loads(response_text[start:end + 1])
+                        if isinstance(data, list):
+                            return data
+                        elif isinstance(data, dict):
+                            return [data]
+                    except (json.JSONDecodeError, TypeError):
+                        continue
+
+    return []
+
+
+# ============================================================
+# 测试类
+# ============================================================
+class TestGrammarCheckPromptFix:
+    """词句语法审查 Prompt 修复验证"""
+
+    @pytest.fixture(autouse=True)
+    def setup(self):
+        """初始化"""
+        self.chunks = _load_chunks()
+        # bug 复现的 chunk: [8] 包含 "采取充分的安全保证措施"
+        self.bug_chunk = self.chunks[8]
+        assert '充分' in self.bug_chunk['content'], "chunk[8] 应包含 '充分' 文本"
+
+    @pytest.mark.asyncio
+    @pytest.mark.integration
+    async def test_bug_chunk_no_a_to_a(self):
+        """
+        【核心测试】原 bug chunk 不再产生 "将A改为A" 的结果
+
+        这是触发原始 bug 的具体文本(chunk[8]: 施工要求和技术保证条件),
+        模型曾对"充分"一词产生自我辩论,输出"将'充分'改为'充分'"。
+        """
+        from core.construction_review.component.reviewers.grammar_check_reviewer import GrammarCheckReviewer
+
+        reviewer = GrammarCheckReviewer()
+        trace_id = f"grammar_fix_test_bug_{int(time.time())}"
+
+        print(f"\n{'='*70}")
+        print(f"  测试原 bug chunk: {self.bug_chunk['section_label']}")
+        print(f"  内容长度: {len(self.bug_chunk['content'])} 字符")
+        print(f"{'='*70}")
+
+        start = time.time()
+        result = await reviewer.check_grammar(
+            trace_id=trace_id,
+            review_content=self.bug_chunk['content'],
+            state=None,
+            stage_name=None,
+            enable_thinking=False,
+        )
+        wall_time = time.time() - start
+
+        print(f"\n  审查耗时: {wall_time:.2f}s")
+        print(f"  success: {result.success}")
+
+        response_text = result.details.get('response', '')
+        print(f"  响应长度: {len(response_text)} 字符")
+
+        # 判断是否输出"无明显问题"
+        is_no_issue = '无明显问题' in response_text and len(response_text) < 50
+        print(f"  是否无明显问题: {is_no_issue}")
+
+        if not is_no_issue:
+            # 解析 JSON 结果
+            issues = parse_json_from_response(response_text)
+            print(f"  发现 {len(issues)} 个问题")
+            for idx, issue in enumerate(issues):
+                print(f"\n  --- 问题 {idx + 1} ---")
+                print(f"  issue_point: {issue.get('issue_point', 'N/A')}")
+                print(f"  location: {issue.get('location', 'N/A')[:80]}...")
+                print(f"  suggestion: {issue.get('suggestion', 'N/A')[:120]}")
+                print(f"  reason: {issue.get('reason', 'N/A')[:120]}")
+                print(f"  risk_level: {issue.get('risk_level', 'N/A')}")
+
+            # 打印原始响应供人工检查
+            print(f"\n  --- 原始响应 ---")
+            print(response_text[:2000])
+        else:
+            print(f"  原始响应: {response_text}")
+
+        # ===== 断言 =====
+        assert result.success, f"审查应成功,实际错误: {result.error_message}"
+
+        # 核心断言:不应出现 "将A改为A" 模式
+        a_to_a_issues = detect_a_to_a_pattern(response_text)
+        assert not a_to_a_issues, (
+            f"检测到 '将A改为A' 模式仍存在!\n"
+            f"问题片段: {a_to_a_issues}\n"
+            f"完整响应:\n{response_text}"
+        )
+
+    @pytest.mark.asyncio
+    @pytest.mark.integration
+    async def test_multiple_overview_chunks(self):
+        """
+        【扩展测试】多个 overview chunk 均不产生 "将A改为A" 结果
+
+        测试所有 overview 章节的 chunk,确保修复具有泛化性。
+        """
+        from core.construction_review.component.reviewers.grammar_check_reviewer import GrammarCheckReviewer
+
+        reviewer = GrammarCheckReviewer()
+
+        # 筛选 overview chunks
+        overview_chunks = [
+            c for c in self.chunks
+            if c.get('chapter_classification') == 'overview'
+        ]
+        print(f"\n{'='*70}")
+        print(f"  扩展测试: {len(overview_chunks)} 个 overview chunks")
+        print(f"{'='*70}")
+
+        all_a_to_a_issues = []
+
+        for idx, chunk in enumerate(overview_chunks):
+            trace_id = f"grammar_fix_test_overview_{idx}_{int(time.time())}"
+            section = chunk.get('section_label', f'chunk_{idx}')
+            content = chunk['content']
+
+            print(f"\n  [{idx}] {section} (len={len(content)})")
+
+            start = time.time()
+            result = await reviewer.check_grammar(
+                trace_id=trace_id,
+                review_content=content,
+                state=None,
+                stage_name=None,
+                enable_thinking=False,
+            )
+            wall_time = time.time() - start
+
+            response_text = result.details.get('response', '')
+            is_no_issue = '无明显问题' in response_text and len(response_text) < 50
+
+            # 检测 A→A 模式
+            a_to_a = detect_a_to_a_pattern(response_text)
+            status = "[OK] 无明显问题" if is_no_issue else (
+                f"[!!] 有 {len(parse_json_from_response(response_text))} 个问题"
+            )
+            if a_to_a:
+                status += f" [FAIL] 检测到A->A模式: {a_to_a}"
+                all_a_to_a_issues.extend([(section, issue) for issue in a_to_a])
+
+            print(f"      耗时: {wall_time:.2f}s | {status}")
+
+            if not is_no_issue and not a_to_a:
+                # 打印发现的问题摘要
+                issues = parse_json_from_response(response_text)
+                for issue in issues:
+                    ip = issue.get('issue_point', '')[:60]
+                    sg = issue.get('suggestion', '')[:80]
+                    print(f"      -> {ip} | 建议: {sg}")
+
+        print(f"\n{'='*70}")
+        print(f"  扩展测试完成: {len(overview_chunks)} 个 chunks")
+        print(f"  A->A 问题数: {len(all_a_to_a_issues)}")
+        print(f"{'='*70}")
+
+        # 核心断言
+        assert not all_a_to_a_issues, (
+            f"检测到 {len(all_a_to_a_issues)} 个 '将A改为A' 模式!\n"
+            + "\n".join(f"  {sec}: {issue}" for sec, issue in all_a_to_a_issues)
+        )
+
+    @pytest.mark.asyncio
+    @pytest.mark.integration
+    async def test_suggestion_field_concise(self):
+        """
+        【格式验证】suggestion 字段应简洁,不包含推理过程
+
+        新 prompt 要求 suggestion 只写最终结论,禁止自我辩论。
+        """
+        from core.construction_review.component.reviewers.grammar_check_reviewer import GrammarCheckReviewer
+
+        reviewer = GrammarCheckReviewer()
+        trace_id = f"grammar_fix_test_concise_{int(time.time())}"
+
+        # 使用 bug chunk
+        result = await reviewer.check_grammar(
+            trace_id=trace_id,
+            review_content=self.bug_chunk['content'],
+            state=None,
+            stage_name=None,
+            enable_thinking=False,
+        )
+
+        response_text = result.details.get('response', '')
+        issues = parse_json_from_response(response_text)
+
+        if not issues:
+            print("\n  模型输出'无明显问题',无需验证 suggestion 格式")
+            return
+
+        print(f"\n  发现 {len(issues)} 个问题,验证 suggestion 格式:")
+
+        for idx, issue in enumerate(issues):
+            suggestion = issue.get('suggestion', '')
+            reason = issue.get('reason', '')
+            print(f"\n  --- 问题 {idx + 1} ---")
+            print(f"  suggestion ({len(suggestion)}字): {suggestion[:150]}")
+            print(f"  reason ({len(reason)}字): {reason[:150]}")
+
+            # suggestion 不应包含推理/辩论关键词
+            debate_keywords = ['然而', '再细看', '重新审视', '让我们', '再审视']
+            found_debate = [kw for kw in debate_keywords if kw in suggestion]
+            assert not found_debate, (
+                f"suggestion 字段包含推理过程!\n"
+                f"检测到辩论关键词: {found_debate}\n"
+                f"suggestion 内容: {suggestion}"
+            )
+
+            # suggestion 不应过长(超过 200 字大概率包含推理)
+            assert len(suggestion) < 200, (
+                f"suggestion 字段过长({len(suggestion)}字),可能包含推理过程:\n{suggestion}"
+            )

+ 197 - 0
utils_test/Grammar_Check_Test/test_grammar_check_split.py

@@ -0,0 +1,197 @@
+"""
+测试词句语法审查的长文本切分逻辑
+
+测试内容:
+1. 切分触发条件(>5000字)
+2. 切分后并行审查
+3. 结果合并去重
+4. JSON 解析鲁棒性
+"""
+
+import sys
+import os
+import json
+import asyncio
+import time
+
+# 注入项目根目录
+project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+sys.path.insert(0, project_root)
+
+from core.construction_review.component.reviewers.grammar_check_reviewer import (
+    GrammarCheckReviewer,
+    SPLIT_THRESHOLD,
+    SEGMENT_MIN_LENGTH,
+    SEGMENT_TARGET_LENGTH,
+    SEGMENT_OVERLAP,
+)
+from core.construction_review.component.reviewers.utils.text_split import split_text_with_overlap
+
+
+def load_test_chunks():
+    """加载测试数据"""
+    test_file = os.path.join(
+        project_root,
+        "temp", "construction_review", "final_result",
+        "67d45692fb97aeef8f896e78475ce539-1779781589.json"
+    )
+    with open(test_file, encoding="utf-8") as f:
+        data = json.load(f)
+    return data["document_result"]["structured_content"]["chunks"]
+
+
+def test_parse_segment_response():
+    """测试 JSON 解析鲁棒性"""
+    reviewer = GrammarCheckReviewer()
+
+    # 测试1: 标准 JSON 数组
+    response1 = '''```json
+[
+  {"issue_point": "错别字", "location": "位置1", "suggestion": "将A改为B", "reason": "原因", "risk_level": "中风险"},
+  {"issue_point": "重复字词", "location": "位置2", "suggestion": "删除重复", "reason": "原因", "risk_level": "低风险"}
+]
+```'''
+    issues1 = reviewer._parse_segment_response(response1)
+    assert len(issues1) == 2, f"Expected 2 issues, got {len(issues1)}"
+    print("[PASS] test_parse_segment_response: JSON array parsed correctly")
+
+    # 测试2: 单个 JSON 对象
+    response2 = '''```json
+{"issue_point": "错别字", "location": "位置1", "suggestion": "将A改为B", "reason": "原因", "risk_level": "中风险"}
+```'''
+    issues2 = reviewer._parse_segment_response(response2)
+    assert len(issues2) == 1, f"Expected 1 issue, got {len(issues2)}"
+    print("[PASS] test_parse_segment_response: JSON object parsed correctly")
+
+    # 测试3: 无明显问题
+    response3 = "无明显问题"
+    issues3 = reviewer._parse_segment_response(response3)
+    assert len(issues3) == 0, f"Expected 0 issues, got {len(issues3)}"
+    print("[PASS] test_parse_segment_response: no-issue response handled correctly")
+
+    # 测试4: 空响应
+    response4 = ""
+    issues4 = reviewer._parse_segment_response(response4)
+    assert len(issues4) == 0, f"Expected 0 issues, got {len(issues4)}"
+    print("[PASS] test_parse_segment_response: empty response handled correctly")
+
+    # 测试5: JSON 中嵌套"无明显问题"(reason 字段中)
+    response5 = '''```json
+[{"issue_point": "错别字", "location": "位置1", "suggestion": "将A改为B", "reason": "原文无明显问题但实际有错", "risk_level": "中风险"}]
+```'''
+    issues5 = reviewer._parse_segment_response(response5)
+    assert len(issues5) == 1, f"Expected 1 issue, got {len(issues5)}"
+    print("[PASS] test_parse_segment_response: JSON with 'no-issue' keyword in reason parsed correctly")
+
+
+def test_deduplicate_issues():
+    """测试去重逻辑"""
+    reviewer = GrammarCheckReviewer()
+
+    issues = [
+        {"issue_point": "错别字", "location": "位置1", "suggestion": "将'混泥土'改为'混凝土'", "reason": "原因", "risk_level": "中风险"},
+        {"issue_point": "错别字", "location": "位置1", "suggestion": "将'混泥土'改为'混凝土'", "reason": "原因重复", "risk_level": "中风险"},  # 精确重复
+        {"issue_point": "错别字", "location": "位置2", "suggestion": "将'珩架梁'改为'桁架梁'", "reason": "原因", "risk_level": "中风险"},
+        {"issue_point": "错别字", "location": "位置3", "suggestion": "将'卷拨'改为'卷扬'", "reason": "原因", "risk_level": "中风险"},
+        {"issue_point": "无明显问题", "location": "位置4", "suggestion": "无明显问题", "reason": "原因", "risk_level": "低风险"},  # 无效条目
+        {"issue_point": "错别字", "location": "位置5", "suggestion": "将'不和'改为'不得'", "reason": "原因", "risk_level": ""},  # risk_level 为空
+        {"issue_point": "错别字", "location": "位置6", "suggestion": "将'千斤项'改为'千斤顶'", "reason": "原因", "risk_level": "高风险"},  # 有效
+    ]
+
+    unique = reviewer._deduplicate_issues(issues)
+
+    # 应该保留: 混泥土→混凝土, 珩架梁→桁架梁, 卷拨→卷扬, 千斤项→千斤顶 = 4个
+    assert len(unique) == 4, f"Expected 4 unique issues, got {len(unique)}: {[i['suggestion'] for i in unique]}"
+    print(f"[PASS] test_deduplicate_issues: {len(issues)} -> {len(unique)} issues")
+
+    # 验证过滤了无效条目
+    suggestions = [i["suggestion"] for i in unique]
+    assert "无明显问题" not in suggestions, "Should filter out 'no-issue' suggestions"
+    assert all(i["risk_level"] for i in unique), "Should filter out empty risk_level"
+    print("[PASS] test_deduplicate_issues: invalid entries filtered correctly")
+
+
+def test_split_trigger():
+    """测试切分触发条件"""
+    chunks = load_test_chunks()
+
+    # 统计哪些 chunk 会触发切分
+    trigger_count = 0
+    no_trigger_count = 0
+    for i, chunk in enumerate(chunks):
+        content = chunk.get("content", "")
+        if len(content) > SPLIT_THRESHOLD:
+            trigger_count += 1
+            segments = split_text_with_overlap(
+                content,
+                min_length=SEGMENT_MIN_LENGTH,
+                target_length=SEGMENT_TARGET_LENGTH,
+                overlap=SEGMENT_OVERLAP,
+            )
+            print(f"  Chunk[{i}] len={len(content)} -> {len(segments)} segments")
+        else:
+            no_trigger_count += 1
+
+    print(f"[PASS] test_split_trigger: {trigger_count} chunks will be split, {no_trigger_count} chunks will not")
+
+
+async def test_full_split_review():
+    """完整测试:对 Chunk 24 进行切分审查"""
+    chunks = load_test_chunks()
+    chunk24 = chunks[24]["content"]
+
+    print(f"\nChunk 24 length: {len(chunk24)}")
+    print(f"Split threshold: {SPLIT_THRESHOLD}")
+
+    reviewer = GrammarCheckReviewer()
+
+    start_time = time.time()
+    response = await reviewer._check_grammar_with_split(
+        trace_id="test_split_chunk24",
+        review_content=chunk24,
+        enable_thinking=False,
+    )
+    elapsed = time.time() - start_time
+
+    print(f"\nSplit review completed in {elapsed:.2f}s")
+    print(f"Response length: {len(response)}")
+
+    # 解析响应验证
+    if response == "无明显问题":
+        print("[INFO] No issues found after split review")
+    else:
+        try:
+            issues = json.loads(response)
+            print(f"[PASS] test_full_split_review: {len(issues)} unique issues found")
+            for i, issue in enumerate(issues):
+                print(f"  [{i+1}] {issue.get('issue_point', '')}: {issue.get('suggestion', '')[:50]}...")
+        except json.JSONDecodeError:
+            print(f"[FAIL] Response is not valid JSON: {response[:200]}...")
+
+    # 保存结果
+    output_file = os.path.join(
+        project_root,
+        "utils_test", "Grammar_Check_Test", "full_scan_results",
+        "chunk24_split_review_new.json"
+    )
+    os.makedirs(os.path.dirname(output_file), exist_ok=True)
+    with open(output_file, "w", encoding="utf-8") as f:
+        f.write(response)
+    print(f"Results saved to: {output_file}")
+
+
+if __name__ == "__main__":
+    print("=" * 60)
+    print("Testing grammar_check split logic")
+    print("=" * 60)
+
+    # 同步测试
+    test_parse_segment_response()
+    test_deduplicate_issues()
+    test_split_trigger()
+
+    # 异步测试
+    print("\n" + "=" * 60)
+    print("Running full split review test (async)...")
+    print("=" * 60)
+    asyncio.run(test_full_split_review())

+ 0 - 0
utils_test/RAG_Pipeline_Test/__init__.py


+ 32 - 0
utils_test/RAG_Pipeline_Test/conftest.py

@@ -0,0 +1,32 @@
+"""
+RAG 管线测试 — pytest fixtures
+"""
+
+import pytest
+
+
+@pytest.fixture(scope="session")
+def pipeline_runner():
+    """RAG 管线执行器(session 级,避免重复初始化)"""
+    from utils_test.RAG_Pipeline_Test.rag_pipeline_runner import RAGPipelineRunner
+    return RAGPipelineRunner()
+
+
+@pytest.fixture(scope="session")
+def evaluator():
+    """RAG 评估器(session 级)"""
+    from utils_test.RAG_Pipeline_Test.rag_evaluator import RAGEvaluator
+    return RAGEvaluator()
+
+
+@pytest.fixture(scope="session")
+def test_samples():
+    """测试样本列表"""
+    from utils_test.RAG_Pipeline_Test.test_data import TEST_SAMPLES
+    return TEST_SAMPLES
+
+
+@pytest.fixture(scope="session")
+def batch_results(pipeline_runner, test_samples):
+    """批量执行所有测试样本(session 级,所有测试共享结果)"""
+    return pipeline_runner.run_batch(test_samples)

+ 103 - 0
utils_test/RAG_Pipeline_Test/print_review_results.py

@@ -0,0 +1,103 @@
+"""
+输出实际审查结果 — 将 RAG 管线的真实检索内容写入可读文件
+"""
+import sys, os, json
+
+project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+if project_root not in sys.path:
+    sys.path.insert(0, project_root)
+
+from utils_test.RAG_Pipeline_Test.test_data import TEST_SAMPLES
+from utils_test.RAG_Pipeline_Test.rag_pipeline_runner import RAGPipelineRunner
+
+
+def main():
+    runner = RAGPipelineRunner()
+    output_lines = []
+
+    # 选取 3 个代表性样本深入分析
+    target_ids = ["safety_Monitoring", "technology_Operations", "safety_Emergency"]
+    samples = [s for s in TEST_SAMPLES if s["chunk_id"] in target_ids]
+
+    for sample in samples:
+        chunk_id = sample["chunk_id"]
+        content = sample["content"]
+
+        output_lines.append("=" * 80)
+        output_lines.append(f"测试样本: {chunk_id}")
+        output_lines.append(f"章节: {sample['section_label']}")
+        output_lines.append("=" * 80)
+
+        # 截取原文前 500 字
+        output_lines.append(f"\n【原文摘录 (前500字)】")
+        output_lines.append(content[:500])
+        output_lines.append("...")
+
+        # 执行管线
+        result = runner.run_single(content, chunk_id=chunk_id)
+
+        # 审查要点
+        output_lines.append(f"\n{'─' * 60}")
+        output_lines.append(f"【审查要点提取结果】共 {result.review_point_count} 个要点, 耗时 {result.extract_time:.1f}s")
+        output_lines.append(f"{'─' * 60}")
+
+        if not result.review_points:
+            output_lines.append("  (提取失败)")
+            continue
+
+        for i, rp in enumerate(result.review_points):
+            label = rp.get('label', rp.get('entity', ''))
+            queries = rp.get('search_queries', rp.get('search_keywords', []))
+            original = rp.get('original_text', rp.get('background', ''))
+            parameter = rp.get('parameter', '')
+
+            output_lines.append(f"\n  要点 [{i+1}] {label}")
+            output_lines.append(f"  ├─ 检索语句:")
+            for q in queries:
+                output_lines.append(f"  │   • {q}")
+            output_lines.append(f"  ├─ 原文摘录: {original}")
+            output_lines.append(f"  └─ 技术参数: {parameter}")
+
+        # 检索结果
+        output_lines.append(f"\n{'─' * 60}")
+        output_lines.append(f"【RAG 检索结果】{result.non_empty_pairs}/{result.review_point_count} 个查询对有结果, 耗时 {result.retrieval_time:.1f}s")
+        output_lines.append(f"{'─' * 60}")
+
+        if not result.retrieval_results:
+            output_lines.append("  (检索失败)")
+            continue
+
+        for i, (rp, results) in enumerate(zip(result.review_points, result.retrieval_results)):
+            label = rp.get('label', rp.get('entity', ''))
+
+            output_lines.append(f"\n  ── 要点 [{i+1}] {label} 的检索结果 ──")
+
+            if not results:
+                output_lines.append("    (无结果)")
+                continue
+
+            for j, r in enumerate(results[:3]):  # 只显示 top-3
+                rerank = r.get('rerank_score', 0)
+                bfp = r.get('bfp_rerank_score', 0)
+                text = r.get('text_content', '')[:200]
+                meta = r.get('metadata', {})
+                file_name = meta.get('file_name', '')
+                parent_id = meta.get('parent_id', '')
+
+                output_lines.append(f"\n    [{j+1}] rerank={rerank:.4f}, bfp_rerank={bfp:.4f}")
+                if file_name:
+                    output_lines.append(f"        来源: {file_name}")
+                output_lines.append(f"        内容: {text}...")
+
+        output_lines.append("\n\n")
+
+    # 写入文件
+    output_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "reports", "review_results_detail.txt")
+    os.makedirs(os.path.dirname(output_path), exist_ok=True)
+    with open(output_path, "w", encoding="utf-8") as f:
+        f.write("\n".join(output_lines))
+    print(f"审查结果已输出: {output_path}")
+
+
+if __name__ == "__main__":
+    main()

+ 499 - 0
utils_test/RAG_Pipeline_Test/rag_evaluator.py

@@ -0,0 +1,499 @@
+"""
+RAG 管线评估器 — 用 LLM + 规则对管线输出进行 5 维度自动评估
+
+评估维度:
+1. 召回相关性 (0-5): 检索到的规范条文是否与审查要点语义对齐
+2. 参数匹配度 (0-5): 参数值(mm、MPa、℃)是否在规范条文中匹配
+3. 幻觉风险 (0-5, 5=最安全): search_queries 是否捏造了原文不存在的概念
+4. 覆盖度 (0-5): 原文关键技术参数是否被充分提取
+5. 分数合理性: rerank_score 分布是否符合预期
+"""
+
+import re
+import json
+import uuid
+from dataclasses import dataclass
+from typing import Optional
+
+from foundation.observability.logger.loggering import review_logger as logger
+
+
+# ========================= 评估结果结构 =========================
+
+@dataclass
+class DimensionScore:
+    """单维度评分"""
+    name: str
+    score: float  # 0-5
+    max_score: float = 5.0
+    details: str = ""
+    status: str = "PASS"  # PASS / WARN / FAIL
+
+    @property
+    def percentage(self) -> float:
+        return self.score / self.max_score * 100
+
+
+@dataclass
+class SampleEvaluation:
+    """单个测试样本的完整评估"""
+    chunk_id: str
+    dimensions: list = None  # list[DimensionScore]
+    overall_score: float = 0.0
+    overall_status: str = "PASS"
+    analysis: str = ""
+
+    def __post_init__(self):
+        if self.dimensions is None:
+            self.dimensions = []
+
+    def compute_overall(self):
+        if self.dimensions:
+            self.overall_score = sum(d.score for d in self.dimensions) / len(self.dimensions)
+            if self.overall_score >= 3.5:
+                self.overall_status = "PASS"
+            elif self.overall_score >= 2.0:
+                self.overall_status = "WARN"
+            else:
+                self.overall_status = "FAIL"
+
+
+# ========================= 评估器 =========================
+
+class RAGEvaluator:
+    """RAG 管线自动评估器"""
+
+    def __init__(self):
+        from foundation.ai.agent.generate.model_generate import generate_model_client
+        self.generate_model_client = generate_model_client
+
+    def _llm_evaluate(self, prompt: str, task_name: str = "rag_evaluation") -> str:
+        """调用 LLM 进行评估"""
+        try:
+            task_prompt_info = {
+                "task_prompt": prompt,
+                "task_name": task_name
+            }
+            trace_id = str(uuid.uuid4())
+            response = self.generate_model_client.get_model_generate_invoke_sync(
+                trace_id=trace_id,
+                task_prompt_info=task_prompt_info,
+                timeout=60,
+                function_name="review_point_extract"  # 复用现有模型配置
+            )
+            if isinstance(response, str):
+                return response.strip()
+            return str(response)
+        except Exception as e:
+            logger.error(f"[RAG评估] LLM 调用失败: {e}")
+            return ""
+
+    def _extract_parameter_tokens(self, text: str) -> set:
+        """从文本中提取参数 token(数值+单位)"""
+        patterns = [
+            r'\d+\.?\d*\s*mm',
+            r'\d+\.?\d*\s*MPa',
+            r'\d+\.?\d*\s*℃',
+            r'\d+\.?\d*\s*%',
+            r'\d+\.?\d*\s*m³',
+            r'\d+\.?\d*\s*dB',
+            r'≤\s*\d+\.?\d*',
+            r'≥\s*\d+\.?\d*',
+            r'±\s*\d+\.?\d*',
+            r'H/\d+',
+            r'L/\d+',
+            r'F\.S',
+            r'\d+\.?\d*\s*μm',
+            r'\d+\.?\d*\s*με',
+        ]
+        tokens = set()
+        for pattern in patterns:
+            matches = re.findall(pattern, text, re.IGNORECASE)
+            tokens.update(m.strip() for m in matches)
+        return tokens
+
+    # ========================= 维度 1: 召回相关性 =========================
+
+    def evaluate_recall(self, review_point: dict, results: list) -> DimensionScore:
+        """评估召回相关性"""
+        label = review_point.get('label', review_point.get('entity', ''))
+        queries = review_point.get('search_queries', review_point.get('search_keywords', []))
+
+        if not results:
+            return DimensionScore(
+                name="召回相关性", score=0, details="无检索结果", status="FAIL"
+            )
+
+        # 规则评估: 检查 top 结果的 rerank_score
+        top_scores = [r.get('rerank_score', 0) or r.get('bfp_rerank_score', 0) for r in results[:3]]
+        avg_top = sum(top_scores) / len(top_scores) if top_scores else 0
+
+        # 文本相关性: 检查检索文本中是否包含与 label 相关的关键词
+        label_keywords = set(label)  # 中文字符级别
+        relevance_hits = 0
+        for r in results[:3]:
+            text = r.get('text_content', '')
+            # 检查 label 中的字在检索文本中的覆盖率
+            hit_count = sum(1 for ch in label_keywords if ch in text and ch.strip())
+            if len(label_keywords) > 0:
+                coverage = hit_count / max(len(label_keywords), 1)
+                if coverage > 0.3:
+                    relevance_hits += 1
+
+        # 综合评分
+        score = 0.0
+        if avg_top > 0.6:
+            score += 2.5
+        elif avg_top > 0.4:
+            score += 1.5
+        elif avg_top > 0.2:
+            score += 0.5
+
+        score += min(relevance_hits, 3) * 0.8  # 最多 2.4
+
+        score = min(score, 5.0)
+        status = "PASS" if score >= 3.0 else ("WARN" if score >= 1.5 else "FAIL")
+
+        return DimensionScore(
+            name="召回相关性",
+            score=round(score, 1),
+            details=f"avg_top_score={avg_top:.3f}, relevance_hits={relevance_hits}/3, top_scores={[f'{s:.3f}' for s in top_scores]}",
+            status=status
+        )
+
+    # ========================= 维度 2: 参数匹配度 =========================
+
+    def evaluate_parameter_match(self, review_point: dict, results: list) -> DimensionScore:
+        """评估参数匹配度"""
+        original_text = review_point.get('original_text', review_point.get('background', ''))
+        parameter = review_point.get('parameter', '')
+
+        if not results:
+            return DimensionScore(
+                name="参数匹配度", score=0, details="无检索结果", status="FAIL"
+            )
+
+        # 提取原文中的参数 token
+        source_text = original_text + " " + parameter
+        source_params = self._extract_parameter_tokens(source_text)
+
+        if not source_params:
+            return DimensionScore(
+                name="参数匹配度", score=3.0,
+                details="原文无可提取参数,中性评分", status="PASS"
+            )
+
+        # 检查检索结果中是否包含相同或相近的参数
+        retrieved_text = " ".join(r.get('text_content', '') for r in results[:5])
+        retrieved_params = self._extract_parameter_tokens(retrieved_text)
+
+        # 精确匹配
+        exact_matches = source_params & retrieved_params
+        match_ratio = len(exact_matches) / len(source_params) if source_params else 0
+
+        score = min(match_ratio * 5, 5.0)
+        status = "PASS" if score >= 3.0 else ("WARN" if score >= 1.5 else "FAIL")
+
+        return DimensionScore(
+            name="参数匹配度",
+            score=round(score, 1),
+            details=f"原文参数: {source_params}, 匹配: {exact_matches}, 匹配率: {match_ratio:.0%}",
+            status=status
+        )
+
+    # ========================= 维度 3: 幻觉风险 =========================
+
+    def evaluate_hallucination(self, review_point: dict, content: str) -> DimensionScore:
+        """评估 search_queries 是否忠实于原文(5=最安全)"""
+        queries = review_point.get('search_queries', review_point.get('search_keywords', []))
+        original_text = review_point.get('original_text', review_point.get('background', ''))
+
+        if not queries:
+            return DimensionScore(
+                name="幻觉风险", score=0, details="无 search_queries", status="FAIL"
+            )
+
+        # 检查 original_text 是否确实在原文中
+        original_in_content = original_text in content if original_text else False
+
+        # 检查 search_queries 中的关键词是否源自原文
+        query_text = " ".join(queries)
+        query_keywords = set(re.findall(r'[一-鿿]{2,}', query_text))
+        content_keywords = set(re.findall(r'[一-鿿]{2,}', content))
+
+        # 计算 query 关键词在原文中的覆盖率
+        if query_keywords:
+            coverage = len(query_keywords & content_keywords) / len(query_keywords)
+        else:
+            coverage = 0.5
+
+        # original_text 在原文中的加分
+        original_bonus = 1.5 if original_in_content else 0
+
+        score = min(coverage * 3.5 + original_bonus, 5.0)
+        status = "PASS" if score >= 3.5 else ("WARN" if score >= 2.0 else "FAIL")
+
+        return DimensionScore(
+            name="幻觉风险",
+            score=round(score, 1),
+            details=(
+                f"original_in_content={original_in_content}, "
+                f"query_keyword_coverage={coverage:.0%}, "
+                f"query_keywords_sample={list(query_keywords)[:5]}"
+            ),
+            status=status
+        )
+
+    # ========================= 维度 4: 覆盖度 =========================
+
+    def evaluate_coverage(self, review_points: list, content: str) -> DimensionScore:
+        """评估原文关键参数是否被充分提取为审查要点"""
+        # 提取原文中的参数
+        content_params = self._extract_parameter_tokens(content)
+
+        if not content_params:
+            return DimensionScore(
+                name="覆盖度", score=3.0,
+                details="原文无可提取参数,中性评分", status="PASS"
+            )
+
+        # 提取所有 review_points 中涉及的参数
+        rp_text = ""
+        for rp in review_points:
+            rp_text += " " + rp.get('original_text', rp.get('background', ''))
+            rp_text += " " + rp.get('parameter', '')
+            rp_text += " " + rp.get('label', rp.get('entity', ''))
+
+        rp_params = self._extract_parameter_tokens(rp_text)
+
+        # 计算覆盖率
+        covered = content_params & rp_params
+        coverage = len(covered) / len(content_params) if content_params else 0
+
+        # 审查要点数量也影响评分(太少 = 覆盖不足)
+        count_factor = min(len(review_points) / 3, 1.0)  # 3个以上满分
+
+        score = min(coverage * 3 + count_factor * 2, 5.0)
+        status = "PASS" if score >= 3.0 else ("WARN" if score >= 1.5 else "FAIL")
+
+        return DimensionScore(
+            name="覆盖度",
+            score=round(score, 1),
+            details=(
+                f"原文参数数: {len(content_params)}, "
+                f"被覆盖: {len(covered)}, "
+                f"覆盖率: {coverage:.0%}, "
+                f"审查要点数: {len(review_points)}"
+            ),
+            status=status
+        )
+
+    # ========================= 维度 5: 分数合理性 =========================
+
+    def evaluate_score_distribution(self, retrieval_results: list) -> DimensionScore:
+        """评估 rerank_score 分布是否合理"""
+        all_scores = []
+        for results in retrieval_results:
+            if results:
+                for r in results:
+                    score = r.get('rerank_score', 0) or 0
+                    if score > 0:
+                        all_scores.append(score)
+
+        if not all_scores:
+            return DimensionScore(
+                name="分数合理性", score=1.0,
+                details="无有效 rerank_score", status="WARN"
+            )
+
+        avg_score = sum(all_scores) / len(all_scores)
+        min_score = min(all_scores)
+        max_score = max(all_scores)
+        std_dev = (sum((s - avg_score) ** 2 for s in all_scores) / len(all_scores)) ** 0.5
+
+        # 合理性判断
+        issues = []
+        if avg_score < 0.2:
+            issues.append("平均分过低(<0.2)")
+        if avg_score > 0.9:
+            issues.append("平均分过高(>0.9),可能缺乏区分度")
+        if std_dev < 0.05:
+            issues.append("标准差过小(<0.05),分数过于集中")
+        if max_score - min_score < 0.1:
+            issues.append("分数范围过窄")
+
+        # 检查是否有极端低分
+        low_count = sum(1 for s in all_scores if s < 0.1)
+        if low_count > len(all_scores) * 0.5:
+            issues.append(f"超过50%的结果分数<0.1 ({low_count}/{len(all_scores)})")
+
+        if not issues:
+            score = 5.0
+        elif len(issues) == 1:
+            score = 3.5
+        elif len(issues) == 2:
+            score = 2.0
+        else:
+            score = 1.0
+
+        status = "PASS" if score >= 3.0 else ("WARN" if score >= 2.0 else "FAIL")
+
+        return DimensionScore(
+            name="分数合理性",
+            score=score,
+            details=(
+                f"avg={avg_score:.3f}, min={min_score:.3f}, max={max_score:.3f}, "
+                f"std={std_dev:.3f}, n={len(all_scores)}, issues={issues}"
+            ),
+            status=status
+        )
+
+    # ========================= 综合评估 =========================
+
+    def evaluate_sample(self, pipeline_result, content: str) -> SampleEvaluation:
+        """
+        对单个测试样本进行完整 5 维度评估
+
+        Args:
+            pipeline_result: PipelineResult 对象
+            content: 原始文本
+
+        Returns:
+            SampleEvaluation
+        """
+        eval_result = SampleEvaluation(chunk_id=pipeline_result.chunk_id)
+
+        if pipeline_result.extract_error or not pipeline_result.review_points:
+            eval_result.dimensions = [
+                DimensionScore("召回相关性", 0, details="提取失败", status="FAIL"),
+                DimensionScore("参数匹配度", 0, details="提取失败", status="FAIL"),
+                DimensionScore("幻觉风险", 0, details="提取失败", status="FAIL"),
+                DimensionScore("覆盖度", 0, details="提取失败", status="FAIL"),
+                DimensionScore("分数合理性", 0, details="提取失败", status="FAIL"),
+            ]
+            eval_result.analysis = f"审查要点提取失败: {pipeline_result.extract_error}"
+            eval_result.compute_overall()
+            return eval_result
+
+        # 维度 1+2: 对每个审查要点评估召回相关性和参数匹配度,取平均
+        recall_scores = []
+        param_scores = []
+        hallucination_scores = []
+
+        for i, rp in enumerate(pipeline_result.review_points):
+            results = (
+                pipeline_result.retrieval_results[i]
+                if pipeline_result.retrieval_results and i < len(pipeline_result.retrieval_results)
+                else []
+            )
+
+            recall_scores.append(self.evaluate_recall(rp, results))
+            param_scores.append(self.evaluate_parameter_match(rp, results))
+            hallucination_scores.append(self.evaluate_hallucination(rp, content))
+
+        # 取各维度的平均分
+        avg_recall = sum(d.score for d in recall_scores) / len(recall_scores) if recall_scores else 0
+        avg_param = sum(d.score for d in param_scores) / len(param_scores) if param_scores else 0
+        avg_halluc = sum(d.score for d in hallucination_scores) / len(hallucination_scores) if hallucination_scores else 0
+
+        # 维度 4: 覆盖度
+        coverage = self.evaluate_coverage(pipeline_result.review_points, content)
+
+        # 维度 5: 分数合理性
+        score_dist = self.evaluate_score_distribution(pipeline_result.retrieval_results)
+
+        eval_result.dimensions = [
+            DimensionScore("召回相关性", round(avg_recall, 1),
+                           details=f"各要点: {[f'{d.score}' for d in recall_scores]}"),
+            DimensionScore("参数匹配度", round(avg_param, 1),
+                           details=f"各要点: {[f'{d.score}' for d in param_scores]}"),
+            DimensionScore("幻觉风险", round(avg_halluc, 1),
+                           details=f"各要点: {[f'{d.score}' for d in hallucination_scores]}"),
+            coverage,
+            score_dist,
+        ]
+
+        eval_result.compute_overall()
+
+        # 生成分析文本
+        pass_count = sum(1 for d in eval_result.dimensions if d.status == "PASS")
+        warn_count = sum(1 for d in eval_result.dimensions if d.status == "WARN")
+        fail_count = sum(1 for d in eval_result.dimensions if d.status == "FAIL")
+        eval_result.analysis = (
+            f"5维度评估: {pass_count} PASS / {warn_count} WARN / {fail_count} FAIL. "
+            f"审查要点数={pipeline_result.review_point_count}, "
+            f"检索结果数={pipeline_result.total_retrieved}"
+        )
+
+        return eval_result
+
+    # ========================= 报告生成 =========================
+
+    def generate_report(self, evaluations: list) -> str:
+        """
+        生成 Markdown 格式的测试报告
+
+        Args:
+            evaluations: list[SampleEvaluation]
+
+        Returns:
+            str: Markdown 报告
+        """
+        lines = [
+            "# RAG 管线测试报告",
+            "",
+            f"测试样本数: {len(evaluations)}",
+            "",
+        ]
+
+        # 汇总表
+        lines.append("## 汇总表")
+        lines.append("")
+        lines.append("| 样本 | 总分 | 状态 | 召回相关性 | 参数匹配度 | 幻觉风险 | 覆盖度 | 分数合理性 |")
+        lines.append("|------|------|------|-----------|-----------|---------|--------|-----------|")
+
+        for ev in evaluations:
+            dims = {d.name: f"{d.score:.1f}" for d in ev.dimensions}
+            lines.append(
+                f"| {ev.chunk_id} | {ev.overall_score:.1f} | {ev.overall_status} | "
+                f"{dims.get('召回相关性', '-')} | {dims.get('参数匹配度', '-')} | "
+                f"{dims.get('幻觉风险', '-')} | {dims.get('覆盖度', '-')} | "
+                f"{dims.get('分数合理性', '-')} |"
+            )
+
+        lines.append("")
+
+        # 详细结果
+        lines.append("## 详细评估")
+        lines.append("")
+
+        for ev in evaluations:
+            status_emoji = {"PASS": "✅", "WARN": "⚠️", "FAIL": "❌"}.get(ev.overall_status, "?")
+            lines.append(f"### {status_emoji} {ev.chunk_id} (总分: {ev.overall_score:.1f})")
+            lines.append("")
+            lines.append(f"**分析**: {ev.analysis}")
+            lines.append("")
+
+            for dim in ev.dimensions:
+                dim_emoji = {"PASS": "✅", "WARN": "⚠️", "FAIL": "❌"}.get(dim.status, "?")
+                lines.append(f"- {dim_emoji} **{dim.name}**: {dim.score:.1f}/5.0")
+                lines.append(f"  - {dim.details}")
+
+            lines.append("")
+
+        # 全局统计
+        total_pass = sum(1 for ev in evaluations if ev.overall_status == "PASS")
+        total_warn = sum(1 for ev in evaluations if ev.overall_status == "WARN")
+        total_fail = sum(1 for ev in evaluations if ev.overall_status == "FAIL")
+
+        lines.append("## 全局统计")
+        lines.append("")
+        lines.append(f"- PASS: {total_pass}/{len(evaluations)}")
+        lines.append(f"- WARN: {total_warn}/{len(evaluations)}")
+        lines.append(f"- FAIL: {total_fail}/{len(evaluations)}")
+
+        if evaluations:
+            avg_overall = sum(ev.overall_score for ev in evaluations) / len(evaluations)
+            lines.append(f"- 平均总分: {avg_overall:.1f}/5.0")
+
+        return "\n".join(lines)

+ 195 - 0
utils_test/RAG_Pipeline_Test/rag_pipeline_runner.py

@@ -0,0 +1,195 @@
+"""
+RAG 管线执行器 — 封装完整的审查要点提取 + 语义检索管线
+
+用法:
+    runner = RAGPipelineRunner()
+    result = runner.run_single(content_text)
+    print(result.summary())
+"""
+
+import time
+import asyncio
+from dataclasses import dataclass, field
+from typing import Optional
+
+from foundation.observability.logger.loggering import review_logger as logger
+
+
+@dataclass
+class PipelineResult:
+    """单次管线执行结果"""
+    chunk_id: str = ""
+    content: str = ""
+
+    # Step 1: 审查要点提取
+    review_points: list = field(default_factory=list)
+    extract_time: float = 0.0
+    extract_error: Optional[str] = None
+
+    # Step 2: RAG 检索
+    retrieval_results: list = field(default_factory=list)  # 二维列表
+    retrieval_time: float = 0.0
+    retrieval_error: Optional[str] = None
+
+    @property
+    def total_time(self) -> float:
+        return self.extract_time + self.retrieval_time
+
+    @property
+    def review_point_count(self) -> int:
+        return len(self.review_points) if self.review_points else 0
+
+    @property
+    def total_retrieved(self) -> int:
+        """检索到的总结果数"""
+        if not self.retrieval_results:
+            return 0
+        return sum(len(r) for r in self.retrieval_results if r)
+
+    @property
+    def non_empty_pairs(self) -> int:
+        """有检索结果的查询对数量"""
+        if not self.retrieval_results:
+            return 0
+        return sum(1 for r in self.retrieval_results if r)
+
+    def summary(self) -> str:
+        """生成结果摘要"""
+        lines = [
+            f"=== Pipeline Result: {self.chunk_id} ===",
+            f"  审查要点数: {self.review_point_count}",
+            f"  提取耗时: {self.extract_time:.2f}s",
+            f"  检索耗时: {self.retrieval_time:.2f}s",
+            f"  总耗时: {self.total_time:.2f}s",
+            f"  有结果的查询对: {self.non_empty_pairs}/{self.review_point_count}",
+            f"  检索结果总数: {self.total_retrieved}",
+        ]
+
+        if self.extract_error:
+            lines.append(f"  [ERROR] 提取失败: {self.extract_error}")
+        if self.retrieval_error:
+            lines.append(f"  [ERROR] 检索失败: {self.retrieval_error}")
+
+        # 审查要点详情
+        if self.review_points:
+            lines.append("  --- 审查要点 ---")
+            for i, rp in enumerate(self.review_points):
+                label = rp.get('label', rp.get('entity', '?'))
+                queries = rp.get('search_queries', rp.get('search_keywords', []))
+                original = rp.get('original_text', rp.get('background', ''))[:60]
+                param = rp.get('parameter', '')
+                lines.append(f"  [{i}] {label}")
+                lines.append(f"      queries: {queries}")
+                lines.append(f"      original: {original}...")
+                if param:
+                    lines.append(f"      parameter: {param}")
+
+        # 检索结果概况
+        if self.retrieval_results:
+            lines.append("  --- 检索结果概况 ---")
+            for i, results in enumerate(self.retrieval_results):
+                if not results:
+                    rp_label = self.review_points[i].get('label', '?') if i < len(self.review_points) else '?'
+                    lines.append(f"  [{i}] {rp_label}: 无结果")
+                    continue
+                rp_label = self.review_points[i].get('label', '?') if i < len(self.review_points) else '?'
+                top_score = max(r.get('rerank_score', 0) for r in results)
+                bfp_score = max(r.get('bfp_rerank_score', 0) for r in results)
+                lines.append(
+                    f"  [{i}] {rp_label}: {len(results)} 条结果, "
+                    f"top_rerank={top_score:.4f}, top_bfp={bfp_score:.4f}"
+                )
+
+        return "\n".join(lines)
+
+
+class RAGPipelineRunner:
+    """RAG 管线执行器"""
+
+    def __init__(self):
+        from foundation.ai.rag.retrieval.query_rewrite import query_rewrite_manager
+        from foundation.ai.rag.retrieval.entities_enhance import review_point_retriever
+
+        self.query_rewrite_manager = query_rewrite_manager
+        self.review_point_retriever = review_point_retriever
+
+    def run_single(self, content: str, chunk_id: str = "") -> PipelineResult:
+        """
+        执行单条文本的完整 RAG 管线
+
+        Args:
+            content: 施工方案文本
+            chunk_id: 文本标识符
+
+        Returns:
+            PipelineResult
+        """
+        result = PipelineResult(chunk_id=chunk_id, content=content)
+
+        # Step 1: 审查要点提取
+        logger.info(f"[RAG管线测试] 开始审查要点提取: {chunk_id}")
+        t0 = time.time()
+        try:
+            review_points = self.query_rewrite_manager.query_extract(content)
+            result.extract_time = time.time() - t0
+
+            if review_points:
+                result.review_points = review_points
+                logger.info(
+                    f"[RAG管线测试] 提取到 {len(review_points)} 个审查要点, "
+                    f"耗时 {result.extract_time:.2f}s"
+                )
+            else:
+                result.extract_error = "提取结果为空"
+                logger.warning(f"[RAG管线测试] 审查要点提取为空: {chunk_id}")
+                return result
+
+        except Exception as e:
+            result.extract_time = time.time() - t0
+            result.extract_error = str(e)
+            logger.error(f"[RAG管线测试] 审查要点提取失败: {e}")
+            return result
+
+        # Step 2: RAG 检索
+        logger.info(f"[RAG管线测试] 开始 RAG 检索: {chunk_id}")
+        t1 = time.time()
+        try:
+            retrieval_results = self.review_point_retriever.review_point_retrieval(
+                review_points
+            )
+            result.retrieval_time = time.time() - t1
+            result.retrieval_results = retrieval_results
+            logger.info(
+                f"[RAG管线测试] 检索完成, "
+                f"{result.non_empty_pairs}/{result.review_point_count} 个查询对有结果, "
+                f"耗时 {result.retrieval_time:.2f}s"
+            )
+
+        except Exception as e:
+            result.retrieval_time = time.time() - t1
+            result.retrieval_error = str(e)
+            logger.error(f"[RAG管线测试] RAG 检索失败: {e}")
+
+        return result
+
+    def run_batch(self, test_samples: list) -> list:
+        """
+        批量执行管线
+
+        Args:
+            test_samples: 测试样本列表,每个包含 chunk_id 和 content
+
+        Returns:
+            list[PipelineResult]
+        """
+        results = []
+        for i, sample in enumerate(test_samples):
+            chunk_id = sample["chunk_id"]
+            logger.info(
+                f"[RAG管线测试] ====== 样本 {i+1}/{len(test_samples)}: {chunk_id} ======"
+            )
+            result = self.run_single(sample["content"], chunk_id=chunk_id)
+            results.append(result)
+            logger.info(f"[RAG管线测试] {result.summary()}")
+
+        return results

+ 129 - 0
utils_test/RAG_Pipeline_Test/reports/rag_pipeline_test_report.md

@@ -0,0 +1,129 @@
+# RAG 管线测试报告
+
+测试样本数: 7
+
+## 汇总表
+
+| 样本 | 总分 | 状态 | 召回相关性 | 参数匹配度 | 幻觉风险 | 覆盖度 | 分数合理性 |
+|------|------|------|-----------|-----------|---------|--------|-----------|
+| safety_Monitoring | 3.1 | WARN | 4.5 | 0.0 | 1.2 | 5.0 | 5.0 |
+| technology_TechParams | 3.6 | PASS | 4.9 | 2.8 | 0.2 | 5.0 | 5.0 |
+| technology_Operations | 3.2 | WARN | 4.6 | 0.6 | 1.5 | 4.5 | 5.0 |
+| quality_QualitySystem | 3.0 | WARN | 4.9 | 0.2 | 1.5 | 3.5 | 5.0 |
+| safety_TechMeasures | 3.3 | WARN | 4.7 | 3.0 | 0.8 | 3.0 | 5.0 |
+| environment_EnvSystem | 2.9 | WARN | 4.6 | 0.0 | 1.5 | 3.5 | 5.0 |
+| safety_Emergency | 3.1 | WARN | 4.9 | 3.0 | 1.5 | 1.3 | 5.0 |
+
+## 详细评估
+
+### ⚠️ safety_Monitoring (总分: 3.1)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- ✅ **召回相关性**: 4.5/5.0
+  - 各要点: ['3.9', '4.9', '4.1', '4.9', '4.9']
+- ✅ **参数匹配度**: 0.0/5.0
+  - 各要点: ['0.0', '0.0', '0.0', '0.0', '0.0']
+- ✅ **幻觉风险**: 1.2/5.0
+  - 各要点: ['1.5', '1.5', '0.0', '1.5', '1.5']
+- ✅ **覆盖度**: 5.0/5.0
+  - 原文参数数: 19, 被覆盖: 19, 覆盖率: 100%, 审查要点数: 5
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.732, min=0.523, max=0.943, std=0.121, n=25, issues=[]
+
+### ✅ technology_TechParams (总分: 3.6)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- ✅ **召回相关性**: 4.9/5.0
+  - 各要点: ['4.9', '4.9', '4.9', '4.9', '4.9']
+- ✅ **参数匹配度**: 2.8/5.0
+  - 各要点: ['3.0', '0.0', '3.0', '3.0', '5.0']
+- ✅ **幻觉风险**: 0.2/5.0
+  - 各要点: ['0.0', '0.0', '0.0', '0.0', '0.9']
+- ✅ **覆盖度**: 5.0/5.0
+  - 原文参数数: 3, 被覆盖: 3, 覆盖率: 100%, 审查要点数: 5
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.776, min=0.539, max=0.972, std=0.139, n=25, issues=[]
+
+### ⚠️ technology_Operations (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- ✅ **召回相关性**: 4.6/5.0
+  - 各要点: ['4.9', '4.9', '4.1']
+- ✅ **参数匹配度**: 0.6/5.0
+  - 各要点: ['1.0', '0.7', '0.0']
+- ✅ **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- ✅ **覆盖度**: 4.5/5.0
+  - 原文参数数: 13, 被覆盖: 11, 覆盖率: 85%, 审查要点数: 3
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.809, min=0.570, max=0.964, std=0.108, n=15, issues=[]
+
+### ⚠️ quality_QualitySystem (总分: 3.0)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- ✅ **召回相关性**: 4.9/5.0
+  - 各要点: ['4.9', '4.9', '4.9', '4.9', '4.9']
+- ✅ **参数匹配度**: 0.2/5.0
+  - 各要点: ['0.0', '0.0', '1.2', '0.0', '0.0']
+- ✅ **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '1.5', '1.5']
+- ✅ **覆盖度**: 3.5/5.0
+  - 原文参数数: 18, 被覆盖: 9, 覆盖率: 50%, 审查要点数: 5
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.845, min=0.615, max=0.978, std=0.099, n=25, issues=[]
+
+### ⚠️ safety_TechMeasures (总分: 3.3)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+
+- ✅ **召回相关性**: 4.7/5.0
+  - 各要点: ['4.1', '4.9', '4.9', '4.9']
+- ✅ **参数匹配度**: 3.0/5.0
+  - 各要点: ['3.0', '3.0', '3.0', '3.0']
+- ✅ **幻觉风险**: 0.8/5.0
+  - 各要点: ['1.5', '0.0', '1.5', '0.0']
+- ✅ **覆盖度**: 3.0/5.0
+  - 原文无可提取参数,中性评分
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.774, min=0.516, max=0.940, std=0.117, n=20, issues=[]
+
+### ⚠️ environment_EnvSystem (总分: 2.9)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- ✅ **召回相关性**: 4.6/5.0
+  - 各要点: ['4.9', '4.9', '3.9']
+- ✅ **参数匹配度**: 0.0/5.0
+  - 各要点: ['0.0', '0.0', '0.0']
+- ✅ **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- ✅ **覆盖度**: 3.5/5.0
+  - 原文参数数: 8, 被覆盖: 4, 覆盖率: 50%, 审查要点数: 3
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.763, min=0.523, max=0.969, std=0.149, n=15, issues=[]
+
+### ⚠️ safety_Emergency (总分: 3.1)
+
+**分析**: 5维度评估: 4 PASS / 0 WARN / 1 FAIL. 审查要点数=2, 检索结果数=10
+
+- ✅ **召回相关性**: 4.9/5.0
+  - 各要点: ['4.9', '4.9']
+- ✅ **参数匹配度**: 3.0/5.0
+  - 各要点: ['3.0', '3.0']
+- ✅ **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5']
+- ❌ **覆盖度**: 1.3/5.0
+  - 原文参数数: 1, 被覆盖: 0, 覆盖率: 0%, 审查要点数: 2
+- ✅ **分数合理性**: 5.0/5.0
+  - avg=0.719, min=0.516, max=0.979, std=0.169, n=10, issues=[]
+
+## 全局统计
+
+- PASS: 1/7
+- WARN: 6/7
+- FAIL: 0/7
+- 平均总分: 3.2/5.0

+ 314 - 0
utils_test/RAG_Pipeline_Test/reports/review_results_detail.txt

@@ -0,0 +1,314 @@
+================================================================================
+测试样本: safety_Monitoring
+章节: 第五章 安全保证措施->五、监测监控措施
+================================================================================
+
+【原文摘录 (前500字)】
+1、监测组织机构
+监测组织机构由项目总工程师任组长,监测负责人具体负责,配备专业监测技术人员3名,其中注册安全工程师1名,监测技术员2名。监测人员需具备相关专业资质,熟悉监测仪器操作及数据分析方法。
+2、监测范围
+监测范围需覆盖施工区域内的所有风险点,包括深基坑周边、高支模体系、临时用电线路、主塔施工区域、挂篮悬浇区域、施工便道边坡、临时设施等。深基坑监测范围包括基坑周边50米范围内的建(构)筑物、地下管线及地表沉降。
+5、监测仪器设备
+深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,采用测斜仪(精度0.01mm/m)进行深层水平位移监测,采用水位计(精度1mm)进行地下水位监测,采用轴力计(精度0.1%F.S)进行支撑轴力监测。
+8、预警值及控制值
+深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为40mm;地下水位变化预警值为500mm,控制值为1000mm;支撑轴力预警值为设计值的80%,控制值为设计值的100%。高支模立杆轴力预警值为设计值的80%,控制值为设计值的100%;水平位移预警值为10mm,控制值为20m
+...
+
+────────────────────────────────────────────────────────────
+【审查要点提取结果】共 5 个要点, 耗时 6.3s
+────────────────────────────────────────────────────────────
+
+  要点 [1] 深基坑监测预警控制
+  ├─ 检索语句:
+  │   • 深基坑工程水平位移及竖向位移预警值与报警限值
+  │   • 基坑支护结构轴力监测控制指标及设计要求
+  ├─ 原文摘录: 深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为40mm;地下水位变化预警值为500mm,控制值为1000mm;支撑轴力预警值为设计值的80%,控制值为设计值的100%。
+  └─ 技术参数: 水平位移预警30mm/控制50mm,竖向位移预警20mm/控制40mm,水位预警500mm/控制1000mm,轴力预警80%设计值/控制100%设计值
+
+  要点 [2] 高支模体系监测控制
+  ├─ 检索语句:
+  │   • 高支模立杆轴力监测预警值及控制标准
+  │   • 高支模结构水平位移监测限值要求
+  ├─ 原文摘录: 高支模立杆轴力预警值为设计值的80%,控制值为设计值的100%;水平位移预警值为10mm,控制值为20mm。
+  └─ 技术参数: 立杆轴力预警80%设计值/控制100%设计值,水平位移预警10mm/控制20mm
+
+  要点 [3] 主塔施工垂直度监测
+  ├─ 检索语句:
+  │   • 高耸结构施工垂直度允许偏差及控制标准
+  │   • 桥梁主塔垂直度监测预警值与限值
+  ├─ 原文摘录: 主塔垂直度预警值为H/3000(H为塔高),控制值为H/2000。
+  └─ 技术参数: 预警值H/3000,控制值H/2000
+
+  要点 [4] 挂篮悬浇变形监测
+  ├─ 检索语句:
+  │   • 挂篮施工挠度变形监测控制指标
+  │   • 预应力张拉力监测预警值及控制限值
+  ├─ 原文摘录: 挂篮挠度预警值为L/800(L为跨度),控制值为L/600;预应力张拉力预警值为设计值的95%,控制值为设计值的105%。
+  └─ 技术参数: 挠度预警L/800/控制L/600,张拉力预警95%设计值/控制105%设计值
+
+  要点 [5] 监测仪器设备精度要求
+  ├─ 检索语句:
+  │   • 深基坑监测全站仪测角精度及测距精度要求
+  │   • 深层水平位移测斜仪及地下水位计精度等级
+  ├─ 原文摘录: 深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,采用测斜仪(精度0.01mm/m)进行深层水平位移监测,采用水位计(精度1mm)进行地下水位监测,采用轴力计(精度0.1%F.S)进行支撑轴力监测。
+  └─ 技术参数: 全站仪0.5秒级,测斜仪0.01mm/m,水位计1mm,轴力计0.1%F.S
+
+────────────────────────────────────────────────────────────
+【RAG 检索结果】5/5 个查询对有结果, 耗时 5.1s
+────────────────────────────────────────────────────────────
+
+  ── 要点 [1] 深基坑监测预警控制 的检索结果 ──
+
+    [1] rerank=0.5775, bfp_rerank=0.9047
+        内容: 8监测报警 > 8.0.1 基坑工程监测必须确定监测报警值,监测报警值应满足基坑工程设计、地下结构设计以及周边环境中被保护对象的控制要求。监测报警值应由基坑工程设计方确定。 > 8.0.4基坑及支护结构监测报警值应根据土质特征、设计结果及当地经验等因素确定;当无当地经验时,可根据土质特征、设计结果以及表8.0.4确定。
+| 序号 | 监测项目 | 支护结构类型 | 基坑类别 | 基坑类别 | 基坑...
+
+    [2] rerank=0.5622, bfp_rerank=0.8741
+        内容: 10变形监测 > 10.7地下工程变形监测 > 10.7.1地下工程变形监测项目和内容应根据埋深、地质条件、地面环境、开挖断面和施工方法等因素综合确定。监测内容应根据工程需要和设计要求按表10.7.1选择。应力监测和地下水位监测选项应满足工程监控和变形分析的需要。
+| 阶段 | 项目 | 项目 | 主要监测内容 | 主要监测内容 |
+|---|---|---|---|---|
+| 我 | 地下建(...
+
+    [3] rerank=0.8597, bfp_rerank=0.8634
+        内容: 4土石方与地基基础 > 4.4 基坑开挖与支护 > 4.4.19 基坑开挖与支护施工应进行量测监控,监测项目、监测控制值应根据设计要求及基坑侧壁安全等级进行选择,并应符合表4.4.19的规定。
+| 侧壁安全等级 | 地下管线位移 | 地表土体沉降 | 周围建(构)筑物沉降 | 围护结构预位移 | 围护结构墙体测斜 | 支撑轴力 | 地下水位 | 支撑柱隆沉 | 土压力 | 孔隙水压力 | 坑底隆起...
+
+  ── 要点 [2] 高支模体系监测控制 的检索结果 ──
+
+    [1] rerank=0.5622, bfp_rerank=0.6926
+        内容: 7 监测频率、预警值、报警值及控制值 > 7.2 预警值、报警值及控制值 > 7.2.1 铁路运营设备设施监测预警值、报警值和控制值可按表
+| 监测项目 | 监测项目 | 控制标准 | 控制标准 | 控制标准 |
+|---|---|---|---|---|
+| 监测项目 | 累计量预警值 | 累计量报警值 | 控制值 |
+| 高速铁路 | 隧道结构竖向位移 | ±3 | ±4 | ±5 |
+| 高...
+
+    [2] rerank=0.8634, bfp_rerank=0.6370
+        内容: 10变形监测 > 10.2水平位移监测基准网 > 10.2.4关于水平位移监测基准网测量的主要技术要求。
+平均边长指标也可以理解为相应等级监测网平均边长的限值。...
+
+    [3] rerank=0.7982, bfp_rerank=0.6077
+        内容: 10 变形监测 > 10.2 水平位移监测基准网 > 10.2.4 水平位移监测基准网测量的主要技术要求:
+平均边长指标也可以理解为相应等级监测网平均边长的限值。...
+
+  ── 要点 [3] 主塔施工垂直度监测 的检索结果 ──
+
+    [1] rerank=0.8933, bfp_rerank=0.8176
+        内容: (1)施工前应对单层、多层、高层结构主体整体垂直度平面度偏差要求进行交底,对建筑物定位轴线、底层柱轴线、底柱...
+
+    [2] rerank=0.9047, bfp_rerank=0.8032
+        内容: (1)关于产杆垂直度的允许偏差...
+
+    [3] rerank=0.8597, bfp_rerank=0.7827
+        内容: (2)原标准中墩身竖直度允许偏差对低墩偏松、对高墩偏严。修订后,高度大于$6 0 \mathrm { m }$ 的按塔的要求检验,不大于 $5 \mathrm { m }$ 的统一要求允许偏差为 $5 \mathrm { m m }$ ,其他的墩高按...
+
+  ── 要点 [4] 挂篮悬浇变形监测 的检索结果 ──
+
+    [1] rerank=0.6077, bfp_rerank=0.9855
+        内容: 预应力筋张拉允许偏差...
+
+    [2] rerank=0.7663, bfp_rerank=0.9497
+        内容: (2)悬臂浇筑混凝土梁,挂篮的强度、刚度、稳定性应满足要求;挂篮组装后,应全面检查安装重量,并应按设计荷载做载重实验,以消除非弹性变形;悬臂浇筑施工应对称、平衡的进行,两端悬臂上荷载的实际不平衡偏差不得超过设计规定值。...
+
+    [3] rerank=0.6442, bfp_rerank=0.8670
+        内容: 7主梁施工 > 7.2混凝土工程 > 7.2.3确定施工预拱度时应考虑下列因素:
+1 设计预拱度;  
+2 在荷载作用下已施工梁段的变形;  
+3 挂篮在荷载作用下的弹性变形;  
+4 由混凝土预施应力和收缩、徐变引起的挠度;  
+5 由施工时温度变化引起的挠度。...
+
+  ── 要点 [5] 监测仪器设备精度要求 的检索结果 ──
+
+    [1] rerank=0.8670, bfp_rerank=0.9526
+        内容: 6 监测方法及精度要求 > 6.2水平位移监测 > 6.2.5目前全站仪极坐标法是水平位移监测的主要方法之一,全站仪仪器精度的选择是影响观测精度的关键。为了方便全站仪的选用,确保观测精度,本条在误差分析的基础上结合国内现状,对不同观测精度要求下的全站仪测角、测距标称精度做出了具体
+当基坑现场观测条件不利或监测数据不稳定时,可适当增加测回数或选用高等级仪器来提高监测精度。...
+
+    [2] rerank=0.9019, bfp_rerank=0.9482
+        内容: 6 监测方法及精度要求 > 6.2水平位移监测 > 6.2.5目前全站仪极坐标法是水平位移监测的主要方法之一,全站仪仪器精度的选择是影响观测精度的关键。为了方便全站仪的选用,确保观测精度,本条在误差分析的基础上结合国内现状,对不同观测精度要求下的全站仪测角、测距标称精度做出了具体
+测站点(工作基点)邻近基坑,易受基坑变形、施工作业以及观测墩体本身可能发生的不均匀沉降影响。...
+
+    [3] rerank=0.8559, bfp_rerank=0.9196
+        内容: 6 监测方法及精度要求 > 6.2水平位移监测 > 6.2.5目前全站仪极坐标法是水平位移监测的主要方法之一,全站仪仪器精度的选择是影响观测精度的关键。为了方便全站仪的选用,确保观测精度,本条在误差分析的基础上结合国内现状,对不同观测精度要求下的全站仪测角、测距标称精度做出了具体
+当基坑水平位移监测精度要求较高时,需要顾及基坑相关环境因素的影响,应尽可能安排在同一时段、同一环境条件下施测,并通过适...
+
+
+
+================================================================================
+测试样本: technology_Operations
+章节: 第四章 施工工艺技术->五、施工方法及操作要求
+================================================================================
+
+【原文摘录 (前500字)】
+施工工序操作详细描述各工序的操作步骤。钢筋绑扎操作流程包含除锈→下料→成型→绑扎→验收,模板安装操作步骤包含清理→涂油→安装→加固→校正。施工要点明确工序的关键要求,钢筋绑扎需保证间距均匀,偏差控制在±10mm以内,模板安装需保证垂直度,偏差控制在5mm以内,混凝土浇筑需连续进行,间歇时间不超过2小时。
+1、工序一:钻孔灌注桩施工
+钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,孔深偏差+300mm/-0mm,泥浆比重控制在1.1-1.3之间,确保护壁稳定。钢筋笼安装需保证保护层厚度50mm。混凝土浇筑需连续进行,导管埋深控制在2-6米。
+2、工序二:主塔液压爬模施工
+标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。混凝土采用C50高性能混凝土,坍落度控制在160-180mm,浇筑温度不超过30℃。
+3、工序三:主梁挂篮悬臂浇筑施工
+最大悬臂长度225米,挂篮变形量控制在20mm以内。预应力张拉实行双控指标,以应力控制为主,伸长量校核,误差控制在±6%以内,张拉完成后24小时内完成压浆。所有工序检查标准严格执行JTG/T 3650-20
+...
+
+────────────────────────────────────────────────────────────
+【审查要点提取结果】共 3 个要点, 耗时 3.3s
+────────────────────────────────────────────────────────────
+
+  要点 [1] 钻孔灌注桩施工偏差
+  ├─ 检索语句:
+  │   • 钻孔灌注桩钻孔垂直度允许偏差及孔深要求
+  │   • 钻孔灌注桩泥浆比重控制标准及护壁要求
+  ├─ 原文摘录: 钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,孔深偏差+300mm/-0mm,泥浆比重控制在1.1-1.3之间,确保护壁稳定。钢筋笼安装需保证保护层厚度50mm。混凝土浇筑需连续进行,导管埋深控制在2-6米。
+  └─ 技术参数: 垂直度≤1%,孔深+300/-0mm,泥浆比重1.1-1.3,保护层厚度50mm,导管埋深2-6m
+
+  要点 [2] 主塔液压爬模施工
+  ├─ 检索语句:
+  │   • 液压爬模模板安装垂直度及平整度允许偏差
+  │   • C50混凝土浇筑坍落度控制及浇筑温度限值
+  ├─ 原文摘录: 标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。混凝土采用C50高性能混凝土,坍落度控制在160-180mm,浇筑温度不超过30℃。
+  └─ 技术参数: 垂直度≤5mm,平整度≤3mm,坍落度160-180mm,浇筑温度≤30℃
+
+  要点 [3] 挂篮悬臂浇筑施工
+  ├─ 检索语句:
+  │   • 挂篮悬臂施工变形量控制限值及监测要求
+  │   • 预应力张拉应力控制及伸长量误差允许偏差
+  ├─ 原文摘录: 最大悬臂长度225米,挂篮变形量控制在20mm以内。预应力张拉实行双控指标,以应力控制为主,伸长量校核,误差控制在±6%以内,张拉完成后24小时内完成压浆。
+  └─ 技术参数: 挂篮变形≤20mm,伸长量误差±6%,压浆时间≤24h
+
+────────────────────────────────────────────────────────────
+【RAG 检索结果】3/3 个查询对有结果, 耗时 3.4s
+────────────────────────────────────────────────────────────
+
+  ── 要点 [1] 钻孔灌注桩施工偏差 的检索结果 ──
+
+    [1] rerank=0.8222, bfp_rerank=0.9450
+        内容: 5 基础施工 > 5.6 泥浆护壁成孔灌注桩 > 5.6.2 护壁泥浆应符合下列规定:
+表5.6.2-1制备泥浆的性能指标...
+
+    [2] rerank=0.6514, bfp_rerank=0.9305
+        内容: 第4.2.2条 灌注桩允许偏差应符合表 的规定...
+
+    [3] rerank=0.6584, bfp_rerank=0.9284
+        内容: 6灌注桩施工 > 6.2一般规定 > 6.2.4灌注桩成孔施工的允许偏差应满足表6.2.4的要求。
+表6.2.4灌注桩成孔施工允许偏差...
+
+  ── 要点 [2] 主塔液压爬模施工 的检索结果 ──
+
+    [1] rerank=0.7549, bfp_rerank=0.9305
+        内容: 液压爬升模板工程技术规程...
+
+    [2] rerank=0.7058, bfp_rerank=0.9124
+        内容: 7主梁施工 > 7.2混凝土工程 > 7.2.2当采用预制钢筋网片或骨架时,应符合下列规定:
+### 7.2.7梁段混凝土的浇筑宜采用泵送,坍落度宜控制在 $9 0 \mathrm { m m } \mathrm { \sim }$ $1 8 0 \mathrm { m m }$ ,并应随温度变化及运输和浇筑速度进行调整。...
+
+    [3] rerank=0.8311, bfp_rerank=0.9019
+        内容: 7爬模装置安装与拆除 > 7.3安装质量验收 > 7.3.2爬模装置安装允许偏差和检验方法应符合表7.3.2的规定。
+| 项次 | 项目 | 项目 | 允许偏差(mm) | 检验方法 |
+|---|---|---|---|---|
+| 1 | 模板轴线与相应结构轴线位置 | 模板轴线与相应结构轴线位置 | 3 | 吊线、钢卷尺检查 |
+| 2 | 截面尺寸 | 截面尺寸 | ±2 | 钢卷尺检查 ...
+
+  ── 要点 [3] 挂篮悬臂浇筑施工 的检索结果 ──
+
+    [1] rerank=0.8176, bfp_rerank=0.9850
+        内容: 预应力筋张拉允许偏差...
+
+    [2] rerank=0.5467, bfp_rerank=0.9790
+        内容: 17 梁式桥 > 17.5 悬臂浇筑 > 17.5.1 用于悬臂浇筑施工的挂篮,其结构除应满足强度、刚度和稳定性要求外,尚应符合下列规定:
+2 挂篮的最大变形(包括吊带变形的总和)应不大于 $2 0 \mathrm { m m }$。...
+
+    [3] rerank=0.6723, bfp_rerank=0.9450
+        内容: 17梁式桥 > 17.5悬臂浇筑 > 17.5.1用于悬臂浇筑施工的挂篮,其结构除应满足强度、刚度和稳定性要求外,尚应符合下列规定:
+2挂篮的最大变形(包括吊带变形的总和)应不大于 $2 0 \mathrm { m m }$。...
+
+
+
+================================================================================
+测试样本: safety_Emergency
+章节: 第五章 安全保证措施->六、应急处置措施
+================================================================================
+
+【原文摘录 (前500字)】
+1、应急处置程序
+事故发生后,现场人员需立即向班组长报告,班组长在5分钟内向项目安全部报告,项目安全部在10分钟内向项目经理报告,项目经理根据事故等级决定启动相应级别应急预案。一般事故由项目部级应急响应,较大及以上事故需立即向公司总部及监理单位报告。
+2、处置措施
+(1)有毒有害气体中毒
+针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方可进入危险区域。将中毒者迅速转移至通风良好的安全地带,若呼吸停止应立即进行人工呼吸,若心跳停止则配合胸外心脏按压。
+(3)触电事故
+发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,按压吹气比为30:2。
+3、应急物资及设备保障
+干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW。
+...
+
+────────────────────────────────────────────────────────────
+【审查要点提取结果】共 3 个要点, 耗时 2.7s
+────────────────────────────────────────────────────────────
+
+  要点 [1] 有限空间救援防护
+  ├─ 检索语句:
+  │   • 有限空间作业有毒气体中毒救援个人防护装备要求
+  │   • 有限空间应急救援人员进入危险区域防护措施
+  ├─ 原文摘录: 针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方可进入危险区域
+  └─ 技术参数: 防护装备:正压式空气呼吸器、防毒面具、安全绳
+
+  要点 [2] 触电现场急救
+  ├─ 检索语句:
+  │   • 触电事故现场急救心肺复苏按压吹气比要求
+  │   • 触电事故脱离电源及现场急救操作规范
+  ├─ 原文摘录: 发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,按压吹气比为30:2
+  └─ 技术参数: 按压吹气比=30:2,绝缘工具:干燥木棒、绝缘杆
+
+  要点 [3] 应急物资配置
+  ├─ 检索语句:
+  │   • 施工现场应急救援物资配备种类及数量要求
+  │   • 有限空间作业安全绳规格及数量配置标准
+  ├─ 原文摘录: 干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW
+  └─ 技术参数: 干粉灭火器4kg(50具),安全绳Φ16mm(500米),千斤顶50t(10台),发电机50kW
+
+────────────────────────────────────────────────────────────
+【RAG 检索结果】3/3 个查询对有结果, 耗时 2.4s
+────────────────────────────────────────────────────────────
+
+  ── 要点 [1] 有限空间救援防护 的检索结果 ──
+
+    [1] rerank=0.7491, bfp_rerank=0.9943
+        内容: 有限空间作业事故应急救援装备配置...
+
+    [2] rerank=0.7491, bfp_rerank=0.9433
+        内容: 有限空间安全管理制度;  
+有限空间作业管理程序;  
+有限空间作业的主要安全风险种类和安全防范措施;  
+作业安全防护和应急救援装备的正确使用;  
+事故案例及紧急情况下的应急处置措施等。...
+
+    [3] rerank=0.6654, bfp_rerank=0.8933
+        内容: 有限空间作业事故应急救援装备配置见表G.1。...
+
+  ── 要点 [2] 触电现场急救 的检索结果 ──
+
+    [1] rerank=0.8775, bfp_rerank=0.9381
+        内容: 低压触电事故脱离电源方法:立即拉掉开关,拔出插销,切断电源。如果电源开关距离较远,用绝缘的钳子或木柄的斧子断开电源线。或用木板等绝缘线插入触电者身下,以隔断流经人体的电流。当电线搭落在触电者身上,可用干燥的衣服、手套、木棍等绝缘物作为工具,拉开触电者及挑开电线使触电者脱离电源。...
+
+    [2] rerank=0.8176, bfp_rerank=0.8267
+        内容: #### A.2.4.1 触电事故发生后,必须不失时机的进行急救,动作迅速方法正确,使触电者尽快脱离电源是救治触电者的首要条件。...
+
+    [3] rerank=0.5699, bfp_rerank=0.7607
+        内容: # 触电事故应急预案...
+
+  ── 要点 [3] 应急物资配置 的检索结果 ──
+
+    [1] rerank=0.9019, bfp_rerank=0.5312
+        内容: 6 应急管理应符合下列规定:
+1)项目经理部应针对工程特点进行重大危险源辨识,并应制定易发事故专项应急救援预案,对施工现场易发生重大安全事故的部位、环节进行监控;
+
+2)项目经理部应定期开展应急救援演练,并应及时总结;
+
+3)施工现场应按应急救援预案要求配备应急救援物资、器材及设备,并应及时更新。...
+
+    [2] rerank=0.8933, bfp_rerank=0.5312
+        内容: 《企业安全生产应急管理九条规定》解读
+企业要根据生产规模、经营活动性质、安全生产风险等客观条件,以满足应急救援工作的实际需要为原则,有针对性、有选择地配备相应数量、种类的应急救援装备、物资。...
+
+    [3] rerank=0.5156, bfp_rerank=0.5312
+        内容: ## 10.4 实施有限空间作业的单位,应配备有限空间作业事故应急救援装备。有限空间作业事故应急救援装备配置见附录G。...
+
+

+ 2180 - 0
utils_test/RAG_Pipeline_Test/reports/test_run_output.txt

@@ -0,0 +1,2180 @@
+Connecting to Redis: redis://:123456@127.0.0.1:6379/0
+P55740.T21316 | 2026-05-26 14:04:01 | INFO     | no-trace        | system | logging initialized
+P55740.T21316 | 2026-05-26 14:04:01 | INFO     | no-trace        | system | construction_review logger initialized, log_dir: logs\construction_review
+P55740.T21316 | 2026-05-26 14:04:01 | INFO     | no-trace        | system | construction_write logger initialized, log_dir: logs\construction_write
+P55740.T21316 | 2026-05-26 14:04:01 | INFO     | no-trace        | system | desensitize logger initialized, log_dir: logs\construction_review\desensitize
+======================================================================
+RAG 管线 Agent 驱动测试
+======================================================================
+测试样本数: 7
+
+[1/3] 初始化管线执行器和评估器...
+P55740.T21316 | 2026-05-26 14:04:02 | INFO     | no-trace        | system | [ModelConfig] 已加载模型配置: D:\standard_workspace\wx_work\LQAgentPlatform\config\model_setting.yaml
+P55740.T21316 | 2026-05-26 14:04:02 | DEBUG    | no-trace        | system | 从 model_setting.yaml 读取默认模型: shutian_qwen3_5_122b
+P55740.T21316 | 2026-05-26 14:04:02 | INFO     | no-trace        | system | 正在初始化AI模型,模型类型: shutian_qwen3_5_122b
+P55740.T21316 | 2026-05-26 14:04:02 | DEBUG    | no-trace        | system | 连接检查通过 (/models): http://183.220.37.46:25423/v1
+P55740.T21316 | 2026-05-26 14:04:02 | INFO     | no-trace        | system | 蜀天Qwen3.5-122B模型初始化成功: /model/Qwen3.5-122B-A10B
+P55740.T21316 | 2026-05-26 14:04:02 | INFO     | no-trace        | system | AI模型初始化完成: shutian_qwen3_5_122b
+P55740.T21316 | 2026-05-26 14:04:03 | DEBUG    | no-trace        | system | 从 model_setting.yaml 读取embedding模型: shutian_qwen3_embed
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | 正在初始化Embedding模型,模型类型: shutian_qwen3_embed
+P55740.T21316 | 2026-05-26 14:04:03 | DEBUG    | no-trace        | system | 连接检查通过 (/models): http://183.220.37.46:25425/v1
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | 蜀天Qwen3-Embedding-8B模型初始化成功: /model/Qwen3-Embedding-8B
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | Embedding模型初始化完成: shutian_qwen3_embed
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | Connected to Milvus at 192.168.92.96:30129
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | 预创建vectorstore连接: first_bfp_collection_entity
+Failed to initialize AsyncMilvusClient during Milvus initialization: <ConnectionConfigException: (code=1, message=Cannot create async connection: no running event loop. Please ensure you are running in an async context.)>. Async operations will be unavailable until AsyncMilvusClient is successfully created.
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | 成功预创建连接: first_bfp_collection_entity
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | 初始化重排序模型类型: shutian_qwen3_reranker
+  初始化完成
+
+[2/3] 执行 RAG 管线...
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 1/7: safety_Monitoring ======
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: safety_Monitoring
+P55740.T21316 | 2026-05-26 14:04:03 | INFO     | no-trace        | system | [缓存] 缓存目录已初始化
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 开始预加载所有提示词...
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 预加载完成: {'loaded_types': ['basic', 'technical', 'rag', 'ai', 'outline', 'query_extract', 'completeness', 'catalog'], 'total_loaded': 19, 'failed_items': [], 'by_type': {'basic': {'total': 6, 'loaded': 6, 'failed': []}, 'technical': {'total': 2, 'loaded': 2, 'failed': []}, 'rag': {'total': 3, 'loaded': 3, 'failed': []}, 'ai': {'total': 4, 'loaded': 4, 'failed': []}, 'outline': {'total': 1, 'loaded': 1, 'failed': []}, 'query_extract': {'total': 1, 'loaded': 1, 'failed': []}, 'completeness': {'total': 1, 'loaded': 1, 'failed': []}, 'catalog': {'total': 1, 'loaded': 1, 'failed': []}}, 'cache_size_mb': 0.02}
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 总缓存数量: 19
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 正在初始化蜀天Qwen3.5-35B模型,服务器地址: http://183.220.37.46:25427/v1
+P55740.T21316 | 2026-05-26 14:04:04 | DEBUG    | no-trace        | system | 连接检查通过 (/models): http://183.220.37.46:25427/v1
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 蜀天Qwen3.5-35B模型服务连接检查通过: http://183.220.37.46:25427/v1
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | 蜀天Qwen3.5-35B模型初始化成功: model_id=/model/Qwen3.5-35B, base_url=http://183.220.37.46:25427/v1
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | AI模型动态初始化完成: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:04 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 945e6f7c-9ba9-434c-b2b3-379ad56ce39f
+P55740.T21316 | 2026-05-26 14:04:04 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:04 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 945e6f7c-9ba9-434c-b2b3-379ad56ce39f, 耗时: 5.16s
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | JSON解析成功, 提取到 5 个审查要点
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 5 个要点
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | [RAG管线测试] 提取到 5 个审查要点, 耗时 6.05s
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: safety_Monitoring
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 深基坑监测预警控制, 检索语句数: 2, 原文长度: 103
+P55740.T44728 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | 开始混合检索
+P55740.T44728 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T44728 | 2026-05-26 14:04:09 | WARNING  | no-trace        | system | 缓存中未找到连接: t_rag_kng_standard,创建新连接
+Failed to initialize AsyncMilvusClient during Milvus initialization: <ConnectionConfigException: (code=1, message=Cannot create async connection: no running event loop. Please ensure you are running in an async context.)>. Async operations will be unavailable until AsyncMilvusClient is successfully created.
+P55740.T44728 | 2026-05-26 14:04:09 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T44728 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 9 -> 8 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 11 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 580 -> 372 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 545 -> 359 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 189 -> 187 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 244 -> 239 字符
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑水平位移及沉降变形预警值与控制值限值', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | [检索完成] search_query: 深基坑水平位移及沉降变形预警值与控制值限值... 召回 5 个候选
+P55740.T34396 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 开始混合检索
+P55740.T34396 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T34396 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T34396 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 9 -> 8 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 11 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 48 -> 48 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 202 -> 198 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 225 -> 217 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 179 -> 172 字符
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑地下水位变化监测预警指标及控制标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | [检索完成] search_query: 深基坑地下水位变化监测预警指标及控制标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 审查要点 '深基坑监测预警控制': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 244 -> 239 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 580 -> 372 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 189 -> 187 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 545 -> 359 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 225 -> 217 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 179 -> 172 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P55740.T21316 | 2026-05-26 14:04:10 | DEBUG    | no-trace        | system | 文档清理: 202 -> 198 字符
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:10 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为40mm;地下水位变化预警值为500mm,控制值为1000mm;支撑轴力预警值为设计值的80%,控制值为设计值的100%。', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 审查要点 '深基坑监测预警控制': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 高支模体系变形监测, 检索语句数: 2, 原文长度: 54
+P55740.T52348 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 开始混合检索
+P55740.T52348 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T52348 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T52348 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 19 -> 19 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 132 -> 132 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 320 -> 263 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 319 -> 262 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 98 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 309 -> 249 字符
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高支模立杆轴力监测预警值及控制标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | [检索完成] search_query: 高支模立杆轴力监测预警值及控制标准... 召回 5 个候选
+P55740.T4292 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 开始混合检索
+P55740.T4292 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T4292 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T4292 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 43 -> 42 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 102 -> 100 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 88 -> 85 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 87 -> 84 字符
+P55740.T21316 | 2026-05-26 14:04:11 | DEBUG    | no-trace        | system | 文档清理: 102 -> 94 字符
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:11 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高大模板支撑体系水平位移监测限值要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | [检索完成] search_query: 高大模板支撑体系水平位移监测限值要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 审查要点 '高支模体系变形监测': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 98 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 309 -> 249 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 102 -> 100 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 43 -> 42 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 87 -> 84 字符
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高支模立杆轴力预警值为设计值的80%,控制值为设计值的100%;水平位移预警值为10mm,控制值为20mm。', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 审查要点 '高支模体系变形监测': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 主塔施工垂直度控制, 检索语句数: 2, 原文长度: 33
+P55740.T51932 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始混合检索
+P55740.T51932 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T51932 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T51932 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 83 -> 81 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 90 -> 88 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 56 -> 56 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 102 -> 95 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 220 -> 213 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 121 -> 119 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 107 -> 105 字符
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥梁主塔施工垂直度允许偏差及控制标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | [检索完成] search_query: 桥梁主塔施工垂直度允许偏差及控制标准... 召回 5 个候选
+P55740.T52160 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始混合检索
+P55740.T52160 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T52160 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T52160 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 54 -> 54 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 51 -> 51 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 80 -> 78 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 309 -> 249 字符
+P55740.T21316 | 2026-05-26 14:04:12 | DEBUG    | no-trace        | system | 文档清理: 387 -> 377 字符
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:12 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高塔结构施工垂直度监测预警值要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | [检索完成] search_query: 高塔结构施工垂直度监测预警值要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 审查要点 '主塔施工垂直度控制': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 83 -> 81 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 90 -> 88 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 107 -> 105 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 121 -> 119 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 220 -> 213 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 387 -> 377 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 80 -> 78 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 309 -> 249 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 51 -> 51 字符
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '主塔垂直度预警值为H/3000(H为塔高),控制值为H/2000。', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 审查要点 '主塔施工垂直度控制': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 挂篮悬浇挠度监测, 检索语句数: 2, 原文长度: 61
+P55740.T56244 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 开始混合检索
+P55740.T56244 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T56244 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T56244 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 98 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 102 -> 95 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 97 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 文档清理: 101 -> 94 字符
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮施工挠度变形监测预警值及控制限值', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | [检索完成] search_query: 挂篮施工挠度变形监测预警值及控制限值... 召回 5 个候选
+P55740.T27300 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 开始混合检索
+P55740.T27300 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T27300 | 2026-05-26 14:04:13 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T27300 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 25 -> 25 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 105 -> 99 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 51 -> 50 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 186 -> 172 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 187 -> 173 字符
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力混凝土悬浇梁挂篮变形控制标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | [检索完成] search_query: 预应力混凝土悬浇梁挂篮变形控制标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 审查要点 '挂篮悬浇挠度监测': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 102 -> 95 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 101 -> 94 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 97 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 187 -> 173 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 186 -> 172 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 105 -> 99 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 51 -> 50 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮挠度预警值为L/800(L为跨度),控制值为L/600;预应力张拉力预警值为设计值的95%,控制值为设计值的105%。', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 审查要点 '挂篮悬浇挠度监测': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 正在处理审查要点 [4]: 监测仪器设备精度要求, 检索语句数: 2, 原文长度: 113
+P55740.T22680 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始混合检索
+P55740.T22680 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T22680 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T22680 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 混合搜索召回返回 6 个结果
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 187 -> 183 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 186 -> 183 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 384 -> 357 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 223 -> 217 字符
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 文档清理: 216 -> 212 字符
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑监测全站仪测角精度及测距精度要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | [检索完成] search_query: 深基坑监测全站仪测角精度及测距精度要求... 召回 5 个候选
+P55740.T32640 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始混合检索
+P55740.T32640 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T32640 | 2026-05-26 14:04:14 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T32640 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 149 -> 137 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 222 -> 206 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 342 -> 324 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 36 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 44 -> 44 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 68 -> 66 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '基坑监测仪器测斜仪水位计轴力计精度等级规定', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [检索完成] search_query: 基坑监测仪器测斜仪水位计轴力计精度等级规定... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 审查要点 '监测仪器设备精度要求': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 223 -> 217 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 384 -> 357 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 187 -> 183 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 186 -> 183 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 216 -> 212 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 222 -> 206 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 44 -> 44 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 36 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 149 -> 137 字符
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,采用测斜仪(精度0.01mm/m)进行深层水平位移监测,采用水位计(精度1mm)进行地下水位监测,采用轴力计(精度0.1%F.S)进行支撑轴力监测。', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 审查要点 '监测仪器设备精度要求': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 5.78 秒
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 5/5 个查询对有结果, 耗时 5.78s
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: safety_Monitoring ===
+  审查要点数: 5
+  提取耗时: 6.05s
+  检索耗时: 5.78s
+  总耗时: 11.84s
+  有结果的查询对: 5/5
+  检索结果总数: 25
+  --- 审查要点 ---
+  [0] 深基坑监测预警控制
+      queries: ['深基坑水平位移及沉降变形预警值与控制值限值', '深基坑地下水位变化监测预警指标及控制标准']
+      original: 深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为40mm;地下水位变化预警值为500...
+      parameter: 水平位移:预警30mm/控制50mm;竖向位移:预警20mm/控制40mm;水位变化:预警500mm/控制1000mm;轴力:预警80%/控制100%
+  [1] 高支模体系变形监测
+      queries: ['高支模立杆轴力监测预警值及控制标准', '高大模板支撑体系水平位移监测限值要求']
+      original: 高支模立杆轴力预警值为设计值的80%,控制值为设计值的100%;水平位移预警值为10mm,控制值为20mm。...
+      parameter: 轴力:预警80%/控制100%;水平位移:预警10mm/控制20mm
+  [2] 主塔施工垂直度控制
+      queries: ['桥梁主塔施工垂直度允许偏差及控制标准', '高塔结构施工垂直度监测预警值要求']
+      original: 主塔垂直度预警值为H/3000(H为塔高),控制值为H/2000。...
+      parameter: 预警值H/3000,控制值H/2000
+  [3] 挂篮悬浇挠度监测
+      queries: ['挂篮施工挠度变形监测预警值及控制限值', '预应力混凝土悬浇梁挂篮变形控制标准']
+      original: 挂篮挠度预警值为L/800(L为跨度),控制值为L/600;预应力张拉力预警值为设计值的95%,控制值为设计值的105%...
+      parameter: 挠度:预警L/800/控制L/600;张拉力:预警95%/控制105%
+  [4] 监测仪器设备精度要求
+      queries: ['深基坑监测全站仪测角精度及测距精度要求', '基坑监测仪器测斜仪水位计轴力计精度等级规定']
+      original: 深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,采用测斜仪(精度0.01mm/m)进行深层...
+      parameter: 全站仪0.5秒级,测斜仪0.01mm/m,水位计1mm,轴力计0.1%F.S
+  --- 检索结果概况 ---
+  [0] 深基坑监测预警控制: 5 条结果, top_rerank=0.8775, top_bfp=0.9482
+  [1] 高支模体系变形监测: 5 条结果, top_rerank=0.7827, top_bfp=0.8670
+  [2] 主塔施工垂直度控制: 5 条结果, top_rerank=0.8933, top_bfp=0.9305
+  [3] 挂篮悬浇挠度监测: 5 条结果, top_rerank=0.9417, top_bfp=0.9497
+  [4] 监测仪器设备精度要求: 5 条结果, top_rerank=0.9019, top_bfp=0.9615
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 2/7: technology_TechParams ======
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: technology_TechParams
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:15 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 5ca54e0f-28e2-4280-9420-5b3b3d518424
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:15 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 5ca54e0f-28e2-4280-9420-5b3b3d518424, 耗时: 3.86s
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | JSON解析成功, 提取到 4 个审查要点
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 4 个要点
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | [RAG管线测试] 提取到 4 个审查要点, 耗时 3.86s
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: technology_TechParams
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 塔式起重机选型验算, 检索语句数: 2, 原文长度: 115
+P55740.T53980 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 开始混合检索
+P55740.T53980 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T53980 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T53980 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 95 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 2023 -> 1830 字符
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 文档清理: 94 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '塔式起重机最大起重量与工作幅度匹配要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:19 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:19 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | [检索完成] search_query: 塔式起重机最大起重量与工作幅度匹配要求... 召回 5 个候选
+P55740.T4056 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始混合检索
+P55740.T4056 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T4056 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T4056 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 54 -> 54 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 75 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 78 -> 76 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 62 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '塔式起重机自重及基础承载能力验算标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | [检索完成] search_query: 塔式起重机自重及基础承载能力验算标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 审查要点 '塔式起重机选型验算': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 95 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 94 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 54 -> 54 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 78 -> 76 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 75 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '设备名称列出关键设备全称,如塔式起重机、混凝土泵车、旋挖钻机。设备型号明确为中联重科ZSL380塔式起重机...设备性能参数包含塔式起重机最大起重量8t、工作幅度60m,...设备自重记录为塔式起重机60t,用于基础设计和运输规划', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 审查要点 '塔式起重机选型验算': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 旋挖钻机钻孔深度验算, 检索语句数: 2, 原文长度: 73
+P55740.T53012 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始混合检索
+P55740.T53012 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T53012 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T53012 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 186 -> 171 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 212 -> 197 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 178 -> 163 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 193 -> 178 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 63 -> 61 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 132 -> 126 字符
+P55740.T21316 | 2026-05-26 14:04:20 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:20 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '旋挖钻机最大钻孔深度与地层适应性要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | [检索完成] search_query: 旋挖钻机最大钻孔深度与地层适应性要求... 召回 5 个候选
+P55740.T8656 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始混合检索
+P55740.T8656 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T8656 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T8656 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 212 -> 208 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 24 -> 24 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 136 -> 132 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 130 -> 127 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 114 -> 114 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 158 -> 154 字符
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '旋挖钻机设备自重及地基承载力验算标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | [检索完成] search_query: 旋挖钻机设备自重及地基承载力验算标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 审查要点 '旋挖钻机钻孔深度验算': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 63 -> 61 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 178 -> 163 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 212 -> 197 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 136 -> 132 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 130 -> 127 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 114 -> 114 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 212 -> 208 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '设备型号明确为...徐工XR280旋挖钻机。设备性能参数包含旋挖钻机最大钻孔深度80m。设备自重记录为...旋挖钻机85t,用于基础设计和运输规划', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 审查要点 '旋挖钻机钻孔深度验算': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 混凝土泵送能力验算, 检索语句数: 2, 原文长度: 47
+P55740.T56164 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始混合检索
+P55740.T56164 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T56164 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T56164 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 60 -> 58 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 97 -> 93 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 130 -> 126 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 41 -> 41 字符
+P55740.T21316 | 2026-05-26 14:04:21 | DEBUG    | no-trace        | system | 文档清理: 73 -> 71 字符
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土泵车输送量与浇筑连续性匹配要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土泵车输送量与浇筑连续性匹配要求... 召回 5 个候选
+P55740.T3196 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 开始混合检索
+P55740.T3196 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T3196 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T3196 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 89 -> 88 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 2941 -> 1455 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 84 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 103 -> 94 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土泵车型号性能参数及检验标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土泵车型号性能参数及检验标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 审查要点 '混凝土泵送能力验算': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 60 -> 58 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 73 -> 71 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 130 -> 126 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 89 -> 88 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 2941 -> 1455 字符
+P55740.T21316 | 2026-05-26 14:04:22 | DEBUG    | no-trace        | system | 文档清理: 84 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+--- Logging error ---
+Traceback (most recent call last):
+  File "C:\Users\10030\.conda\envs\lqagent\Lib\logging\__init__.py", line 1163, in emit
+    stream.write(msg + self.terminator)
+UnicodeEncodeError: 'gbk' codec can't encode character '\xb3' in position 146: illegal multibyte sequence
+Call stack:
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 78, in <module>
+    main()
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 34, in main
+    results = runner.run_batch(TEST_SAMPLES)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 191, in run_batch
+    result = self.run_single(sample["content"], chunk_id=chunk_id)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 157, in run_single
+    retrieval_results = self.review_point_retriever.review_point_retrieval(
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\monitoring\time_statistics.py", line 18, in sync_wrapper
+    return func(*args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\entities_enhance.py", line 133, in review_point_retrieval
+    final_results = self._secondary_rerank(original_text, high_score, top_k=5)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\entities_enhance.py", line 173, in _secondary_rerank
+    rerank_results = retrieval_manager._get_rerank_results(
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\retrieval.py", line 143, in _get_rerank_results
+    rerank_results = getattr(rerank_model, method_name)(query_text, cleaned_documents, top_k)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\models\rerank_model.py", line 227, in shutian_rerank
+    server_logger.info(f"开始执行SHUTIAN Qwen3重排序,查询: '{query}', 候选文档数量: {len(candidates)}")
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 311, in info
+    self._log_with_context(logging.INFO, msg, trace_id, log_type, *args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 305, in _log_with_context
+    self.logger.log(level, msg, *args, **kwargs)
+Message: "开始执行SHUTIAN Qwen3重排序,查询: '设备型号明确为...三一重工HBT80混凝土泵车。设备性能参数包含混凝土泵车输送量80m\xb3/h', 候选文档数量: 9"
+Arguments: ()
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 审查要点 '混凝土泵送能力验算': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 主要工程材料规格确认, 检索语句数: 2, 原文长度: 83
+P55740.T45108 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 开始混合检索
+P55740.T45108 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T45108 | 2026-05-26 14:04:22 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T45108 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 24 -> 24 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 24 -> 24 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 134 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 177 -> 165 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 178 -> 166 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 179 -> 167 字符
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钢筋牌号HRB400E/HRB500及直径规格验收要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [检索完成] search_query: 钢筋牌号HRB400E/HRB500及直径规格验收要求... 召回 5 个候选
+P55740.T820 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 开始混合检索
+P55740.T820 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T820 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T820 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 19 -> 19 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 19 -> 19 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 110 -> 98 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 96 -> 87 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 165 -> 160 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 79 -> 74 字符
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土强度等级C60P6/C50及耐久性技术指标', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土强度等级C60P6/C50及耐久性技术指标... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 审查要点 '主要工程材料规格确认': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 177 -> 165 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 178 -> 166 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 179 -> 167 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 134 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 24 -> 24 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 165 -> 160 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 79 -> 74 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 文档清理: 96 -> 87 字符
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '材料类型包含钢筋、混凝土、预应力钢绞线。材料规格细化为钢筋HRB400EΦ16、HRB500Φ25,混凝土C60P6、C50,预应力钢绞线15.2mm 1860MPa', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 审查要点 '主要工程材料规格确认': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 4.40 秒
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 4/4 个查询对有结果, 耗时 4.40s
+--- Logging error ---
+Traceback (most recent call last):
+  File "C:\Users\10030\.conda\envs\lqagent\Lib\logging\__init__.py", line 1163, in emit
+    stream.write(msg + self.terminator)
+UnicodeEncodeError: 'gbk' codec can't encode character '\xb3' in position 769: illegal multibyte sequence
+Call stack:
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 78, in <module>
+    main()
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 34, in main
+    results = runner.run_batch(TEST_SAMPLES)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 193, in run_batch
+    logger.info(f"[RAG管线测试] {result.summary()}")
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 311, in info
+    self._log_with_context(logging.INFO, msg, trace_id, log_type, *args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 305, in _log_with_context
+    self.logger.log(level, msg, *args, **kwargs)
+Message: "[RAG管线测试] === Pipeline Result: technology_TechParams ===\n  审查要点数: 4\n  提取耗时: 3.86s\n  检索耗时: 4.40s\n  总耗时: 8.26s\n  有结果的查询对: 4/4\n  检索结果总数: 20\n  --- 审查要点 ---\n  [0] 塔式起重机选型验算\n      queries: ['塔式起重机最大起重量与工作幅度匹配要求', '塔式起重机自重及基础承载能力验算标准']\n      original: 设备名称列出关键设备全称,如塔式起重机、混凝土泵车、旋挖钻机。设备型号明确为中联重科ZSL380塔式起重机...设备性能...\n      parameter: 起重量=8t,工作幅度=60m,自重=60t\n  [1] 旋挖钻机钻孔深度验算\n      queries: ['旋挖钻机最大钻孔深度与地层适应性要求', '旋挖钻机设备自重及地基承载力验算标准']\n      original: 设备型号明确为...徐工XR280旋挖钻机。设备性能参数包含旋挖钻机最大钻孔深度80m。设备自重记录为...旋挖钻机85...\n      parameter: 最大钻孔深度=80m,自重=85t\n  [2] 混凝土泵送能力验算\n      queries: ['混凝土泵车输送量与浇筑连续性匹配要求', '混凝土泵车型号性能参数及检验标准']\n      original: 设备型号明确为...三一重工HBT80混凝土泵车。设备性能参数包含混凝土泵车输送量80m\xb3/h...\n      parameter: 输送量=80m\xb3/h\n  [3] 主要工程材料规格确认\n      queries: ['钢筋牌号HRB400E/HRB500及直径规格验收要求', '混凝土强度等级C60P6/C50及耐久性技术指标']\n      original: 材料类型包含钢筋、混凝土、预应力钢绞线。材料规格细化为钢筋HRB400EΦ16、HRB500Φ25,混凝土C60P6、C...\n      parameter: 钢筋HRB400EΦ16/HRB500Φ25,混凝土C60P6/C50,钢绞线15.2mm/1860MPa\n  --- 检索结果概况 ---\n  [0] 塔式起重机选型验算: 5 条结果, top_rerank=0.9363, top_bfp=0.9047\n  [1] 旋挖钻机钻孔深度验算: 5 条结果, top_rerank=0.9482, top_bfp=0.7311\n  [2] 混凝土泵送能力验算: 5 条结果, top_rerank=0.7931, top_bfp=0.6584\n  [3] 主要工程材料规格确认: 5 条结果, top_rerank=0.9325, top_bfp=0.6002"
+Arguments: ()
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 3/7: technology_Operations ======
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: technology_Operations
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:23 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 7f80cf0b-07e4-48e1-8f90-00b35f7ab109
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:23 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 7f80cf0b-07e4-48e1-8f90-00b35f7ab109, 耗时: 3.94s
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | JSON解析成功, 提取到 5 个审查要点
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 5 个要点
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | [RAG管线测试] 提取到 5 个审查要点, 耗时 3.94s
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: technology_Operations
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 钻孔灌注桩垂直度与孔深, 检索语句数: 2, 原文长度: 91
+P55740.T25232 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 开始混合检索
+P55740.T25232 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T25232 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T25232 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 65 -> 63 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 471 -> 390 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 600 -> 503 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 779 -> 673 字符
+P55740.T21316 | 2026-05-26 14:04:27 | DEBUG    | no-trace        | system | 文档清理: 775 -> 669 字符
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:27 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩成孔垂直度允许偏差及检验方法', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | [检索完成] search_query: 钻孔灌注桩成孔垂直度允许偏差及检验方法... 召回 5 个候选
+P55740.T9388 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 开始混合检索
+P55740.T9388 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T9388 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T9388 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 67 -> 63 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 83 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 79 -> 76 字符
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩孔深允许偏差及清孔质量要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | [检索完成] search_query: 钻孔灌注桩孔深允许偏差及清孔质量要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 审查要点 '钻孔灌注桩垂直度与孔深': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 600 -> 503 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 471 -> 390 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 65 -> 63 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 775 -> 669 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 83 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 79 -> 76 字符
+P55740.T21316 | 2026-05-26 14:04:28 | DEBUG    | no-trace        | system | 文档清理: 67 -> 63 字符
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:28 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,孔深偏差+300mm/-0mm,泥浆比重控制在1.1-1.3之间,确保护壁稳定。钢筋笼安装需保证保护层厚度50mm。', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 审查要点 '钻孔灌注桩垂直度与孔深': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 主塔爬模垂直度与平整度, 检索语句数: 2, 原文长度: 40
+P55740.T8188 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始混合检索
+P55740.T8188 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T8188 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T8188 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 176 -> 169 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 42 -> 39 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 220 -> 213 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 246 -> 234 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 127 -> 121 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 216 -> 196 字符
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '液压爬模标准节段模板安装垂直度允许偏差', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | [检索完成] search_query: 液压爬模标准节段模板安装垂直度允许偏差... 召回 5 个候选
+P55740.T7896 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始混合检索
+P55740.T7896 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T7896 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T7896 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 220 -> 213 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 42 -> 39 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 176 -> 169 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 98 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 497 -> 414 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 393 -> 323 字符
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '液压爬模模板表面平整度允许偏差及检验标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | [检索完成] search_query: 液压爬模模板表面平整度允许偏差及检验标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 审查要点 '主塔爬模垂直度与平整度': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 220 -> 213 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 246 -> 234 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 127 -> 121 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 216 -> 196 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 393 -> 323 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 497 -> 414 字符
+P55740.T21316 | 2026-05-26 14:04:29 | DEBUG    | no-trace        | system | 文档清理: 98 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:29 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 审查要点 '主塔爬模垂直度与平整度': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 挂篮变形量控制, 检索语句数: 2, 原文长度: 26
+P55740.T38224 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始混合检索
+P55740.T38224 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T38224 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T38224 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 117 -> 111 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 82 -> 80 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 32 -> 31 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 95 -> 93 字符
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '悬臂浇筑挂篮弹性变形量及总变形量限值要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | [检索完成] search_query: 悬臂浇筑挂篮弹性变形量及总变形量限值要求... 召回 5 个候选
+P55740.T57568 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始混合检索
+P55740.T57568 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T57568 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T57568 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 69 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 115 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 115 -> 113 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 65 -> 64 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 155 -> 148 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 506 -> 479 字符
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮结构变形监测及预压加载检验标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | [检索完成] search_query: 挂篮结构变形监测及预压加载检验标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 审查要点 '挂篮变形量控制': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 117 -> 111 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 82 -> 80 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 95 -> 93 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 115 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 65 -> 64 字符
+P55740.T21316 | 2026-05-26 14:04:30 | DEBUG    | no-trace        | system | 文档清理: 506 -> 479 字符
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '最大悬臂长度225米,挂篮变形量控制在20mm以内。', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 审查要点 '挂篮变形量控制': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 预应力张拉双控指标, 检索语句数: 2, 原文长度: 52
+P55740.T19916 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始混合检索
+P55740.T19916 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T19916 | 2026-05-26 14:04:30 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T19916 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 16 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 178 -> 170 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 152 -> 149 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 158 -> 155 字符
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力张拉伸长值允许偏差及应力控制要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | [检索完成] search_query: 预应力张拉伸长值允许偏差及应力控制要求... 召回 5 个候选
+P55740.T54864 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始混合检索
+P55740.T54864 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T54864 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T54864 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 39 -> 38 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 65 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 81 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 76 -> 74 字符
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力筋张拉后压浆时间间隔及质量控制标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | [检索完成] search_query: 预应力筋张拉后压浆时间间隔及质量控制标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 审查要点 '预应力张拉双控指标': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 178 -> 170 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 152 -> 149 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 158 -> 155 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 81 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 39 -> 38 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 76 -> 74 字符
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力张拉实行双控指标,以应力控制为主,伸长量校核,误差控制在±6%以内,张拉完成后24小时内完成压浆。', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 审查要点 '预应力张拉双控指标': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 正在处理审查要点 [4]: 混凝土浇筑间歇时间, 检索语句数: 2, 原文长度: 22
+P55740.T58160 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始混合检索
+P55740.T58160 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T58160 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T58160 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 164 -> 160 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 129 -> 129 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 117 -> 113 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 172 -> 169 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 168 -> 164 字符
+P55740.T21316 | 2026-05-26 14:04:31 | DEBUG    | no-trace        | system | 文档清理: 163 -> 159 字符
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:31 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土浇筑间歇时间允许限值及施工缝处理要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土浇筑间歇时间允许限值及施工缝处理要求... 召回 5 个候选
+P55740.T38828 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 开始混合检索
+P55740.T38828 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T38828 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T38828 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 6 -> 6 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 23 -> 23 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 177 -> 171 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 173 -> 167 字符
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '大体积混凝土连续浇筑工艺及温度控制要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=3
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [检索完成] search_query: 大体积混凝土连续浇筑工艺及温度控制要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 审查要点 '混凝土浇筑间歇时间': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 129 -> 129 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 172 -> 169 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 164 -> 160 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 163 -> 159 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 168 -> 164 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 173 -> 167 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 177 -> 171 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土浇筑需连续进行,间歇时间不超过2小时。', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 审查要点 '混凝土浇筑间歇时间': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 4.84 秒
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 5/5 个查询对有结果, 耗时 4.84s
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: technology_Operations ===
+  审查要点数: 5
+  提取耗时: 3.94s
+  检索耗时: 4.84s
+  总耗时: 8.79s
+  有结果的查询对: 5/5
+  检索结果总数: 25
+  --- 审查要点 ---
+  [0] 钻孔灌注桩垂直度与孔深
+      queries: ['钻孔灌注桩成孔垂直度允许偏差及检验方法', '钻孔灌注桩孔深允许偏差及清孔质量要求']
+      original: 钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,孔深偏差+300mm/-0mm,泥浆比重控制在1.1-...
+      parameter: 垂直度≤1%,孔深偏差+300mm/-0mm,泥浆比重1.1-1.3,保护层厚度50mm
+  [1] 主塔爬模垂直度与平整度
+      queries: ['液压爬模标准节段模板安装垂直度允许偏差', '液压爬模模板表面平整度允许偏差及检验标准']
+      original: 标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。...
+      parameter: 垂直度偏差≤5mm,表面平整度偏差≤3mm
+  [2] 挂篮变形量控制
+      queries: ['悬臂浇筑挂篮弹性变形量及总变形量限值要求', '挂篮结构变形监测及预压加载检验标准']
+      original: 最大悬臂长度225米,挂篮变形量控制在20mm以内。...
+      parameter: 挂篮变形量≤20mm
+  [3] 预应力张拉双控指标
+      queries: ['预应力张拉伸长值允许偏差及应力控制要求', '预应力筋张拉后压浆时间间隔及质量控制标准']
+      original: 预应力张拉实行双控指标,以应力控制为主,伸长量校核,误差控制在±6%以内,张拉完成后24小时内完成压浆。...
+      parameter: 伸长量误差±6%,压浆时间≤24小时
+  [4] 混凝土浇筑间歇时间
+      queries: ['混凝土浇筑间歇时间允许限值及施工缝处理要求', '大体积混凝土连续浇筑工艺及温度控制要求']
+      original: 混凝土浇筑需连续进行,间歇时间不超过2小时。...
+      parameter: 间歇时间≤2小时
+  --- 检索结果概况 ---
+  [0] 钻孔灌注桩垂直度与孔深: 5 条结果, top_rerank=0.8597, top_bfp=0.9399
+  [1] 主塔爬模垂直度与平整度: 5 条结果, top_rerank=0.9579, top_bfp=0.9196
+  [2] 挂篮变形量控制: 5 条结果, top_rerank=0.8129, top_bfp=0.9809
+  [3] 预应力张拉双控指标: 5 条结果, top_rerank=0.9047, top_bfp=0.9922
+  [4] 混凝土浇筑间歇时间: 5 条结果, top_rerank=0.9604, top_bfp=0.9846
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 4/7: quality_QualitySystem ======
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: quality_QualitySystem
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:32 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: df9ffc9e-155b-4e1a-8931-910d3655144f
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:32 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: df9ffc9e-155b-4e1a-8931-910d3655144f, 耗时: 3.32s
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | JSON解析成功, 提取到 5 个审查要点
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 5 个要点
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | [RAG管线测试] 提取到 5 个审查要点, 耗时 3.32s
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: quality_QualitySystem
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 主塔垂直度控制, 检索语句数: 2, 原文长度: 23
+P55740.T25888 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | 开始混合检索
+P55740.T25888 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T25888 | 2026-05-26 14:04:35 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T25888 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 83 -> 81 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 90 -> 88 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 108 -> 102 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 107 -> 100 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 110 -> 104 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 116 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥梁主塔施工垂直度允许偏差及检验方法', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | [检索完成] search_query: 桥梁主塔施工垂直度允许偏差及检验方法... 召回 5 个候选
+P55740.T48060 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 开始混合检索
+P55740.T48060 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T48060 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T48060 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 54 -> 50 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 128 -> 120 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 383 -> 325 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 383 -> 322 字符
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高耸结构混凝土垂直度测量限值要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | [检索完成] search_query: 高耸结构混凝土垂直度测量限值要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 审查要点 '主塔垂直度控制': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 83 -> 81 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 90 -> 88 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 110 -> 104 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 107 -> 100 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 383 -> 322 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 54 -> 50 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 383 -> 325 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:36 | DEBUG    | no-trace        | system | 文档清理: 128 -> 120 字符
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '主体工程质量目标为主塔垂直度偏差≤H/3000', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 审查要点 '主塔垂直度控制': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 预应力张拉压浆, 检索语句数: 2, 原文长度: 33
+P55740.T12852 | 2026-05-26 14:04:36 | INFO     | no-trace        | system | 开始混合检索
+P55740.T12852 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T12852 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T12852 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 50 -> 48 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 276 -> 265 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 169 -> 157 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 70 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 88 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 147 -> 137 字符
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力混凝土真空辅助压浆工艺及时间要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | [检索完成] search_query: 预应力混凝土真空辅助压浆工艺及时间要求... 召回 5 个候选
+P55740.T39556 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始混合检索
+P55740.T39556 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T39556 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T39556 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 30 -> 28 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 39 -> 38 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 65 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 51 -> 46 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 195 -> 177 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 118 -> 114 字符
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力张拉后压浆完成时限及密实度要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | [检索完成] search_query: 预应力张拉后压浆完成时限及密实度要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 审查要点 '预应力张拉压浆': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 276 -> 265 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 147 -> 137 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 70 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 88 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 169 -> 157 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 39 -> 38 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 195 -> 177 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 51 -> 46 字符
+P55740.T21316 | 2026-05-26 14:04:37 | DEBUG    | no-trace        | system | 文档清理: 30 -> 28 字符
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '针对预应力张拉工序,张拉后24小时内完成压浆,采用真空辅助压浆工艺', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 审查要点 '预应力张拉压浆': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 冬期施工温控, 检索语句数: 2, 原文长度: 32
+P55740.T46624 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始混合检索
+P55740.T46624 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T46624 | 2026-05-26 14:04:37 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T46624 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 33 -> 31 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 64 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 156 -> 148 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 124 -> 123 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 158 -> 148 字符
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土冬期施工入模温度及养护温度限值要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土冬期施工入模温度及养护温度限值要求... 召回 5 个候选
+P55740.T27024 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始混合检索
+P55740.T27024 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T27024 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T27024 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 63 -> 60 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 33 -> 31 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 33 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 68 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 171 -> 166 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 157 -> 152 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 160 -> 155 字符
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '低温环境下混凝土浇筑保温措施及温度控制标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | [检索完成] search_query: 低温环境下混凝土浇筑保温措施及温度控制标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 审查要点 '冬期施工温控': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 124 -> 123 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 156 -> 148 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 158 -> 148 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 64 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 171 -> 166 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 63 -> 60 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 68 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 160 -> 155 字符
+P55740.T21316 | 2026-05-26 14:04:38 | DEBUG    | no-trace        | system | 文档清理: 157 -> 152 字符
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '冬期施工混凝土采取保温措施,确保入模温度≥5℃,养护温度≥10℃', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 审查要点 '冬期施工温控': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 桥面铺装平整度, 检索语句数: 2, 原文长度: 20
+P55740.T38328 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始混合检索
+P55740.T38328 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T38328 | 2026-05-26 14:04:38 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T38328 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 1106 -> 165 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 338 -> 292 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 627 -> 526 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 931 -> 802 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 75 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥面沥青混凝土铺装平整度允许偏差及检测方法', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | [检索完成] search_query: 桥面沥青混凝土铺装平整度允许偏差及检测方法... 召回 5 个候选
+P55740.T45692 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 开始混合检索
+P55740.T45692 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T45692 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T45692 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 189 -> 159 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 88 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 89 -> 87 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 115 -> 109 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 213 -> 188 字符
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥梁桥面系铺装层平整度验收标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | [检索完成] search_query: 桥梁桥面系铺装层平整度验收标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 审查要点 '桥面铺装平整度': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 338 -> 292 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 1106 -> 165 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 627 -> 526 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 213 -> 188 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 189 -> 159 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:39 | DEBUG    | no-trace        | system | 文档清理: 115 -> 109 字符
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:39 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥面系工程质量目标为铺装层平整度≤3mm', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 审查要点 '桥面铺装平整度': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 正在处理审查要点 [4]: 桩基检测合格率, 检索语句数: 2, 原文长度: 22
+P55740.T55576 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始混合检索
+P55740.T55576 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T55576 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T55576 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 13 -> 13 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 73 -> 71 字符
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩桩身完整性检测分类及合格标准', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [检索完成] search_query: 钻孔灌注桩桩身完整性检测分类及合格标准... 召回 5 个候选
+P55740.T23856 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始混合检索
+P55740.T23856 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T23856 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T23856 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 138 -> 136 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 930 -> 160 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 3 -> 3 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 85 -> 83 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 84 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 111 -> 107 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 292 -> 285 字符
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桩基Ⅰ类桩比例要求及检测频率规定', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [检索完成] search_query: 桩基Ⅰ类桩比例要求及检测频率规定... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 审查要点 '桩基检测合格率': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 73 -> 71 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 13 -> 13 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 138 -> 136 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 85 -> 83 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 930 -> 160 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 111 -> 107 字符
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 文档清理: 292 -> 285 字符
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '基础工程质量目标为桩基检测Ⅰ类桩比例≥95%', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 审查要点 '桩基检测合格率': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 4.96 秒
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 5/5 个查询对有结果, 耗时 4.96s
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: quality_QualitySystem ===
+  审查要点数: 5
+  提取耗时: 3.32s
+  检索耗时: 4.96s
+  总耗时: 8.27s
+  有结果的查询对: 5/5
+  检索结果总数: 25
+  --- 审查要点 ---
+  [0] 主塔垂直度控制
+      queries: ['桥梁主塔施工垂直度允许偏差及检验方法', '高耸结构混凝土垂直度测量限值要求']
+      original: 主体工程质量目标为主塔垂直度偏差≤H/3000...
+      parameter: 垂直度偏差≤H/3000
+  [1] 预应力张拉压浆
+      queries: ['预应力混凝土真空辅助压浆工艺及时间要求', '预应力张拉后压浆完成时限及密实度要求']
+      original: 针对预应力张拉工序,张拉后24小时内完成压浆,采用真空辅助压浆工艺...
+      parameter: 压浆时限≤24h,工艺=真空辅助压浆
+  [2] 冬期施工温控
+      queries: ['混凝土冬期施工入模温度及养护温度限值要求', '低温环境下混凝土浇筑保温措施及温度控制标准']
+      original: 冬期施工混凝土采取保温措施,确保入模温度≥5℃,养护温度≥10℃...
+      parameter: 入模温度≥5℃,养护温度≥10℃
+  [3] 桥面铺装平整度
+      queries: ['桥面沥青混凝土铺装平整度允许偏差及检测方法', '桥梁桥面系铺装层平整度验收标准']
+      original: 桥面系工程质量目标为铺装层平整度≤3mm...
+      parameter: 平整度≤3mm
+  [4] 桩基检测合格率
+      queries: ['钻孔灌注桩桩身完整性检测分类及合格标准', '桩基Ⅰ类桩比例要求及检测频率规定']
+      original: 基础工程质量目标为桩基检测Ⅰ类桩比例≥95%...
+      parameter: Ⅰ类桩比例≥95%
+  --- 检索结果概况 ---
+  [0] 主塔垂直度控制: 5 条结果, top_rerank=0.8670, top_bfp=0.8775
+  [1] 预应力张拉压浆: 5 条结果, top_rerank=0.8808, top_bfp=0.7432
+  [2] 冬期施工温控: 5 条结果, top_rerank=0.9698, top_bfp=0.8872
+  [3] 桥面铺装平整度: 5 条结果, top_rerank=0.9809, top_bfp=0.9707
+  [4] 桩基检测合格率: 5 条结果, top_rerank=0.8355, top_bfp=0.9173
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 5/7: safety_TechMeasures ======
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: safety_TechMeasures
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:40 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: ad883701-a70d-4c89-87f8-0d2762a475d4
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:40 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: ad883701-a70d-4c89-87f8-0d2762a475d4, 耗时: 2.71s
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | JSON解析成功, 提取到 4 个审查要点
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 4 个要点
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | [RAG管线测试] 提取到 4 个审查要点, 耗时 2.71s
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: safety_TechMeasures
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 临边洞口安全防护, 检索语句数: 2, 原文长度: 21
+P55740.T21984 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 开始混合检索
+P55740.T21984 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T21984 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T21984 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 27 -> 26 字符
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 71 -> 69 字符
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 139 -> 134 字符
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 文档清理: 103 -> 96 字符
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工作业区域临边洞口防护设施设置要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | [检索完成] search_query: 施工作业区域临边洞口防护设施设置要求... 召回 5 个候选
+P55740.T51656 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 开始混合检索
+P55740.T51656 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T51656 | 2026-05-26 14:04:43 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T51656 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 78 -> 75 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 36 -> 34 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 157 -> 141 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 228 -> 203 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 137 -> 132 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 85 -> 82 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高处作业临边防护栏杆规格及构造要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | [检索完成] search_query: 高处作业临边防护栏杆规格及构造要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 审查要点 '临边洞口安全防护': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 139 -> 134 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 71 -> 69 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 27 -> 26 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 228 -> 203 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 157 -> 141 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 85 -> 82 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 137 -> 132 字符
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工作业区域的临边、临空、洞口安全防护设施', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 审查要点 '临边洞口安全防护': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 高处作业防坠措施, 检索语句数: 2, 原文长度: 22
+P55740.T7640 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始混合检索
+P55740.T7640 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T7640 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T7640 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 81 -> 75 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 93 -> 89 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 173 -> 165 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 76 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 40 -> 39 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 41 -> 39 字符
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 文档清理: 82 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高处作业安全母绳及防坠器设置要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | [检索完成] search_query: 高处作业安全母绳及防坠器设置要求... 召回 5 个候选
+P55740.T51592 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始混合检索
+P55740.T51592 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T51592 | 2026-05-26 14:04:44 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T51592 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 34 -> 34 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 81 -> 75 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 113 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 161 -> 156 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 193 -> 180 字符
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '全身式安全带及水平生命线使用规范', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | [检索完成] search_query: 全身式安全带及水平生命线使用规范... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 审查要点 '高处作业防坠措施': 合并 10 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 173 -> 165 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 76 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 93 -> 89 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 81 -> 75 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 82 -> 79 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 193 -> 180 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 113 -> 110 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 161 -> 156 字符
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '安全母绳布置,全身式(五点式)安全带、防坠器', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 审查要点 '高处作业防坠措施': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 人员上下通道设置, 检索语句数: 2, 原文长度: 37
+P55740.T21720 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始混合检索
+P55740.T21720 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T21720 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T21720 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 33 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 25 -> 25 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 68 -> 68 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 227 -> 217 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 336 -> 216 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 210 -> 200 字符
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工现场人员上下横向通道布置及验收要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | [检索完成] search_query: 施工现场人员上下横向通道布置及验收要求... 召回 5 个候选
+P55740.T43520 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始混合检索
+P55740.T43520 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T43520 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T43520 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 26 -> 25 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 6 -> 6 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 425 -> 404 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 55 -> 54 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 209 -> 195 字符
+P55740.T21316 | 2026-05-26 14:04:45 | DEBUG    | no-trace        | system | 文档清理: 83 -> 77 字符
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钢斜梯、钢直梯、梯笼安装安全规范', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | [检索完成] search_query: 钢斜梯、钢直梯、梯笼安装安全规范... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 审查要点 '人员上下通道设置': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 25 -> 25 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 68 -> 68 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 210 -> 200 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 33 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 209 -> 195 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 55 -> 54 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 26 -> 25 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 6 -> 6 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 425 -> 404 字符
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '人员上下横向通道布置,钢直梯、钢斜梯、梯笼、安全通道等人员上下(横向)通道', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 审查要点 '人员上下通道设置': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 特种设备操作规程, 检索语句数: 2, 原文长度: 49
+P55740.T47256 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始混合检索
+P55740.T47256 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T47256 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T47256 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 119 -> 116 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 124 -> 119 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 51 -> 50 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 107 -> 101 字符
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '旋挖钻机、液压爬模等特种设备操作规程要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | [检索完成] search_query: 旋挖钻机、液压爬模等特种设备操作规程要求... 召回 5 个候选
+P55740.T40408 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始混合检索
+P55740.T40408 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T40408 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T40408 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 13 -> 13 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 36 -> 34 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 55 -> 53 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 55 -> 53 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 57 -> 56 字符
+P55740.T21316 | 2026-05-26 14:04:46 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:46 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '特种作业人员持证上岗及岗位安全职责规定', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [检索完成] search_query: 特种作业人员持证上岗及岗位安全职责规定... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 审查要点 '特种设备操作规程': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 124 -> 119 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 119 -> 116 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 107 -> 101 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 55 -> 53 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 36 -> 34 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 文档清理: 57 -> 56 字符
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '针对施工专业名词类如旋挖钻机、液压爬模等设备,制定专项操作规程,岗位名称类如起重工、电工需持证上岗', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 审查要点 '特种设备操作规程': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 3.67 秒
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 4/4 个查询对有结果, 耗时 3.67s
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: safety_TechMeasures ===
+  审查要点数: 4
+  提取耗时: 2.71s
+  检索耗时: 3.67s
+  总耗时: 6.38s
+  有结果的查询对: 4/4
+  检索结果总数: 20
+  --- 审查要点 ---
+  [0] 临边洞口安全防护
+      queries: ['施工作业区域临边洞口防护设施设置要求', '高处作业临边防护栏杆规格及构造要求']
+      original: 施工作业区域的临边、临空、洞口安全防护设施...
+      parameter: 未明确
+  [1] 高处作业防坠措施
+      queries: ['高处作业安全母绳及防坠器设置要求', '全身式安全带及水平生命线使用规范']
+      original: 安全母绳布置,全身式(五点式)安全带、防坠器...
+      parameter: 未明确
+  [2] 人员上下通道设置
+      queries: ['施工现场人员上下横向通道布置及验收要求', '钢斜梯、钢直梯、梯笼安装安全规范']
+      original: 人员上下横向通道布置,钢直梯、钢斜梯、梯笼、安全通道等人员上下(横向)通道...
+      parameter: 未明确
+  [3] 特种设备操作规程
+      queries: ['旋挖钻机、液压爬模等特种设备操作规程要求', '特种作业人员持证上岗及岗位安全职责规定']
+      original: 针对施工专业名词类如旋挖钻机、液压爬模等设备,制定专项操作规程,岗位名称类如起重工、电工需持证上岗...
+      parameter: 未明确
+  --- 检索结果概况 ---
+  [0] 临边洞口安全防护: 5 条结果, top_rerank=0.8775, top_bfp=0.8963
+  [1] 高处作业防坠措施: 5 条结果, top_rerank=0.8597, top_bfp=0.9196
+  [2] 人员上下通道设置: 5 条结果, top_rerank=0.8355, top_bfp=0.9417
+  [3] 特种设备操作规程: 5 条结果, top_rerank=0.8991, top_bfp=0.9219
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 6/7: environment_EnvSystem ======
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: environment_EnvSystem
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:47 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 52d6bb0f-fff9-4dda-9dbf-122185a6a7aa
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:47 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 52d6bb0f-fff9-4dda-9dbf-122185a6a7aa, 耗时: 3.08s
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | JSON解析成功, 提取到 3 个审查要点
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 3 个要点
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | [RAG管线测试] 提取到 3 个审查要点, 耗时 3.08s
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: environment_EnvSystem
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 施工场地排水沟设置, 检索语句数: 2, 原文长度: 102
+P55740.T43968 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 开始混合检索
+P55740.T43968 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T43968 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T43968 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 28 -> 27 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 93 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 63 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 13 -> 13 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 67 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 120 -> 117 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 455 -> 392 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 93 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工场地排水沟断面尺寸及坡度设计要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | [检索完成] search_query: 施工场地排水沟断面尺寸及坡度设计要求... 召回 5 个候选
+P55740.T12532 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 开始混合检索
+P55740.T12532 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T12532 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T12532 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 35 -> 35 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 52 -> 50 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 208 -> 198 字符
+P55740.T21316 | 2026-05-26 14:04:50 | DEBUG    | no-trace        | system | 文档清理: 102 -> 98 字符
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:50 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '基坑周边截水沟设置规范及沉沙池容积要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | [检索完成] search_query: 基坑周边截水沟设置规范及沉沙池容积要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 审查要点 '施工场地排水沟设置': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 93 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 93 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 455 -> 392 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 63 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 120 -> 117 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 35 -> 35 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 208 -> 198 字符
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+--- Logging error ---
+Traceback (most recent call last):
+  File "C:\Users\10030\.conda\envs\lqagent\Lib\logging\__init__.py", line 1163, in emit
+    stream.write(msg + self.terminator)
+UnicodeEncodeError: 'gbk' codec can't encode character '\xb3' in position 203: illegal multibyte sequence
+Call stack:
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 78, in <module>
+    main()
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 34, in main
+    results = runner.run_batch(TEST_SAMPLES)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 191, in run_batch
+    result = self.run_single(sample["content"], chunk_id=chunk_id)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 157, in run_single
+    retrieval_results = self.review_point_retriever.review_point_retrieval(
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\monitoring\time_statistics.py", line 18, in sync_wrapper
+    return func(*args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\entities_enhance.py", line 133, in review_point_retrieval
+    final_results = self._secondary_rerank(original_text, high_score, top_k=5)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\entities_enhance.py", line 173, in _secondary_rerank
+    rerank_results = retrieval_manager._get_rerank_results(
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\retrieval.py", line 143, in _get_rerank_results
+    rerank_results = getattr(rerank_model, method_name)(query_text, cleaned_documents, top_k)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\models\rerank_model.py", line 227, in shutian_rerank
+    server_logger.info(f"开始执行SHUTIAN Qwen3重排序,查询: '{query}', 候选文档数量: {len(candidates)}")
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 311, in info
+    self._log_with_context(logging.INFO, msg, trace_id, log_type, *args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 305, in _log_with_context
+    self.logger.log(level, msg, *args, **kwargs)
+Message: "开始执行SHUTIAN Qwen3重排序,查询: '截水方面,在基坑周边及边坡顶部设置截水沟,断面尺寸300mm×300mm,坡度0.3%;排水方面,沿施工便道两侧设置排水沟,断面尺寸400mm×400mm,连接至沉沙池。沉沙池设置3处,容积不小于10m\xb3', 候选文档数量: 8"
+Arguments: ()
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 审查要点 '施工场地排水沟设置': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 施工场界噪声控制, 检索语句数: 2, 原文长度: 92
+P55740.T45052 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 开始混合检索
+P55740.T45052 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T45052 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T45052 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 混合搜索召回返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 113 -> 112 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 193 -> 175 字符
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '建筑施工场界环境噪声排放限值及测量方法', 候选文档数量: 4
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 4 个结果
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | [检索完成] search_query: 建筑施工场界环境噪声排放限值及测量方法... 召回 4 个候选
+P55740.T25240 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 开始混合检索
+P55740.T25240 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T25240 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T25240 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 混合搜索召回返回 6 个结果
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 116 -> 114 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 92 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 34 -> 34 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 141 -> 127 字符
+P55740.T21316 | 2026-05-26 14:04:51 | DEBUG    | no-trace        | system | 文档清理: 258 -> 204 字符
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:51 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '夜间高噪声作业禁止时段及管控要求', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | [检索完成] search_query: 夜间高噪声作业禁止时段及管控要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 审查要点 '施工场界噪声控制': 合并 9 个候选, 去重后 9 个
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 193 -> 175 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 113 -> 112 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 92 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 116 -> 114 字符
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '噪声排放监测方面,严格按照《建筑施工场界环境噪声排放标准》(GB 12523-2011)要求,昼间噪声限值70dB,夜间噪声限值55dB。夜间22:00至次日6:00禁止进行高噪声作业', 候选文档数量: 6
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 审查要点 '施工场界噪声控制': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 土方作业扬尘控制, 检索语句数: 2, 原文长度: 58
+P55740.T38156 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始混合检索
+P55740.T38156 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T38156 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T38156 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 混合搜索召回返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 99 -> 95 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 143 -> 133 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 76 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 119 -> 118 字符
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '土方作业扬尘目测高度限值及控制标准', 候选文档数量: 5
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | [检索完成] search_query: 土方作业扬尘目测高度限值及控制标准... 召回 5 个候选
+P55740.T45036 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始混合检索
+P55740.T45036 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T45036 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T45036 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 16 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 26 -> 24 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 280 -> 255 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 99 -> 96 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 72 -> 68 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 142 -> 138 字符
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工现场主要道路硬化率及扬尘防治要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | [检索完成] search_query: 施工现场主要道路硬化率及扬尘防治要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 审查要点 '土方作业扬尘控制': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 99 -> 95 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 143 -> 133 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 76 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 119 -> 118 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 99 -> 96 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 280 -> 255 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 142 -> 138 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P55740.T21316 | 2026-05-26 14:04:52 | DEBUG    | no-trace        | system | 文档清理: 72 -> 68 字符
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:52 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '大气污染防治方面,土方作业阶段确保目测扬尘高度小于1.5m,结构施工阶段小于0.5m,施工现场主要道路硬化率100%', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | 审查要点 '土方作业扬尘控制': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 2.77 秒
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 3/3 个查询对有结果, 耗时 2.77s
+--- Logging error ---
+Traceback (most recent call last):
+  File "C:\Users\10030\.conda\envs\lqagent\Lib\logging\__init__.py", line 1163, in emit
+    stream.write(msg + self.terminator)
+UnicodeEncodeError: 'gbk' codec can't encode character '\xb3' in position 451: illegal multibyte sequence
+Call stack:
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 78, in <module>
+    main()
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 34, in main
+    results = runner.run_batch(TEST_SAMPLES)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 193, in run_batch
+    logger.info(f"[RAG管线测试] {result.summary()}")
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 311, in info
+    self._log_with_context(logging.INFO, msg, trace_id, log_type, *args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 305, in _log_with_context
+    self.logger.log(level, msg, *args, **kwargs)
+Message: "[RAG管线测试] === Pipeline Result: environment_EnvSystem ===\n  审查要点数: 3\n  提取耗时: 3.08s\n  检索耗时: 2.77s\n  总耗时: 5.85s\n  有结果的查询对: 3/3\n  检索结果总数: 15\n  --- 审查要点 ---\n  [0] 施工场地排水沟设置\n      queries: ['施工场地排水沟断面尺寸及坡度设计要求', '基坑周边截水沟设置规范及沉沙池容积要求']\n      original: 截水方面,在基坑周边及边坡顶部设置截水沟,断面尺寸300mm×300mm,坡度0.3%;排水方面,沿施工便道两侧设置排水...\n      parameter: 截水沟300×300mm/0.3%,排水沟400×400mm,沉沙池≥10m\xb3\n  [1] 施工场界噪声控制\n      queries: ['建筑施工场界环境噪声排放限值及测量方法', '夜间高噪声作业禁止时段及管控要求']\n      original: 噪声排放监测方面,严格按照《建筑施工场界环境噪声排放标准》(GB 12523-2011)要求,昼间噪声限值70dB,夜间...\n      parameter: 昼间≤70dB,夜间≤55dB,禁噪时段22:00-06:00\n  [2] 土方作业扬尘控制\n      queries: ['土方作业扬尘目测高度限值及控制标准', '施工现场主要道路硬化率及扬尘防治要求']\n      original: 大气污染防治方面,土方作业阶段确保目测扬尘高度小于1.5m,结构施工阶段小于0.5m,施工现场主要道路硬化率100%...\n      parameter: 土方扬尘<1.5m,结构扬尘<0.5m,道路硬化率100%\n  --- 检索结果概况 ---\n  [0] 施工场地排水沟设置: 5 条结果, top_rerank=0.9241, top_bfp=0.9579\n  [1] 施工场界噪声控制: 5 条结果, top_rerank=0.9689, top_bfp=0.9740\n  [2] 土方作业扬尘控制: 5 条结果, top_rerank=0.9284, top_bfp=0.9748"
+Arguments: ()
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 7/7: safety_Emergency ======
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: safety_Emergency
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:53 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: a2b7ff3d-11dd-44a2-9dca-cafa2172bef6
+P55740.T21316 | 2026-05-26 14:04:53 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P55740.T21316 | 2026-05-26 14:04:53 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: a2b7ff3d-11dd-44a2-9dca-cafa2172bef6, 耗时: 2.57s
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | JSON解析成功, 提取到 3 个审查要点
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 3 个要点
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | [RAG管线测试] 提取到 3 个审查要点, 耗时 2.57s
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: safety_Emergency
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 有限空间救援防护, 检索语句数: 2, 原文长度: 67
+P55740.T54284 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 开始混合检索
+P55740.T54284 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T54284 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T54284 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 19 -> 19 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 77 -> 77 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 59 -> 59 字符
+P55740.T21316 | 2026-05-26 14:04:55 | DEBUG    | no-trace        | system | 文档清理: 100 -> 96 字符
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:55 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '有限空间作业中毒事故救援人员个人防护装备要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | [检索完成] search_query: 有限空间作业中毒事故救援人员个人防护装备要求... 召回 5 个候选
+P55740.T47960 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始混合检索
+P55740.T47960 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T47960 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T47960 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 27 -> 27 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 79 -> 78 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 59 -> 59 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 89 -> 89 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 95 -> 87 字符
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '有限空间事故救援安全绳佩戴及通风要求', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | [检索完成] search_query: 有限空间事故救援安全绳佩戴及通风要求... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 审查要点 '有限空间救援防护': 合并 10 个候选, 去重后 8 个
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 77 -> 77 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 100 -> 96 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 79 -> 78 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 27 -> 27 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 89 -> 89 字符
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方可进入危险区域', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 审查要点 '有限空间救援防护': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 触电急救操作规范, 检索语句数: 2, 原文长度: 70
+P55740.T54492 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始混合检索
+P55740.T54492 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T54492 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T54492 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 混合搜索召回返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 28 -> 28 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 28 -> 28 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 139 -> 137 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 86 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 文档清理: 64 -> 64 字符
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '触电事故现场脱离电源方法要求', 候选文档数量: 5
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | [检索完成] search_query: 触电事故现场脱离电源方法要求... 召回 5 个候选
+P55740.T53356 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始混合检索
+P55740.T53356 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T53356 | 2026-05-26 14:04:56 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T53356 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 224 -> 216 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 20 -> 20 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 94 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 56 -> 56 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 184 -> 181 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 48 -> 48 字符
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '触电现场心肺复苏按压吹气比标准', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | [检索完成] search_query: 触电现场心肺复苏按压吹气比标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 审查要点 '触电急救操作规范': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 139 -> 137 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 86 -> 86 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 64 -> 64 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 28 -> 28 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 28 -> 28 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 56 -> 56 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 184 -> 181 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 224 -> 216 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 94 -> 91 字符
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,按压吹气比为30:2', 候选文档数量: 10
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 审查要点 '触电急救操作规范': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 应急物资配置标准, 检索语句数: 2, 原文长度: 45
+P55740.T57716 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始混合检索
+P55740.T57716 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T57716 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T57716 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 45 -> 44 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 11 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 111 -> 109 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 135 -> 129 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 149 -> 145 字符
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工现场应急物资配备数量及规格要求', 候选文档数量: 7
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | [检索完成] search_query: 施工现场应急物资配备数量及规格要求... 召回 5 个候选
+P55740.T59756 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始混合检索
+P55740.T59756 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P55740.T59756 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 混合召回topk: 10
+P55740.T59756 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 23 -> 23 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 2291 -> 430 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 65 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 39 -> 35 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 93 -> 90 字符
+P55740.T21316 | 2026-05-26 14:04:57 | DEBUG    | no-trace        | system | 文档清理: 260 -> 254 字符
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:57 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '正压式空气呼吸器及安全绳配置标准', 候选文档数量: 8
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | [检索完成] search_query: 正压式空气呼吸器及安全绳配置标准... 召回 5 个候选
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | 审查要点 '应急物资配置标准': 合并 10 个候选, 去重后 10 个
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 135 -> 129 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 149 -> 145 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 111 -> 109 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 45 -> 44 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 11 -> 10 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 2291 -> 430 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 260 -> 254 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 39 -> 35 字符
+P55740.T21316 | 2026-05-26 14:04:58 | DEBUG    | no-trace        | system | 文档清理: 65 -> 62 字符
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW', 候选文档数量: 9
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | 审查要点 '应急物资配置标准': 二次重排序完成, 返回 5 个结果
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 2.57 秒
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 3/3 个查询对有结果, 耗时 2.57s
+P55740.T21316 | 2026-05-26 14:04:58 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: safety_Emergency ===
+  审查要点数: 3
+  提取耗时: 2.57s
+  检索耗时: 2.57s
+  总耗时: 5.14s
+  有结果的查询对: 3/3
+  检索结果总数: 15
+  --- 审查要点 ---
+  [0] 有限空间救援防护
+      queries: ['有限空间作业中毒事故救援人员个人防护装备要求', '有限空间事故救援安全绳佩戴及通风要求']
+      original: 针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方...
+      parameter: 正压式空气呼吸器,防毒面具,安全绳
+  [1] 触电急救操作规范
+      queries: ['触电事故现场脱离电源方法要求', '触电现场心肺复苏按压吹气比标准']
+      original: 发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,...
+      parameter: 绝缘工具脱离电源,按压吹气比=30:2
+  [2] 应急物资配置标准
+      queries: ['施工现场应急物资配备数量及规格要求', '正压式空气呼吸器及安全绳配置标准']
+      original: 干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW...
+      parameter: 灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW
+  --- 检索结果概况 ---
+  [0] 有限空间救援防护: 5 条结果, top_rerank=0.8872, top_bfp=0.9943
+  [1] 触电急救操作规范: 5 条结果, top_rerank=0.9669, top_bfp=0.9381
+  [2] 应急物资配置标准: 5 条结果, top_rerank=0.8991, top_bfp=0.5467
+
+[3/3] 评估结果...
+  评估样本 1/7: safety_Monitoring
+    总分: 3.2/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+  评估样本 2/7: technology_TechParams
+    总分: 3.2/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+  评估样本 3/7: technology_Operations
+    总分: 3.1/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+  评估样本 4/7: quality_QualitySystem
+    总分: 2.9/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+  评估样本 5/7: safety_TechMeasures
+    总分: 3.2/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+  评估样本 6/7: environment_EnvSystem
+    总分: 3.2/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+  评估样本 7/7: safety_Emergency
+    总分: 3.6/5.0 [PASS]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+
+报告已保存: D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\reports\rag_pipeline_test_report.md
+======================================================================
+# RAG 管线测试报告
+
+测试样本数: 7
+
+## 汇总表
+
+| 样本 | 总分 | 状态 | 召回相关性 | 参数匹配度 | 幻觉风险 | 覆盖度 | 分数合理性 |
+|------|------|------|-----------|-----------|---------|--------|-----------|
+| safety_Monitoring | 3.2 | WARN | 4.7 | 0.0 | 1.5 | 5.0 | 5.0 |
+| technology_TechParams | 3.2 | WARN | 4.3 | 1.5 | 0.4 | 5.0 | 5.0 |
+| technology_Operations | 3.1 | WARN | 4.7 | 0.2 | 1.5 | 4.1 | 5.0 |
+| quality_QualitySystem | 2.9 | WARN | 4.4 | 0.2 | 1.5 | 3.5 | 5.0 |
+| safety_TechMeasures | 3.2 | WARN | 4.5 | 3.0 | 0.6 | 3.0 | 5.0 |
+| environment_EnvSystem | 3.2 | WARN | 4.9 | 0.0 | 1.5 | 4.6 | 5.0 |
+| safety_Emergency | 3.6 | PASS | 4.6 | 2.0 | 1.5 | 5.0 | 5.0 |
+
+## 详细评估
+
+### [WARN] safety_Monitoring (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- [PASS] **召回相关性**: 4.7/5.0
+  - 各要点: ['4.9', '4.9', '4.9', '4.1', '4.9']
+- [PASS] **参数匹配度**: 0.0/5.0
+  - 各要点: ['0.0', '0.0', '0.0', '0.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 5.0/5.0
+  - 原文参数数: 19, 被覆盖: 19, 覆盖率: 100%, 审查要点数: 5
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.765, min=0.562, max=0.942, std=0.115, n=25, issues=[]
+
+### [WARN] technology_TechParams (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+
+- [PASS] **召回相关性**: 4.3/5.0
+  - 各要点: ['4.9', '4.9', '4.9', '2.5']
+- [PASS] **参数匹配度**: 1.5/5.0
+  - 各要点: ['3.0', '3.0', '0.0', '0.0']
+- [PASS] **幻觉风险**: 0.4/5.0
+  - 各要点: ['0.0', '0.0', '0.0', '1.5']
+- [PASS] **覆盖度**: 5.0/5.0
+  - 原文参数数: 3, 被覆盖: 3, 覆盖率: 100%, 审查要点数: 4
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.816, min=0.531, max=0.948, std=0.122, n=20, issues=[]
+
+### [WARN] technology_Operations (总分: 3.1)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- [PASS] **召回相关性**: 4.7/5.0
+  - 各要点: ['4.1', '4.9', '4.9', '4.9', '4.9']
+- [PASS] **参数匹配度**: 0.2/5.0
+  - 各要点: ['1.0', '0.0', '0.0', '0.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 4.1/5.0
+  - 原文参数数: 13, 被覆盖: 9, 覆盖率: 69%, 审查要点数: 5
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.791, min=0.523, max=0.960, std=0.135, n=25, issues=[]
+
+### [WARN] quality_QualitySystem (总分: 2.9)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- [PASS] **召回相关性**: 4.4/5.0
+  - 各要点: ['3.3', '4.9', '4.9', '4.9', '4.1']
+- [PASS] **参数匹配度**: 0.2/5.0
+  - 各要点: ['0.0', '0.0', '1.2', '0.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 3.5/5.0
+  - 原文参数数: 18, 被覆盖: 9, 覆盖率: 50%, 审查要点数: 5
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.819, min=0.593, max=0.981, std=0.095, n=25, issues=[]
+
+### [WARN] safety_TechMeasures (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+
+- [PASS] **召回相关性**: 4.5/5.0
+  - 各要点: ['4.9', '4.9', '3.3', '4.9']
+- [PASS] **参数匹配度**: 3.0/5.0
+  - 各要点: ['3.0', '3.0', '3.0', '3.0']
+- [PASS] **幻觉风险**: 0.6/5.0
+  - 各要点: ['1.5', '0.0', '0.9', '0.0']
+- [PASS] **覆盖度**: 3.0/5.0
+  - 原文无可提取参数,中性评分
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.797, min=0.570, max=0.899, std=0.076, n=20, issues=[]
+
+### [WARN] environment_EnvSystem (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- [PASS] **召回相关性**: 4.9/5.0
+  - 各要点: ['4.9', '4.9', '4.9']
+- [PASS] **参数匹配度**: 0.0/5.0
+  - 各要点: ['0.0', '0.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 4.6/5.0
+  - 原文参数数: 8, 被覆盖: 7, 覆盖率: 88%, 审查要点数: 3
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.862, min=0.651, max=0.969, std=0.075, n=15, issues=[]
+
+### [PASS] safety_Emergency (总分: 3.6)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- [PASS] **召回相关性**: 4.6/5.0
+  - 各要点: ['4.9', '4.1', '4.9']
+- [PASS] **参数匹配度**: 2.0/5.0
+  - 各要点: ['3.0', '3.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 5.0/5.0
+  - 原文参数数: 1, 被覆盖: 1, 覆盖率: 100%, 审查要点数: 3
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.741, min=0.547, max=0.967, std=0.147, n=15, issues=[]
+
+## 全局统计
+
+- PASS: 1/7
+- WARN: 6/7
+- FAIL: 0/7
+- 平均总分: 3.2/5.0
+======================================================================
+
+汇总: 1 PASS / 6 WARN / 0 FAIL

+ 78 - 0
utils_test/RAG_Pipeline_Test/run_tests.py

@@ -0,0 +1,78 @@
+"""
+Agent 驱动的 RAG 管线测试运行器
+执行全部测试样本,评估并生成报告
+"""
+import sys
+import os
+
+# 确保项目根目录在路径中
+project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+if project_root not in sys.path:
+    sys.path.insert(0, project_root)
+
+from utils_test.RAG_Pipeline_Test.test_data import TEST_SAMPLES
+from utils_test.RAG_Pipeline_Test.rag_pipeline_runner import RAGPipelineRunner
+from utils_test.RAG_Pipeline_Test.rag_evaluator import RAGEvaluator
+
+
+def main():
+    print("=" * 70)
+    print("RAG 管线 Agent 驱动测试")
+    print("=" * 70)
+    print(f"测试样本数: {len(TEST_SAMPLES)}")
+    print()
+
+    # 初始化
+    print("[1/3] 初始化管线执行器和评估器...")
+    runner = RAGPipelineRunner()
+    evaluator = RAGEvaluator()
+    print("  初始化完成")
+    print()
+
+    # 执行管线
+    print("[2/3] 执行 RAG 管线...")
+    results = runner.run_batch(TEST_SAMPLES)
+    print()
+
+    # 评估
+    print("[3/3] 评估结果...")
+    evaluations = []
+    for i, (result, sample) in enumerate(zip(results, TEST_SAMPLES)):
+        print(f"  评估样本 {i+1}/{len(results)}: {result.chunk_id}")
+        ev = evaluator.evaluate_sample(result, sample["content"])
+        evaluations.append(ev)
+        print(f"    总分: {ev.overall_score:.1f}/5.0 [{ev.overall_status}]")
+        print(f"    {ev.analysis}")
+    print()
+
+    # 生成报告
+    report = evaluator.generate_report(evaluations)
+
+    # 先保存报告到文件(避免打印编码问题导致丢失)
+    report_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "reports")
+    os.makedirs(report_dir, exist_ok=True)
+    report_path = os.path.join(report_dir, "rag_pipeline_test_report.md")
+    with open(report_path, "w", encoding="utf-8") as f:
+        f.write(report)
+    print(f"\n报告已保存: {report_path}")
+
+    # 输出报告
+    print("=" * 70)
+    try:
+        print(report)
+    except UnicodeEncodeError:
+        safe_report = report.replace("✅", "[PASS]").replace("⚠️", "[WARN]").replace("❌", "[FAIL]")
+        print(safe_report)
+    print("=" * 70)
+
+    # 返回汇总
+    pass_count = sum(1 for ev in evaluations if ev.overall_status == "PASS")
+    warn_count = sum(1 for ev in evaluations if ev.overall_status == "WARN")
+    fail_count = sum(1 for ev in evaluations if ev.overall_status == "FAIL")
+    print(f"\n汇总: {pass_count} PASS / {warn_count} WARN / {fail_count} FAIL")
+
+    return evaluations
+
+
+if __name__ == "__main__":
+    main()

+ 204 - 0
utils_test/RAG_Pipeline_Test/test_data.py

@@ -0,0 +1,204 @@
+"""
+RAG 管线测试数据 — 从真实施工方案审查结果中提取的 7 个代表性文本片段
+
+数据来源: temp/construction_review/final_result/5a8326f4dc0b2fd34548482f815a60de-1779680773.json
+文档: 四川路桥专项施工方案框架以及编制说明(2025修订第三版)
+"""
+
+TEST_SAMPLES = [
+    {
+        "chunk_id": "safety_Monitoring",
+        "section_label": "第五章 安全保证措施->五、监测监控措施",
+        "expected_topics": [
+            "深基坑监测预警值标准",
+            "高支模监测频率要求",
+            "全站仪精度等级要求",
+            "监测点布置间距规范",
+        ],
+        "content": (
+            "1、监测组织机构\n"
+            "监测组织机构由项目总工程师任组长,监测负责人具体负责,配备专业监测技"
+            "术人员3名,其中注册安全工程师1名,监测技术员2名。监测人员需具备相关专"
+            "业资质,熟悉监测仪器操作及数据分析方法。\n"
+            "2、监测范围\n"
+            "监测范围需覆盖施工区域内的所有风险点,包括深基坑周边、高支模体系、临"
+            "时用电线路、主塔施工区域、挂篮悬浇区域、施工便道边坡、临时设施等。深基坑"
+            "监测范围包括基坑周边50米范围内的建(构)筑物、地下管线及地表沉降。\n"
+            "5、监测仪器设备\n"
+            "深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,"
+            "采用测斜仪(精度0.01mm/m)进行深层水平位移监测,采用水位计(精度1mm)"
+            "进行地下水位监测,采用轴力计(精度0.1%F.S)进行支撑轴力监测。\n"
+            "8、预警值及控制值\n"
+            "深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为"
+            "40mm;地下水位变化预警值为500mm,控制值为1000mm;支撑轴力预警值为设计值"
+            "的80%,控制值为设计值的100%。高支模立杆轴力预警值为设计值的80%,控制值为"
+            "设计值的100%;水平位移预警值为10mm,控制值为20mm。主塔垂直度预警值为H/3000"
+            "(H为塔高),控制值为H/2000。挂篮挠度预警值为L/800(L为跨度),控制值为L/600;"
+            "预应力张拉力预警值为设计值的95%,控制值为设计值的105%。"
+        ),
+    },
+    {
+        "chunk_id": "technology_TechParams",
+        "section_label": "第四章 施工工艺技术->二、技术参数",
+        "expected_topics": [
+            "钢筋力学性能标准",
+            "混凝土强度等级要求",
+            "预应力钢绞线技术条件",
+            "塔式起重机安全操作规程",
+        ],
+        "content": (
+            "技术参数明确工程材料类名词、规格、数值及设备性能。材料类型包含钢筋、"
+            "混凝土、预应力钢绞线。材料规格细化为钢筋HRB400EΦ16、HRB500Φ25,混凝土"
+            "C60P6、C50,预应力钢绞线15.2mm 1860MPa。设备名称列出关键设备全称,如塔式"
+            "起重机、混凝土泵车、旋挖钻机。设备型号明确为中联重科ZSL380塔式起重机、"
+            "三一重工HBT80混凝土泵车、徐工XR280旋挖钻机。设备性能参数包含塔式起重"
+            "机最大起重量8t、工作幅度60m,混凝土泵车输送量80m³/h,旋挖钻机最大钻孔"
+            "深度80m。设备出厂时间记录为2022年6月,设备自重记录为塔式起重机60t、"
+            "旋挖钻机85t,用于基础设计和运输规划,所有参数均满足设计及规范要求。"
+        ),
+    },
+    {
+        "chunk_id": "technology_Operations",
+        "section_label": "第四章 施工工艺技术->五、施工方法及操作要求",
+        "expected_topics": [
+            "钻孔灌注桩垂直度允许偏差",
+            "混凝土浇筑间歇时间限制",
+            "预应力张拉伸长量误差控制",
+            "模板安装垂直度偏差标准",
+        ],
+        "content": (
+            "施工工序操作详细描述各工序的操作步骤。钢筋绑扎操作流程包含除锈→下料"
+            "→成型→绑扎→验收,模板安装操作步骤包含清理→涂油→安装→加固→校正。施"
+            "工要点明确工序的关键要求,钢筋绑扎需保证间距均匀,偏差控制在±10mm以内,"
+            "模板安装需保证垂直度,偏差控制在5mm以内,混凝土浇筑需连续进行,间歇时间"
+            "不超过2小时。\n"
+            "1、工序一:钻孔灌注桩施工\n"
+            "钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,"
+            "孔深偏差+300mm/-0mm,泥浆比重控制在1.1-1.3之间,确保护壁稳定。"
+            "钢筋笼安装需保证保护层厚度50mm。混凝土浇筑需连续进行,导管埋深控制在2-6米。\n"
+            "2、工序二:主塔液压爬模施工\n"
+            "标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。"
+            "混凝土采用C50高性能混凝土,坍落度控制在160-180mm,浇筑温度不超过30℃。\n"
+            "3、工序三:主梁挂篮悬臂浇筑施工\n"
+            "最大悬臂长度225米,挂篮变形量控制在20mm以内。预应力张拉实行双控指标,"
+            "以应力控制为主,伸长量校核,误差控制在±6%以内,张拉完成后24小时内完成压浆。"
+            "所有工序检查标准严格执行JTG/T 3650-2020规范。"
+        ),
+    },
+    {
+        "chunk_id": "quality_QualitySystem",
+        "section_label": "第六章 质量保证措施->一、质量保证体系",
+        "expected_topics": [
+            "桩基检测I类桩比例要求",
+            "主塔垂直度偏差限值",
+            "混凝土坍落度控制范围",
+            "预应力压浆时间要求",
+            "冬期施工混凝土温度控制",
+        ],
+        "content": (
+            "二、质量目标\n"
+            "本工程质量总目标为分项工程合格率100%,争创鲁班奖。质量目标分解方面,"
+            "基础工程质量目标为桩基检测Ⅰ类桩比例≥95%,承台混凝土强度合格率100%;主"
+            "体工程质量目标为主塔垂直度偏差≤H/3000,主梁线形偏差≤±20mm,混凝土外观"
+            "质量零缺陷;桥面系工程质量目标为铺装层平整度≤3mm,伸缩缝安装精度±2mm;"
+            "附属工程质量目标为支座安装偏差≤5mm。\n"
+            "四、质量控制程序与具体措施\n"
+            "原材料进场检验执行三证一检制度。构配件进场质量抽查比例为10%,每批抽查5件。"
+            "针对混凝土浇筑工序,预防措施为控制坍落度在160-180mm,分层浇筑、充分振捣。"
+            "针对预应力张拉工序,张拉后24小时内完成压浆,采用真空辅助压浆工艺。"
+            "冬期施工混凝土采取保温措施,确保入模温度≥5℃,养护温度≥10℃。"
+        ),
+    },
+    {
+        "chunk_id": "safety_TechMeasures",
+        "section_label": "第五章 安全保证措施->三、技术保障措施",
+        "expected_topics": [
+            "深基坑开挖支护安全要求",
+            "高处作业防护措施",
+            "特种设备操作规程",
+            "临时用电安全规范",
+        ],
+        "content": (
+            "总体安全措施包含保证施工过程中主要工序的人员、材料、机械设备安全所采"
+            "取的技术措施,涵盖材料运输、吊装,施工作业区域的临边、临空、洞口安全防护"
+            "设施、安全母绳布置,人员上下横向通道布置等,是针对项目整体的安全技术规划。"
+            "例如编制施工现场临时用电总体方案及高空作业总体防护措施,需覆盖所有施工环"
+            "节,确保技术交底到位。主要工序安全保证措施是针对关键工序的具体安全要求,"
+            "如深基坑开挖支护措施明确支护结构稳定性验算及监测要求,模板安装拆除安全规"
+            "范规定拆模顺序及混凝土强度要求。针对施工专业名词类如旋挖钻机、液压爬模等"
+            "设备,制定专项操作规程,明确施工场地名称如钢筋加工场、拌和站的安全分区管"
+            "理,岗位名称类如起重工、电工需持证上岗。\n"
+            "四、安全防护措施\n"
+            "包含钢直梯、钢斜梯、梯笼、水平生命线、全身式(五点式)安全带、防坠器、"
+            "安全通道等人员上下(横向)通道、操作平台、防护设施的规格型号、布置方式、"
+            "使用要求等内容。"
+        ),
+    },
+    {
+        "chunk_id": "environment_EnvSystem",
+        "section_label": "第七章 环境保证措施->一、环境保证体系",
+        "expected_topics": [
+            "施工噪声排放限值标准",
+            "水土保持措施要求",
+            "施工废水处理标准",
+            "扬尘控制措施",
+        ],
+        "content": (
+            "三、环境保护及文明施工措施\n"
+            "施工区域水土流失防治措施方面,通过\"截、排、拦、护\"综合措施减少雨水对"
+            "裸露土壤的冲刷。截水方面,在基坑周边及边坡顶部设置截水沟,断面尺寸"
+            "300mm×300mm,坡度0.3%;排水方面,沿施工便道两侧设置排水沟,断面尺寸"
+            "400mm×400mm,连接至沉沙池。沉沙池设置3处,容积不小于10m³。\n"
+            "噪声排放监测方面,严格按照《建筑施工场界环境噪声排放标准》"
+            "(GB 12523-2011)要求,昼间噪声限值70dB,夜间噪声限值55dB。"
+            "夜间22:00至次日6:00禁止进行高噪声作业。\n"
+            "水污染防治措施方面,施工废水经三级沉淀池(容积不小于20m³)处理后回用。"
+            "废水检测确保pH值、COD、SS等指标达标排放。\n"
+            "大气污染防治方面,土方作业阶段确保目测扬尘高度小于1.5m,"
+            "结构施工阶段小于0.5m,施工现场主要道路硬化率100%。"
+        ),
+    },
+    {
+        "chunk_id": "safety_Emergency",
+        "section_label": "第五章 安全保证措施->六、应急处置措施",
+        "expected_topics": [
+            "应急响应程序和时间要求",
+            "有限空间中毒救援措施",
+            "高处坠落急救规范",
+            "应急物资配置标准",
+        ],
+        "content": (
+            "1、应急处置程序\n"
+            "事故发生后,现场人员需立即向班组长报告,班组长在5分钟内向项目安全部报"
+            "告,项目安全部在10分钟内向项目经理报告,项目经理根据事故等级决定启动"
+            "相应级别应急预案。一般事故由项目部级应急响应,较大及以上事故需立即向"
+            "公司总部及监理单位报告。\n"
+            "2、处置措施\n"
+            "(1)有毒有害气体中毒\n"
+            "针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,"
+            "救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方可进入"
+            "危险区域。将中毒者迅速转移至通风良好的安全地带,若呼吸停止应立即进行"
+            "人工呼吸,若心跳停止则配合胸外心脏按压。\n"
+            "(3)触电事故\n"
+            "发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木"
+            "棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,"
+            "按压吹气比为30:2。\n"
+            "3、应急物资及设备保障\n"
+            "干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,"
+            "发电机50kW。"
+        ),
+    },
+]
+
+
+def get_sample(chunk_id: str) -> dict:
+    """按 chunk_id 获取测试样本"""
+    for sample in TEST_SAMPLES:
+        if sample["chunk_id"] == chunk_id:
+            return sample
+    raise ValueError(f"Unknown chunk_id: {chunk_id}")
+
+
+def get_sample_ids() -> list:
+    """获取所有测试样本 ID"""
+    return [s["chunk_id"] for s in TEST_SAMPLES]

+ 1964 - 0
utils_test/RAG_Pipeline_Test/test_output.txt

@@ -0,0 +1,1964 @@
+Connecting to Redis: redis://:123456@127.0.0.1:6379/0
+P54772.T17804 | 2026-05-26 12:18:34 | INFO     | no-trace        | system | logging initialized
+P54772.T17804 | 2026-05-26 12:18:34 | INFO     | no-trace        | system | construction_review logger initialized, log_dir: logs\construction_review
+P54772.T17804 | 2026-05-26 12:18:34 | INFO     | no-trace        | system | construction_write logger initialized, log_dir: logs\construction_write
+P54772.T17804 | 2026-05-26 12:18:34 | INFO     | no-trace        | system | desensitize logger initialized, log_dir: logs\construction_review\desensitize
+======================================================================
+RAG 管线 Agent 驱动测试
+======================================================================
+测试样本数: 7
+
+[1/3] 初始化管线执行器和评估器...
+P54772.T17804 | 2026-05-26 12:18:34 | INFO     | no-trace        | system | [ModelConfig] 已加载模型配置: D:\standard_workspace\wx_work\LQAgentPlatform\config\model_setting.yaml
+P54772.T17804 | 2026-05-26 12:18:34 | DEBUG    | no-trace        | system | 从 model_setting.yaml 读取默认模型: shutian_qwen3_5_122b
+P54772.T17804 | 2026-05-26 12:18:34 | INFO     | no-trace        | system | 正在初始化AI模型,模型类型: shutian_qwen3_5_122b
+P54772.T17804 | 2026-05-26 12:18:34 | DEBUG    | no-trace        | system | 连接检查通过 (/models): http://183.220.37.46:25423/v1
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | 蜀天Qwen3.5-122B模型初始化成功: /model/Qwen3.5-122B-A10B
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | AI模型初始化完成: shutian_qwen3_5_122b
+P54772.T17804 | 2026-05-26 12:18:35 | DEBUG    | no-trace        | system | 从 model_setting.yaml 读取embedding模型: shutian_qwen3_embed
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | 正在初始化Embedding模型,模型类型: shutian_qwen3_embed
+P54772.T17804 | 2026-05-26 12:18:35 | DEBUG    | no-trace        | system | 连接检查通过 (/models): http://183.220.37.46:25425/v1
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | 蜀天Qwen3-Embedding-8B模型初始化成功: /model/Qwen3-Embedding-8B
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | Embedding模型初始化完成: shutian_qwen3_embed
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | Connected to Milvus at 192.168.92.96:30129
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | 预创建vectorstore连接: first_bfp_collection_entity
+Failed to initialize AsyncMilvusClient during Milvus initialization: <ConnectionConfigException: (code=1, message=Cannot create async connection: no running event loop. Please ensure you are running in an async context.)>. Async operations will be unavailable until AsyncMilvusClient is successfully created.
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | 成功预创建连接: first_bfp_collection_entity
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | 初始化重排序模型类型: shutian_qwen3_reranker
+  初始化完成
+
+[2/3] 执行 RAG 管线...
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 1/7: safety_Monitoring ======
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: safety_Monitoring
+P54772.T17804 | 2026-05-26 12:18:35 | INFO     | no-trace        | system | [缓存] 缓存目录已初始化
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 开始预加载所有提示词...
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 预加载完成: {'loaded_types': ['basic', 'technical', 'rag', 'ai', 'outline', 'query_extract', 'completeness', 'catalog'], 'total_loaded': 19, 'failed_items': [], 'by_type': {'basic': {'total': 6, 'loaded': 6, 'failed': []}, 'technical': {'total': 2, 'loaded': 2, 'failed': []}, 'rag': {'total': 3, 'loaded': 3, 'failed': []}, 'ai': {'total': 4, 'loaded': 4, 'failed': []}, 'outline': {'total': 1, 'loaded': 1, 'failed': []}, 'query_extract': {'total': 1, 'loaded': 1, 'failed': []}, 'completeness': {'total': 1, 'loaded': 1, 'failed': []}, 'catalog': {'total': 1, 'loaded': 1, 'failed': []}}, 'cache_size_mb': 0.02}
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 总缓存数量: 19
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 正在初始化蜀天Qwen3.5-35B模型,服务器地址: http://183.220.37.46:25427/v1
+P54772.T17804 | 2026-05-26 12:18:36 | DEBUG    | no-trace        | system | 连接检查通过 (/models): http://183.220.37.46:25427/v1
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 蜀天Qwen3.5-35B模型服务连接检查通过: http://183.220.37.46:25427/v1
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | 蜀天Qwen3.5-35B模型初始化成功: model_id=/model/Qwen3.5-35B, base_url=http://183.220.37.46:25427/v1
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | AI模型动态初始化完成: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:36 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 14f5aa48-7ea4-4b58-ae98-f6a98038727a
+P54772.T17804 | 2026-05-26 12:18:36 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:18:36 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 14f5aa48-7ea4-4b58-ae98-f6a98038727a, 耗时: 5.10s
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | JSON解析成功, 提取到 5 个审查要点
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 5 个要点
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | [RAG管线测试] 提取到 5 个审查要点, 耗时 6.02s
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: safety_Monitoring
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 深基坑监测预警控制, 检索语句数: 2, 原文长度: 103
+P54772.T33136 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | 开始混合检索
+P54772.T33136 | 2026-05-26 12:18:41 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T33136 | 2026-05-26 12:18:41 | WARNING  | no-trace        | system | 缓存中未找到连接: t_rag_kng_standard,创建新连接
+Failed to initialize AsyncMilvusClient during Milvus initialization: <ConnectionConfigException: (code=1, message=Cannot create async connection: no running event loop. Please ensure you are running in an async context.)>. Async operations will be unavailable until AsyncMilvusClient is successfully created.
+P54772.T33136 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T33136 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 9 -> 8 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 11 -> 10 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 580 -> 372 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 545 -> 359 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 320 -> 263 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 319 -> 262 字符
+P54772.T17804 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑水平位移竖向位移预警值及控制值限值', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | [检索完成] search_query: 深基坑水平位移竖向位移预警值及控制值限值... 召回 5 个候选
+P54772.T36276 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 开始混合检索
+P54772.T36276 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T36276 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T36276 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 9 -> 8 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 136 -> 134 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 135 -> 130 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P54772.T17804 | 2026-05-26 12:18:42 | DEBUG    | no-trace        | system | 文档清理: 179 -> 172 字符
+P54772.T17804 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:42 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑支撑轴力地下水位监测预警控制标准', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | [检索完成] search_query: 深基坑支撑轴力地下水位监测预警控制标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 审查要点 '深基坑监测预警控制': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 580 -> 372 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 545 -> 359 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 320 -> 263 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 135 -> 130 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 136 -> 134 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 179 -> 172 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为40mm;地下水位变化预警值为500mm,控制值为1000mm;支撑轴力预警值为设计值的80%,控制值为设计值的100%。', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 审查要点 '深基坑监测预警控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 高支模体系监测控制, 检索语句数: 2, 原文长度: 54
+P54772.T59204 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始混合检索
+P54772.T59204 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T59204 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T59204 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 132 -> 132 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 320 -> 263 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 319 -> 262 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 309 -> 249 字符
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高支模立杆轴力水平位移预警值及控制值要求', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | [检索完成] search_query: 高支模立杆轴力水平位移预警值及控制值要求... 召回 5 个候选
+P54772.T47100 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始混合检索
+P54772.T47100 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T47100 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T47100 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 29 -> 27 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 44 -> 40 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 178 -> 162 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 102 -> 100 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 72 -> 66 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 71 -> 65 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 88 -> 85 字符
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高大模板支撑体系监测预警控制标准', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | [检索完成] search_query: 高大模板支撑体系监测预警控制标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 审查要点 '高支模体系监测控制': 合并 10 个候选, 去重后 9 个
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 309 -> 249 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 178 -> 162 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 102 -> 100 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 72 -> 66 字符
+P54772.T17804 | 2026-05-26 12:18:43 | DEBUG    | no-trace        | system | 文档清理: 71 -> 65 字符
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:43 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高支模立杆轴力预警值为设计值的80%,控制值为设计值的100%;水平位移预警值为10mm,控制值为20mm。', 候选文档数量: 5
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 审查要点 '高支模体系监测控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 主塔垂直度监测控制, 检索语句数: 2, 原文长度: 33
+P54772.T14100 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始混合检索
+P54772.T14100 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T14100 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T14100 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 34 -> 34 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 87 -> 85 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 180 -> 176 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 96 -> 93 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 92 -> 89 字符
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '主塔施工垂直度允许偏差及预警控制值要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | [检索完成] search_query: 主塔施工垂直度允许偏差及预警控制值要求... 召回 5 个候选
+P54772.T23800 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始混合检索
+P54772.T23800 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T23800 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T23800 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 15 -> 14 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 17 -> 16 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 13 -> 13 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 372 -> 321 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 76 -> 71 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 193 -> 189 字符
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高耸结构垂直度监测限值及控制标准', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | [检索完成] search_query: 高耸结构垂直度监测限值及控制标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 审查要点 '主塔垂直度监测控制': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 180 -> 176 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 87 -> 85 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 34 -> 34 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 372 -> 321 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 76 -> 71 字符
+P54772.T17804 | 2026-05-26 12:18:44 | DEBUG    | no-trace        | system | 文档清理: 13 -> 13 字符
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:44 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '主塔垂直度预警值为H/3000(H为塔高),控制值为H/2000。', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 审查要点 '主塔垂直度监测控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 挂篮悬浇监测控制, 检索语句数: 2, 原文长度: 61
+P54772.T56264 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始混合检索
+P54772.T56264 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T56264 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T56264 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 104 -> 101 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 115 -> 110 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 105 -> 102 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 115 -> 112 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 152 -> 145 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 166 -> 157 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 72 -> 70 字符
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮悬浇结构挠度预应力张拉力预警控制值要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | [检索完成] search_query: 挂篮悬浇结构挠度预应力张拉力预警控制值要求... 召回 5 个候选
+P54772.T41948 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始混合检索
+P54772.T41948 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T41948 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T41948 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 195 -> 182 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 117 -> 111 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 36 -> 36 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 363 -> 337 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 86 -> 84 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 89 -> 87 字符
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮施工监测变形及张拉力限值标准', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | [检索完成] search_query: 挂篮施工监测变形及张拉力限值标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 审查要点 '挂篮悬浇监测控制': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 104 -> 101 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 105 -> 102 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 152 -> 145 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 166 -> 157 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 363 -> 337 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 195 -> 182 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 117 -> 111 字符
+P54772.T17804 | 2026-05-26 12:18:45 | DEBUG    | no-trace        | system | 文档清理: 36 -> 36 字符
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:45 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮挠度预警值为L/800(L为跨度),控制值为L/600;预应力张拉力预警值为设计值的95%,控制值为设计值的105%。', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 审查要点 '挂篮悬浇监测控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 正在处理审查要点 [4]: 监测仪器设备精度要求, 检索语句数: 2, 原文长度: 113
+P54772.T27312 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始混合检索
+P54772.T27312 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T27312 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T27312 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 223 -> 213 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 176 -> 166 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 44 -> 44 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 68 -> 66 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑监测仪器精度等级及选型技术要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | [检索完成] search_query: 深基坑监测仪器精度等级及选型技术要求... 召回 5 个候选
+P54772.T8436 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始混合检索
+P54772.T8436 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T8436 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T8436 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 149 -> 137 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 36 -> 32 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 111 -> 104 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 487 -> 423 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 166 -> 163 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 144 -> 141 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 428 -> 376 字符
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '全站仪测斜仪水位计轴力计监测精度标准', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | [检索完成] search_query: 全站仪测斜仪水位计轴力计监测精度标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 审查要点 '监测仪器设备精度要求': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 176 -> 166 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 44 -> 44 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 223 -> 213 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 68 -> 66 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 166 -> 163 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 144 -> 141 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 428 -> 376 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 149 -> 137 字符
+P54772.T17804 | 2026-05-26 12:18:46 | DEBUG    | no-trace        | system | 文档清理: 487 -> 423 字符
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:46 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,采用测斜仪(精度0.01mm/m)进行深层水平位移监测,采用水位计(精度1mm)进行地下水位监测,采用轴力计(精度0.1%F.S)进行支撑轴力监测。', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | 审查要点 '监测仪器设备精度要求': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 5.30 秒
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 5/5 个查询对有结果, 耗时 5.30s
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: safety_Monitoring ===
+  审查要点数: 5
+  提取耗时: 6.02s
+  检索耗时: 5.30s
+  总耗时: 11.32s
+  有结果的查询对: 5/5
+  检索结果总数: 25
+  --- 审查要点 ---
+  [0] 深基坑监测预警控制
+      queries: ['深基坑水平位移竖向位移预警值及控制值限值', '深基坑支撑轴力地下水位监测预警控制标准']
+      original: 深基坑水平位移预警值为30mm,控制值为50mm;竖向位移预警值为20mm,控制值为40mm;地下水位变化预警值为500...
+      parameter: 水平位移预警30mm/控制50mm,竖向位移预警20mm/控制40mm,水位预警500mm/控制1000mm,轴力预警80%/控制100%
+  [1] 高支模体系监测控制
+      queries: ['高支模立杆轴力水平位移预警值及控制值要求', '高大模板支撑体系监测预警控制标准']
+      original: 高支模立杆轴力预警值为设计值的80%,控制值为设计值的100%;水平位移预警值为10mm,控制值为20mm。...
+      parameter: 立杆轴力预警80%/控制100%,水平位移预警10mm/控制20mm
+  [2] 主塔垂直度监测控制
+      queries: ['主塔施工垂直度允许偏差及预警控制值要求', '高耸结构垂直度监测限值及控制标准']
+      original: 主塔垂直度预警值为H/3000(H为塔高),控制值为H/2000。...
+      parameter: 预警值≤H/3000,控制值≤H/2000
+  [3] 挂篮悬浇监测控制
+      queries: ['挂篮悬浇结构挠度预应力张拉力预警控制值要求', '挂篮施工监测变形及张拉力限值标准']
+      original: 挂篮挠度预警值为L/800(L为跨度),控制值为L/600;预应力张拉力预警值为设计值的95%,控制值为设计值的105%...
+      parameter: 挠度预警L/800/控制L/600,张拉力预警95%/控制105%
+  [4] 监测仪器设备精度要求
+      queries: ['深基坑监测仪器精度等级及选型技术要求', '全站仪测斜仪水位计轴力计监测精度标准']
+      original: 深基坑监测采用徕卡TS60全站仪(精度0.5秒级)进行水平位移及竖向位移监测,采用测斜仪(精度0.01mm/m)进行深层...
+      parameter: 全站仪0.5秒级,测斜仪0.01mm/m,水位计1mm,轴力计0.1%F.S
+  --- 检索结果概况 ---
+  [0] 深基坑监测预警控制: 5 条结果, top_rerank=0.7058, top_bfp=0.8963
+  [1] 高支模体系监测控制: 5 条结果, top_rerank=0.8222, top_bfp=0.8081
+  [2] 主塔垂直度监测控制: 5 条结果, top_rerank=0.8081, top_bfp=0.8840
+  [3] 挂篮悬浇监测控制: 5 条结果, top_rerank=0.8520, top_bfp=0.9497
+  [4] 监测仪器设备精度要求: 5 条结果, top_rerank=0.9173, top_bfp=0.9615
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 2/7: technology_TechParams ======
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: technology_TechParams
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:47 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 68ca556a-fdcf-4aa4-b64e-15d0577bc430
+P54772.T17804 | 2026-05-26 12:18:47 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:18:47 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 68ca556a-fdcf-4aa4-b64e-15d0577bc430, 耗时: 4.31s
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | JSON解析成功, 提取到 5 个审查要点
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 5 个要点
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | [RAG管线测试] 提取到 5 个审查要点, 耗时 4.31s
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: technology_TechParams
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 钢筋规格及性能验证, 检索语句数: 2, 原文长度: 29
+P54772.T6208 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 开始混合检索
+P54772.T6208 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T6208 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T6208 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 95 -> 92 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 992 -> 850 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 987 -> 847 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 990 -> 850 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 102 -> 98 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 109 -> 104 字符
+P54772.T17804 | 2026-05-26 12:18:51 | DEBUG    | no-trace        | system | 文档清理: 74 -> 71 字符
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:51 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: 'HRB400E及HRB500钢筋力学性能及尺寸允许偏差要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | [检索完成] search_query: HRB400E及HRB500钢筋力学性能及尺寸允许偏差要求... 召回 5 个候选
+P54772.T43796 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 开始混合检索
+P54772.T43796 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T43796 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T43796 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 33 -> 32 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 24 -> 24 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 164 -> 156 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 315 -> 301 字符
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钢筋混凝土用钢筋牌号标识及进场检验规定', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | [检索完成] search_query: 钢筋混凝土用钢筋牌号标识及进场检验规定... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 审查要点 '钢筋规格及性能验证': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 992 -> 850 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 987 -> 847 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 74 -> 71 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 990 -> 850 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 102 -> 98 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 164 -> 156 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 315 -> 301 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 33 -> 32 字符
+P54772.T17804 | 2026-05-26 12:18:52 | DEBUG    | no-trace        | system | 文档清理: 24 -> 24 字符
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '材料规格细化为钢筋HRB400EΦ16、HRB500Φ25', 候选文档数量: 9
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 审查要点 '钢筋规格及性能验证': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 混凝土强度等级验证, 检索语句数: 2, 原文长度: 12
+P54772.T47116 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 开始混合检索
+P54772.T47116 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T47116 | 2026-05-26 12:18:52 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T47116 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 126 -> 124 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 135 -> 113 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 78 -> 75 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 138 -> 131 字符
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: 'C60P6及C50混凝土配合比设计及强度检验标准', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | [检索完成] search_query: C60P6及C50混凝土配合比设计及强度检验标准... 召回 5 个候选
+P54772.T41000 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始混合检索
+P54772.T41000 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T41000 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T41000 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 37 -> 37 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 10 -> 9 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 16 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 118 -> 114 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 204 -> 175 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 51 -> 51 字符
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土抗渗等级P6及强度等级C60取值要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土抗渗等级P6及强度等级C60取值要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 审查要点 '混凝土强度等级验证': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 135 -> 113 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 126 -> 124 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 78 -> 75 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 138 -> 131 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 118 -> 114 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 204 -> 175 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 37 -> 37 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 51 -> 51 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土C60P6、C50', 候选文档数量: 9
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 审查要点 '混凝土强度等级验证': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 预应力钢绞线性能验证, 检索语句数: 2, 原文长度: 20
+P54772.T35860 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始混合检索
+P54772.T35860 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T35860 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T35860 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 62 -> 54 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 44 -> 44 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 254 -> 223 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 249 -> 223 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 385 -> 354 字符
+P54772.T17804 | 2026-05-26 12:18:53 | DEBUG    | no-trace        | system | 文档清理: 174 -> 161 字符
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:53 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力混凝土用钢绞线直径及抗拉强度标准要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | [检索完成] search_query: 预应力混凝土用钢绞线直径及抗拉强度标准要求... 召回 5 个候选
+P54772.T33452 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始混合检索
+P54772.T33452 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T33452 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T33452 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 混合搜索召回返回 6 个结果
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 20 -> 20 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 71 -> 67 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 50 -> 48 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 73 -> 71 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 219 -> 209 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 139 -> 132 字符
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '15.2mm 1860MPa钢绞线力学性能及检验频率规定', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | [检索完成] search_query: 15.2mm 1860MPa钢绞线力学性能及检验频率规定... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 审查要点 '预应力钢绞线性能验证': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 62 -> 54 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 385 -> 354 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 249 -> 223 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 254 -> 223 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 44 -> 44 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 50 -> 48 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 71 -> 67 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 73 -> 71 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 139 -> 132 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 20 -> 20 字符
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力钢绞线15.2mm 1860MPa', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 审查要点 '预应力钢绞线性能验证': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 塔式起重机性能参数验证, 检索语句数: 2, 原文长度: 128
+P54772.T30252 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始混合检索
+P54772.T30252 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T30252 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T30252 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 54 -> 54 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 78 -> 77 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 95 -> 90 字符
+P54772.T17804 | 2026-05-26 12:18:54 | DEBUG    | no-trace        | system | 文档清理: 2023 -> 1830 字符
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:54 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '塔式起重机最大起重量及工作幅度设计荷载要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | [检索完成] search_query: 塔式起重机最大起重量及工作幅度设计荷载要求... 召回 5 个候选
+P54772.T13248 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 开始混合检索
+P54772.T13248 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T13248 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T13248 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 180 -> 177 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 20 -> 20 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 62 -> 59 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 515 -> 438 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 1229 -> 1172 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 131 -> 128 字符
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '中联重科ZSL380塔式起重机起重性能曲线及稳定性验算', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | [检索完成] search_query: 中联重科ZSL380塔式起重机起重性能曲线及稳定性验算... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 审查要点 '塔式起重机性能参数验证': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 95 -> 90 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 78 -> 77 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 131 -> 128 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 1229 -> 1172 字符
+P54772.T17804 | 2026-05-26 12:18:55 | DEBUG    | no-trace        | system | 文档清理: 62 -> 59 字符
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '设备名称列出关键设备全称,如塔式起重机、混凝土泵车、旋挖钻机。设备型号明确为中联重科ZSL380塔式起重机、三一重工HBT80混凝土泵车、徐工XR280旋挖钻机。设备性能参数包含塔式起重机最大起重量8t、工作幅度60m,...设备自重记录为塔式起重机60t', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 审查要点 '塔式起重机性能参数验证': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 正在处理审查要点 [4]: 旋挖钻机钻孔深度验证, 检索语句数: 2, 原文长度: 61
+P54772.T50608 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 开始混合检索
+P54772.T50608 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T50608 | 2026-05-26 12:18:55 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T50608 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 35 -> 35 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 212 -> 197 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 186 -> 171 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 63 -> 61 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 586 -> 499 字符
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '旋挖钻机最大钻孔深度及成孔工艺要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [检索完成] search_query: 旋挖钻机最大钻孔深度及成孔工艺要求... 召回 5 个候选
+P54772.T14816 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 开始混合检索
+P54772.T14816 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T14816 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T14816 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 44 -> 43 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 87 -> 84 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 57 -> 57 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 64 -> 58 字符
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '徐工XR280旋挖钻机设备性能参数及进场验收标准', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [检索完成] search_query: 徐工XR280旋挖钻机设备性能参数及进场验收标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 审查要点 '旋挖钻机钻孔深度验证': 合并 10 个候选, 去重后 9 个
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 212 -> 197 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 35 -> 35 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 186 -> 171 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 63 -> 61 字符
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 文档清理: 57 -> 57 字符
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '设备性能参数包含...旋挖钻机最大钻孔深度80m。设备型号明确为...徐工XR280旋挖钻机。设备自重记录为旋挖钻机85t', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 审查要点 '旋挖钻机钻孔深度验证': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 5.33 秒
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 5/5 个查询对有结果, 耗时 5.33s
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: technology_TechParams ===
+  审查要点数: 5
+  提取耗时: 4.31s
+  检索耗时: 5.33s
+  总耗时: 9.64s
+  有结果的查询对: 5/5
+  检索结果总数: 25
+  --- 审查要点 ---
+  [0] 钢筋规格及性能验证
+      queries: ['HRB400E及HRB500钢筋力学性能及尺寸允许偏差要求', '钢筋混凝土用钢筋牌号标识及进场检验规定']
+      original: 材料规格细化为钢筋HRB400EΦ16、HRB500Φ25...
+      parameter: HRB400EΦ16, HRB500Φ25
+  [1] 混凝土强度等级验证
+      queries: ['C60P6及C50混凝土配合比设计及强度检验标准', '混凝土抗渗等级P6及强度等级C60取值要求']
+      original: 混凝土C60P6、C50...
+      parameter: C60P6, C50
+  [2] 预应力钢绞线性能验证
+      queries: ['预应力混凝土用钢绞线直径及抗拉强度标准要求', '15.2mm 1860MPa钢绞线力学性能及检验频率规定']
+      original: 预应力钢绞线15.2mm 1860MPa...
+      parameter: 直径15.2mm, 强度1860MPa
+  [3] 塔式起重机性能参数验证
+      queries: ['塔式起重机最大起重量及工作幅度设计荷载要求', '中联重科ZSL380塔式起重机起重性能曲线及稳定性验算']
+      original: 设备名称列出关键设备全称,如塔式起重机、混凝土泵车、旋挖钻机。设备型号明确为中联重科ZSL380塔式起重机、三一重工HB...
+      parameter: 型号ZSL380, 最大起重量8t, 工作幅度60m, 自重60t
+  [4] 旋挖钻机钻孔深度验证
+      queries: ['旋挖钻机最大钻孔深度及成孔工艺要求', '徐工XR280旋挖钻机设备性能参数及进场验收标准']
+      original: 设备性能参数包含...旋挖钻机最大钻孔深度80m。设备型号明确为...徐工XR280旋挖钻机。设备自重记录为旋挖钻机85...
+      parameter: 型号XR280, 最大钻孔深度80m, 自重85t
+  --- 检索结果概况 ---
+  [0] 钢筋规格及性能验证: 5 条结果, top_rerank=0.8670, top_bfp=0.6584
+  [1] 混凝土强度等级验证: 5 条结果, top_rerank=0.7879, top_bfp=0.8397
+  [2] 预应力钢绞线性能验证: 5 条结果, top_rerank=0.9196, top_bfp=0.9756
+  [3] 塔式起重机性能参数验证: 5 条结果, top_rerank=0.7058, top_bfp=0.8991
+  [4] 旋挖钻机钻孔深度验证: 5 条结果, top_rerank=0.8397, top_bfp=0.8439
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 3/7: technology_Operations ======
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: technology_Operations
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:18:56 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 726e98e3-fe59-4a51-b076-a9648896c604
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:18:56 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 726e98e3-fe59-4a51-b076-a9648896c604, 耗时: 3.30s
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | JSON解析成功, 提取到 3 个审查要点
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 3 个要点
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | [RAG管线测试] 提取到 3 个审查要点, 耗时 3.31s
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: technology_Operations
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 钻孔灌注桩施工参数, 检索语句数: 2, 原文长度: 114
+P54772.T16944 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始混合检索
+P54772.T16944 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T16944 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T16944 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 471 -> 390 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 779 -> 673 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 775 -> 669 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 765 -> 666 字符
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩成孔垂直度允许偏差及孔深控制要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | [检索完成] search_query: 钻孔灌注桩成孔垂直度允许偏差及孔深控制要求... 召回 5 个候选
+P54772.T32180 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始混合检索
+P54772.T32180 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T32180 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T32180 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 78 -> 76 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 61 -> 59 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 53 -> 50 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 55 -> 53 字符
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩泥浆比重控制标准及护壁稳定性要求', 候选文档数量: 5
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | [检索完成] search_query: 钻孔灌注桩泥浆比重控制标准及护壁稳定性要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 审查要点 '钻孔灌注桩施工参数': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 471 -> 390 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 779 -> 673 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 775 -> 669 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 61 -> 59 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 67 -> 65 字符
+P54772.T17804 | 2026-05-26 12:19:00 | DEBUG    | no-trace        | system | 文档清理: 78 -> 76 字符
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:00 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,孔深偏差+300mm/-0mm,泥浆比重控制在1.1-1.3之间,确保护壁稳定。钢筋笼安装需保证保护层厚度50mm。混凝土浇筑需连续进行,导管埋深控制在2-6米。', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 审查要点 '钻孔灌注桩施工参数': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 液压爬模施工控制, 检索语句数: 2, 原文长度: 82
+P54772.T54372 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 开始混合检索
+P54772.T54372 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T54372 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T54372 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 42 -> 39 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 153 -> 148 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 861 -> 718 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 216 -> 196 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 98 -> 90 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 254 -> 236 字符
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '液压爬模模板安装垂直度及平整度允许偏差要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | [检索完成] search_query: 液压爬模模板安装垂直度及平整度允许偏差要求... 召回 5 个候选
+P54772.T36192 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 开始混合检索
+P54772.T36192 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T36192 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T36192 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 221 -> 221 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 91 -> 91 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 100 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 80 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 184 -> 177 字符
+P54772.T17804 | 2026-05-26 12:19:01 | DEBUG    | no-trace        | system | 文档清理: 165 -> 157 字符
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:01 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高性能混凝土浇筑温度控制及坍落度技术要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | [检索完成] search_query: 高性能混凝土浇筑温度控制及坍落度技术要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 审查要点 '液压爬模施工控制': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 153 -> 148 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 861 -> 718 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 254 -> 236 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 216 -> 196 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 91 -> 91 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 165 -> 157 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 221 -> 221 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 184 -> 177 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 100 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。混凝土采用C50高性能混凝土,坍落度控制在160-180mm,浇筑温度不超过30℃。', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 审查要点 '液压爬模施工控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 挂篮悬臂浇筑施工, 检索语句数: 2, 原文长度: 78
+P54772.T41952 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始混合检索
+P54772.T41952 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T41952 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T41952 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 117 -> 111 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 82 -> 80 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 137 -> 134 字符
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '挂篮悬臂浇筑变形量限值及监测要求', 候选文档数量: 5
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=3
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | [检索完成] search_query: 挂篮悬臂浇筑变形量限值及监测要求... 召回 5 个候选
+P54772.T4956 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始混合检索
+P54772.T4956 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T4956 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T4956 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 7 -> 7 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 3012 -> 2127 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 154 -> 144 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 248 -> 236 字符
+P54772.T17804 | 2026-05-26 12:19:02 | DEBUG    | no-trace        | system | 文档清理: 178 -> 170 字符
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:02 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力张拉应力控制及伸长量允许偏差要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [检索完成] search_query: 预应力张拉应力控制及伸长量允许偏差要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 审查要点 '挂篮悬臂浇筑施工': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 137 -> 134 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 82 -> 80 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 113 -> 107 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 109 -> 106 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 117 -> 111 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 178 -> 170 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 文档清理: 154 -> 144 字符
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '最大悬臂长度225米,挂篮变形量控制在20mm以内。预应力张拉实行双控指标,以应力控制为主,伸长量校核,误差控制在±6%以内,张拉完成后24小时内完成压浆。', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 审查要点 '挂篮悬臂浇筑施工': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 3.40 秒
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 3/3 个查询对有结果, 耗时 3.40s
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: technology_Operations ===
+  审查要点数: 3
+  提取耗时: 3.31s
+  检索耗时: 3.40s
+  总耗时: 6.71s
+  有结果的查询对: 3/3
+  检索结果总数: 15
+  --- 审查要点 ---
+  [0] 钻孔灌注桩施工参数
+      queries: ['钻孔灌注桩成孔垂直度允许偏差及孔深控制要求', '钻孔灌注桩泥浆比重控制标准及护壁稳定性要求']
+      original: 钻孔灌注桩施工采用旋挖钻机成孔工艺,钻孔垂直度偏差控制在1%以内,孔深偏差+300mm/-0mm,泥浆比重控制在1.1-...
+      parameter: 垂直度≤1%,孔深偏差+300/-0mm,泥浆比重1.1-1.3,保护层50mm,导管埋深2-6m
+  [1] 液压爬模施工控制
+      queries: ['液压爬模模板安装垂直度及平整度允许偏差要求', '高性能混凝土浇筑温度控制及坍落度技术要求']
+      original: 标准节段高度4.5米,模板垂直度偏差控制在5mm以内,表面平整度偏差3mm以内。混凝土采用C50高性能混凝土,坍落度控制...
+      parameter: 垂直度偏差≤5mm,平整度偏差≤3mm,坍落度160-180mm,浇筑温度≤30℃
+  [2] 挂篮悬臂浇筑施工
+      queries: ['挂篮悬臂浇筑变形量限值及监测要求', '预应力张拉应力控制及伸长量允许偏差要求']
+      original: 最大悬臂长度225米,挂篮变形量控制在20mm以内。预应力张拉实行双控指标,以应力控制为主,伸长量校核,误差控制在±6%...
+      parameter: 挂篮变形量≤20mm,伸长量误差±6%,压浆完成时间≤24小时
+  --- 检索结果概况 ---
+  [0] 钻孔灌注桩施工参数: 5 条结果, top_rerank=0.8808, top_bfp=0.9450
+  [1] 液压爬模施工控制: 5 条结果, top_rerank=0.9707, top_bfp=0.9526
+  [2] 挂篮悬臂浇筑施工: 5 条结果, top_rerank=0.8741, top_bfp=0.9850
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 4/7: quality_QualitySystem ======
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: quality_QualitySystem
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:03 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: dcd7aa27-646a-442b-a1fe-ae449a5f6838
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:19:03 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: dcd7aa27-646a-442b-a1fe-ae449a5f6838, 耗时: 2.80s
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | JSON解析成功, 提取到 4 个审查要点
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 4 个要点
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | [RAG管线测试] 提取到 4 个审查要点, 耗时 2.80s
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: quality_QualitySystem
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 主塔垂直度控制, 检索语句数: 2, 原文长度: 23
+P54772.T16972 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 开始混合检索
+P54772.T16972 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T16972 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T16972 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 83 -> 81 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 103 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 108 -> 102 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 97 -> 91 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 110 -> 104 字符
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥梁主塔垂直度允许偏差及检验标准', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | [检索完成] search_query: 桥梁主塔垂直度允许偏差及检验标准... 召回 5 个候选
+P54772.T19752 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 开始混合检索
+P54772.T19752 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T19752 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T19752 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 56 -> 52 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 125 -> 115 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 48 -> 45 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 101 -> 98 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 122 -> 112 字符
+P54772.T17804 | 2026-05-26 12:19:06 | DEBUG    | no-trace        | system | 文档清理: 154 -> 148 字符
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:06 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高墩混凝土结构垂直度限值要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:07 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:07 | INFO     | no-trace        | system | [检索完成] search_query: 高墩混凝土结构垂直度限值要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:07 | INFO     | no-trace        | system | 审查要点 '主塔垂直度控制': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 83 -> 81 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 110 -> 104 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 108 -> 102 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 125 -> 115 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 48 -> 45 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 154 -> 148 字符
+P54772.T17804 | 2026-05-26 12:19:07 | DEBUG    | no-trace        | system | 文档清理: 56 -> 52 字符
+P54772.T17804 | 2026-05-26 12:19:07 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:07 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '主体工程质量目标为主塔垂直度偏差≤H/3000', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 审查要点 '主塔垂直度控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 混凝土入模及养护温度, 检索语句数: 2, 原文长度: 32
+P54772.T41164 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始混合检索
+P54772.T41164 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T41164 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T41164 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 33 -> 31 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 50 -> 46 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 152 -> 144 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 97 -> 81 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 133 -> 117 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 156 -> 148 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 76 -> 73 字符
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '冬期施工混凝土入模温度最低限值', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | [检索完成] search_query: 冬期施工混凝土入模温度最低限值... 召回 5 个候选
+P54772.T24980 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始混合检索
+P54772.T24980 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T24980 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T24980 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 29 -> 29 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 40 -> 40 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 104 -> 103 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 175 -> 172 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 207 -> 202 字符
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '混凝土养护期间温度控制要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | [检索完成] search_query: 混凝土养护期间温度控制要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 审查要点 '混凝土入模及养护温度': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 152 -> 144 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 50 -> 46 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 97 -> 81 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 133 -> 117 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 156 -> 148 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 175 -> 172 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 104 -> 103 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 207 -> 202 字符
+P54772.T17804 | 2026-05-26 12:19:08 | DEBUG    | no-trace        | system | 文档清理: 40 -> 40 字符
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:08 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '冬期施工混凝土采取保温措施,确保入模温度≥5℃,养护温度≥10℃', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 审查要点 '混凝土入模及养护温度': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 预应力真空压浆工艺, 检索语句数: 2, 原文长度: 33
+P54772.T50164 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始混合检索
+P54772.T50164 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T50164 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T50164 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 276 -> 265 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 128 -> 121 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 50 -> 48 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 30 -> 28 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 195 -> 189 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 211 -> 200 字符
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '预应力孔道真空辅助压浆工艺及时间要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | [检索完成] search_query: 预应力孔道真空辅助压浆工艺及时间要求... 召回 5 个候选
+P54772.T8272 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始混合检索
+P54772.T8272 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T8272 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T8272 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 39 -> 38 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 27 -> 27 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 25 -> 25 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 68 -> 66 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 71 -> 68 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 121 -> 118 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '后张法预应力孔道压浆密实度及封锚要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | [检索完成] search_query: 后张法预应力孔道压浆密实度及封锚要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 审查要点 '预应力真空压浆工艺': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 128 -> 121 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 276 -> 265 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 211 -> 200 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 195 -> 189 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 50 -> 48 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 71 -> 68 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 39 -> 38 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 121 -> 118 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 27 -> 27 字符
+P54772.T17804 | 2026-05-26 12:19:09 | DEBUG    | no-trace        | system | 文档清理: 68 -> 66 字符
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:09 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '针对预应力张拉工序,张拉后24小时内完成压浆,采用真空辅助压浆工艺', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 审查要点 '预应力真空压浆工艺': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 正在处理审查要点 [3]: 桥梁线形与铺装精度, 检索语句数: 2, 原文长度: 44
+P54772.T16952 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 开始混合检索
+P54772.T16952 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T16952 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T16952 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 8 -> 8 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 127 -> 124 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 84 -> 81 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 119 -> 115 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 89 -> 87 字符
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥梁主梁线形施工允许偏差标准', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | [检索完成] search_query: 桥梁主梁线形施工允许偏差标准... 召回 5 个候选
+P54772.T49808 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 开始混合检索
+P54772.T49808 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T49808 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T49808 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 25 -> 25 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 189 -> 159 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 171 -> 160 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 170 -> 157 字符
+P54772.T17804 | 2026-05-26 12:19:10 | DEBUG    | no-trace        | system | 文档清理: 213 -> 188 字符
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:10 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '桥面铺装层平整度检测与限值要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [检索完成] search_query: 桥面铺装层平整度检测与限值要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 审查要点 '桥梁线形与铺装精度': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 127 -> 124 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 89 -> 87 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 119 -> 115 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 84 -> 81 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 213 -> 188 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 170 -> 157 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 189 -> 159 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 25 -> 25 字符
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 文档清理: 10 -> 10 字符
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '主体工程质量目标为主梁线形偏差≤±20mm...桥面系工程质量目标为铺装层平整度≤3mm', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 审查要点 '桥梁线形与铺装精度': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 5.07 秒
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 4/4 个查询对有结果, 耗时 5.07s
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: quality_QualitySystem ===
+  审查要点数: 4
+  提取耗时: 2.80s
+  检索耗时: 5.07s
+  总耗时: 7.87s
+  有结果的查询对: 4/4
+  检索结果总数: 20
+  --- 审查要点 ---
+  [0] 主塔垂直度控制
+      queries: ['桥梁主塔垂直度允许偏差及检验标准', '高墩混凝土结构垂直度限值要求']
+      original: 主体工程质量目标为主塔垂直度偏差≤H/3000...
+      parameter: 垂直度偏差≤H/3000
+  [1] 混凝土入模及养护温度
+      queries: ['冬期施工混凝土入模温度最低限值', '混凝土养护期间温度控制要求']
+      original: 冬期施工混凝土采取保温措施,确保入模温度≥5℃,养护温度≥10℃...
+      parameter: 入模温度≥5℃,养护温度≥10℃
+  [2] 预应力真空压浆工艺
+      queries: ['预应力孔道真空辅助压浆工艺及时间要求', '后张法预应力孔道压浆密实度及封锚要求']
+      original: 针对预应力张拉工序,张拉后24小时内完成压浆,采用真空辅助压浆工艺...
+      parameter: 压浆时间≤24小时,工艺=真空辅助
+  [3] 桥梁线形与铺装精度
+      queries: ['桥梁主梁线形施工允许偏差标准', '桥面铺装层平整度检测与限值要求']
+      original: 主体工程质量目标为主梁线形偏差≤±20mm...桥面系工程质量目标为铺装层平整度≤3mm...
+      parameter: 线形偏差≤±20mm,铺装平整度≤3mm
+  --- 检索结果概况 ---
+  [0] 主塔垂直度控制: 5 条结果, top_rerank=0.9173, top_bfp=0.6298
+  [1] 混凝土入模及养护温度: 5 条结果, top_rerank=0.9627, top_bfp=0.9679
+  [2] 预应力真空压浆工艺: 5 条结果, top_rerank=0.9615, top_bfp=0.9803
+  [3] 桥梁线形与铺装精度: 5 条结果, top_rerank=0.9732, top_bfp=0.9689
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 5/7: safety_TechMeasures ======
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: safety_TechMeasures
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:11 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 7a0702da-d91e-42f0-a198-00f9fb3f777a
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:19:11 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 7a0702da-d91e-42f0-a198-00f9fb3f777a, 耗时: 2.37s
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | JSON解析成功, 提取到 3 个审查要点
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 3 个要点
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | [RAG管线测试] 提取到 3 个审查要点, 耗时 2.38s
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: safety_TechMeasures
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 临边洞口安全防护, 检索语句数: 2, 原文长度: 40
+P54772.T31316 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 开始混合检索
+P54772.T31316 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T31316 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T31316 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 17 -> 17 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 77 -> 75 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 103 -> 96 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 82 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 205 -> 196 字符
+P54772.T17804 | 2026-05-26 12:19:13 | DEBUG    | no-trace        | system | 文档清理: 137 -> 132 字符
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:13 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工作业区域临边临空洞口防护设施设置要求', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | [检索完成] search_query: 施工作业区域临边临空洞口防护设施设置要求... 召回 5 个候选
+P54772.T10152 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始混合检索
+P54772.T10152 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T10152 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T10152 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 36 -> 34 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 37 -> 36 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 94 -> 92 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 95 -> 89 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 41 -> 38 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 80 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 126 -> 121 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 87 -> 82 字符
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工临时防护栏杆规格及稳定性验算标准', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | [检索完成] search_query: 施工临时防护栏杆规格及稳定性验算标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 审查要点 '临边洞口安全防护': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 137 -> 132 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 103 -> 99 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 82 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 205 -> 196 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 126 -> 121 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 41 -> 38 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 80 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 95 -> 89 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 94 -> 92 字符
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工作业区域的临边、临空、洞口安全防护设施、安全母绳布置,人员上下横向通道布置等', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 审查要点 '临边洞口安全防护': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 高处作业防坠落, 检索语句数: 2, 原文长度: 93
+P54772.T44492 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始混合检索
+P54772.T44492 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T44492 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T44492 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 93 -> 89 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 81 -> 75 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 90 -> 87 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 232 -> 216 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 107 -> 104 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 30 -> 29 字符
+P54772.T17804 | 2026-05-26 12:19:14 | DEBUG    | no-trace        | system | 文档清理: 37 -> 35 字符
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:14 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '高处作业安全母绳布置及全身式安全带使用要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | [检索完成] search_query: 高处作业安全母绳布置及全身式安全带使用要求... 召回 5 个候选
+P54772.T10884 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始混合检索
+P54772.T10884 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T10884 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T10884 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 161 -> 156 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 44 -> 42 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 193 -> 180 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 81 -> 75 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 96 -> 90 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 225 -> 206 字符
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '水平生命线系统设置规范及防坠器检验标准', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | [检索完成] search_query: 水平生命线系统设置规范及防坠器检验标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 审查要点 '高处作业防坠落': 合并 10 个候选, 去重后 9 个
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 81 -> 75 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 90 -> 87 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 93 -> 89 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 37 -> 35 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 107 -> 104 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 96 -> 90 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 77 -> 73 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 44 -> 42 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 161 -> 156 字符
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '安全母绳布置,安全通道等...包含钢直梯、钢斜梯、梯笼、水平生命线、全身式(五点式)安全带、防坠器、安全通道等人员上下(横向)通道、操作平台、防护设施的规格型号、布置方式、使用要求等内容', 候选文档数量: 9
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 审查要点 '高处作业防坠落': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 特种设备操作规程, 检索语句数: 2, 原文长度: 75
+P54772.T53244 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始混合检索
+P54772.T53244 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T53244 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T53244 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 12 -> 12 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 114 -> 109 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 文档清理: 107 -> 101 字符
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '旋挖钻机液压爬模等特种设备专项操作规程要求', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:15 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | [检索完成] search_query: 旋挖钻机液压爬模等特种设备专项操作规程要求... 召回 5 个候选
+P54772.T43960 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始混合检索
+P54772.T43960 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T43960 | 2026-05-26 12:19:15 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T43960 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 70 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 66 -> 65 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 111 -> 108 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 73 -> 70 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 93 -> 90 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 653 -> 551 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '起重工电工等特种作业人员持证上岗规定', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [检索完成] search_query: 起重工电工等特种作业人员持证上岗规定... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 审查要点 '特种设备操作规程': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 107 -> 101 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 69 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 99 -> 97 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 114 -> 109 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 111 -> 108 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 66 -> 65 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 73 -> 70 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 93 -> 90 字符
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 文档清理: 70 -> 67 字符
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '针对施工专业名词类如旋挖钻机、液压爬模等设备,制定专项操作规程,明确施工场地名称如钢筋加工场、拌和站的安全分区管理,岗位名称类如起重工、电工需持证上岗', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 审查要点 '特种设备操作规程': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 2.73 秒
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 3/3 个查询对有结果, 耗时 2.73s
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: safety_TechMeasures ===
+  审查要点数: 3
+  提取耗时: 2.38s
+  检索耗时: 2.73s
+  总耗时: 5.11s
+  有结果的查询对: 3/3
+  检索结果总数: 15
+  --- 审查要点 ---
+  [0] 临边洞口安全防护
+      queries: ['施工作业区域临边临空洞口防护设施设置要求', '施工临时防护栏杆规格及稳定性验算标准']
+      original: 施工作业区域的临边、临空、洞口安全防护设施、安全母绳布置,人员上下横向通道布置等...
+      parameter: 未明确
+  [1] 高处作业防坠落
+      queries: ['高处作业安全母绳布置及全身式安全带使用要求', '水平生命线系统设置规范及防坠器检验标准']
+      original: 安全母绳布置,安全通道等...包含钢直梯、钢斜梯、梯笼、水平生命线、全身式(五点式)安全带、防坠器、安全通道等人员上下(...
+      parameter: 未明确
+  [2] 特种设备操作规程
+      queries: ['旋挖钻机液压爬模等特种设备专项操作规程要求', '起重工电工等特种作业人员持证上岗规定']
+      original: 针对施工专业名词类如旋挖钻机、液压爬模等设备,制定专项操作规程,明确施工场地名称如钢筋加工场、拌和站的安全分区管理,岗位...
+      parameter: 未明确
+  --- 检索结果概况 ---
+  [0] 临边洞口安全防护: 5 条结果, top_rerank=0.8222, top_bfp=0.8808
+  [1] 高处作业防坠落: 5 条结果, top_rerank=0.9099, top_bfp=0.9344
+  [2] 特种设备操作规程: 5 条结果, top_rerank=0.8439, top_bfp=0.9252
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 6/7: environment_EnvSystem ======
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: environment_EnvSystem
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:16 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 7acc4584-8353-4039-88c7-9bd77aeebc77
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:19:16 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 7acc4584-8353-4039-88c7-9bd77aeebc77, 耗时: 3.11s
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | JSON解析成功, 提取到 3 个审查要点
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 3 个要点
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | [RAG管线测试] 提取到 3 个审查要点, 耗时 3.11s
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: environment_EnvSystem
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 基坑截排水沟尺寸, 检索语句数: 2, 原文长度: 103
+P54772.T38684 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 开始混合检索
+P54772.T38684 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T38684 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T38684 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 35 -> 35 字符
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 52 -> 50 字符
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 8 -> 7 字符
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 222 -> 204 字符
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 112 -> 108 字符
+P54772.T17804 | 2026-05-26 12:19:19 | DEBUG    | no-trace        | system | 文档清理: 271 -> 233 字符
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:19 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '基坑截水沟断面尺寸及坡度设计要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | [检索完成] search_query: 基坑截水沟断面尺寸及坡度设计要求... 召回 5 个候选
+P54772.T34260 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始混合检索
+P54772.T34260 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T34260 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T34260 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 9 -> 9 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 7 -> 6 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 81 -> 79 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 120 -> 117 字符
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工场地排水沟布置及沉沙池容积标准', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | [检索完成] search_query: 施工场地排水沟布置及沉沙池容积标准... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 审查要点 '基坑截排水沟尺寸': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 35 -> 35 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 271 -> 233 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 112 -> 108 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 222 -> 204 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 54 -> 52 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 81 -> 79 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 179 -> 175 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 120 -> 117 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+--- Logging error ---
+Traceback (most recent call last):
+  File "C:\Users\10030\.conda\envs\lqagent\Lib\logging\__init__.py", line 1163, in emit
+    stream.write(msg + self.terminator)
+UnicodeEncodeError: 'gbk' codec can't encode character '\xb3' in position 203: illegal multibyte sequence
+Call stack:
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 78, in <module>
+    main()
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 34, in main
+    results = runner.run_batch(TEST_SAMPLES)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 191, in run_batch
+    result = self.run_single(sample["content"], chunk_id=chunk_id)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 157, in run_single
+    retrieval_results = self.review_point_retriever.review_point_retrieval(
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\monitoring\time_statistics.py", line 18, in sync_wrapper
+    return func(*args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\entities_enhance.py", line 135, in review_point_retrieval
+    final_results = self._secondary_rerank(original_text, high_score, top_k=5)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\entities_enhance.py", line 175, in _secondary_rerank
+    rerank_results = retrieval_manager._get_rerank_results(
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\rag\retrieval\retrieval.py", line 143, in _get_rerank_results
+    rerank_results = getattr(rerank_model, method_name)(query_text, cleaned_documents, top_k)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\ai\models\rerank_model.py", line 227, in shutian_rerank
+    server_logger.info(f"开始执行SHUTIAN Qwen3重排序,查询: '{query}', 候选文档数量: {len(candidates)}")
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 311, in info
+    self._log_with_context(logging.INFO, msg, trace_id, log_type, *args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 305, in _log_with_context
+    self.logger.log(level, msg, *args, **kwargs)
+Message: "开始执行SHUTIAN Qwen3重排序,查询: '截水方面,在基坑周边及边坡顶部设置截水沟,断面尺寸300mm×300mm,坡度0.3%;排水方面,沿施工便道两侧设置排水沟,断面尺寸400mm×400mm,连接至沉沙池。沉沙池设置3处,容积不小于10m\xb3。', 候选文档数量: 9"
+Arguments: ()
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 审查要点 '基坑截排水沟尺寸': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 施工场界噪声限值, 检索语句数: 2, 原文长度: 93
+P54772.T32400 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始混合检索
+P54772.T32400 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T32400 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T32400 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 混合搜索召回返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 113 -> 112 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 193 -> 175 字符
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '建筑施工场界环境噪声排放限值及测量方法', 候选文档数量: 4
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 4 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=2
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | [检索完成] search_query: 建筑施工场界环境噪声排放限值及测量方法... 召回 4 个候选
+P54772.T6412 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始混合检索
+P54772.T6412 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T6412 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T6412 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 92 -> 91 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 116 -> 114 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 34 -> 34 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 139 -> 120 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 258 -> 204 字符
+P54772.T17804 | 2026-05-26 12:19:20 | DEBUG    | no-trace        | system | 文档清理: 141 -> 127 字符
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:20 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '夜间高噪声作业禁止时段规定', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | [检索完成] search_query: 夜间高噪声作业禁止时段规定... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 审查要点 '施工场界噪声限值': 合并 9 个候选, 去重后 9 个
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 193 -> 175 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 33 -> 33 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 32 -> 32 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 113 -> 112 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 92 -> 91 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 116 -> 114 字符
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '噪声排放监测方面,严格按照《建筑施工场界环境噪声排放标准》(GB 12523-2011)要求,昼间噪声限值70dB,夜间噪声限值55dB。夜间22:00至次日6:00禁止进行高噪声作业。', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 审查要点 '施工场界噪声限值': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 土方作业扬尘控制, 检索语句数: 2, 原文长度: 59
+P54772.T32740 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始混合检索
+P54772.T32740 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T32740 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T32740 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 混合搜索召回返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 99 -> 95 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 143 -> 133 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 76 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 79 -> 76 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 119 -> 118 字符
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工现场土方作业扬尘目测高度限值要求', 候选文档数量: 5
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | [检索完成] search_query: 施工现场土方作业扬尘目测高度限值要求... 召回 5 个候选
+P54772.T54644 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始混合检索
+P54772.T54644 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T54644 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T54644 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 21 -> 21 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 26 -> 24 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 16 -> 15 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 142 -> 138 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 138 -> 134 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 142 -> 138 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '结构施工阶段扬尘控制标准及道路硬化率', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | [检索完成] search_query: 结构施工阶段扬尘控制标准及道路硬化率... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 审查要点 '土方作业扬尘控制': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 99 -> 95 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 76 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 143 -> 133 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 79 -> 76 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 119 -> 118 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 45 -> 45 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 138 -> 134 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 142 -> 138 字符
+P54772.T17804 | 2026-05-26 12:19:21 | DEBUG    | no-trace        | system | 文档清理: 142 -> 138 字符
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:21 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '大气污染防治方面,土方作业阶段确保目测扬尘高度小于1.5m,结构施工阶段小于0.5m,施工现场主要道路硬化率100%。', 候选文档数量: 10
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | 审查要点 '土方作业扬尘控制': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 2.49 秒
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 3/3 个查询对有结果, 耗时 2.49s
+--- Logging error ---
+Traceback (most recent call last):
+  File "C:\Users\10030\.conda\envs\lqagent\Lib\logging\__init__.py", line 1163, in emit
+    stream.write(msg + self.terminator)
+UnicodeEncodeError: 'gbk' codec can't encode character '\xb3' in position 452: illegal multibyte sequence
+Call stack:
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 78, in <module>
+    main()
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\run_tests.py", line 34, in main
+    results = runner.run_batch(TEST_SAMPLES)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\rag_pipeline_runner.py", line 193, in run_batch
+    logger.info(f"[RAG管线测试] {result.summary()}")
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 311, in info
+    self._log_with_context(logging.INFO, msg, trace_id, log_type, *args, **kwargs)
+  File "D:\standard_workspace\wx_work\LQAgentPlatform\foundation\observability\logger\loggering.py", line 305, in _log_with_context
+    self.logger.log(level, msg, *args, **kwargs)
+Message: "[RAG管线测试] === Pipeline Result: environment_EnvSystem ===\n  审查要点数: 3\n  提取耗时: 3.11s\n  检索耗时: 2.49s\n  总耗时: 5.60s\n  有结果的查询对: 3/3\n  检索结果总数: 15\n  --- 审查要点 ---\n  [0] 基坑截排水沟尺寸\n      queries: ['基坑截水沟断面尺寸及坡度设计要求', '施工场地排水沟布置及沉沙池容积标准']\n      original: 截水方面,在基坑周边及边坡顶部设置截水沟,断面尺寸300mm×300mm,坡度0.3%;排水方面,沿施工便道两侧设置排水...\n      parameter: 截水沟300mm×300mm/坡度0.3%,排水沟400mm×400mm,沉沙池≥10m\xb3\n  [1] 施工场界噪声限值\n      queries: ['建筑施工场界环境噪声排放限值及测量方法', '夜间高噪声作业禁止时段规定']\n      original: 噪声排放监测方面,严格按照《建筑施工场界环境噪声排放标准》(GB 12523-2011)要求,昼间噪声限值70dB,夜间...\n      parameter: 昼间≤70dB,夜间≤55dB,禁止作业时段22:00-06:00\n  [2] 土方作业扬尘控制\n      queries: ['施工现场土方作业扬尘目测高度限值要求', '结构施工阶段扬尘控制标准及道路硬化率']\n      original: 大气污染防治方面,土方作业阶段确保目测扬尘高度小于1.5m,结构施工阶段小于0.5m,施工现场主要道路硬化率100%。...\n      parameter: 土方扬尘<1.5m,结构扬尘<0.5m,道路硬化率100%\n  --- 检索结果概况 ---\n  [0] 基坑截排水沟尺寸: 5 条结果, top_rerank=0.9482, top_bfp=0.9777\n  [1] 施工场界噪声限值: 5 条结果, top_rerank=0.9689, top_bfp=0.9836\n  [2] 土方作业扬尘控制: 5 条结果, top_rerank=0.8439, top_bfp=0.9846"
+Arguments: ()
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [RAG管线测试] ====== 样本 7/7: safety_Emergency ======
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [RAG管线测试] 开始审查要点提取: safety_Emergency
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | 模板变量填充成功: ['review_content']
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [模型调用-同步] 从配置加载功能 'review_point_extract' 的 thinking 模式: False
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | 动态获取AI模型,模型类型: shutian_qwen3_5_35b, thinking: False
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | 使用缓存的模型: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:22 | INFO     | no-trace        | system | [模型调用-同步] 使用指定模型: shutian_qwen3_5_35b, trace_id: 8b95f957-c32e-45f3-adfc-040a595ba70f
+P54772.T17804 | 2026-05-26 12:19:22 | DEBUG    | no-trace        | system | 使用 task_prompt_info 中的 ChatPromptTemplate 构建消息
+P54772.T17804 | 2026-05-26 12:19:22 | DEBUG    | no-trace        | system | [模型调用-同步] 已禁用 Qwen3.5 思考模式: shutian_qwen3_5_35b
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | [模型调用-同步] 成功 trace_id: 8b95f957-c32e-45f3-adfc-040a595ba70f, 耗时: 2.71s
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | JSON解析成功, 提取到 3 个审查要点
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | 审查要点提取完成, 提取到 3 个要点
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | [RAG管线测试] 提取到 3 个审查要点, 耗时 2.71s
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | [RAG管线测试] 开始 RAG 检索: safety_Emergency
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | [review_point_retrieval] 开始执行
+P54772.T17804 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | 正在处理审查要点 [0]: 有限空间中毒防护, 检索语句数: 2, 原文长度: 67
+P54772.T32280 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | 开始混合检索
+P54772.T32280 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T32280 | 2026-05-26 12:19:24 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T32280 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 混合搜索召回返回 6 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 74 -> 72 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 19 -> 19 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 59 -> 59 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 95 -> 87 字符
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '有限空间作业有毒有害气体中毒应急救援防护装备要求', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | [检索完成] search_query: 有限空间作业有毒有害气体中毒应急救援防护装备要求... 召回 5 个候选
+P54772.T44140 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始混合检索
+P54772.T44140 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T44140 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T44140 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 18 -> 18 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 77 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 145 -> 144 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 280 -> 261 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 130 -> 124 字符
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '受限空间救援人员进入危险区域个人防护及安全措施', 候选文档数量: 8
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | [检索完成] search_query: 受限空间救援人员进入危险区域个人防护及安全措施... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 审查要点 '有限空间中毒防护': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 16 -> 16 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 95 -> 87 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 22 -> 22 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 59 -> 59 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 280 -> 261 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 145 -> 144 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 55 -> 55 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 77 -> 77 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 26 -> 26 字符
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方可进入危险区域', 候选文档数量: 9
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 审查要点 '有限空间中毒防护': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 正在处理审查要点 [1]: 触电急救心肺复苏, 检索语句数: 2, 原文长度: 70
+P54772.T52468 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始混合检索
+P54772.T52468 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T52468 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T52468 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 20 -> 20 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 120 -> 117 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 224 -> 216 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 56 -> 56 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 184 -> 181 字符
+P54772.T17804 | 2026-05-26 12:19:25 | DEBUG    | no-trace        | system | 文档清理: 137 -> 129 字符
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:25 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '触电事故现场急救心肺复苏操作规范及按压吹气比', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | [检索完成] search_query: 触电事故现场急救心肺复苏操作规范及按压吹气比... 召回 5 个候选
+P54772.T55520 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始混合检索
+P54772.T55520 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T55520 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T55520 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 139 -> 137 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 45 -> 44 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 28 -> 28 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 20 -> 20 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 150 -> 141 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 84 -> 84 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 86 -> 86 字符
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '触电急救脱离电源方式及绝缘工具使用要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | [检索完成] search_query: 触电急救脱离电源方式及绝缘工具使用要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 审查要点 '触电急救心肺复苏': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 56 -> 56 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 184 -> 181 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 137 -> 129 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 224 -> 216 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 15 -> 15 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 86 -> 86 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 139 -> 137 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 150 -> 141 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 84 -> 84 字符
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,按压吹气比为30:2', 候选文档数量: 9
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 审查要点 '触电急救心肺复苏': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 正在处理审查要点 [2]: 应急物资配备, 检索语句数: 2, 原文长度: 45
+P54772.T39492 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始混合检索
+P54772.T39492 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T39492 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T39492 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 混合搜索召回返回 7 个结果
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 45 -> 44 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 11 -> 10 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 104 -> 102 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 55 -> 49 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 111 -> 109 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 149 -> 145 字符
+P54772.T17804 | 2026-05-26 12:19:26 | DEBUG    | no-trace        | system | 文档清理: 198 -> 187 字符
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:26 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '施工现场应急救援物资配备标准及数量要求', 候选文档数量: 7
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | [检索完成] search_query: 施工现场应急救援物资配备标准及数量要求... 召回 5 个候选
+P54772.T57472 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 开始混合检索
+P54772.T57472 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 开始 hybrid_search, collection_name: t_rag_kng_standard
+P54772.T57472 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 混合召回topk: 10
+P54772.T57472 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 混合搜索召回返回 8 个结果
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 31 -> 29 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 11 -> 11 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 22 -> 21 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 14 -> 14 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 604 -> 537 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 404 -> 353 字符
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '干粉灭火器及救援绳索规格型号配置要求', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名0, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名1, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名2, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名3, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 元数据优化完成: 重排序排名4, 重复数量=1
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | [检索完成] search_query: 干粉灭火器及救援绳索规格型号配置要求... 召回 5 个候选
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 审查要点 '应急物资配备': 合并 10 个候选, 去重后 10 个
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 104 -> 102 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 149 -> 145 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 55 -> 49 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 198 -> 187 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 111 -> 109 字符
+P54772.T17804 | 2026-05-26 12:19:27 | DEBUG    | no-trace        | system | 文档清理: 604 -> 537 字符
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 使用 蜀天云算力 Qwen3-Reranker-8B (shutian_qwen3_reranker) 进行重排序
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 开始执行SHUTIAN Qwen3重排序,查询: '干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW', 候选文档数量: 6
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | SHUTIAN Qwen3重排序完成,返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | 审查要点 '应急物资配备': 二次重排序完成, 返回 5 个结果
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | [review_point_retrieval] 执行完成,耗时: 2.67 秒
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | [RAG管线测试] 检索完成, 3/3 个查询对有结果, 耗时 2.67s
+P54772.T17804 | 2026-05-26 12:19:27 | INFO     | no-trace        | system | [RAG管线测试] === Pipeline Result: safety_Emergency ===
+  审查要点数: 3
+  提取耗时: 2.71s
+  检索耗时: 2.67s
+  总耗时: 5.38s
+  有结果的查询对: 3/3
+  检索结果总数: 15
+  --- 审查要点 ---
+  [0] 有限空间中毒防护
+      queries: ['有限空间作业有毒有害气体中毒应急救援防护装备要求', '受限空间救援人员进入危险区域个人防护及安全措施']
+      original: 针对桩基孔洞、深基坑、密闭容器等有限空间作业可能发生的中毒事故,救援人员必须佩戴正压式空气呼吸器及防毒面具,系好安全绳方...
+      parameter: 防护装备:正压式空气呼吸器、防毒面具;安全措施:系好安全绳
+  [1] 触电急救心肺复苏
+      queries: ['触电事故现场急救心肺复苏操作规范及按压吹气比', '触电急救脱离电源方式及绝缘工具使用要求']
+      original: 发生触电事故后,迅速切断电源,若无法切断电源,应使用干燥木棒、绝缘杆等绝缘工具使触电者脱离电源。立即就地实施心肺复苏术,...
+      parameter: 按压吹气比=30:2,绝缘工具:干燥木棒、绝缘杆
+  [2] 应急物资配备
+      queries: ['施工现场应急救援物资配备标准及数量要求', '干粉灭火器及救援绳索规格型号配置要求']
+      original: 干粉灭火器4kg×50具,安全绳Φ16mm×500米,千斤顶50t×10台,发电机50kW...
+      parameter: 4kg干粉灭火器50具,Φ16mm安全绳500米,50t千斤顶10台,50kW发电机1台
+  --- 检索结果概况 ---
+  [0] 有限空间中毒防护: 5 条结果, top_rerank=0.9784, top_bfp=0.9929
+  [1] 触电急救心肺复苏: 5 条结果, top_rerank=0.9305, top_bfp=0.9381
+  [2] 应急物资配备: 5 条结果, top_rerank=0.9305, top_bfp=0.5467
+
+[3/3] 评估结果...
+  评估样本 1/7: safety_Monitoring
+    总分: 3.3/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+  评估样本 2/7: technology_TechParams
+    总分: 3.6/5.0 [PASS]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+  评估样本 3/7: technology_Operations
+    总分: 3.2/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+  评估样本 4/7: quality_QualitySystem
+    总分: 2.9/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+  评估样本 5/7: safety_TechMeasures
+    总分: 3.4/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+  评估样本 6/7: environment_EnvSystem
+    总分: 3.2/5.0 [WARN]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+  评估样本 7/7: safety_Emergency
+    总分: 3.5/5.0 [PASS]
+    5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+
+报告已保存: D:\standard_workspace\wx_work\LQAgentPlatform\utils_test\RAG_Pipeline_Test\reports\rag_pipeline_test_report.md
+======================================================================
+# RAG 管线测试报告
+
+测试样本数: 7
+
+## 汇总表
+
+| 样本 | 总分 | 状态 | 召回相关性 | 参数匹配度 | 幻觉风险 | 覆盖度 | 分数合理性 |
+|------|------|------|-----------|-----------|---------|--------|-----------|
+| safety_Monitoring | 3.3 | WARN | 4.7 | 0.2 | 1.5 | 5.0 | 5.0 |
+| technology_TechParams | 3.6 | PASS | 4.7 | 3.4 | 1.1 | 4.0 | 5.0 |
+| technology_Operations | 3.2 | WARN | 4.6 | 0.6 | 1.5 | 4.5 | 5.0 |
+| quality_QualitySystem | 2.9 | WARN | 4.5 | 0.3 | 1.1 | 3.5 | 5.0 |
+| safety_TechMeasures | 3.4 | WARN | 4.9 | 3.0 | 1.0 | 3.0 | 5.0 |
+| environment_EnvSystem | 3.2 | WARN | 4.9 | 0.0 | 1.5 | 4.6 | 5.0 |
+| safety_Emergency | 3.5 | PASS | 4.1 | 2.0 | 1.5 | 5.0 | 5.0 |
+
+## 详细评估
+
+### [WARN] safety_Monitoring (总分: 3.3)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- [PASS] **召回相关性**: 4.7/5.0
+  - 各要点: ['4.9', '4.9', '4.9', '4.1', '4.9']
+- [PASS] **参数匹配度**: 0.2/5.0
+  - 各要点: ['0.0', '0.0', '0.0', '0.0', '1.2']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 5.0/5.0
+  - 原文参数数: 19, 被覆盖: 19, 覆盖率: 100%, 审查要点数: 5
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.724, min=0.516, max=0.917, std=0.102, n=25, issues=[]
+
+### [PASS] technology_TechParams (总分: 3.6)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=5, 检索结果数=25
+
+- [PASS] **召回相关性**: 4.7/5.0
+  - 各要点: ['4.9', '4.9', '4.1', '4.9', '4.9']
+- [PASS] **参数匹配度**: 3.4/5.0
+  - 各要点: ['3.0', '3.0', '5.0', '3.0', '3.0']
+- [PASS] **幻觉风险**: 1.1/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '0.0', '1.2']
+- [PASS] **覆盖度**: 4.0/5.0
+  - 原文参数数: 3, 被覆盖: 2, 覆盖率: 67%, 审查要点数: 5
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.770, min=0.585, max=0.920, std=0.087, n=25, issues=[]
+
+### [WARN] technology_Operations (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- [PASS] **召回相关性**: 4.6/5.0
+  - 各要点: ['4.9', '4.9', '4.1']
+- [PASS] **参数匹配度**: 0.6/5.0
+  - 各要点: ['1.0', '0.7', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 4.5/5.0
+  - 原文参数数: 13, 被覆盖: 11, 覆盖率: 85%, 审查要点数: 3
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.800, min=0.622, max=0.971, std=0.103, n=15, issues=[]
+
+### [WARN] quality_QualitySystem (总分: 2.9)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=4, 检索结果数=20
+
+- [PASS] **召回相关性**: 4.5/5.0
+  - 各要点: ['3.3', '4.9', '4.9', '4.9']
+- [PASS] **参数匹配度**: 0.3/5.0
+  - 各要点: ['0.0', '1.2', '0.0', '0.0']
+- [PASS] **幻觉风险**: 1.1/5.0
+  - 各要点: ['1.5', '1.5', '1.5', '0.0']
+- [PASS] **覆盖度**: 3.5/5.0
+  - 原文参数数: 18, 被覆盖: 9, 覆盖率: 50%, 审查要点数: 4
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.893, min=0.725, max=0.973, std=0.066, n=20, issues=[]
+
+### [WARN] safety_TechMeasures (总分: 3.4)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- [PASS] **召回相关性**: 4.9/5.0
+  - 各要点: ['4.9', '4.9', '4.9']
+- [PASS] **参数匹配度**: 3.0/5.0
+  - 各要点: ['3.0', '3.0', '3.0']
+- [PASS] **幻觉风险**: 1.0/5.0
+  - 各要点: ['1.5', '0.0', '1.5']
+- [PASS] **覆盖度**: 3.0/5.0
+  - 原文无可提取参数,中性评分
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.796, min=0.665, max=0.910, std=0.058, n=15, issues=[]
+
+### [WARN] environment_EnvSystem (总分: 3.2)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- [PASS] **召回相关性**: 4.9/5.0
+  - 各要点: ['4.9', '4.9', '4.9']
+- [PASS] **参数匹配度**: 0.0/5.0
+  - 各要点: ['0.0', '0.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 4.6/5.0
+  - 原文参数数: 8, 被覆盖: 7, 覆盖率: 88%, 审查要点数: 3
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.826, min=0.577, max=0.969, std=0.097, n=15, issues=[]
+
+### [PASS] safety_Emergency (总分: 3.5)
+
+**分析**: 5维度评估: 5 PASS / 0 WARN / 0 FAIL. 审查要点数=3, 检索结果数=15
+
+- [PASS] **召回相关性**: 4.1/5.0
+  - 各要点: ['4.9', '2.5', '4.9']
+- [PASS] **参数匹配度**: 2.0/5.0
+  - 各要点: ['3.0', '3.0', '0.0']
+- [PASS] **幻觉风险**: 1.5/5.0
+  - 各要点: ['1.5', '1.5', '1.5']
+- [PASS] **覆盖度**: 5.0/5.0
+  - 原文参数数: 1, 被覆盖: 1, 覆盖率: 100%, 审查要点数: 3
+- [PASS] **分数合理性**: 5.0/5.0
+  - avg=0.814, min=0.615, max=0.978, std=0.097, n=15, issues=[]
+
+## 全局统计
+
+- PASS: 2/7
+- WARN: 5/7
+- FAIL: 0/7
+- 平均总分: 3.3/5.0
+======================================================================
+
+汇总: 2 PASS / 5 WARN / 0 FAIL

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 26 - 0
utils_test/sgfa_test_file/308085f5-9a44-4760-8a91-66f71c1ffb84.pdf.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 75 - 0
utils_test/sgfa_test_file/4bddabe6-8f1b-46bb-9e99-cab2fb4380f4.pdf.json


+ 91 - 0
utils_test/sgfa_test_file/a053a18c-ac35-4429-9f50-b25380d0bae1.pdf.json

@@ -0,0 +1,91 @@
+{
+  "callback_task_id": "ca72214937a4f4f49894324bf6bb61d6-1776909630",
+  "file_id": "ca72214937a4f4f49894324bf6bb61d6",
+  "file_name": "a053a18c-ac35-4429-9f50-b25380d0bae1.pdf",
+  "user_id": "user-001",
+  "overall_task_status": "processing",
+  "stage_status": {
+    "document": "completed",
+    "ai_review": "completed",
+    "report": "pending"
+  },
+  "document_result": {
+    "file_id": "ca72214937a4f4f49894324bf6bb61d6",
+    "structured_content": {
+      "document_id": "2f348b5b-2be8-48a2-af82-006de9cacf4b",
+      "document_name": "document_5ba91c88",
+      "total_pages": 55,
+      "total_lines": 0,
+      "total_chunks": 0,
+      "processing_timestamp": "2026-04-23T10:01:13.227091",
+      "chunks": [],
+      "outline": {
+        "chapters": []
+      },
+      "primary_classifications": [],
+      "secondary_classifications": [],
+      "tertiary_classifications": [],
+      "metadata": {
+        "primary_count": 0,
+        "secondary_count": 0,
+        "tertiary_count": 0
+      },
+      "quality_check": {
+        "l1_chapter_quality": {
+          "extracted_count": 0,
+          "expected_count": 10,
+          "extraction_rate": 0.0,
+          "threshold": 70.0,
+          "exist_issue": true
+        },
+        "l1_system_alerts": "该文档一级章节提取可能存在缺失,请检查文档标题格式是否符合标准。",
+        "l2_subsection_quality": {
+          "extracted_count": 0,
+          "expected_count": 41,
+          "extraction_rate": 0.0,
+          "threshold": 73.0,
+          "exist_issue": true
+        },
+        "l2_system_alerts": "该文档二级小节提取可能存在缺失,请检查文档标题格式是否符合标准。",
+        "l1_system_alerts_lists": [],
+        "l2_system_alerts_lists": [],
+        "l1_exist_issue": false,
+        "l2_exist_issue": false
+      }
+    },
+    "document_name": "document_5ba91c88",
+    "total_chunks": 0,
+    "metadata": {
+      "total_pages": 55,
+      "total_lines": 0,
+      "primary_count": 0,
+      "secondary_count": 0,
+      "tertiary_count": 0,
+      "processing_timestamp": "2026-04-23T10:01:13.227091",
+      "raw_metadata": {
+        "quality_check": {
+          "l1_chapter_quality": {
+            "extracted_count": 0,
+            "expected_count": 10,
+            "extraction_rate": 0.0,
+            "threshold": 70.0,
+            "exist_issue": true
+          },
+          "l1_system_alerts": "该文档一级章节提取可能存在缺失,请检查文档标题格式是否符合标准。",
+          "l2_subsection_quality": {
+            "extracted_count": 0,
+            "expected_count": 41,
+            "extraction_rate": 0.0,
+            "threshold": 73.0,
+            "exist_issue": true
+          },
+          "l2_system_alerts": "该文档二级小节提取可能存在缺失,请检查文档标题格式是否符合标准。",
+          "l1_system_alerts_lists": [],
+          "l2_system_alerts_lists": [],
+          "l1_exist_issue": false,
+          "l2_exist_issue": false
+        }
+      }
+    }
+  }
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 26 - 0
utils_test/sgfa_test_file/完整性1.docx.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 171 - 0
utils_test/sgfa_test_file/标准结构测试文件.pdf.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 143 - 0
utils_test/sgfa_test_file/测试模版-四川路桥专项施工方案框架以及编制说明(2025修订第三版)- v0.2.pdf.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 98 - 0
utils_test/sgfa_test_file/测试模版1_语句语法审查.docx.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 91 - 0
utils_test/sgfa_test_file/测试模版2_语义逻辑审查.docx.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 121 - 0
utils_test/sgfa_test_file/测试模版4_规范性.docx.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 91 - 0
utils_test/sgfa_test_file/测试模版5_敏感词.docx.json


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 121 - 0
utils_test/sgfa_test_file/测试模版(目录缺失)-四川路桥专项施工方案框架以及编制说明(2025修订第三版).docx.json


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.