Files
cutThink_lite/docs/design-v3-complete.md

551 lines
19 KiB
Markdown
Raw Normal View History

# CutThenThink v3.0 - 完整设计文档
**项目代号**: cutThink_lite
**技术栈**: Tauri (Rust) + Vanilla JS Web 前端
**设计日期**: 2025-02-12
**目标版本**: v3.0.0
---
## 1. 项目概述
### 1.1 设计目标
| 指标 | Python 版本 | v3.0 目标 |
|------|------------|-----------|
| 打包体积 | ~214MB | 5-10MB核心 |
| 启动速度 | 较慢 | < 500ms |
| 内存占用 | ~100MB+ | < 50MB |
| 依赖环境 | Python 运行时 | 无需运行时 |
| 更新机制 | 重新打包 | 支持热更新 |
### 1.2 核心功能
- ✅ 全屏/区域截图
- ✅ 多图床上传
- ✅ OCR 文字识别(云端默认,本地插件可选)
- ✅ AI 智能分类Prompt 驱动)
- ✅ 历史记录管理
- ✅ 分类标签系统
### 1.3 技术选型
| 层级 | 技术选择 | 理由 |
|------|----------|------|
| 后端 | Rust + Tauri 2.x | 原生性能、内存安全、打包体积小 |
| 前端 | Vanilla HTML/CSS/JS | 零框架依赖,极致轻量 |
| 构建 | Vite | 快速开发构建,支持 HMR |
| 数据库 | SQLite (rusqlite) | 轻量嵌入式,单文件存储 |
| 截图 | Tauri 插件 + 系统API | 跨平台兼容,平台原生能力 |
| OCR | 云端 API + 离线插件 | 按需下载,保持核心轻量 |
| AI | Claude/OpenAI API | Prompt 驱动的智能分类 |
---
## 2. 系统架构
```
┌─────────────────────────────────────────────────────────────────┐
│ CutThenThink v3.0 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Web Frontend (Vanilla JS) │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │Screenshot│ │ Gallery │ │ Upload │ │Settings │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ State Management (Store) │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ↕ IPC │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Rust Core (Tauri) │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │Screenshot│ │ Upload │ │ Database│ │Prompt │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ OCR Mgr │ │ AI Svc │ │Plugin │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ↕ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Plugin / External Layer │ │
│ │ ┌──────────────────┐ ┌─────────────────────────┐ │ │
│ │ │ OCR Plugin │ │ Cloud Services │ │ │
│ │ │ (Optional) │ │ OCR/AI/Storage APIs │ │ │
│ │ └──────────────────┘ └─────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ↕ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ System Integration (Tauri Plugins) │ │
│ │ Screenshot │ Clipboard │ Hotkeys │ Notify │ File │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 3. 目录结构
```
cutThink_lite/
├── src-tauri/ # Rust 后端
│ ├── src/
│ │ ├── main.rs # 入口
│ │ ├── commands.rs # Tauri 命令
│ │ ├── screenshot.rs # 截图模块
│ │ ├── upload.rs # 上传模块
│ │ ├── ocr/
│ │ │ ├── mod.rs # OCR 管理器
│ │ │ ├── cloud.rs # 云端 OCR
│ │ │ └── plugin.rs # 插件 OCR
│ │ ├── ai/
│ │ │ ├── mod.rs # AI 服务
│ │ │ └── prompt.rs # Prompt 模板
│ │ ├── plugin/
│ │ │ ├── mod.rs # 插件管理器
│ │ │ └── downloader.rs # 插件下载
│ │ ├── database.rs # SQLite 数据库
│ │ ├── config.rs # 配置管理
│ │ └── error.rs # 错误定义
│ ├── Cargo.toml
│ └── tauri.conf.json
├── src-ui/ # Web 前端
│ ├── index.html
│ ├── main.js
│ ├── style.css
│ ├── vite.config.js
│ ├── package.json
│ │
│ ├── src/
│ │ ├── api/ # API 封装
│ │ │ ├── commands.js
│ │ │ ├── screenshot.js
│ │ │ ├── upload.js
│ │ │ ├── ocr.js
│ │ │ ├── ai.js
│ │ │ └── database.js
│ │ │
│ │ ├── store/ # 状态管理
│ │ │ ├── index.js
│ │ │ └── modules/
│ │ │ ├── records.js
│ │ │ ├── settings.js
│ │ │ └── ui.js
│ │ │
│ │ ├── components/ # UI 组件
│ │ │ ├── views/ # 视图组件
│ │ │ │ ├── screenshot/
│ │ │ │ ├── gallery/
│ │ │ │ ├── upload/
│ │ │ │ └── settings/
│ │ │ └── shared/ # 共享组件
│ │ │
│ │ └── utils/ # 工具函数
│ │
│ └── assets/ # 静态资源
├── src-ocr-plugin/ # OCR 插件 (Go)
│ ├── main.go
│ ├── ocr.go
│ └── models/ # OCR 模型
├── docs/
│ └── design-v3-complete.md # 本文档
├── preview-ui.html # UI 预览
└── lightweight-redesign.md # 原始设计文档
```
---
## 4. 核心模块设计
### 4.1 OCR ManagerOCR 管理模块)
**职责**:统一管理本地插件 OCR 和云端 API OCR
| 功能 | 说明 |
|------|------|
| `is_local_plugin_installed()` | 检测本地插件是否已安装 |
| `download_plugin()` | 下载并安装本地 OCR 插件 |
| `recognize()` | 执行 OCR自动选择最优方案 |
| `get_available_providers()` | 获取可用的 OCR 提供商列表 |
**用户流程**
1. 用户首次点击 OCR → 检测本地插件未安装
2. 弹窗提示下载离线插件(约 15MB
3. 用户选择下载/跳过
4. 下载完成后自动执行 OCR
### 4.2 AI ServiceAI 分类服务)
**职责**:基于 Prompt 模板驱动 AI 对截图内容进行智能分类
| 功能 | 说明 |
|------|------|
| `get_builtin_templates()` | 获取内置 Prompt 模板 |
| `render_template()` | 渲染模板(替换变量) |
| `classify()` | 执行 AI 分类 |
| `create_custom_template()` | 创建用户自定义模板 |
**内置变量**
- `{{ocr_text}}` - OCR 识别的文字内容
- `{{image_path}}` - 图片文件路径
- `{{datetime}}` - 当前时间
- `{{filename}}` - 文件名
- `{{file_size}}` - 文件大小
- `{{dimensions}}` - 图片尺寸
**内置模板**
- `general` - 通用分类
- `code` - 代码分析
- `invoice` - 发票识别
- `conversation` - 对话分析
### 4.3 Plugin Manager插件管理器
**职责**:管理 OCR 插件的下载、安装、更新、卸载
| 功能 | 说明 |
|------|------|
| `fetch_plugin_list()` | 从远程获取插件列表 |
| `download_plugin()` | 下载插件(校验 SHA256 |
| `call_plugin()` | 与插件通信IPC/HTTP |
| `check_update()` | 检查插件更新 |
### 4.4 Database Schema
```sql
-- 截图记录表
CREATE TABLE records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT NOT NULL,
filepath TEXT NOT NULL,
thumbnail_path TEXT,
upload_url TEXT,
category TEXT,
tags TEXT, -- JSON 数组
ocr_text TEXT,
ocr_provider TEXT,
ai_summary TEXT,
ai_confidence REAL,
created_at TEXT NOT NULL,
uploaded_at TEXT,
file_size INTEGER,
width INTEGER,
height INTEGER
);
-- Prompt 模板表
CREATE TABLE prompt_templates (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
description TEXT,
template_content TEXT NOT NULL,
variables TEXT, -- JSON 数组
is_builtin INTEGER DEFAULT 0,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
-- 已安装插件表
CREATE TABLE plugins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
version TEXT NOT NULL,
install_path TEXT,
enabled INTEGER DEFAULT 1,
installed_at TEXT NOT NULL
);
-- 应用设置表
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
);
-- 索引
CREATE INDEX idx_records_category ON records(category);
CREATE INDEX idx_records_created_at ON records(created_at DESC);
```
---
## 5. 用户界面设计
UI 预览文件:[preview-ui.html](../preview-ui.html)
### 5.1 主要视图
| 视图 | 功能 |
|------|------|
| 截图面板 | 全屏/区域截图、预览、操作按钮、AI 结果展示 |
| 图库 | 记录网格展示、分类筛选、搜索 |
| 上传配置 | 图床选择、API 配置 |
| 设置 | OCR/AI/Prompt/插件等配置 |
### 5.2 快捷键
| 快捷键 | 功能 |
|--------|------|
| `Ctrl+Shift+A` | 截全屏 |
| `Ctrl+Shift+R` | 区域截图 |
| `Ctrl+Shift+O` | OCR 识别 |
| `Ctrl+Shift+U` | 上传 |
| `Ctrl+Shift+S` | 保存 |
---
## 6. 数据流设计
### 6.1 截图 → AI 分类 完整流程
```
用户触发截图
┌─────────────────┐
│ Tauri 后端 │
│ 调用系统 API │
└────────┬────────┘
返回图片路径
┌─────────┐
│显示预览 │
└────┬────┘
用户点击 "AI分类"
┌─────────────────┐
│ 需要识别文字? │
└────┬────────┬───┘
是 │ │ 否
▼ ▼
┌──────┐ 直接
│ OCR │ 分类
└──┬───┘
┌─────────┐
│检查插件 │
└────┬────┘
┌────────────────┐
│本地插件已安装?│
└──┬────────┬───┘
是 │ │ 否
▼ ▼
调用本地 提示下载
OCR 插件 │
│ ▼
│ 用户选择
│ ┌─┴─┐
│ │是 │否
│ ▼ ▼
│ 下载 云端
│ 插件 OCR
│ │ │
└────┴───┘
返回 OCR 文字
┌─────────────────┐
│ 渲染 Prompt 模板 │
└────────┬────────┘
┌─────────────────┐
│ 调用 AI API │
└────────┬────────┘
返回分类结果
┌─────────────────┐
│ 保存到数据库 │
└────────┬────────┘
更新 UI 显示
```
---
## 7. 安全与配置
### 7.1 安全设计
| 安全领域 | 设计要点 |
|---------|---------|
| API 密钥存储 | 系统密钥链Credential Manager/Keychain |
| 敏感数据 | 加密存储,不写入配置文件明文 |
| 插件签名 | 验证 SHA256 校验和 |
| 网络通信 | HTTPS only |
| 权限控制 | Tauri 权限白名单 |
### 7.2 配置目录
```
~/.config/CutThenThink/
├── config.json # 用户配置
├── secrets/ # 加密敏感信息
├── database/
│ └── cutthenthink.db
├── plugins/ # 插件目录
├── screenshots/ # 截图存储
└── logs/ # 日志
```
### 7.3 核心配置项
| 配置项 | 默认值 | 说明 |
|-------|--------|------|
| `ocr.provider` | `cloud` | `cloud``local` |
| `ocr.auto_detect` | `true` | 自动检测是否需要 OCR |
| `ai.provider` | `claude` | AI 服务提供商 |
| `ai.auto_classify` | `true` | 截图后自动分类 |
| `upload.auto_upload` | `false` | 截图后自动上传 |
| `ui.theme` | `light` | 主题选择 |
---
## 8. 错误处理
| 错误码 | 说明 | 用户提示 |
|-------|------|---------|
| `SCREENSHOT_FAILED` | 截图失败 | 截图失败,请重试 |
| `OCR_PLUGIN_NOT_INSTALLED` | OCR 插件未安装 | 本地 OCR 插件未安装,请下载或使用云端 OCR |
| `OCR_RECOGNIZE_FAILED` | OCR 识别失败 | OCR 识别失败 |
| `AI_CLASSIFY_FAILED` | AI 分类失败 | AI 分类失败 |
| `NETWORK_ERROR` | 网络错误 | 网络连接失败,请检查网络 |
| `DATABASE_ERROR` | 数据库错误 | 数据库操作失败 |
---
## 9. 非功能需求
### 9.1 性能指标
| 指标 | 目标值 |
|------|--------|
| 冷启动时间 | < 500ms |
| 截图响应 | < 100ms |
| OCR 识别(云端) | < 3s |
| AI 分类 | < 5s |
| 内存占用 | < 50MB空闲 |
| 包体积 | < 10MB不含插件 |
### 9.2 平台兼容性
| 平台 | 最低版本 |
|------|---------|
| Windows | Windows 10 1809+ |
| Linux | glibc 2.17+ |
| macOS | macOS 10.15+ |
---
## 10. 发布计划
### 10.1 版本规划
| 版本 | 功能范围 | 预估体积 |
|------|---------|---------|
| v3.0.0 MVP | 截图、上传、基础 OCR云端 | 5-10MB |
| v3.1.0 | AI 分类、Prompt 模板、历史记录 | 5-10MB |
| v3.2.0 | 本地 OCR 插件支持 | 5-10MB + 插件 |
| v3.3.0 | 高级筛选、批量操作、导出 | 5-10MB |
| v3.4.0 | 云同步、多设备同步 | 5-10MB |
### 10.2 打包输出
| 平台 | 输出格式 |
|------|---------|
| Windows | NSIS 安装包 / MSI |
| Linux | AppImage / deb / rpm |
| macOS | DMG / PKG |
---
## 11. 开发里程碑
```
Phase 1: 项目搭建 ──────────────────────────── 1 周
├── Tauri 项目初始化
├── 前端项目搭建
├── 基础 UI 框架
└── 构建配置
Phase 2: 核心截图功能 ──────────────────────── 2 周
├── 全屏/区域截图
├── 预览和基础操作
├── 文件管理
└── 快捷键集成
Phase 3: 上传与存储 ────────────────────────── 1 周
├── 多图床上传支持
├── 配置管理
└── 数据库基础功能
Phase 4: OCR 集成 ────────────────────────── 2 周
├── 云端 OCR API 集成
├── 插件管理器
├── 本地 OCR 插件Go
└── OCR 结果处理
Phase 5: AI 分类系统 ──────────────────────── 2 周
├── AI API 集成
├── Prompt 模板引擎
├── 模板管理界面
└── 自动分类流程
Phase 6: 历史记录与管理 ──────────────────── 1 周
├── 图库视图
├── 搜索与筛选
├── 批量操作
└── 导出功能
Phase 7: 打包与发布 ──────────────────────── 1 周
├── 多平台构建配置
├── 图标与资源
├── 安装包制作
└── 测试与修复
总计: 10 周
```
---
## 12. 附录
### 12.1 参考资料
- [Tauri 官方文档](https://tauri.app/)
- [Tauri Examples](https://github.com/tauri-apps/tauri/tree/dev/examples)
- [Rusqlite](https://github.com/rusqlite/rusqlite)
- [RapidOCR](https://github.com/RapidAI/RapidOCR)
### 12.2 UI 预览
打开 [preview-ui.html](../preview-ui.html) 查看完整的 UI 设计效果。
---
**文档版本**: v1.0
**最后更新**: 2025-02-12
**状态**: 设计完成,待实施