查看: 53|回复: 0

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

[复制链接]

2

主题

0

回帖

0

积分

积极分子

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2011-6-3
发表于 2026-3-31 14:01:00 | 显示全部楼层 |阅读模式

前言

Spring AI 是 Spring 官方推出的 AI 集成框架,让 Java 开发者能用熟悉的 Spring 风格快速接入各大 AI 模型。本文带你 10 分钟完成 OpenAI 接入,并实现流式对话效果。

一、环境准备

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>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 生态无缝集成;流式输出、多轮对话、结构化输出开箱即用。

觉得有帮助请点赞收藏!有问题欢迎评论区交流 🚀

回复

使用道具 举报

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

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部