فهرست منبع

feat(test_vl_lazy_loading): 添加 VL 识别器懒加载功能测试,验证初始化逻辑和懒加载机制

zhch158_admin 2 هفته پیش
والد
کامیت
a3eac55870
1فایلهای تغییر یافته به همراه73 افزوده شده و 0 حذف شده
  1. 73 0
      ocr_tools/universal_doc_parser/tests/test_vl_lazy_loading.py

+ 73 - 0
ocr_tools/universal_doc_parser/tests/test_vl_lazy_loading.py

@@ -0,0 +1,73 @@
+"""
+VL 识别器懒加载功能测试
+验证 VL 模型只在需要时才初始化,且只初始化一次
+"""
+import sys
+from pathlib import Path
+
+# 添加项目根目录到路径
+project_root = Path(__file__).parent.parent
+sys.path.insert(0, str(project_root))
+
+from loguru import logger
+from core.config_manager import ConfigManager
+from core.pipeline_manager_v2 import DocumentPipeline
+
+def test_vl_lazy_loading():
+    """测试 VL 识别器懒加载"""
+    
+    logger.info("=" * 80)
+    logger.info("测试 VL 识别器懒加载功能")
+    logger.info("=" * 80)
+    
+    config_path = project_root / "config" / "bank_statement_yusys_v3.yaml"
+    
+    # 1. 初始化 Pipeline(此时不应初始化 VL 识别器)
+    logger.info("\n步骤 1: 初始化 Pipeline(期望 VL 识别器不初始化)")
+    pipeline = DocumentPipeline(str(config_path))
+    
+    # 检查 VL 识别器状态
+    assert pipeline.vl_recognizer is None, "❌ VL recognizer 应该为 None(未初始化)"
+    assert pipeline._vl_recognizer_initialized is False, "❌ _vl_recognizer_initialized 应该为 False"
+    logger.info("✅ Pipeline 初始化完成,VL 识别器未初始化(懒加载生效)")
+    
+    # 2. 手动触发懒加载
+    logger.info("\n步骤 2: 手动触发懒加载(期望初始化 VL 识别器)")
+    vl_recognizer = pipeline._ensure_vl_recognizer()
+    
+    # 检查初始化状态
+    if vl_recognizer is not None:
+        logger.info("✅ VL 识别器初始化成功")
+        assert pipeline._vl_recognizer_initialized is True, "❌ _vl_recognizer_initialized 应该为 True"
+    else:
+        logger.warning("⚠️ VL 识别器初始化失败(可能是服务器连接问题)")
+        assert pipeline._vl_recognizer_initialized is True, "❌ 即使失败,_vl_recognizer_initialized 也应该为 True"
+    
+    # 3. 再次调用(应该不重新初始化)
+    logger.info("\n步骤 3: 再次调用懒加载(期望返回缓存的实例)")
+    vl_recognizer_2 = pipeline._ensure_vl_recognizer()
+    assert vl_recognizer_2 is vl_recognizer, "❌ 第二次调用应该返回相同的实例"
+    logger.info("✅ 懒加载缓存生效,没有重复初始化")
+    
+    # 4. 测试 ElementProcessors 的懒加载
+    logger.info("\n步骤 4: 测试 ElementProcessors 的懒加载回调")
+    processor_vl = pipeline.element_processors._ensure_vl_recognizer()
+    
+    if processor_vl is not None:
+        logger.info("✅ ElementProcessors 成功触发懒加载")
+        assert processor_vl is vl_recognizer, "❌ 应该返回相同的 VL 识别器实例"
+    else:
+        logger.warning("⚠️ ElementProcessors 懒加载返回 None(服务器连接问题)")
+    
+    logger.info("\n" + "=" * 80)
+    logger.info("✅ 懒加载测试通过!")
+    logger.info("=" * 80)
+    logger.info("\n功能总结:")
+    logger.info("  1. Pipeline 初始化时不会立即初始化 VL 识别器")
+    logger.info("  2. 只有在真正需要使用时才会初始化(懒加载)")
+    logger.info("  3. 只初始化一次,后续调用返回缓存实例")
+    logger.info("  4. 即使初始化失败也会标记,避免重复尝试")
+    logger.info("  5. ElementProcessors 可以通过回调触发懒加载")
+
+if __name__ == "__main__":
+    test_vl_lazy_loading()