1. 项目背景与目标
作为一名长期从事AI应用开发的工程师,我经常遇到新手开发者对AI技术既向往又畏惧的情况。他们渴望快速上手AI项目,却又被复杂的模型训练、API调用和框架集成吓退。这正是我写下这篇教程的初衷——通过Spring AI这个强大的框架,让零基础的开发者也能在10分钟内创建一个可运行的智能心理咨询师应用。
Spring AI是Spring生态中专门为AI应用开发设计的框架,它极大简化了大语言模型(LLM)的集成过程。与传统AI开发相比,Spring AI提供了:
本次项目将基于阿里云DashScope平台的通义千问模型,创建一个具备基础心理咨询能力的对话智能体。这个Demo虽然简单,但已经包含了AI应用的核心要素,是理解现代AI开发范式的绝佳起点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目创建
2.1 开发工具选择
我强烈推荐使用IntelliJ IDEA作为开发环境(社区版即可),它对Spring Boot项目提供了开箱即用的支持。如果你习惯其他IDE如Eclipse或VS Code,确保已安装对应的Spring Boot插件。
注意:Spring AI要求Java 17或更高版本,请提前检查你的JDK版本。可以通过
java -version命令验证。
2.2 初始化Spring Boot项目
在IDEA中创建新项目时,选择"Spring Initializr"并配置以下关键参数:
- Project SDK: Java 17
- Spring Boot: 3.2.0(截至本文写作时的最新稳定版)
- Packaging: Jar
- Java: 17
在依赖选择界面,暂时只需勾选"Spring Web"即可,其他依赖我们将手动添加。这是因为Spring AI的相关starter尚未纳入官方Initializr的默认选项。
项目创建完成后,建议立即测试基础环境是否正常:
bash复制./mvnw spring-boot:run
如果能看到Spring的启动日志,说明基础环境配置正确。
3. 核心依赖配置
3.1 添加Spring AI依赖
打开pom.xml文件,在
xml复制<!-- Spring AI Alibaba 核心依赖 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-agent-framework</artifactId>
<version>1.1.0.0-M5</version>
</dependency>
<!-- DashScope 模型支持 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
<version>1.1.0.0-M5</version>
</dependency>
<!-- 可选:Lombok简化代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
3.2 配置DashScope API密钥
在application.properties中添加你的DashScope API密钥:
properties复制# DashScope配置
spring.ai.dashscope.api-key=sk-你的API密钥
重要提示:永远不要将API密钥直接提交到版本控制系统!建议使用环境变量或专门的密钥管理工具:
properties复制spring.ai.dashscope.api-key=${DASHSCOPE_API_KEY}
获取API密钥的步骤:
- 访问阿里云DashScope官网并注册账号
- 进入控制台创建API密钥
- 确保已开通通义千问模型的服务权限
4. 智能体开发实战
4.1 基础智能体实现
创建com.example.ai.psychologist包,然后新建PsychologistAgent.java:
java复制package com.example.ai.psychologist;
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class PsychologistAgent implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// 1. 初始化模型
DashScopeApi dashScopeApi = DashScopeApi.builder()
.apiKey("sk-你的API密钥") // 实际开发中应从配置读取
.build();
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.build();
// 2. 构建智能体
ReactAgent agent = ReactAgent.builder()
.name("AI心理咨询师")
.model(chatModel)
.instruction("""
你是一名拥有10年临床经验的专业心理咨询师,擅长认知行为疗法(CBT)和正念疗法。
你的回答应该:
- 保持专业但温和的语气
- 提供具体可行的建议
- 对敏感问题保持谨慎
- 必要时建议寻求线下专业帮助
""")
.build();
// 3. 测试对话
String response = agent.call("我最近总是失眠,该怎么办?").getText();
System.out.println("AI心理咨询师:\n" + response);
}
}
4.2 运行与测试
启动应用后,你将在控制台看到类似输出:
code复制AI心理咨询师:
失眠是常见的睡眠障碍,我能理解你的困扰。作为专业建议:
1. 首先建议建立规律的作息时间,每天固定时间上床和起床
2. 睡前1小时避免使用电子设备,蓝光会影响褪黑素分泌
3. 可以尝试478呼吸法:吸气4秒→屏息7秒→呼气8秒,循环几次
4. 白天保持适量运动,但睡前3小时避免剧烈运动
...
5. 进阶功能扩展
5.1 多轮对话支持
基础版智能体只能处理单次交互。要实现对话记忆,可以引入ChatMemory:
java复制import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
// 在智能体构建时添加
ReactAgent agent = ReactAgent.builder()
// ...其他配置
.chatMemory(new InMemoryChatMemory())
.build();
5.2 Web接口暴露
将智能体转为REST服务:
java复制@RestController
@RequestMapping("/api/psychologist")
public class PsychologistController {
private final ReactAgent agent;
public PsychologistController(ReactAgent agent) {
this.agent = agent;
}
@PostMapping("/chat")
public String chat(@RequestBody String question) {
return agent.call(question).getText();
}
}
5.3 对话记录持久化
添加Spring Data JPA依赖后,可以创建对话记录实体:
java复制@Entity
public class Conversation {
@Id
@GeneratedValue
private Long id;
private String question;
private String answer;
private LocalDateTime timestamp;
// getters/setters
}
@Repository
public interface ConversationRepository extends JpaRepository<Conversation, Long> {
}
然后在Controller中注入Repository保存对话记录。
6. 生产环境注意事项
6.1 性能优化
- 启用响应式编程:使用WebFlux替代传统MVC
- 配置连接池:对高并发场景特别重要
- 实现缓存层:对常见问题缓存回答
6.2 安全防护
- 添加速率限制:防止API滥用
- 敏感词过滤:避免不当内容生成
- 用户认证:保护对话隐私
6.3 监控与日志
建议集成以下组件:
- Prometheus:监控API调用指标
- ELK Stack:集中管理对话日志
- Sentry:错误追踪
7. 调试技巧与常见问题
7.1 调试日志配置
在application.properties中添加:
properties复制logging.level.com.alibaba.cloud.ai=DEBUG
logging.level.org.springframework.ai=DEBUG
7.2 常见错误处理
-
API密钥无效:
- 检查密钥是否正确
- 确认服务区域是否匹配
-
模型不可用:
- 检查DashScope控制台,确认模型已开通
- 查看额度是否耗尽
-
响应超时:
- 适当增加超时设置:
properties复制spring.ai.dashscope.connect-timeout=30s spring.ai.dashscope.read-timeout=60s
- 适当增加超时设置:
-
内存溢出:
- 限制对话历史长度
- 对大响应启用流式处理
8. 项目扩展方向
这个基础项目可以沿多个方向扩展:
-
多模态支持:
- 集成语音输入/输出
- 添加情绪识别图像分析
-
专业领域深化:
- 细分心理咨询方向(如青少年、婚姻等)
- 对接专业心理测评量表
-
混合智能系统:
- AI初步咨询+人工专家转接
- 紧急情况预警机制
-
个性化学习:
- 基于用户历史构建心理画像
- 自适应对话策略
我在实际项目中发现,Spring AI最强大的地方在于它的模块化设计。当你想尝试新的AI能力时,通常只需添加对应的starter依赖,而不需要重写大量基础代码。比如要增加图像生成能力,只需添加:
xml复制<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope-image</artifactId>
<version>1.1.0.0-M5</version>
</dependency>
这种设计让AI应用的迭代变得异常高效。从第一个Demo到生产级应用,Spring AI都能提供恰到好处的支持。
