Files
leaudit-platform-backend/docs/leaudit/bridge_directory_design.md
T

129 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 ...` | 已移除(显式参数替代环境变量切换) |