DeepSeek:流式 + 联网搜索 + RAG + 多轮会话
历史主题来源:一个完整 DeepSeek 应用的工程化落地。
1. 目标能力
- 流式输出(低等待感)
- 联网增强(解决时效信息)
- RAG 检索(解决私域知识)
- 多轮会话(上下文连续)
2. 推荐架构
前端聊天页
|- /chat/stream # 流式
|- /chat/search # 联网增强
`- /chat/rag # 知识库检索
Spring Boot + AI4J
|- Prompt 组装
|- Tool/MCP 调用
`- Agent/Workflow
模型 + 搜索 + 向量库
3. 关键工程拆分
流式层
- SSE 推送增量
- 前端拼接消息
- 支持中断与重连
搜索层
- 多源检索聚合
- 结果清洗与摘要
- 注入 prompt 上下文
RAG 层
- 文档解析、分块、向量化、存储
- 召回 + 重排 + 证据拼接
会话层
- 滑动窗口记忆
- 压缩旧轮对话
- 关键事实持久化
4. 控制器骨架
@RestController
@RequestMapping("/chat")
public class ChatController {
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter stream(@RequestParam String question) { return null; }
@GetMapping("/search")
public String search(@RequestParam String question) { return null; }
@GetMapping("/rag")
public String rag(@RequestParam String question) { return null; }
}
5. 上线顺序(很关键)
- 先把流式链路稳定(可用性优先)
- 加联网增强(时效性优先)
- 加 RAG(准确性优先)
- 加 Trace 和评估指标(可运营优先)
6. 评估指标建议
- 流式首包时间(TTFT)
- 回答完成耗时
- 检索命中率
- 引用覆盖率
- 人工纠错率
7. 常见失败点
- 联网文本过长导致 prompt 污染
- 检索片段质量差导致“看似有证据但不可用”
- 多轮上下文无限增长导致成本上升
建议每一步都加上“长度上限 + 质量阈值 + fallback”。