模块关系
DocuSnap-Backend 系统的五个核心模块通过明确的接口和数据流进行交互,形成一个协调工作的整体。本页面详细介绍这些模块之间的关系和交互方式。
模块关系图
下图展示了五个核心模块之间的关系和交互:
从图中可以看出:
- 任务处理模块位于系统的中心,协调其他模块的工作
- OCR 处理模块和LLM 处理模块紧密合作,共同完成文档和表单处理
- 安全加密模块和缓存和数据持久化模块为其他模块提供支持服务
- 所有模块都与任务处理模块有交互,形成一个协调工作的整体
主要交互流程
任务处理模块与其他模块的交互
任务处理模块作为系统的核心协调者,与其他所有模块都有交互。
- 任务处理模块 → OCR 处理模块:
- 调用 OCR 处理模块处理图像
- 传递图像数据和处理参数
- 接收 OCR 处理结果(文本内容)
- 任务处理模块 → LLM 处理模块:
- 调用 LLM 处理模块分析文本
- 传递 OCR 结果和任务类型
- 接收 LLM 处理结果(结构化数据)
- 任务处理模块 → 安全加密模块:
- 调用安全加密模块解密客户端请求
- 调用安全加密模块加密响应数据
- 验证请求的完整性和真实性
- 任务处理模块 → 缓存和数据持久化模块:
- 创建和更新任务记录
- 存储任务处理结果
- 查询任务状态和结果
OCR 处理模块与其他模块的交互
OCR 处理模块主要与任务处理模块和外部 OCR 服务交互。
- OCR 处理模块 ← 任务处理模块:
- 接收图像处理请求
- 获取图像数据和处理参数
- 返回 OCR 处理结果
- OCR 处理模块 → 外部 OCR 服务:
- 发送图像到 OCR 服务
- 接收 OCR 识别结果
- 处理服务响应和错误
LLM 处理模块与其他模块的交互
LLM 处理模块主要与任务处理模块和外部 LLM 服务交互。
- LLM 处理模块 ← 任务处理模块:
- 接收文本分析请求
- 获取 OCR 结果和任务类型
- 返回 LLM 处理结果
- LLM 处理模块 → 外部 LLM 服务:
- 发送提示到 LLM 服务
- 接收 LLM 响应
- 处理服务响应和错误
安全加密模块与其他模块的交互
安全加密模块为系统提供安全服务,主要与任务处理模块交互。
- 安全加密模块 ← 任务处理模块:
- 接收解密请求
- 接收加密请求
- 返回解密/加密结果
- 安全加密模块 → 任务处理模块:
- 提供解密后的请求数据
- 提供加密后的响应数据
- 报告安全验证结果
缓存和数据持久化模块与其他模块的交互
缓存和数据持久化模块为系统提供数据存储和检索服务,主要与任务处理模块交互。
- 缓存和数据持久化模块 ← 任务处理模块:
- 接收任务创建请求
- 接收任务状态更新请求
- 接收任务结果存储请求
- 接收任务查询请求
- 缓存和数据持久化模块 → 任务处理模块:
- 提供任务状态信息
- 提供缓存的任务结果
- 报告存储操作结果
数据流向
DocuSnap-Backend 系统中的数据流向可以概括为以下几个主要路径:
1. 请求处理路径
客户端 → 安全加密模块(解密) → 任务处理模块 → 缓存和数据持久化模块(查询缓存)
2. 任务执行路径
任务处理模块 → OCR 处理模块 → 外部 OCR 服务 → OCR 处理模块 → 任务处理模块 → LLM 处理模块 → 外部 LLM 服务 → LLM 处理模块 → 任务处理模块
3. 结果存储路径
任务处理模块 → 缓存和数据持久化模块(存储结果)
4. 响应处理路径
任务处理模块 → 安全加密模块(加密) → 客户端
5. 状态查询路径
客户端 → 安全加密模块(解密) → 任务处理模块 → 缓存和数据持久化模块(查询状态) → 任务处理模块 → 安全加密模块(加密) → 客户端
接口定义
模块之间通过明确定义的接口进行交互,以下是主要接口的定义:
任务处理模块对外接口
- 处理请求接口:
process_document(images)
:处理文档请求process_form(images)
:处理表单请求process_form_filling(images, user_data)
:处理表单填充请求
- 状态查询接口:
get_task_status(task_id)
:查询任务状态get_task_result(task_id)
:查询任务结果
OCR 处理模块接口
- 图像处理接口:
process_images(images)
:处理多个图像并返回文本结果process_single_image(image, semaphore)
:处理单个图像
LLM 处理模块接口
- 文本处理接口:
process_with_llm(ocr_text, task_type, user_data=None)
:使用 LLM 处理文本build_prompt(ocr_text, task_type, user_data=None)
:构建提示
安全加密模块接口
- 加密解密接口:
decrypt_request(encrypted_data, encrypted_key, signature)
:解密请求encrypt_response(data, aes_key)
:加密响应
缓存和数据持久化模块接口
- 数据存储接口:
create_task_record(task_id, task_type)
:创建任务记录update_task_result(task_id, status, result=None)
:更新任务结果
- 数据查询接口:
get_task_status(task_id)
:获取任务状态get_task_result(task_id)
:获取任务结果
模块依赖关系
DocuSnap-Backend 系统的模块依赖关系如下:
- 任务处理模块:
- 依赖 OCR 处理模块进行图像处理
- 依赖 LLM 处理模块进行文本分析
- 依赖安全加密模块进行请求解密和响应加密
- 依赖缓存和数据持久化模块进行数据存储和检索
- OCR 处理模块:
- 依赖外部 OCR 服务进行文本识别
- 不直接依赖其他内部模块
- LLM 处理模块:
- 依赖外部 LLM 服务进行文本分析
- 不直接依赖其他内部模块
- 安全加密模块:
- 不依赖其他内部模块
- 缓存和数据持久化模块:
- 不依赖其他内部模块
这种依赖关系设计减少了模块间的耦合,提高了系统的可维护性和可扩展性。
通信机制
DocuSnap-Backend 系统的模块间通信主要通过函数调用和返回值进行,具体机制如下:
- 同步函数调用:
- 模块间通过直接的函数调用进行通信
- 调用方等待被调用方完成处理并返回结果
- 异步任务处理:
- 任务处理模块通过任务队列和工作线程实现异步处理
- 客户端可以异步查询任务状态和结果
- 错误传递:
- 模块间通过异常机制传递错误信息
- 上层模块捕获并处理下层模块抛出的异常
- 数据序列化:
- 模块间传递复杂数据结构时,通过 JSON 序列化和反序列化
- 确保数据格式的一致性和可靠性
协作模式
DocuSnap-Backend 系统的模块协作体现了以下设计模式和协作模式:
- 生产者-消费者模式:
- 任务处理模块作为协调者,管理任务的生产和消费
- API 端点作为生产者,生成任务
- 工作线程作为消费者,处理任务
- 管道处理模式:
- 文档和表单处理形成一个处理管道:图像 → OCR → LLM → 结构化结果
- 每个模块负责管道中的一个处理阶段
- 服务提供者模式:
- 安全加密模块和缓存和数据持久化模块作为服务提供者
- 为其他模块提供通用的安全和数据服务
- 外观模式:
- 任务处理模块作为外观,为客户端提供统一的接口
- 隐藏了内部模块的复杂性和交互细节
通过这些设计和实现,DocuSnap-Backend 系统实现了模块间的高效协作,形成了一个功能完整、结构清晰的整体。