feat: 实现CutThenThink P0阶段核心功能

项目初始化
- 创建完整项目结构(src/, data/, docs/, examples/, tests/)
- 配置requirements.txt依赖
- 创建.gitignore

P0基础框架
- 数据库模型:Record模型,6种分类类型
- 配置管理:YAML配置,支持AI/OCR/云存储/UI配置
- OCR模块:PaddleOCR本地识别,支持云端扩展
- AI模块:支持OpenAI/Claude/通义/Ollama,6种分类
- 存储模块:完整CRUD,搜索,统计,导入导出
- 主窗口框架:侧边栏导航,米白配色方案
- 图片处理:截图/剪贴板/文件选择/图片预览
- 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制
- 分类浏览:卡片网格展示,分类筛选,搜索,详情查看

技术栈
- PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK
- 共47个Python文件,4000+行代码

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
congsh
2026-02-11 18:21:31 +08:00
commit c4a77f8aa4
79 changed files with 19412 additions and 0 deletions

171
docs/design.md Normal file
View File

@@ -0,0 +1,171 @@
# CutThenThink 设计文档
## 项目概述
一个多用户的截图管理工具,核心流程:**截图 → OCR解析 → AI理解分类 → 生成备注和执行计划**
## 技术架构
```
┌────────────────────────────────────────────────────────────────┐
│ PyQt6 桌面应用(纯客户端) │
├────────────────────────────────────────────────────────────────┤
│ • 截图/上传 • 分类浏览 • Markdown预览+复制 • 设置面板 │
│ • 内置轻量OCR本地
│ • SQLite 本地存储 │
└────────────────────────────────────────────────────────────────┘
↓ API 调用
┌────────────────────────────────────────────────────────────────┐
│ 外部服务(云端/自建,可配置) │
├────────────────────────────────────────────────────────────────┤
│ • OCR服务百度/腾讯/自定义API │
│ • AI服务OpenAI/Claude/通义/本地模型 │
│ • 云存储OSS/S3/WebDAV可选
└────────────────────────────────────────────────────────────────┘
```
## 核心功能模块
### 1. 截图与输入模块
| 功能 | 说明 |
|------|------|
| 全局快捷键截图 | 用户自定义快捷键,触发系统区域截图 |
| 剪贴板监听 | 自动检测剪贴板中的图片,提示用户是否处理 |
| 图片上传 | 支持拖拽或浏览选择本地图片文件PNG、JPG、JPEG、WEBP |
| 批量上传 | 一次选择多张图片,排队处理 |
### 2. OCR 处理模块
| 方案 | 说明 |
|------|------|
| 内置轻量OCR | PaddleOCR轻量版本地运行无需联网 |
| 云端OCR API | 支持配置百度OCR、腾讯OCR、或自建OCR服务 |
| 自动降级 | 优先使用云端OCR失败时自动降级到本地OCR |
### 3. AI 分析与分类模块
**分类类型**
- 待办事项
- 信息/笔记
- 灵感/想法
- 参考资料
- 搞笑文案
- 纯文本
**支持的AI提供商**
- 国际OpenAI (GPT-4)、Anthropic (Claude)
- 国内通义千问、文心一言、智谱、DeepSeek
- 本地Ollama、LM Studio兼容OpenAI API
**输出格式**Markdown支持复制粘贴到其他工具
### 4. 数据存储模块
- **本地存储**SQLite 单文件数据库
- **可选云同步**WebDAV / 阿里云OSS / AWS S3
- **数据导出**:导出全部/按分类导出为Markdown
## UI 设计
### 配色方案
```
背景色: #faf8f5 (米白)
卡片色: #ffffff (纯白)
强调色: #ff6b6b (珊瑚红)
边框色: #e9ecef (浅灰)
```
### 分类颜色
| 分类 | 颜色 |
|------|------|
| 待办事项 | #ff6b6b (红) |
| 笔记 | #4dabf7 (蓝) |
| 灵感 | #ffd43b (黄) |
| 参考资料 | #51cf66 (绿) |
| 搞笑文案 | #ff922b (橙) |
| 纯文本 | #adb5bd (灰) |
### 主界面布局
```
┌──────────┬─────────────────────────────────────────┐
│ 侧边栏 │ 主内容区 │
│ │ ┌─────────────────────────────────┐ │
│ Logo │ │ 卡片网格展示 │ │
│ ─────── │ │ (图片预览+分类标签+内容摘要) │ │
│ 全部 │ └─────────────────────────────────┘ │
│ 待办 │ │
│ 笔记 │ [📷 截图] [ 新建] │
│ 灵感 │ │
│ 参考资料 │ │
│ 搞笑文案 │ │
│ ─────── │ │
│ 批量上传 │ │
│ 设置 │ │
└──────────┴─────────────────────────────────────────┘
```
### 批量上传页面
```
┌─────────────────────────────────────────────────────────┐
│ 批量上传 [清空] [开始处理] │
├────────────────┬────────────────────────────────────┤
│ │ 📷 拖放区 │
│ 图片列表 │ 点击选择或拖放图片到这里 │
│ │ 支持 PNG, JPG, WEBP │
│ □ [缩略图] │ │
│ 文件名 │ │
│ 2.3 MB │ │
│ [移除] │ │
└────────────────┴────────────────────────────────────┘
```
### 详情弹窗
```
┌────────────────────────────────────────┐
│ 详情 [✕] │
├────────────────────────────────────────┤
│ ┌──────────────────────────────┐ │
│ │ 原图预览 │ │
│ └──────────────────────────────┘ │
│ ┌──────────────────────────────┐ │
│ │ Markdown 结果 │ │
│ │ ## 待办事项 │ │
│ │ - [ ] 完成界面设计 │ │
│ │ - [ ] 编写 API 文档 │ │
│ └──────────────────────────────┘ │
│ │
│ [关闭] [📋 复制 Markdown] │
└────────────────────────────────────────┘
```
## 数据模型
### records 表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | INTEGER | 主键 |
| image_path | TEXT | 图片存储路径 |
| ocr_text | TEXT | OCR识别结果 |
| category | TEXT | 分类类型 |
| ai_result | TEXT | AI生成的Markdown |
| tags | TEXT | 标签JSON数组 |
| notes | TEXT | 用户备注 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
## 技术栈
- **GUI框架**: PyQt6
- **OCR**: PaddleOCR本地+ API接口云端
- **数据库**: SQLite (sqlalchemy)
- **AI调用**: OpenAI SDK / requests
- **配置管理**: YAML/JSON
- **打包**: PyInstaller
## 开发优先级
1. **P0**: 基础框架 + 本地OCR + 简单AI分类
2. **P1**: 批量上传 + 完整分类 + 云端OCR支持
3. **P2**: 云存储同步 + 高级配置
4. **P3**: 多用户隔离 + 导入导出