小暖 — 基于 Spring Boot + Spring AI + DeepSeek 的智能心理陪伴对话平台
·
项目概述
小暖 是一个温柔治愈的 AI 聊天陪伴应用,能够感知用户的情绪变化,以共情、温暖的方式与用户进行实时对话交流。前端为纯 HTML/CSS/JS 单页应用,后端基于 Spring Boot 3 + Spring AI 框架,通过 OpenAI 兼容协议接入 DeepSeek 大语言模型,支持 SSE 流式对话与多轮上下文记忆。
项目源码

技术栈
| 层级 | 技术 | 版本 |
|---|---|---|
| 框架 | Spring Boot | 3.3.2 |
| AI 集成 | Spring AI (OpenAI Starter) | 1.0.0-M5 |
| 大模型 | DeepSeek Chat | deepseek-chat |
| 构建工具 | Maven | — |
| JDK | Java | 17 |
| 前端 | 原生 HTML + CSS + JavaScript | — |
| 流式传输 | SSE (Server-Sent Events) | — |
| 编码 | UTF-8 | — |
项目结构
a1/
├── pom.xml # Maven 项目描述符
├── README.md # 项目文档
├── killPort.bat # Windows 端口释放脚本
└── src/
└── main/
├── java/com/therapy/chat/
│ ├── TherapyChatApplication.java # 应用入口
│ ├── config/
│ │ ├── SpringAiConfig.java # AI 配置(ChatClient、ChatMemory、系统提示)
│ │ └── WebMvcConfig.java # Web MVC 配置(UTF-8 编码)
│ ├── controller/
│ │ ├── ChatController.java # 聊天 API 控制器
│ │ └── PageController.java # 页面路由控制器
│ ├── dto/
│ │ ├── ChatRequest.java # 聊天请求 DTO
│ │ └── ChatResponse.java # 聊天响应 DTO
│ └── service/
│ └── ChatService.java # 聊天服务层
└── resources/
├── application.yml # 应用配置文件
└── static/
└── index.html # 前端聊天界面
快速开始
环境要求
- JDK 17+
- Maven 3.6+
- DeepSeek API Key(获取地址)
配置 API Key
注意:这里一定要配置自己的API Key,博主项目代码中的API Key已经删掉了,不能再使用了。
方式一:环境变量(推荐)
export DEEPSEEK_API_KEY=sk-your-api-key
方式二:直接修改配置文件
编辑 src/main/resources/application.yml:
spring:
ai:
openai:
api-key: sk-your-api-key
启动应用
# 编译并启动
mvn spring-boot:run
# 或先打包再运行
mvn clean package -DskipTests
java -jar target/therapy-chat-1.0.0.jar
启动后访问:http://localhost:8080
释放端口(Windows)
如果 8080 端口被占用:
killPort.bat
API 接口
1. 流式聊天(SSE)
POST /api/chat/stream
Content-Type: application/json
Accept: text/event-stream
请求体:
{
"message": "今天心情不太好",
"conversationId": "conv_1721000000000"
}
响应:text/event-stream 格式,逐 token 推送 AI 回复内容。
2. 普通聊天
POST /api/chat/send
Content-Type: application/json
请求体:
{
"message": "你好",
"conversationId": "conv_1721000000000"
}
响应:
{
"reply": "你好呀,很高兴见到你~有什么想聊的吗?",
"conversationId": "conv_1721000000000"
}
3. 健康检查
GET /api/chat/health
响应:ok
核心架构
数据流
双模式对话
前端优先使用 SSE 流式模式(/api/chat/stream),实现打字机效果的文字逐字输出。若流式请求失败,自动降级到 普通 JSON 模式(/api/chat/send)作为兜底。
对话记忆
- 使用 Spring AI 的
InMemoryChatMemory存储对话历史 - 以
conversationId为键隔离不同会话 - 前端在页面加载时生成唯一会话 ID(
conv_+ 时间戳) - 通过
PromptChatMemoryAdvisor自动将最近对话历史注入每次 API 请求 - 注意:记忆存储在内存中,应用重启后丢失
AI 角色设定
小暖的角色设定(SpringAiConfig.SYSTEM_PROMPT)包含:
- 对话逻辑:根据用户输入独立理解内容,针对性回复
- 人设规范:语气柔和亲切、回复简短自然、第一人称表达
- 沟通原则:先共情再引导、不评判不说教、温柔倾听
- 禁止事项:不提供医疗诊断、不说教、不鸡汤、不冷淡敷衍
- 安全边界:严重心理危机时建议寻求专业援助
配置说明
# application.yml
server:
port: 8080 # 服务端口
spring:
ai:
openai:
api-key: ${DEEPSEEK_API_KEY:sk-xxx} # API 密钥(优先读环境变量)
base-url: https://api.deepseek.com # DeepSeek API 地址
chat:
options:
model: deepseek-chat # 模型名称
temperature: 0.8 # 创造性(0-1,越高越随机)
logging:
level:
com.therapy.chat: DEBUG # 应用日志级别
org.springframework.ai.chat: DEBUG # Spring AI 聊天日志
org.springframework.ai.openai: DEBUG # OpenAI 客户端日志
切换到其他大模型
本项目使用 OpenAI 兼容协议,可切换至任意兼容的 API 服务:
Ollama(本地部署):
spring:
ai:
openai:
api-key: ollama # Ollama 不需要真实 key
base-url: http://localhost:11434/v1 # Ollama OpenAI 兼容端点
chat:
options:
model: qwen2:7b
其他兼容服务(如通义千问、智谱等):修改 base-url 和 model 即可。
功能特性
- 🌸 温暖治愈的聊天界面,柔和渐变配色
- 💬 SSE 流式传输,打字机逐字输出效果
- 🧠 多轮对话上下文记忆
- 📱 响应式设计,适配移动端
- 🔄 流式失败自动降级为普通请求
- 🛡️ 完善的异常处理与用户友好提示
- 🎯 精心设计的心理陪伴角色提示词
- 🌐 全 UTF-8 编码,中文支持完善
注意事项
- API Key 安全:生产环境请务必通过环境变量注入密钥,不要将密钥硬编码在配置文件中
- 内存记忆:对话历史存储在内存中,应用重启会丢失,生产环境可替换为持久化实现
- 内网访问:如需外部访问,请配置反向代理(Nginx 等)并注意安全防护
- 非医疗用途:本应用仅提供情感陪伴,不提供专业心理诊断或医疗建议
更多推荐


所有评论(0)