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

1.7 KiB
Raw Blame History

用户配置隔离与食物智能识别设计

背景

  1. 用户数据隔离问题config 表是全局的,所有用户共享同一份配置
  2. 食物文字识别问题:文字输入时只用本地数据库匹配,无法识别复杂菜肴

设计决策

决策点 选择
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`)
)

迁移策略

  1. 添加 user_id 列,默认值为 1
  2. 现有数据自动归属到 ID=1 用户
  3. 重建复合主键

食物智能识别流程

用户输入食物描述 → 本地数据库匹配
    ↓
全部识别成功? ──是──→ 返回结果(快速)
    ↓ 否
有通义千问 API Key ──否──→ 返回本地结果
    ↓ 是
调用通义千问标准化 → 重新本地计算 → 返回结果(准确)

判断"识别失败"标准

当解析结果中存在 calories = 0estimated = 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 用户
  • 新用户创建时有独立配置空间