Skip to content

feat(OCR): 添加基于大模型的OCR作为PaddleOCR的替代方案,支持Bot私聊配置 #241

@ModerRAS

Description

@ModerRAS

概述

为现有的PaddleOCR添加基于大语言模型(LLM)的OCR作为替代方案,并在Bot私聊中创建状态机来配置OCR设置(参考现有的 editllmconfig 流程)。

背景

目前OCR功能只使用PaddleOCR。用户希望:

  1. 添加使用LLM的替代OCR选项
  2. 支持通过Bot私聊切换OCR引擎
  3. 提供OCR模型选择配置选项

实施计划

第一阶段:核心OCR服务

任务 文件 描述
T1.1 Interface/AI/OCR/IOCRService.cs 创建新的OCR抽象接口和引擎枚举
T1.2 Service/AI/OCR/LLMOCRService.cs 使用现有GeneralLLMService实现基于LLM的OCR
T1.3 添加配置常量 将OCR:Engine、OCR:LLMModelName、OCR:LLMChannelId添加到AppConfigurationItem
T1.4 TelegramSearchBot.Test/AI/OCR/ OCR服务的单元测试

第二阶段:状态机

任务 文件 描述
T2.1 Model/AI/OCRConfState.cs 创建OCR配置状态的新枚举
T2.2 Helper/EditOCRConfRedisHelper.cs 参考EditLLMConfRedisHelper模式的Redis辅助类
T2.3 Service/Manage/EditOCRConfService.cs 状态机逻辑和处理器
T2.4 TelegramSearchBot.Test/Manage/EditOCRConfTest.cs 状态机的单元测试

第三阶段:Bot集成

任务 文件 描述
T3.1 Controller/Manage/EditOCRConfController.cs OCR配置的Bot控制器(仅私聊,仅管理员)
T3.2 Controller/AI/OCR/AutoOCRController.cs 修改以使用OCR引擎选择
T3.3 View/EditOCRConfView.cs OCR配置响应的视图

状态机流程

主菜单(发送 \"OCR设置\")
├── 1. 切换OCR引擎 → 选择引擎 (PaddleOCR/LLM)
│   └── 如果选LLM → 选择渠道 → 选择模型
├── 2. 查看OCR配置 → 显示当前配置
└── 3. 返回 → 退出

配置键(存储在AppConfigurationItem中)

  • OCR:Engine - 当前OCR引擎 (PaddleOCR/LLM)
  • OCR:LLMModelName - LLM OCR的模型名称
  • OCR:LLMChannelId - 可选:OCR专用LLM渠道

关键设计决策

  1. IOCRService接口:新接口,扩展OCR能力并添加Engine属性
  2. OCRServiceFactory:工厂模式,用于在PaddleOCR和LLMOCR之间选择
  3. 向后兼容:如果没有OCR配置,默认使用PaddleOCR
  4. LLMOCRService:使用现有的GeneralLLMService.AnalyzeImageAsync进行OCR

需要创建的文件

  1. TelegramSearchBot/Interface/AI/OCR/IOCRService.cs
  2. TelegramSearchBot/Service/AI/OCR/LLMOCRService.cs
  3. TelegramSearchBot/Model/AI/OCRConfState.cs
  4. TelegramSearchBot/Helper/EditOCRConfRedisHelper.cs
  5. TelegramSearchBot/Service/Manage/EditOCRConfService.cs
  6. TelegramSearchBot/Controller/Manage/EditOCRConfController.cs
  7. TelegramSearchBot/View/EditOCRConfView.cs

需要修改的文件

  1. TelegramSearchBot/Controller/AI/OCR/AutoOCRController.cs - 添加OCR引擎选择逻辑
  2. 在现有服务中添加配置常量(GeneralLLMService或新建)

参考

  • 现有模式:EditLLMConfService.cs 状态机
  • 现有模式:EditLLMConfRedisHelper.cs Redis存储
  • 现有模式:LLMConfState.cs 状态枚举

待确认问题

  1. 用户应该从现有LLM渠道/模型中选择,还是有单独的OCR专用配置?
  2. LLM OCR提示词是否应该可配置?
  3. 是否应该有单独的LLM和PaddleOCR超时配置?

此Issue用于跟踪实施进度。每个原子变更将创建单独的PR。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions