Files
DDUp/docs/plans/2026-01-24-user-config-isolation-and-smart-food-recognition.md
liweiliang0905@gmail.com 0f11e8ad56 feat: 用户配置隔离与食物智能识别
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>
2026-01-24 11:32:56 +08:00

65 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 用户配置隔离与食物智能识别设计
## 背景
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 用户
- 新用户创建时有独立配置空间