模块关系¶
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. 任务执行路径¶
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 系统实现了模块间的高效协作,形成了一个功能完整、结构清晰的整体。