news 2026/5/27 17:31:38

Spring AI 1.1.4 开发者使用手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring AI 1.1.4 开发者使用手册

1. 快速开始

1.1 概述

Spring AI 是 Spring 生态系统的 AI 应用开发框架,提供统一的 API 抽象,支持 20+ AI 模型提供商和 19+ 向量数据库。

1.2 最小可运行示例

@SpringBootApplication public class MyAiApplication {        public static void main(String[] args) {        SpringApplication.run(MyAiApplication.class, args);   }        @Bean    CommandLineRunner demo(ChatClient chatClient) {        return args -> {            String response = chatClient.prompt()               .user("Hello, Spring AI!")               .call()               .content();            System.out.println(response);       };   } }

2. 环境搭建与依赖配置

2.1 系统要求

组件最低版本推荐版本
Java1721
Spring Boot3.2.x3.5.x
Maven3.6+3.9+

2.2 BOM 依赖管理

pom.xml中添加 Spring AI BOM:

<properties>    <spring-ai.version>1.1.4</spring-ai.version> </properties> ​ <dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.ai</groupId>            <artifactId>spring-ai-bom</artifactId>            <version>${spring-ai.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies> </dependencyManagement>

2.3 模型提供商依赖

OpenAI
<dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-starter-model-openai</artifactId> </dependency>

application.yml 配置:

spring: ai:   openai:     api-key: ${OPENAI_API_KEY}     base-url: https://api.openai.com  # 可选,用于代理     chat:       options:         model: gpt-4         temperature: 0.7         max-tokens: 2000
智谱 AI (ZhiPuAI)
<dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-starter-model-zhipuai</artifactId> </dependency>

application.yml 配置:

spring: ai:   zhipuai:     api-key: ${ZHIPUAI_API_KEY}     chat:       options:         model: glm-4         temperature: 0.7         max-tokens: 2000
Ollama(本地模型)
<dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-starter-model-ollama</artifactId> </dependency>

application.yml 配置:

spring: ai:   ollama:     base-url: http://localhost:11434     chat:       options:         model: llama3         temperature: 0.7

2.4 环境变量管理

开发环境-.env文件(配合spring-dotenv):

# .env OPENAI_API_KEY=sk-xxx ZHIPUAI_API_KEY=xxx.xxx PGVECTOR_HOST=localhost PGVECTOR_PORT=5432 PGVECTOR_DATABASE=vectordb PGVECTOR_USER=postgres PGVECTOR_PASSWORD=secret

生产环境- Kubernetes Secret:

apiVersion: v1 kind: Secret metadata: name: ai-config type: Opaque stringData: OPENAI_API_KEY: "sk-xxx" ZHIPUAI_API_KEY: "xxx"

3. ChatModel 集成指南

3.1 基础对话实现

方式一:使用 ChatClient(推荐)
@Service public class ChatService {        private final ChatClient chatClient;        public ChatService(ChatClient.Builder chatClientBuilder) {        this.chatClient = chatClientBuilder           .defaultSystem("你是一个专业的技术助手")           .defaultOptions(ChatOptions.builder()               .temperature(0.7)               .maxTokens(2000)               .build())           .build();   }        public String chat(String message) {        return chatClient.prompt()           .user(message)           .call()           .content();   } }
方式二:直接使用 ChatModel
@Service public class AdvancedChatService {        @Autowired    private ChatModel chatModel;        public String chatWithHistory(String message, List<Message> history) {        List<Message> messages = new ArrayList<>(history);        messages.add(new UserMessage(message));                Prompt prompt = new Prompt(messages);        ChatResponse response = chatModel.call(prompt);                return response.getResult().getOutput().getText();   } }

3.2 系统提示与用户提示

public String chatWithContext(String userMessage) {    return chatClient.prompt()       .system("""            你是一个专业的 Java 开发助手。            请遵循以下原则:            1. 提供清晰的代码示例            2. 解释关键概念            3. 指出最佳实践            """)       .user(userMessage)       .call()       .content(); }

3.3 参数配置详解

参数类型说明推荐值
temperatureDouble创造性程度(0-2)0.3-0.7
maxTokensInteger最大生成 token 数500-4000
topPDouble核采样概率0.9-1.0
frequencyPenaltyDouble频率惩罚(-2~2)0.0
presencePenaltyDouble存在惩罚(-2~2)0.0

运行时动态配置

public String chatWithOptions(String message, double temperature) {    return chatClient.prompt()       .user(message)       .options(ChatOptions.builder()           .temperature(temperature)           .maxTokens(1000)           .build())       .call()       .content(); }

3.4 结构化输出

POJO 定义
public record ActorFilms(    String actor,    List<String> movies ) {} ​ public record WeatherResponse(    String city,    double temperature,    String condition,    @JsonProperty("humidity_percent") int humidity ) {}
实体映射
public ActorFilms getActorFilms(String actorName) { return chatClient.prompt() .user("列出 " + actorName + " 主演的5部电影") .call() .entity(ActorFilms.class); }
列表输出
public List<String> getMovieRecommendations(String genre) { return chatClient.prompt() .user("推荐5部" + genre + "类型的电影") .call() .entity(new ParameterizedTypeReference<List<String>>() {}); }

3.5 多轮对话管理

@Service public class ConversationService {        private final ChatClient chatClient;    private final ChatMemory chatMemory;        public String chat(String conversationId, String message) {        return chatClient.prompt()           .advisors(new MessageChatMemoryAdvisor(chatMemory, conversationId, 10))           .user(message)           .call()           .content();   } } ​ // ChatMemory 配置 @Bean public ChatMemory chatMemory() {    // 内存存储(开发/测试)    return new InMemoryChatMemory();        // 或 Redis 存储(生产)    // return new RedisChatMemory(redisTemplate, Duration.ofHours(24)); }

4. StreamingChatModel 流式响应

4.1 基础流式实现

@RestController @RequestMapping("/api/chat") public class ChatStreamController {        @Autowired    private ChatClient chatClient;        @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)    public Flux<String> streamChat(@RequestParam String message) {        return chatClient.prompt()           .user(message)           .stream()           .content();   } }

4.2 带上下文的流式响应

@GetMapping(value = "/stream-with-context", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<ServerSentEvent<String>> streamWithContext(@RequestParam String message) {    return chatClient.prompt()      
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 3:00:57

阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案

近期&#xff0c;许多开发者在使用阿里云百炼 Coding Plan 时遇到了困扰&#xff1a;订阅页面显示“售罄”&#xff0c;备受关注的 Lite 基础套餐也已停止新购&#xff0c;而 Pro 高级版同样难以抢购。这究竟是怎么回事&#xff1f;别担心&#xff0c;本文将为大家解析当前情况…

作者头像 李华
网站建设 2026/5/23 1:52:52

MS5611高精度气压温度传感器Arduino驱动库

1. 项目概述MS5611-Mike-Refactored 是一款面向嵌入式平台&#xff08;特别是 Arduino 兼容生态&#xff09;的 MS5611 高精度气压/温度传感器驱动库。该库并非简单封装&#xff0c;而是对 Korneliusz Jarzebski 原始实现的一次系统性重构与工程化增强。其核心目标是将一个基础…

作者头像 李华
网站建设 2026/5/23 1:52:49

华为eNSP模拟器USG6000V防火墙telnet配置

前前后后改了好几版&#xff0c;如有错误&#xff0c;欢迎指出&#xff01;接在默认管理接口的配置&#xff1a;服务器端&#xff1a;[FW]telnet server enable# 开启telnet服务[FW-GigabitEthernet0/0/0]ip address ip地址 子网掩码# 设置接口ip地址&#xff0c;此处未打&…

作者头像 李华
网站建设 2026/5/23 1:52:50

新手福音:用快马平台理解openclaw架构图并生成你的第一个应用

新手福音&#xff1a;用快马平台理解openclaw架构图并生成你的第一个应用 作为一个刚入门的开发者&#xff0c;第一次看到openclaw架构图时&#xff0c;那些方框和箭头让我一头雾水。直到在InsCode(快马)平台上动手实践后&#xff0c;才发现原来架构图可以这么直观。下面分享我…

作者头像 李华
网站建设 2026/5/23 1:52:50

计算机毕业设计springboot在线音乐网站 基于SpringBoot框架的数字音乐流媒体服务平台 基于Java Web的热门音乐资源管理与分享系统

计算机毕业设计springboot在线音乐网站&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在数字化浪潮席卷全球的当下&#xff0c;互联网技术的深度普及彻底改变了人们获取和消费音…

作者头像 李华
网站建设 2026/5/23 1:52:54

二次元创作工具:OpenClaw+Qwen3.5-9B-AWQ-4bit自动生成角色设定稿

二次元创作工具&#xff1a;OpenClawQwen3.5-9B-AWQ-4bit自动生成角色设定稿 1. 为什么需要自动化角色设定工具 作为一个长期沉迷二次元创作的画手&#xff0c;我经常遇到角色设定灵感枯竭的问题。传统创作流程中&#xff0c;我们需要先构思人物背景、性格特征、服装细节&…

作者头像 李华