Files
jackyu66gitandCursor 89756f65b4 feat(ECR-012–016): 合规、题库、时辰刷新、头像、MBTI OEJTS 与埋点
落地输入合规、探索题库、报告日/时辰刷新、账号头像、OEJTS 量表,并补齐 H5 埋点与 Admin 漏斗;同步 ESS 工件、切至自建 Git、清理 GitHub Actions。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 01:27:58 +08:00

5.2 KiB
Raw Permalink Blame History

Feature Spec: AI 成长助手(问答)

Status: Active · Map: §3 问答 [P1] · Phase: P1
规范:../feature-design.md


1. 功能定义

字段 内容
Name AI 成长助手
Purpose 结合个人档案,用对话帮助认识自己、理解关系、整理情绪与生活节奏
Business Goal 战略中心 Tab 留存;配额驱动会员
In Out
挂 profile 的多轮对话;场景入口 占卜/运势/预测未来
DeepSeek(可配)+ 规则引擎降级 医疗诊断
免费次数 + 额度包(ask_pack)+ 会员配额 无档案空聊(禁止)

2. 用户价值

  1. 为何需要: 看完画像仍有具体情境问题。
  2. 完成后获得: 结合档案的结构化建议与可执行小步骤。
  3. 为何付费: 免费次数用尽后可购买问答额度包,或开通成长会员获得更多回复。

3. 用户角色

Actor 能力
Visitor 有档案则可问;受配额限制
VIP 额外 Ask 配额
无档案 仅引导建档,不可消耗成功回复

4. 用户流程

进入 /ask
  ↓
无档案? → Empty 引导首页/档案
  ↓
选择档案(我 / TA)+ 可选场景
  ↓
输入问题 → 检查配额
  ├─ 耗尽 → 引导购买额度包 / 成长会员(mock 支付后立刻加次)
  └─ 有余 → 创建/续 thread → assistant **SSE 流式**回复(delta → done
        ↓
      DeepSeek 失败/无 key → 规则引擎降级(仍按字流式输出)

5. 页面设计

路由 页面
/ask AskPageChatThread
/ask
├── 愈心 AI / 顾问 Tab
├── 顾问列表 → 顾问专属对话(?advisor=key · 顶栏返回回列表)
├── Empty(无档案)
├── Loading(发送中)
├── Normal(历史 + 输入)
├── Error(发送失败可重试)
└── Quota Exhausted(额度包 + 会员)

6. 页面状态规范

状态 UI
Empty 无档案引导
Loading 发送中禁用重复点
Error 失败 + 重试
Normal 消息列表
Quota 明确耗尽文案 + 额度包购买 + /membership

7. Business Rules

ID Rule
R1 每条用户消息必须绑定 profile_idself 或 other
R2 免费回复次数有上限(实现:如 3);可购 ask_pack 加次;会员另计配额
R3 配额耗尽返回明确业务错误,不生成付费假回复;引导购买额度或会员
R7 扣次顺序:会员配额 → 已购额度包 → 免费额度(非会员);购买额度不解锁报告深度版
R4 LLM 可选;失败降级规则引擎,仍须 lexicon 安全
R5 禁止占卜/算命/吉凶恐吓/医疗诊断;可用愈心解码·星座·人格匹配等探索向用语
R6 回复宜短(约 80–160 字):回应当下 → 1 条档案洞察 → 1–2 条可执行建议;system prompt 须对齐 lexicon 与产品定位

8. 数据模型影响

备注
ask_threads user_id, profile_id
ask_messages role, content
ask_quotas / 等价 余量
users.ask_paid_quota_left 已购额度包余量

9. API 需求

Method Path 意图
GET /api/v1/ask/quota 余量
POST /api/v1/ask/threads 创建线程(profile_id, scene?
POST /api/v1/ask/threads/{id}/messages 发消息拿回复(默认 JSON
POST /api/v1/ask/threads/{id}/messages?stream=1 SSEmeta / delta / done / error
DELETE /api/v1/ask/threads/{id} 清空该会话(软删除)
POST /api/v1/orders kind=ask_pack 购买额度包(plan: pack10/pack30/pack100
POST /api/v1/orders/{id}/pay-mock 支付后增加 ask_paid_quota_left

10. 权限设计

能力 无档案 有配额 配额耗尽 VIP 有配额
提问

11. 埋点

Event 触发
ask_opened 进入页
ask_message_sent 发送
ask_reply_received 成功回复
ask_quota_exhausted 耗尽
ask_fallback_rule 走规则引擎

12. 测试验收标准

Given 有 Self 档案与配额
When 发送问题
Then 返回助手消息且含免责;配额减一

Given 配额为 0
When 再发送
Then 业务错误引导购买额度/会员,无助手胡编

Given 免费额度耗尽
When pay-mock ask_pack pack10
Then GET /ask/quota remaining ≥ 10,可继续提问

Given 无 DeepSeek key
When 提问
Then 规则引擎仍给出档案相关回复


13. AI 开发前检查

  • Spec 齐全 · map · lexicon · OpenAPI · 可测

14. Implementation Notes

内容
Packages service/ask · internal/ask · internal/llm/deepseek · AskPage
Config config.local.yaml deepseek.*
Gaps 长期记忆 P3;顾问预约仅占位;埋点未接
Tests ask reply L1;集成 threadAskPage.spec
Process Review 2026-08-02 P1-PROCESS-REVIEW · 设计闭合 · 实现 PASS · 测试 PASS