前言
Spring AI 是 Spring 官方推出的 AI 集成框架,让 Java 开发者能用熟悉的 Spring 风格快速接入各大 AI 模型。本文带你 10 分钟完成 OpenAI 接入,并实现流式对话效果。
一、环境准备
- <dependency>
- <groupId>org.springframework.ai</groupId>
- spring-ai-openai-spring-boot-starter</artifactId>
- <version>1.0.0-M6</version>
- </dependency>
复制代码 二、配置 API Key
- # application.yml
- spring:
- ai:
- openai:
- api-key: your-api-key-here
- chat:
- options:
- model: gpt-4o-mini
- temperature: 0.7
复制代码 三、普通对话
- @RestController
- @RequestMapping("/ai")
- public class ChatController {
- private final ChatClient chatClient;
- public ChatController(ChatClient.Builder builder) {
- this.chatClient = builder
- .defaultSystem("你是一个专业的Java技术顾问,回答简洁专业。")
- .build();
- }
- @GetMapping("/chat")
- public String chat(@RequestParam String message) {
- return chatClient.prompt()
- .user(message)
- .call()
- .content();
- }
- }
复制代码 四、流式对话(打字机效果)
- @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
- public Flux<String> stream(@RequestParam String message) {
- return chatClient.prompt()
- .user(message)
- .stream()
- .content();
- }
- // 前端接收流式响应
- const eventSource = new EventSource("/ai/stream?message=介绍Spring AI");
- eventSource.onmessage = (event) => {
- document.getElementById("output").innerHTML += event.data;
- };
- eventSource.onerror = () => eventSource.close();
复制代码 五、多轮对话(带记忆)
- @RestController
- public class MemoryChatController {
- private final ChatClient chatClient;
- public MemoryChatController(ChatClient.Builder builder, ChatMemory chatMemory) {
- this.chatClient = builder
- .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
- .build();
- }
- @GetMapping("/memory-chat")
- public String memoryChat(
- @RequestParam String message,
- @RequestParam(defaultValue = "default") String sessionId) {
- return chatClient.prompt()
- .user(message)
- .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, sessionId))
- .call()
- .content();
- }
- }
复制代码 六、结构化输出
- record MovieRecommendation(String title, String director, int year, String reason) {}
- @GetMapping("/recommend")
- public MovieRecommendation recommend(@RequestParam String genre) {
- return chatClient.prompt()
- .user("推荐一部" + genre + "类型的电影,用JSON格式返回")
- .call()
- .entity(MovieRecommendation.class);
- }
复制代码 总结
Spring AI 让 Java 开发者以最小的学习成本接入 AI 能力。核心优势:统一抽象(一套 API 支持 OpenAI、Azure、Ollama 等多个模型);Spring 生态无缝集成;流式输出、多轮对话、结构化输出开箱即用。
觉得有帮助请点赞收藏!有问题欢迎评论区交流
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |