Files
bigwo/test2/后端改造清单.md

217 lines
4.9 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.

# 后端改造清单
> 目标:在**不修改 Redis 全局配置**、不影响其他服务的前提下,优先优化当前语音 + 知识库后端链路的延迟、稳定性和可维护性。
## 一、改造原则
- **不动全局配置**:不修改 Redis `maxmemory` / `maxmemory-policy` 等服务端级配置。
- **先收敛链路,再做扩展**:优先减少重复上下文读取、重复检索、重复缓存逻辑。
- **优先 P0**:先解决影响延迟和准确率的核心路径。
- **可回退**:每一项改造都保留降级路径,避免影响线上。
## 二、当前重点文件
- `server/routes/chat.js`
- `server/services/realtimeDialogRouting.js`
- `server/services/toolExecutor.js`
- `server/services/kbRetriever.js`
- `server/services/redisClient.js`
- `server/services/nativeVoiceGateway.js`
- `server/services/contextKeywordTracker.js`
- `server/services/fastAsrCorrector.js`
- `server/services/contentSafeGuard.js`
## 三、P0必须先改
### 1. 统一上下文装配入口
- [ ] 抽出统一的上下文装配服务
- [ ] 统一 Redis → MySQL 的读取顺序
- [ ] 同一轮对话避免多次读历史消息
- [ ] 统一文字链路与语音链路的上下文拼装规则
**目标文件**
- `server/routes/chat.js`
- `server/services/realtimeDialogRouting.js`
- `server/services/kbRetriever.js`
**验收标准**
- 同一 session 在一次请求链路里只装配一次上下文
- 文字和语音的上下文结果一致
---
### 2. KB 检索从“全库扫描”改为“候选集检索”
- [ ] 先根据关键词/意图分类出候选 collection
- [ ] 再做 VikingDB 检索
- [ ] 最后重排 topN 片段
- [ ] 保留全库扫描兜底开关
**目标文件**
- `server/services/toolExecutor.js`
- `server/services/kbRetriever.js`
- `server/services/realtimeDialogRouting.js`
**验收标准**
- 检索 collection 数量可控
- 平均延迟下降
- 检索结果不明显变差
---
### 3. Redis 写入改为 pipeline / multi
- [ ] `LPUSH + LTRIM + EXPIRE` 合并为一次往返
- [ ] 保留写失败降级逻辑
- [ ] 保留 TTL 机制
**目标文件**
- `server/services/redisClient.js`
**验收标准**
- 单次消息写入 Redis 往返次数减少
- 现有 TTL 行为不变
---
### 4. 缓存层次明确化
- [ ] 明确本地内存缓存只做短时减压
- [ ] Redis 作为共享缓存
- [ ] no-hit 结果只做短 TTL 去重,不长期存储
- [ ] 缓存 key 规范化
**目标文件**
- `server/services/toolExecutor.js`
- `server/services/redisClient.js`
**验收标准**
- 多实例时缓存行为可解释
- key 命名与 TTL 规则统一
---
## 四、P1建议尽快改
### 5. 会话生命周期治理
- [ ]`chatSessions` 增加更明确的上限
- [ ] 定时清理策略配置化
- [ ] 超过阈值时自动淘汰最旧 session
- [ ] 评估 session 状态是否需要下沉 Redis
**目标文件**
- `server/routes/chat.js`
- `server/services/nativeVoiceGateway.js`
**验收标准**
- 长时间运行不明显涨内存
- session 清理策略可观测
---
### 6. 预查询参数配置化
- [ ] 把 early block / debounce / 最小长度提成配置项
- [ ] 支持不同场景调参
- [ ] 记录 prequery 命中率
**目标文件**
- `server/services/nativeVoiceGateway.js`
**验收标准**
- 不改代码可调整阈值
- 误触发率下降
---
### 7. 结构化指标埋点
- [ ] 路由命中率
- [ ] Redis 命中率
- [ ] DB fallback 次数
- [ ] KB 检索耗时
- [ ] 重排耗时
- [ ] prequery 命中率
**目标文件**
- `server/services/realtimeDialogRouting.js`
- `server/services/toolExecutor.js`
- `server/services/kbRetriever.js`
**验收标准**
- 能按 session / route / tool 维度排查性能问题
---
## 五、P2后续增强
### 8. 安全与兜底一致性
- [ ] 统一知识库 no-hit 的诚实兜底文案
- [ ] 统一品牌保护文案
- [ ] 避免不同入口返回不一致
**目标文件**
- `server/services/realtimeDialogRouting.js`
- `server/services/contentSafeGuard.js`
- `server/routes/chat.js`
---
### 9. 测试补强
- [ ] Redis 读写单测
- [ ] KB 检索与重排单测
- [ ] 语音/文字链路回归测试
- [ ] no-hit / 保护窗口 / 追问场景测试
**目标文件**
- `server/tests/test_redis_client.js`
- `server/tests/test_kb_retriever.js`
- `server/tests/test_kb_scenarios.js`
- `server/tests/test_kb_prompt_compare.js`
---
## 六、建议实施顺序
1. 上下文装配统一
2. KB 候选集检索
3. Redis pipeline
4. 会话生命周期治理
5. 预查询参数配置化
6. 指标埋点
7. 测试补强
## 七、建议验收口径
- **延迟**:核心查询链路 P50 明显下降
- **稳定性**Redis 断开时可自动降级
- **一致性**:文字/语音链路输出策略一致
- **安全性**no-hit 与品牌保护回复统一
- **可维护性**:关键阈值可配置,不依赖频繁改代码
## 八、备注
- 本清单只针对**应用层改造**。
- 不包含 Redis 全局配置修改。
- 若后续要做服务器级改动,需单独确认。