概述
为现有的PaddleOCR添加基于大语言模型(LLM)的OCR作为替代方案,并在Bot私聊中创建状态机来配置OCR设置(参考现有的 editllmconfig 流程)。
背景
目前OCR功能只使用PaddleOCR。用户希望:
- 添加使用LLM的替代OCR选项
- 支持通过Bot私聊切换OCR引擎
- 提供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渠道
关键设计决策
- IOCRService接口:新接口,扩展OCR能力并添加Engine属性
- OCRServiceFactory:工厂模式,用于在PaddleOCR和LLMOCR之间选择
- 向后兼容:如果没有OCR配置,默认使用PaddleOCR
- LLMOCRService:使用现有的GeneralLLMService.AnalyzeImageAsync进行OCR
需要创建的文件
TelegramSearchBot/Interface/AI/OCR/IOCRService.cs
TelegramSearchBot/Service/AI/OCR/LLMOCRService.cs
TelegramSearchBot/Model/AI/OCRConfState.cs
TelegramSearchBot/Helper/EditOCRConfRedisHelper.cs
TelegramSearchBot/Service/Manage/EditOCRConfService.cs
TelegramSearchBot/Controller/Manage/EditOCRConfController.cs
TelegramSearchBot/View/EditOCRConfView.cs
需要修改的文件
TelegramSearchBot/Controller/AI/OCR/AutoOCRController.cs - 添加OCR引擎选择逻辑
- 在现有服务中添加配置常量(GeneralLLMService或新建)
参考
- 现有模式:
EditLLMConfService.cs 状态机
- 现有模式:
EditLLMConfRedisHelper.cs Redis存储
- 现有模式:
LLMConfState.cs 状态枚举
待确认问题
- 用户应该从现有LLM渠道/模型中选择,还是有单独的OCR专用配置?
- LLM OCR提示词是否应该可配置?
- 是否应该有单独的LLM和PaddleOCR超时配置?
此Issue用于跟踪实施进度。每个原子变更将创建单独的PR。
概述
为现有的PaddleOCR添加基于大语言模型(LLM)的OCR作为替代方案,并在Bot私聊中创建状态机来配置OCR设置(参考现有的
editllmconfig流程)。背景
目前OCR功能只使用PaddleOCR。用户希望:
实施计划
第一阶段:核心OCR服务
Interface/AI/OCR/IOCRService.csService/AI/OCR/LLMOCRService.csTelegramSearchBot.Test/AI/OCR/第二阶段:状态机
Model/AI/OCRConfState.csHelper/EditOCRConfRedisHelper.csService/Manage/EditOCRConfService.csTelegramSearchBot.Test/Manage/EditOCRConfTest.cs第三阶段:Bot集成
Controller/Manage/EditOCRConfController.csController/AI/OCR/AutoOCRController.csView/EditOCRConfView.cs状态机流程
配置键(存储在AppConfigurationItem中)
OCR:Engine- 当前OCR引擎 (PaddleOCR/LLM)OCR:LLMModelName- LLM OCR的模型名称OCR:LLMChannelId- 可选:OCR专用LLM渠道关键设计决策
需要创建的文件
TelegramSearchBot/Interface/AI/OCR/IOCRService.csTelegramSearchBot/Service/AI/OCR/LLMOCRService.csTelegramSearchBot/Model/AI/OCRConfState.csTelegramSearchBot/Helper/EditOCRConfRedisHelper.csTelegramSearchBot/Service/Manage/EditOCRConfService.csTelegramSearchBot/Controller/Manage/EditOCRConfController.csTelegramSearchBot/View/EditOCRConfView.cs需要修改的文件
TelegramSearchBot/Controller/AI/OCR/AutoOCRController.cs- 添加OCR引擎选择逻辑参考
EditLLMConfService.cs状态机EditLLMConfRedisHelper.csRedis存储LLMConfState.cs状态枚举待确认问题
此Issue用于跟踪实施进度。每个原子变更将创建单独的PR。