# LeAudit Bridge 目录设计 ## 1. 目标 `fastapi_modules/fastapi_leaudit/leaudit_bridge/` 是 `leaudit-platform` 和 `leaudit` 内核之间的唯一正式桥接层。 设计目标: - 业务层不直接调用 `leaudit` 内核模块 - 所有文档评查统一从 bridge 进入 - bridge 负责输入映射、上下文构建、结果适配、结果落库 - 后续替换或升级 `leaudit` 时,最大限度减少对业务层的影响 ## 2. 目录结构 ```text fastapi_modules/fastapi_leaudit/leaudit_bridge/ ├── __init__.py # 顶层入口:create_pipeline / is_leaudit_mode ├── pipeline.py # 管线总入口:OCR → Extract → Evaluate → Persist ├── ctx_builder.py # 构建 leaudit 执行上下文 ├── rules_loader.py # 规则文件加载与缓存 ├── client_factory.py # OCR/LLM/VLM 客户端工厂 ├── result_adapter.py # leaudit 结果 → 统一格式 ├── storage_adapter.py # 结果写入 leaudit_* 表(SQLAlchemy) ├── tasks.py # Celery 异步任务入口 ├── ocr_bridge.py # OCR/VLM 桥接后处理 └── case_number_extractor.py # 案件编号提取 ``` > 路径从老项目 `services/leaudit_bridge/` 变更为 `fastapi_modules/fastapi_leaudit/leaudit_bridge/`。 ## 3. 文件职责说明 ### `__init__.py` - `is_leaudit_mode()` — 新平台始终返回 True - `create_pipeline(rules_path)` — 创建完整 LauditPipeline 实例 - 使用 `DocNormalizationAdapter` 包裹 OCR 客户端 - 构建 `RulesFileRegistry` 用于内容分类 ### `pipeline.py` 核心入口 `LauditPipeline.run()`: ``` document_id + file_path + rules_file → OCR (含分类/分段/印章增强) → 案件编号提取 → Extraction (dispatch_extract) → 坐标解析 (resolve_bundle_positions) → Phase 判定 (draft/executed) → Evaluation (evaluate_extraction) → StorageAdapter 落库 ``` ### `ctx_builder.py` 把 leaudit-platform 文档对象映射成 leaudit 可执行上下文。 ### `rules_loader.py` - 本地 YAML 加载(`leaudit.dsl.loader.load_rules_file`) - 未来扩展:OSS 下载 + 缓存 ### `client_factory.py` 统一创建 leaudit 运行所需依赖对象: - `create_ocr_client()` → `ChandraOCRClient` - `create_llm_client()` → `OpenAICompatibleClient` - `create_vlm_client()` → `QwenVLMClient` 配置源:`fastapi_admin.config`(从 `app.toml` 加载) ### `result_adapter.py` 把 leaudit 的原始结果转换成统一消费结构,屏蔽内核对象细节变化。 ### `storage_adapter.py` 将适配后的结果写入 `leaudit_*` 表: - `update_document_status()` → `leaudit_documents.processing_status` - `save_ocr_result()` → `leaudit_artifacts` - `save_extraction_result()` → `leaudit_field_results` - `save_evaluation_results()` → `leaudit_rule_results` + `leaudit_audit_runs` 使用 SQLAlchemy `GetAsyncSession()` + `text()` 查询。 ### `tasks.py` Celery 异步任务入口。P2 阶段完成 Celery 集成。 - `leaudit_process_document()` — 主处理函数 - `dispatch_leaudit_task()` — 任务分发(P2 改用 `.apply_async()`) - `_resolve_rules_path()` — 规则路径解析(config → DB → type_id 映射) ## 4. 调用边界约束 - Controller 层不直接调用 `leaudit` 内核模块 - Service 层不直接调用 `leaudit` 内核模块 - 只有 `leaudit_bridge/` 可以感知 `leaudit` 内核类型和对象 - 所有外部调用统一经过 `pipeline.py` 或 `tasks.py` ## 5. 数据流 ```text Controller / Service → leaudit_bridge.tasks.dispatch_leaudit_task → leaudit_bridge.pipeline.LauditPipeline.run → ctx_builder / rules_loader / client_factory → leaudit 引擎执行 → result_adapter → storage_adapter → leaudit_* 结果表 ``` ## 6. 导入路径迁移 从老项目迁移时,所有 `from core.*` 已更新为: | 旧引用 | 新引用 | |-------|-------| | `from core.config import ...` | `from fastapi_admin.config import ...` | | `from core.postgrest.client import ...` | SQLAlchemy `GetAsyncSession()` + `text()` | | `from core.logger import log` | `from fastapi_common.fastapi_common_logger import logger` | | `from core.celery_app_limited import celery_app` | P2 阶段集成 | | `from core.utils.instance_context import ...` | 已移除(显式参数替代环境变量切换) |