一、环境准备

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐