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