Article

蕉不焦技术设计文档

2026年7月11日 · 12 分钟阅读 · ixNieStudio

技术真源:数据模型、闪念沉淀与调度排程状态机、API、多端同步。对齐 MVP 与 Eisenhower 内部化原则。

11 · 技术设计文档

文档库编号 11 · 地图 README.md
目标:数据模型、沉淀与调度排程、API、多端同步。
产品:01-overview.md / 08-prd.md
前端边界:09-frontend-architecture.md
原则:MVP 优先;调度级排程,非日历套件;Eisenhower 仅内部字段。


1. 技术选型

1.1 前端

平台技术说明
桌面Tauri + ReactTauri 比 Electron 包体更小,启动更快,适合轻量悬浮胶囊
移动端微信小程序 + 微信小程序后台服务(如腾讯云)微信生态是核心入口,小程序最轻
浏览器Web Extension (Manifest V3)Chrome/Edge/Firefox 扩展,支持页面捕获
后台管理React + Web轻量 Web 管理台

1.2 后端

组件技术说明
API 服务Go/Gin 或 Node.js/Fastify高性能、少依赖
数据库PostgreSQL(主库)+ Redis(缓存)ACID + 事务保障状态一致性
搜索PostgreSQL Full-text Search碎片和线程全文检索
任务队列Redis Streams 或 Sidekiq异步处理沉淀引擎
通知Firebase Cloud Messaging (FCM) + 微信服务号模板消息移动端和微信通知
文件存储七牛云 / 阿里云 OSS图片、语音等原始碎片
LLMOpenAI API / 讯飞星火 / 智谱 GLM沉淀引擎的语义理解层

1.3 基础设施

组件技术说明
容器化Docker + Kubernetes(生产)容器化部署,便于扩展
CI/CDGitHub Actions自动构建、测试、部署
监控Prometheus + Grafana服务端性能和业务指标监控
日志ELK (Elasticsearch + Logstash + Kibana)集中式日志收集和分析
反向代理Nginx负载均衡、SSL 终止

2. 数据模型

2.1 ER 图(概念)

User (用户)
├── Thread (线程) [1:N]
├── Fragment (碎片) [1:N]
├── Preference (偏好) [1:N]
└── Notification (通知) [1:N]
Thread (线程)
├── Fragment (碎片) [1:N]
└── TodoItem (任务项) [1:N]
Fragment (碎片)
├── Attachment (附件) [1:N]
└── StateHistory (状态历史) [1:N]
TodoItem (任务项)
├── StateHistory (状态历史) [1:N]
└── Notification (通知) [1:N]

2.2 核心表结构

2.2.1 用户表 (users)

字段类型说明约束
idUUID用户唯一标识PK
wechat_openidVARCHAR(64)微信 OpenIDUNIQUE
emailVARCHAR(255)邮箱UNIQUE, NULLABLE
nicknameVARCHAR(100)昵称
avatar_urlVARCHAR(500)头像 URL
plan_typeENUM免费/个人/创作者/学生默认’免费’
daily_fragment_limitINT每日碎片上限默认50
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间
deleted_atTIMESTAMP软删除NULLABLE

2.2.2 线程表 (threads)

字段类型说明约束
idUUID线程唯一标识PK
user_idUUID所属用户FK -> users.id
titleVARCHAR(200)线程标题(自动生成或用户命名)
summaryTEXT线程摘要(AI 生成)
statusENUMactive/archived默认’active’
priorityINT优先程度 1-5默认3
thread_preferencesJSONB线程级偏好(客户语气、项目风格等)
last_fragment_atTIMESTAMP最新碎片时间
created_atTIMESTAMP创建时间
archived_atTIMESTAMP归档时间NULLABLE

2.2.3 碎片表 (fragments)

字段类型说明约束
idUUID碎片唯一标识PK
user_idUUID所属用户FK -> users.id
thread_idUUID所属线程FK -> threads.id, NULLABLE
sourceENUMdesktop/mobile/browser/wechat/siri
source_detailVARCHAR(500)来源详情(如微信聊天对象、浏览器URL)
content_typeENUMtext/voice/image/link/screenshot
content_rawTEXT原始内容
content_processedTEXT处理后内容(如语音转文字、OCR结果)
content_embeddingVECTOR(384)语义向量
stateENUMraw/next_step/waiting/merged/snoozed/frozen/pending/archived/done
confidenceFLOAT智能体判断置信度 0-1不对用户展示分数 UI
intentVARCHAR(32)意图:task/material/idea/waiting/noise
urgencySMALLINT内部 0–3 紧急启发不暴露四象限 UI
importanceSMALLINT内部 0–3 重要启发不暴露四象限 UI
heuristic_quadrantVARCHAR(16)可选:do/schedule/delegate/eliminate仅日志/调试
ai_analysisJSONB意图、情绪、reason 文案等
urgency_flagsJSONB硬截止、承诺、敏感标记
reasonTEXT用户可见一句解释
reviewed_atTIMESTAMP用户审阅时间NULLABLE
expires_atTIMESTAMP稍后/冷冻的到期时间NULLABLE
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

2.2.4 任务项表 (todo_items)

字段类型说明约束
idUUID任务唯一标识PK
user_idUUID所属用户FK -> users.id
thread_idUUID所属线程FK -> threads.id
fragment_idUUID来源碎片FK -> fragments.id
titleVARCHAR(200)任务标题(AI生成)
actionVARCHAR(500)端点化下一步动作描述
estimated_durationINT预估耗时(分钟)默认15
due_atTIMESTAMP截止/再出现时间NULLABLE
statusENUMpending/active/completed/snoozed
endpointENUMdesktop/mobile/browser/wechat
attempt_countINT递回次数默认0
last_notified_atTIMESTAMP最新通知时间NULLABLE
completed_atTIMESTAMP完成时间NULLABLE
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

2.2.4b 递交调度表 (delivery_jobs)

调度级智能排程实体:不是日历事件表。

字段类型说明约束
idUUID调度任务 IDPK
user_idUUID用户FK
todo_item_idUUID关联下一步FK
scheduled_atTIMESTAMP计划递交时间
endpointENUMdesktop/mobile/notification
priority_scoreFLOAT内部排序分(含 urgency×importance、偏好)不对用户展示
wip_slotBOOLEAN是否占用当前唯一 WIP 位同时 true ≤1 / 用户
suppress_untilTIMESTAMP今天别推等抑制截止NULLABLE
statusENUMqueued/delivered/cancelled/suppressed
cancel_reasonTEXT用户纠偏/过期等NULLABLE
created_atTIMESTAMP
updated_atTIMESTAMP

约束:同一 user_id 在 status=delivered 且未完成的主动下一步,业务层强制 WIP=1(硬截止可例外并写 reason)。

2.2.5 通知表 (notifications)

字段类型说明约束
idUUID通知唯一标识PK
user_idUUID所属用户FK -> users.id
todo_item_idUUID关联任务FK -> todo_items.id, NULLABLE
typeENUMnext_step/reminder/daily_digest/confirm
titleVARCHAR(200)通知标题
bodyTEXT通知内容
action_payloadJSONB可执行动作(点击通知后的行为)
send_atTIMESTAMP计划发送时间
sent_atTIMESTAMP实际发送时间NULLABLE
read_atTIMESTAMP用户阅读时间NULLABLE
action_takenENUMdismissed/completed/snoozed/ignoredNULLABLE
created_atTIMESTAMP创建时间

2.2.6 偏好表 (preferences)

字段类型说明约束
idUUID偏好唯一标识PK
user_idUUID所属用户FK -> users.id
scopeENUMglobal/user/thread
thread_idUUID线程级偏好时FK -> threads.id, NULLABLE
keyVARCHAR(100)偏好键
valueJSONB偏好值(对象)
effective_fromTIMESTAMP生效时间
effective_toTIMESTAMP失效时间NULLABLE
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间

2.2.7 状态历史表 (state_histories)

字段类型说明约束
idUUID历史记录唯一标识PK
fragment_idUUID关联碎片FK -> fragments.id
todo_item_idUUID关联任务FK -> todo_items.id, NULLABLE
from_stateENUM原状态
to_stateENUM新状态
triggerENUMauto/user/system
reasonTEXT状态变更原因(AI生成)
metadataJSONB额外信息(如参与的 AI 模型、规则命中情况)
created_atTIMESTAMP创建时间

3. API 设计

3.1 认证

端点方法说明
POST /auth/wechat微信登录小程序/服务号获取 OpenID,返回 JWT
POST /auth/refresh刷新 Token延长 JWT 有效期
DELETE /auth/logout退出登录清除 Token

3.2 碎片捕获

端点方法说明请求体响应
POST /fragmentsPOST创建碎片{content, source, source_detail, type}碎片对象 + 智能体判断结果
GET /fragmentsGET查询碎片列表?status=&thread_id=碎片列表
GET /fragments/{id}GET碎片详情-碎片对象 + 状态历史
PUT /fragments/{id}PUT用户纠偏{action, new_state, feedback}更新后碎片
DELETE /fragments/{id}DELETE删除碎片-软删除

3.3 线程管理

端点方法说明请求体响应
GET /threadsGET线程列表?status=active&page=线程列表
GET /threads/{id}GET线程详情-线程 + 碎片 + 任务
PUT /threads/{id}PUT更新线程{title, summary, status}更新后线程
GET /threads/{id}/fragmentsGET线程下碎片?status=碎片列表

3.4 任务递回

端点方法说明请求体响应
GET /todos/activeGET当前激活任务-最多1个下一步任务
GET /todosGET任务列表?status=&thread_id=任务列表
PUT /todos/{id}/completePUT完成任务-更新后任务
PUT /todos/{id}/snoozePUT稍后提醒{duration: '1d'}更新后任务
PUT /todos/{id}/breakdownPUT拆小任务-新任务(更小粒度)
GET /todos/dailyGET今日候选摘要(非日历)-统计 + 当前一步;非 time-block 网格

3.4b 调度

端点方法说明请求体响应
GET /delivery/activeGET当前 WIP 递交-0–1 条
POST /delivery/recomputePOST纠偏后重算调度{todo_id, action}新 job
PUT /delivery/suppressPUT今天别推等{scope, until}ok

禁止 MVP API:完整日历 CRUD、拖拽 time-block、四象限列表接口作为用户主路径。

3.5 复盘

端点方法说明响应
GET /daily/digestGET晚间复盘数据今日统计:接住/归并/冷冻/明天第一步
GET /weekly/reportGET周报本周趋势、减负效果

3.6 偏好

端点方法说明请求体
GET /preferencesGET当前用户偏好-
PUT /preferencesPUT更新偏好{scope, key, value}
DELETE /preferences/{key}DEL恢复默认-

3.7 通知

端点方法说明请求体响应
GET /notificationsGET通知列表?unread_only=true通知列表
PUT /notifications/{id}/readPUT标记已读--
PUT /notifications/{id}/actionPUT执行通知动作{action: 'complete'}-

4. 系统架构

4.1 整体架构

+-------------------+ +-------------------+ +-------------------+
| 前端 (多端) | -> | API Gateway | -> | 服务层 |
| 桌面/移动/浏览器 | | Nginx + Rate Limit | | Go/Gin |
+-------------------+ +-------------------+ +-------------------+
|
+---------------------------+---------------------------+
| |
v v
+-------------------+ +-------------------+
| 业务服务 | | 沉淀引擎 |
| - Fragment | | - 规则引擎 |
| - Thread | | - LLM 管道 |
| - TodoItem | | - 状态机 |
| - Notification | +-------------------+
| - Preference | |
+-------------------+ |
| |
v v
+-------------------+ +-------------------+
| 数据层 | | 外部服务 |
| PostgreSQL | | - OpenAI/讯飞星火 |
| Redis | | - 微信 API |
| 七牛云/OSS | | - FCM |
+-------------------+ +-------------------+

4.2 沉淀引擎设计

核心流程:

闪念输入
-> 预处理(文本、OCR、语音转写)
-> 规则引擎(关键词、重复、明显截止)
-> LLM 兜底(意图、线程、拆小)
-> 内部 urgency × importance 启发(映射状态,非 UI)
-> 状态机落点 + reason
-> 若需行动:创建 todo_item 动作草案
-> 写入 delivery_jobs(交给调度器)
-> 异步持久化与日志

规则 vs LLM:

场景规则引擎LLM触发
链接去重URL 哈希-已存在
噪音归档黑名单-命中
硬截止日期/「截止」正则语义确认规则或低置信
情绪倾倒情绪词抽一个现实动作长语音/倾倒
任务拆小-端点化下一步描述过粗
线程关联向量相似度确认相似度阈值
象限启发截止→urgency↑ 等综合 importance内部字段

4.2b 调度器(智能排程)

delivery_jobs 到期 或 用户纠偏
-> 检查 suppress_until / 勿扰 / 端点偏好
-> 强制 WIP=1(硬截止例外 + reason)
-> 生成 notifications
-> 推送 FCM / 微信模板 / 桌面
-> 埋点:delivered / ignored / snoozed / suppress(错误时机指标)

不是:扫描日历空闲并自动 time-block。

4.3 通知系统

通知调度:由 delivery_jobs 驱动,而非「一天塞满 N 条任务」。

去重与防骚扰:

  • 同一 todo 主动提醒有上限。
  • 同时主动下一步 ≤1(WIP)。
  • 连续 3 次忽略同类 → 降权。
  • 「今天别推」写 suppress_until。

5. 多端同步方案

5.1 同步策略

场景同步方式延迟说明
碎片捕获实时同步< 1s捕获后立即写入主库,其他端通过 WebSocket 接收
状态变更实时同步< 1s状态机执行后,广播变更事件
通知推送实时推送< 3s通过 FCM/微信模板消息推送到目标端点
偏好更新实时同步< 1s偏好写回后,立即同步存栏
大批量数据增量同步< 5s首次登录/长时间离线,增量拉取变更

5.2 WebSocket 设计

连接管理:

  • 用户登录后建立 WebSocket 连接。
  • 心跳检测:每 30 秒 ping/pong。
  • 断线重连:指数退避策略(1s, 2s, 4s, 8s… 最大 60s)。

消息类型:

类型说明
fragment.new新碎片
fragment.state_change碎片状态变更
todo.activate激活下一步任务
todo.complete任务完成
notification.push通知推送
preference.update偏好更新

6. 安全与隐私

6.1 数据安全

措施说明
传输加密HTTPS/TLS 1.3
存储加密PostgreSQL 启用 SSL,OSS 服务端加密
敏感数据用户内容 AES-256 加密存储
备份每日全量备份 + 实时增量备份
访问控制JWT Token + RBAC(基于角色的访问控制)

6.2 隐私保护

措施说明
数据最小化只收集必要数据(内容、来源、时间)
数据可删除用户可完整删除账户和所有数据
数据可导出提供 JSON/CSV/PDF 导出功能
第三方共享不向第三方共享用户数据
AI 训练用户使用数据不用于模型训练

7. 性能与扩展性

7.1 性能目标

指标目标说明
API 响应时间P99 < 200ms标准 API 请求
沉淀引擎延迟规则引擎 < 100ms, LLM < 3s碎片到状态判断
通知延迟< 5s任务到期到通知送达
并发用户10K DAUMVP 阶段目标
可用性99.5%月度可用性

7.2 扩展性设计

场景方案
读多写少读写分离,缓存热点数据
碎片增长按用户 ID 分表/sharding
LLM 调用异步队列 + 限流 + 降级(规则引擎兜底)
通知峰值通知队列削峰填谷,错峰发送

8. 部署方案

8.1 开发环境

Docker Compose
- PostgreSQL 14
- Redis 7
- API 服务(热重载)
- 前端(HMR)

8.2 生产环境

Kubernetes (EKS/ACK/GKE)
- API 服务 (3 replicas)
- 沉淀引擎 Worker (2 replicas)
- 通知 Worker (2 replicas)
- PostgreSQL (RDS/云数据库)
- Redis (ElastiCache/云 Redis)
- 七牛云/OSS

8.3 CI/CD 流程

Git Push
-> GitHub Actions
-> Lint / Test / Build
-> Docker Build and Push
-> Deploy to Staging
-> Smoke Test
-> Deploy to Production (Canary)

9. 监控与告警

9.1 监控指标

指标类型告警阈值
API 请求延迟P99 > 200ms连续 5 分钟
API 错误率> 1%连续 3 分钟
沉淀引擎延迟> 5s单次
通知失败率> 5%连续 10 分钟
数据库连接数> 80%容量阈值
磁盘使用率> 80%容量

9.2 日志规范

时间戳 | 级别 | 服务 | 用户ID | 追踪ID | 操作 | 状态 | 耗时 | 附加信息

示例:

2024-07-06T15:30:00Z INFO api user_123 trace_a1 POST /fragments 200 45ms {"content_length": 50}