Skip to content

集合:微建议(suggestions)

字数
1161 字
阅读时间
6 分钟

1. 目的与使用场景

  • 记录今天页 Top3 微建议及其生成上下文,支撑“一键生成任务”、建议刷新策略与依从性分析。由策略服务、/api/micro-tipssuggestion_task_create 埋点使用。

枚举值

  • category: study(学习)、sleep(睡眠)、emotion(情绪)、relationship(关系)、health(健康)、other(其他)
  • source: model(AI模型)、curated(人工精选)、manual(手动)
  • status: active(活跃)、accepted(已接受)、skipped(已跳过)、expired(已过期)

2. Schema 定义

字段类型必填默认值约束/校验说明隐私分级
_idstring-TCB 自动主键P2
user_id指针id-指向 users._id用户P2
session_idstring-长度 ≤ 64推荐会话标识P2
titlestring-长度 1-80建议标题P1
descriptionstring-长度 ≤ 512补充说明P1
categorystring-枚举(study,sleep,emotion,relationship,health,other)建议分类P1
priority_ranknumber11-5当前排序P1
sourcestringmodel枚举(model,curated,manual)建议来源P1
feature_snapshotobject-包含 mood_score, recent_tags生成特征P2
task_template_idstring-指向任务模板生成任务模板P1
statusstringactive枚举(active,accepted,skipped,expired)状态P1
accepted_task_id指针id-指向 tasks._id接受后生成的任务P2
refresh_countnumber0≥0本会话刷新次数P1
expired_atdate--失效时间P1
createdAtdate-服务端时间生成时间P1
updatedAtdate-服务端时间更新时间P1

3. 索引与唯一约束

  • 单字段索引:user_idsession_id
  • 复合索引:[user_id, createdAt desc][user_id, status, priority_rank]
  • 唯一性约束:[user_id, session_id, priority_rank]
  • 设计理由:快速获取最近一次推荐;避免同一会话重复排序;依从性分析需按状态聚合。

4. 访问控制(TCB 权限)

json
{
  "read": "user_id == auth.uid || auth.role in ['ops']",
  "write": "auth.role in ['strategy_service','ops']"
}

策略服务(云函数)负责写入;用户仅通过 API 读取,不直接写入。

  1. 关系与级联
  • user_idusers
  • accepted_task_idtasks
  • 删除策略:建议默认 7 天后自动软删;手动删除不影响已生成的任务。
  • 反范式:feature_snapshot 存储生成上下文,供策略回溯。
  1. 数据生命周期与合规
  • 留存:保留 90 天用于策略调优,其后仅保留匿名统计。
  • 匿名化:脱敏 feature_snapshot 中的具体标签;保留权重数据。
  • 导出:仅对内部运营导出,需拥有 ops 角色。
  • 审计字段:createdAtupdatedAtstatusrefresh_count
  1. API/云函数契约映射 | 接口/函数 | 读/写 | 使用字段 | 过滤条件 | 排序/分页 | 备注 | | /api/micro-tips | 读 | title, description, category, priority_rank, status | user_id = auth.uid, status='active' | priority_rank asc | 今天页展示 | | /api/tasks POST | 写 | accepted_task_id | - | - | 一键生成任务后更新 | | 策略服务 generateSuggestions | 写 | user_id, session_id, title, category, priority_rank, feature_snapshot | - | - | 推荐生成 | | 埋点回溯函数 suggestionAnalytics | 读 | status, accepted_task_id, refresh_count | 时间范围 | - | 依从性分析 |

  2. 示例文档(≥3条)

json
{
  "_id": "sg_001",
  "user_id": "usr_001",
  "session_id": "sess_20240406_1",
  "title": "与室友约定安静时段",
  "category": "relationship",
  "priority_rank": 1,
  "source": "model",
  "feature_snapshot": {"mood_score": 45, "recent_tags": ["室友", "噪音"]},
  "status": "accepted",
  "accepted_task_id": "task_305",
  "refresh_count": 0,
  "createdAt": "2024-04-06T09:01:00Z",
  "updatedAt": "2024-04-06T13:25:00Z"
}
{
  "_id": "sg_002",
  "user_id": "usr_001",
  "session_id": "sess_20240406_1",
  "title": "午间 10 分钟冥想",
  "category": "emotion",
  "priority_rank": 2,
  "source": "model",
  "status": "skipped",
  "refresh_count": 1,
  "createdAt": "2024-04-06T09:01:00Z",
  "updatedAt": "2024-04-06T09:05:00Z"
}
{
  "_id": "sg_101",
  "user_id": "usr_002",
  "session_id": "sess_20240405_night",
  "title": "睡前写下三件感谢的事",
  "category": "sleep",
  "priority_rank": 1,
  "source": "curated",
  "status": "active",
  "expired_at": "2024-04-07T23:00:00Z",
  "createdAt": "2024-04-05T22:30:00Z",
  "updatedAt": "2024-04-05T22:30:00Z"
}
  1. 常用查询样例(≥3条)
javascript
// 获取最新一组建议
const latest = await db.collection('suggestions').where({
  user_id: auth.uid,
  status: 'active'
}).orderBy('createdAt', 'desc').limit(3).get();

// 查询接受率
const accepted = await db.collection('suggestions').where({
  user_id: auth.uid,
  status: 'accepted',
  createdAt: db.command.gte(new Date(Date.now() - 30 * 86400000).toISOString())
}).count();

// 策略服务回溯某会话
const sessionTrace = await db.collection('suggestions').where({
  session_id: sessionId
}).orderBy('priority_rank', 'asc').get();
  1. 边界与错误码
  • 重复会话写入:若 session+rank 已存在返回 E_SUGGESTION_DUP
  • 过期访问:调用 /api/micro-tips 时如全部过期返回 E_SUGGESTION_EXPIRED 并提示刷新。
  • 越权:非策略角色写入返回 E_FORBIDDEN
  1. 变更影响评估
  • 字段调整需同步策略服务 payload、今天页 UI、埋点 suggestion_task_create
  • 索引变更影响依从性报表与推荐性能监控。
  1. 假设与待确认
  • 假设推荐会话由策略服务生成唯一 ID;待确认是否需要与埋点 suggestion_session_id 打通。
  • 待确认 feature_snapshot 是否需要脱敏处理后再写入集合。

贡献者

The avatar of contributor named as Cai Hongyu Cai Hongyu

文件历史

撰写