立项背景:随着大语言模型的普及,传统企业与用户对智能对话的需求激增。旨在构建一个前后端完全解耦的 AI 问答系统,支持多端接入,提供流畅的流式对话体验。
核心功能:支持 SSE 全链路流式对话(包含start/content/reasoning/done/error五类事件);多会话管理(新建、切换、重命名、置顶、逻辑删除);Markdown 渲染、思考过程折叠展示、多模型切换、Token 用量统计与 API 调用日志,以及四维 IP 限流。
业务流程:前端发起对话请求 → 后端校验限流 → 组装历史消息并调用大模型 API → SSE 逐字返回前端实时渲染 → 消息落库并记录 Token 与耗时。
架构与设计:基于 Spring Boot 4 + MyBatis-Plus + MySQL + Redis。后端提供 REST + SSE 接口,与客户端完全解耦,通过表结构 client_type 和请求头 X-Client-Type 区分来源,预留 PC/H5/小程序/APP 多端接入能力。
负责模块与结果:独立完成系统架构设计、SSE 流式编排、限流拦截器和前端页面的开发。SSE 采用 Java 17 HttpClient 读流 + SseEmitter 推送,前端通过 fetch + ReadableStream 手动解析。实现四维 IP 限流(分钟/每日/并发/全局熔断)。
难点与解决方案:解决了 SSE 异步生命周期导致的拦截器重入与计数泄漏问题(通过 AsyncHandlerInterceptor 标志位);解决了历史消息中空占位符导致大模型 1214 报错的问题(先过滤后截断);实现了客户端断连即时中止 AI 流以止损。