|
@@ -60,11 +60,12 @@ LangGraph chat_graph(现有,零改动)
|
|
|
|
|
|
|
|
- `/chat/send` 承载家庭助手通用聊天,职责过重
|
|
- `/chat/send` 承载家庭助手通用聊天,职责过重
|
|
|
- 新端点专门做「报告快速分析」:会员限制 + 报告上下文 + 返回 answer
|
|
- 新端点专门做「报告快速分析」:会员限制 + 报告上下文 + 返回 answer
|
|
|
-- 复用 `sendMessage` 内部已有的上下文组装逻辑(mascot/portrait),抽出私有方法 `buildChatInputs(userId, params)`
|
|
|
|
|
|
|
+- **复用 `sendMessage` 内部已有的上下文组装逻辑**:在 `AIChatController` 内抽出私有方法 `buildChatInputs(userId, params)` 供 `/chat/send` 和 `/report/analyze` 共同调用
|
|
|
|
|
|
|
|
### 3.3 免费次数限制:Redis 计数
|
|
### 3.3 免费次数限制:Redis 计数
|
|
|
|
|
|
|
|
```java
|
|
```java
|
|
|
|
|
+// 在 AIChatController.reportAnalyze() 内
|
|
|
String key = "report:analyze:free:" + userId + ":" + LocalDate.now();
|
|
String key = "report:analyze:free:" + userId + ":" + LocalDate.now();
|
|
|
Long count = redisTemplate.opsForValue().increment(key);
|
|
Long count = redisTemplate.opsForValue().increment(key);
|
|
|
if (count == 1) redisTemplate.expire(key, Duration.ofDays(1));
|
|
if (count == 1) redisTemplate.expire(key, Duration.ofDays(1));
|
|
@@ -72,7 +73,7 @@ if (count > 1) return Result.error("免费版每日仅限 1 次快速分析,
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
- **Redis 不可用降级**:Redis 异常时 fail-open 放行(避免免费用户因 Redis 故障完全不可用),记 `log.warn`
|
|
- **Redis 不可用降级**:Redis 异常时 fail-open 放行(避免免费用户因 Redis 故障完全不可用),记 `log.warn`
|
|
|
-- 生产 Redis 连接由用户提供(host/port/password),实现时填入 `application.yml`
|
|
|
|
|
|
|
+- 实现时按环境配置(本地/测试 `localhost:6379`,生产由运维提供连接信息)
|
|
|
|
|
|
|
|
### 3.4 免费版锁死多轮
|
|
### 3.4 免费版锁死多轮
|
|
|
|
|
|
|
@@ -81,10 +82,10 @@ if (count > 1) return Result.error("免费版每日仅限 1 次快速分析,
|
|
|
|
|
|
|
|
### 3.5 前端浮层(页面内嵌,不新建页面)
|
|
### 3.5 前端浮层(页面内嵌,不新建页面)
|
|
|
|
|
|
|
|
-- `report-detail.vue` 底部新增「🎯 快速分析」悬浮按钮
|
|
|
|
|
|
|
+- `report-detail.vue` 底部新增「🎯 快速分析」悬浮按钮(仅 view 模式显示)
|
|
|
- 点击展开浮层:消息区 + 输入框 + 3 个快捷问题 chips
|
|
- 点击展开浮层:消息区 + 输入框 + 3 个快捷问题 chips
|
|
|
-- 免费版发送一次后输入框禁用,显示「今日次数已用完」
|
|
|
|
|
-- 付费版可连续追问(每轮带 conversationId 回传)
|
|
|
|
|
|
|
+- **免费版用完 1 次后**:按钮隐藏或显示锁定提示文案"今日次数已用完,升级会员解锁更多";浮层关闭后输入框禁用
|
|
|
|
|
+- **付费版**:可连续追问(每轮带 `conversationId` 回传),无按钮禁用逻辑
|
|
|
|
|
|
|
|
## 4. 改动清单
|
|
## 4. 改动清单
|
|
|
|
|
|