303 lines
6.7 KiB
Markdown
303 lines
6.7 KiB
Markdown
|
|
# CutThenThink 需求分析报告
|
|||
|
|
|
|||
|
|
## 项目现状评估
|
|||
|
|
|
|||
|
|
### 原始需求回顾
|
|||
|
|
|
|||
|
|
**CutThenThink** 应当是一个**轻量级截图工具**,核心功能包括:
|
|||
|
|
|
|||
|
|
1. **截图功能** - 支持多种截图方式
|
|||
|
|
2. **云端存储** - 数据存储在云端
|
|||
|
|
3. **OCR 扫描** - 文字识别,云端部署
|
|||
|
|
4. **AI 分类解析** - 智能分类和内容生成,服务提供商 API 或本地 LLM
|
|||
|
|
|
|||
|
|
### 当前实现状态
|
|||
|
|
|
|||
|
|
#### ✅ 已完成的功能模块
|
|||
|
|
|
|||
|
|
| 模块 | 状态 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| 数据模型 | 完成 | SQLAlchemy Record 模型 |
|
|||
|
|
| 配置管理 | 完成 | 完善的 Settings 配置系统 |
|
|||
|
|
| OCR 模块 | 部分完成 | 仅支持云端 API,但无本地降级方案 |
|
|||
|
|
| AI 模块 | 完成 | 支持 OpenAI/Claude/通义/Ollama |
|
|||
|
|
| 存储模块 | 部分完成 | 仅有 JSON 文件存储,无云端存储 |
|
|||
|
|
| 处理流程 | 完成 | OCR→AI→Storage 流程整合 |
|
|||
|
|
| GUI 框架 | 部分完成 | PyQt6 主窗口和部分组件 |
|
|||
|
|
|
|||
|
|
#### ❌ 存在的问题
|
|||
|
|
|
|||
|
|
### 问题一:架构过度复杂
|
|||
|
|
|
|||
|
|
**设计文档中的架构**:
|
|||
|
|
```
|
|||
|
|
多用户系统 → 云端 API → 复杂配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**实际需求**:
|
|||
|
|
```
|
|||
|
|
轻量级工具 → 简单配置 → 本地使用为主
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**具体表现**:
|
|||
|
|
1. 过度的配置系统(AI/OCR/云端/界面/高级 5 大类配置)
|
|||
|
|
2. 支持多种云存储(S3/OSS/COS/MinIO)但无实际实现
|
|||
|
|
3. 多用户隔离设计(实际是单用户工具)
|
|||
|
|
|
|||
|
|
### 问题二:OCR 功能不完整
|
|||
|
|
|
|||
|
|
**设计文档承诺**:
|
|||
|
|
- 内置轻量 OCR(PaddleOCR 本地运行)
|
|||
|
|
- 云端 OCR API(百度/腾讯/阿里云)
|
|||
|
|
- 自动降级机制
|
|||
|
|
|
|||
|
|
**当前实现**:
|
|||
|
|
- 仅支持云端 API 调用
|
|||
|
|
- 无任何本地 OCR 实现
|
|||
|
|
- 无任何第三方 OCR 服务集成
|
|||
|
|
- **OCR 功能实际上无法使用**
|
|||
|
|
|
|||
|
|
### 问题三:云端存储未实现
|
|||
|
|
|
|||
|
|
**设计文档承诺**:
|
|||
|
|
- WebDAV 支持
|
|||
|
|
- 阿里云 OSS 支持
|
|||
|
|
- AWS S3 支持
|
|||
|
|
- 同步状态显示
|
|||
|
|
|
|||
|
|
**当前实现**:
|
|||
|
|
- 仅有简单的 JSON 文件存储
|
|||
|
|
- 无任何云端存储实现
|
|||
|
|
- 云存储配置类存在但无实际功能
|
|||
|
|
|
|||
|
|
### 问题四:AI 分类功能依赖外部服务
|
|||
|
|
|
|||
|
|
**现状**:
|
|||
|
|
- 完全依赖第三方 API(OpenAI/Claude/通义千问)
|
|||
|
|
- 虽然支持 Ollama 本地模型,但需要用户自行部署
|
|||
|
|
- 无离线工作能力
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- 需要配置 API Key
|
|||
|
|
- 产生额外费用
|
|||
|
|
- 网络依赖
|
|||
|
|
|
|||
|
|
### 问题五:项目定位模糊
|
|||
|
|
|
|||
|
|
| 设计文档 | 实际需求 | 现状 |
|
|||
|
|
|---------|---------|------|
|
|||
|
|
| 多用户系统 | 单人工具 | 架构过于复杂 |
|
|||
|
|
| 云端优先 | 本地为主 | 云功能未实现 |
|
|||
|
|
| 智能分类器 | 简单分类工具 | AI 调用复杂 |
|
|||
|
|
| 完整应用 | 轻量工具 | 依赖过多 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 重新定义的需求
|
|||
|
|
|
|||
|
|
### 核心定位
|
|||
|
|
|
|||
|
|
**CutThenThink** 是一个**轻量级个人截图管理工具**,专注于:
|
|||
|
|
1. 快速截图
|
|||
|
|
2. 文字识别
|
|||
|
|
3. 智能分类
|
|||
|
|
4. 本地存储为主,可选云端同步
|
|||
|
|
|
|||
|
|
### 最小可行产品(MVP)功能
|
|||
|
|
|
|||
|
|
#### Phase 1: 核心功能(必须)
|
|||
|
|
|
|||
|
|
1. **截图功能**
|
|||
|
|
- 全局快捷键截图
|
|||
|
|
- 区域选择截图
|
|||
|
|
- 剪贴板图片检测
|
|||
|
|
|
|||
|
|
2. **OCR 识别**
|
|||
|
|
- 本地 OCR 引擎(PaddleOCR 轻量版)
|
|||
|
|
- 云端 OCR API 作为可选增强
|
|||
|
|
|
|||
|
|
3. **AI 分类**
|
|||
|
|
- 简单规则分类(基于关键词)
|
|||
|
|
- AI API 分类作为可选功能
|
|||
|
|
|
|||
|
|
4. **本地存储**
|
|||
|
|
- SQLite 本地数据库
|
|||
|
|
- 图片文件存储
|
|||
|
|
- 基础 CRUD 操作
|
|||
|
|
|
|||
|
|
5. **简单 GUI**
|
|||
|
|
- 主窗口
|
|||
|
|
- 截图预览
|
|||
|
|
- 历史记录浏览
|
|||
|
|
|
|||
|
|
#### Phase 2: 增强功能(可选)
|
|||
|
|
|
|||
|
|
1. **云端同步**
|
|||
|
|
- 简单的 WebDAV 同步
|
|||
|
|
- 或单个云服务商集成
|
|||
|
|
|
|||
|
|
2. **高级 AI**
|
|||
|
|
- OpenAI/Claude API 集成
|
|||
|
|
- 本地 Ollama 支持
|
|||
|
|
|
|||
|
|
3. **批量操作**
|
|||
|
|
- 批量导入图片
|
|||
|
|
- 批量导出
|
|||
|
|
|
|||
|
|
#### Phase 3: 优化功能(未来)
|
|||
|
|
|
|||
|
|
1. 图片标注/编辑
|
|||
|
|
2. 高级搜索
|
|||
|
|
3. 统计报表
|
|||
|
|
4. 多设备同步
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 技术栈简化建议
|
|||
|
|
|
|||
|
|
### 当前技术栈问题
|
|||
|
|
|
|||
|
|
| 组件 | 当前 | 问题 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| GUI | PyQt6 | 功能过多,配置复杂 |
|
|||
|
|
| 数据库 | SQLAlchemy | 过度工程 |
|
|||
|
|
| OCR | 云端 API | 无法使用 |
|
|||
|
|
| AI | 多个 API | 配置复杂 |
|
|||
|
|
|
|||
|
|
### 建议的技术栈
|
|||
|
|
|
|||
|
|
| 组件 | 建议 | 理由 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| GUI | PyQt6 (简化) | 保持不变,但简化功能 |
|
|||
|
|
| 数据库 | SQLite 原生 | 去掉 ORM,简化代码 |
|
|||
|
|
| OCR | PaddleOCR 轻量版 | 本地运行,不依赖网络 |
|
|||
|
|
| AI | 规则 + 可选 API | 基础功能离线可用 |
|
|||
|
|
| 存储 | 文件系统 | 简单直接 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 代码重构建议
|
|||
|
|
|
|||
|
|
### 1. 简化配置系统
|
|||
|
|
|
|||
|
|
**当前**:5 大类配置(AI/OCR/云端/界面/高级)
|
|||
|
|
|
|||
|
|
**建议**:
|
|||
|
|
```yaml
|
|||
|
|
# 简化配置文件 config.yaml
|
|||
|
|
ocr:
|
|||
|
|
engine: local # local 或 cloud
|
|||
|
|
|
|||
|
|
ai:
|
|||
|
|
enabled: false # 默认关闭
|
|||
|
|
provider: "" # 可选配置
|
|||
|
|
|
|||
|
|
storage:
|
|||
|
|
type: local # local 或 webdav
|
|||
|
|
|
|||
|
|
hotkeys:
|
|||
|
|
screenshot: Ctrl+Shift+A
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 实现本地 OCR
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 简化的 OCR 模块
|
|||
|
|
from paddleocr import PaddleOCR
|
|||
|
|
|
|||
|
|
class LocalOCR:
|
|||
|
|
def __init__(self):
|
|||
|
|
self.ocr = PaddleOCR(use_angle_cls=True, lang='ch')
|
|||
|
|
|
|||
|
|
def recognize(self, image_path):
|
|||
|
|
result = self.ocr.ocr(image_path, cls=True)
|
|||
|
|
return self._parse_result(result)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 简化数据模型
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 简化的数据库模型
|
|||
|
|
import sqlite3
|
|||
|
|
|
|||
|
|
class RecordDB:
|
|||
|
|
def __init__(self, path):
|
|||
|
|
self.conn = sqlite3.connect(path)
|
|||
|
|
self._init_table()
|
|||
|
|
|
|||
|
|
def add(self, image_path, ocr_text, category):
|
|||
|
|
# 简单的插入操作
|
|||
|
|
pass
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 规则优先的 AI 分类
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 简单规则分类
|
|||
|
|
class RuleClassifier:
|
|||
|
|
RULES = {
|
|||
|
|
'TODO': ['待办', '任务', '完成', 'TODO'],
|
|||
|
|
'NOTE': ['笔记', '记录', '会议'],
|
|||
|
|
# ...
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
def classify(self, text):
|
|||
|
|
for category, keywords in self.RULES.items():
|
|||
|
|
if any(kw in text for kw in keywords):
|
|||
|
|
return category
|
|||
|
|
return 'TEXT'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 开发优先级
|
|||
|
|
|
|||
|
|
### P0 (立即修复)
|
|||
|
|
|
|||
|
|
1. **实现本地 OCR** - 这是核心功能,必须可用
|
|||
|
|
2. **简化配置系统** - 降低使用门槛
|
|||
|
|
3. **基础 GUI 完善** - 确保核心流程可用
|
|||
|
|
|
|||
|
|
### P1 (短期完成)
|
|||
|
|
|
|||
|
|
1. 实现规则分类系统
|
|||
|
|
2. 完善本地存储功能
|
|||
|
|
3. 添加批量操作支持
|
|||
|
|
|
|||
|
|
### P2 (长期优化)
|
|||
|
|
|
|||
|
|
1. 云端同步功能
|
|||
|
|
2. AI API 集成
|
|||
|
|
3. 高级编辑功能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 总结
|
|||
|
|
|
|||
|
|
### 核心问题
|
|||
|
|
|
|||
|
|
CutThenThink 项目的主要问题在于**过度设计**:
|
|||
|
|
- 功能过多但实现不足
|
|||
|
|
- 架构复杂但缺少核心
|
|||
|
|
- 配置繁重但难以使用
|
|||
|
|
|
|||
|
|
### 解决方向
|
|||
|
|
|
|||
|
|
1. **回归本质**:轻量级截图工具
|
|||
|
|
2. **核心优先**:OCR + 分类 + 存储
|
|||
|
|
3. **本地为主**:确保离线可用
|
|||
|
|
4. **渐进增强**:从简单到复杂
|
|||
|
|
|
|||
|
|
### 下一步行动
|
|||
|
|
|
|||
|
|
1. 确认 MVP 功能范围
|
|||
|
|
2. 实现 PaddleOCR 本地集成
|
|||
|
|
3. 简化配置系统
|
|||
|
|
4. 完善基础 GUI 流程
|
|||
|
|
5. 测试端到端功能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*报告生成时间:2025年*
|
|||
|
|
*项目路径:CutThenThink*
|