Files
digital-psychology/.ai/product/feature-spec/ask.md
T
jackyu66gitandCursor bd22d9dddd feat: P1 合盘/星座/问答与测测完整设计包及模拟器取证工具
落地 synastry/star/ask API 与 H5 页面,补齐 cece-frontend-re complete-design 证据文档,并加入 Android 模拟器截图抓取脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 11:37:53 +08:00

173 lines
4.0 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.
# 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 |