|
|
@@ -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()
|