JDK 17 及以上(需支持密封类和文本块等新特性)
Spring Boot 3.2.0 及以上(确保自动配置机制兼容)
Maven 3.6 + 或 Gradle 8.0+(依赖管理工具)
网络环境需支持访问目标 AI 服务商 API(如 OpenAI 需配置代理)
<!-- OpenAI模型支持 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>0.8.1</version> <!-- 最新版本需查看Spring官方仓库 --> </dependency> <!-- 向量数据库Redis支持 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-redis-spring-boot-starter</artifactId> <version>0.8.1</version> </dependency>
版本管理建议使用 Spring Dependency Management 统一控制:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>0.8.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
spring: ai: openai: api-key: ${OPENAI_API_KEY} chat: model: gpt-3.5-turbo temperature: 0.7 # 控制输出随机性,0-1之间
创建对话服务类:
@Service public class ChatService { private final ChatClient chatClient; // 构造函数注入Spring AI自动配置的ChatClient public ChatService(ChatClient chatClient) { this.chatClient = chatClient; } public String generateResponse(String userMessage) { // 构建用户消息 Prompt prompt = new Prompt( Message.user(userMessage), PromptOptions.builder() .withTemperature(0.6) // 覆盖全局配置 .build() ); // 调用AI模型并返回结果 return chatClient.call(prompt) .getResult() .getOutput() .getContent(); } }
public String multiTurnChat(String userMessage, List<Message> history) { // 构建包含历史记录的提示 List<Message> messages = new ArrayList<>(history); messages.add(Message.user(userMessage)); Prompt prompt = new Prompt(messages); ChatResponse response = chatClient.call(prompt); // 保存本轮对话 history.add(Message.assistant(response.getResult().getOutput().getContent())); return response.getResult().getOutput().getContent(); }
spring: ai: redis: vector-store: host: localhost port: 6379 index-name: document_embeddings dimension: 1536 # 需与嵌入模型维度匹配(如OpenAI的text-embedding-ada-002)
文档嵌入与检索流程
@Service public class DocumentService { private final EmbeddingClient embeddingClient; private final VectorStore vectorStore; public DocumentService(EmbeddingClient embeddingClient, VectorStore vectorStore) { this.embeddingClient = embeddingClient; this.vectorStore = vectorStore; } // 存储文档到向量数据库 public void storeDocument(String content, String metadata) { // 生成文本嵌入向量 Document document = new Document( content, Map.of("source", metadata, "timestamp", System.currentTimeMillis()) ); // 批量处理建议使用vectorStore.add(List<Document>) vectorStore.add(List.of(document)); } // 检索相似文档 public List<Document> searchSimilar(String query, int topK) { return vectorStore.similaritySearch( query, topK, // 可选:添加元数据过滤 SearchRequest.query(query).withFilter("source == 'tech-docs'") ); } }
模型选择策略
开发环境使用轻量模型(如 Hugging Face 的开源模型)
生产环境根据成本和性能选择 API 服务或私有部署模型
缓存机制
对频繁调用的嵌入结果进行缓存(使用 Spring Cache)
缓存常见问题的 AI 响应,减少 API 调用次数
错误处理
实现AiExceptionHandler处理 API 调用超时和限流
对敏感内容添加过滤机制,防止 prompt 注入
监控与可观测性
集成 Micrometer 监控 AI 调用次数和响应时间
记录关键对话日志(注意数据隐私合规)
多环境配置:使用 Spring Profiles 区分开发 / 测试 / 生产环境的 AI 模型参数
服务降级:当 AI 服务不可用时,启用预设的静态响应
水平扩展:无状态设计确保服务可通过负载均衡器水平扩展
成本控制:设置 API 调用配额和预算告警机制