feat: P1 合盘/星座/问答与测测完整设计包及模拟器取证工具

落地 synastry/star/ask API 与 H5 页面,补齐 cece-frontend-re complete-design 证据文档,并加入 Android 模拟器截图抓取脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-03 11:37:53 +08:00
co-authored by Cursor
parent 15a9db374a
commit bd22d9dddd
248 changed files with 26309 additions and 842 deletions
+172
View File
@@ -0,0 +1,172 @@
# Feature Spec: AI 成长助手(问答)
> Status: `Active` · Map: `§3 问答 [P1]` · Phase: `P1`
> 规范:[../feature-design.md](../feature-design.md)
---
## 1. 功能定义
| 字段 | 内容 |
|---|---|
| Name | AI 成长助手 |
| Purpose | 结合个人档案,用对话帮助认识自己、理解关系、整理情绪与生活节奏 |
| Business Goal | 战略中心 Tab 留存;配额驱动会员 |
| In | Out |
|---|---|
| 挂 profile 的多轮对话;场景入口 | 占卜/运势/预测未来 |
| DeepSeek(可配)+ 规则引擎降级 | 医疗诊断 |
| 免费次数 + 会员配额 | 无档案空聊(禁止) |
---
## 2. 用户价值
1. **为何需要:** 看完画像仍有具体情境问题。
2. **完成后获得:** 结合档案的结构化建议与可执行小步骤。
3. **为何付费:** 免费次数用尽后会员提供更多回复。
---
## 3. 用户角色
| Actor | 能力 |
|---|---|
| Visitor | 有档案则可问;受配额限制 |
| VIP | 额外 Ask 配额 |
| 无档案 | 仅引导建档,不可消耗成功回复 |
---
## 4. 用户流程
```text
进入 /ask
无档案? → Empty 引导首页/档案
选择档案(我 / TA+ 可选场景
输入问题 → 检查配额
├─ 耗尽 → 引导会员
└─ 有余 → 创建/续 thread → assistant 回复
DeepSeek 失败/无 key → 规则引擎降级
```
---
## 5. 页面设计
| 路由 | 页面 |
|---|---|
| `/ask` | AskPageChatThread |
```text
/ask
├── Empty(无档案)
├── Loading(发送中)
├── Normal(历史 + 输入)
├── Error(发送失败可重试)
└── Quota Exhausted(引导会员)
```
---
## 6. 页面状态规范
| 状态 | UI |
|---|---|
| Empty | 无档案引导 |
| Loading | 发送中禁用重复点 |
| Error | 失败 + 重试 |
| Normal | 消息列表 |
| Quota | 明确耗尽文案 + `/membership` |
---
## 7. Business Rules
| ID | Rule |
|---|---|
| R1 | 每条用户消息必须绑定 `profile_id`self 或 other |
| R2 | 免费回复次数有上限(实现:如 3);会员另计配额 |
| R3 | 配额耗尽返回明确业务错误,不生成付费假回复 |
| R4 | LLM 可选;失败降级规则引擎,仍须 lexicon 安全 |
| R5 | 禁止运势/吉凶/算命/合盘话术;结尾免责声明 |
| R6 | 回复宜有结构:回应用户 → 结合档案 → 可执行建议(详见 system prompt |
---
## 8. 数据模型影响
| 表 | 备注 |
|---|---|
| `ask_threads` | user_id, profile_id |
| `ask_messages` | role, content |
| `ask_quotas` / 等价 | 余量 |
---
## 9. API 需求
| Method | Path | 意图 |
|---|---|---|
| GET | `/api/v1/ask/quota` | 余量 |
| POST | `/api/v1/ask/threads` | 创建线程(profile_id, scene? |
| POST | `/api/v1/ask/threads/{id}/messages` | 发消息拿回复 |
---
## 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** 无 DeepSeek key
**When** 提问
**Then** 规则引擎仍给出档案相关回复
---
## 13. AI 开发前检查
- [x] 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](P1-PROCESS-REVIEW.md) · 设计闭合 · 实现 PASS · 测试 PASS |