找回密码
 立即注册
首页 业界区 安全 Spring AI实战:10分钟接入OpenAI实现流式对话 ...

Spring AI实战:10分钟接入OpenAI实现流式对话

祖娅曦 5 小时前
前言

Spring AI 是 Spring 官方推出的 AI 集成框架,让 Java 开发者能用熟悉的 Spring 风格快速接入各大 AI 模型。本文带你 10 分钟完成 OpenAI 接入,并实现流式对话效果。
一、环境准备
  1. <dependency>
  2.     <groupId>org.springframework.ai</groupId>
  3.     spring-ai-openai-spring-boot-starter</artifactId>
  4.     <version>1.0.0-M6</version>
  5. </dependency>
复制代码
二、配置 API Key
  1. # application.yml
  2. spring:
  3.   ai:
  4.     openai:
  5.       api-key: your-api-key-here
  6.       chat:
  7.         options:
  8.           model: gpt-4o-mini
  9.           temperature: 0.7
复制代码
三、普通对话
  1. @RestController
  2. @RequestMapping("/ai")
  3. public class ChatController {
  4.     private final ChatClient chatClient;
  5.     public ChatController(ChatClient.Builder builder) {
  6.         this.chatClient = builder
  7.             .defaultSystem("你是一个专业的Java技术顾问,回答简洁专业。")
  8.             .build();
  9.     }
  10.     @GetMapping("/chat")
  11.     public String chat(@RequestParam String message) {
  12.         return chatClient.prompt()
  13.             .user(message)
  14.             .call()
  15.             .content();
  16.     }
  17. }
复制代码
四、流式对话(打字机效果)
  1. @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
  2. public Flux<String> stream(@RequestParam String message) {
  3.     return chatClient.prompt()
  4.         .user(message)
  5.         .stream()
  6.         .content();
  7. }
  8. // 前端接收流式响应
  9. const eventSource = new EventSource("/ai/stream?message=介绍Spring AI");
  10. eventSource.onmessage = (event) => {
  11.     document.getElementById("output").innerHTML += event.data;
  12. };
  13. eventSource.onerror = () => eventSource.close();
复制代码
五、多轮对话(带记忆)
  1. @RestController
  2. public class MemoryChatController {
  3.     private final ChatClient chatClient;
  4.     public MemoryChatController(ChatClient.Builder builder, ChatMemory chatMemory) {
  5.         this.chatClient = builder
  6.             .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
  7.             .build();
  8.     }
  9.     @GetMapping("/memory-chat")
  10.     public String memoryChat(
  11.             @RequestParam String message,
  12.             @RequestParam(defaultValue = "default") String sessionId) {
  13.         return chatClient.prompt()
  14.             .user(message)
  15.             .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, sessionId))
  16.             .call()
  17.             .content();
  18.     }
  19. }
复制代码
六、结构化输出
  1. record MovieRecommendation(String title, String director, int year, String reason) {}
  2. @GetMapping("/recommend")
  3. public MovieRecommendation recommend(@RequestParam String genre) {
  4.     return chatClient.prompt()
  5.         .user("推荐一部" + genre + "类型的电影,用JSON格式返回")
  6.         .call()
  7.         .entity(MovieRecommendation.class);
  8. }
复制代码
总结

Spring AI 让 Java 开发者以最小的学习成本接入 AI 能力。核心优势:统一抽象(一套 API 支持 OpenAI、Azure、Ollama 等多个模型);Spring 生态无缝集成;流式输出、多轮对话、结构化输出开箱即用。

觉得有帮助请点赞收藏!有问题欢迎评论区交流
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册