# 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` | AskPage(ChatThread) | ```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;集成 thread;AskPage.spec | | Process Review | 2026-08-02 [P1-PROCESS-REVIEW](P1-PROCESS-REVIEW.md) · 设计闭合 · 实现 PASS · 测试 PASS |