1. Config 表用户隔离 - 添加 user_id 字段,复合主键 (user_id, key) - 现有数据归属 ID=1 用户 - 所有 get_config/save_config 调用传入 user_id 2. 食物文字智能识别 - 本地数据库优先匹配(快速) - 识别失败时自动调用通义千问 AI(准确) - 有配置 API Key 才调用,否则返回本地结果 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1.7 KiB
1.7 KiB
用户配置隔离与食物智能识别设计
背景
- 用户数据隔离问题:config 表是全局的,所有用户共享同一份配置
- 食物文字识别问题:文字输入时只用本地数据库匹配,无法识别复杂菜肴
设计决策
| 决策点 | 选择 |
|---|---|
| Config 表修复范围 | 只修复 config 表,添加 user_id |
| 现有数据归属 | 归属给 ID=1 的用户 |
| 食物识别策略 | 本地优先,识别失败时调用大模型 |
| 大模型优先级 | 通义千问优先,没配置则回退本地 |
数据库变更
Config 表新结构
CREATE TABLE config (
user_id INT NOT NULL,
`key` VARCHAR(100) NOT NULL,
value TEXT,
PRIMARY KEY (user_id, `key`)
)
迁移策略
- 添加 user_id 列,默认值为 1
- 现有数据自动归属到 ID=1 用户
- 重建复合主键
食物智能识别流程
用户输入食物描述 → 本地数据库匹配
↓
全部识别成功? ──是──→ 返回结果(快速)
↓ 否
有通义千问 API Key? ──否──→ 返回本地结果
↓ 是
调用通义千问标准化 → 重新本地计算 → 返回结果(准确)
判断"识别失败"标准
当解析结果中存在 calories = 0 且 estimated = False 的食物项。
修改文件
src/vitals/core/database.py- config 函数增加 user_id 参数src/vitals/core/calories.py- 增加智能 AI 回退逻辑src/vitals/web/app.py- 调用处传入 user_idsrc/vitals/cli.py- 调用处传入 user_idsrc/vitals/core/report.py- 调用处传入 user_id
向后兼容
- 现有 4 个用户数据不受影响
- 现有配置归属 ID=1 用户
- 新用户创建时有独立配置空间