01:SpringAI
一:SpringAI基础理论
Spring AI 是 Spring 官方在 2024 年推出的 AI 开发框架,旨在将 Spring 的设计原则——可移植性、模块化设计和 POJO 编程模型——应用到 AI 工程领域。它不是一个简单的 "AI SDK",而是一套完整的 AI 应用开发框架,让 Java 开发者可以用熟悉的 Spring Boot 风格来构建 AI 应用。
该项目的创立基于一个信念:下一波生成式 AI 应用程序将普及到多种编程语言,而不仅限于 Python 开发者。它借鉴了 LangChain 和 LlamaIndex 等 Python 项目的灵感,但并非直接移植。
核心定位:将企业的"数据"和"API"与"AI 模型"连接起来。
1.1:核心设计理念
Spring AI 的设计哲学完全传承自 Spring 框架:
| 理念 | 说明 |
|---|---|
| 依赖注入 | 通过 DI 管理 AI 组件,实现松耦合 |
| POJO 编程 | 使用普通 Java 对象进行开发,降低复杂度 |
| 模块化架构 | 各功能模块独立,可按需引入 |
| 可配置性 | 通过配置文件灵活切换实现 |
| 非侵入式集成 | 无需修改现有业务代码即可接入 AI 能力 |
| 约定优于配置 | 遵循 Spring Boot 的自动配置哲学 |
1.2:核心特性
1.2.1:全栈多供应商模型适配
深度对接主流 AI 服务商:
聊天模型:OpenAI、Anthropic (Claude)、通义千问、DeepSeek、Ollama 等
嵌入模型:文本向量化、语义搜索
多模态模型:图像识别、视频理解、音频转录
语音交互:音频转录、文本转语音
所有模型统一接口封装,切换模型无需修改业务代码。
1.2.2:标准化抽象 API
提供ChatClient、EmbeddingModel、ImageModel等标准化接口,支持:
同步和流式 API 调用
结构化输出:将 AI 非结构化响应自动映射到 Java POJO
模型特定高级功能(如 Function Calling)
1.2.3:原生集成 Spring Boot
通过 Starter 依赖与自动装配实现一键集成
Spring Initializr 可快速生成项目骨架
支持虚拟线程、GraalVM 原生镜像
通过 Micrometer 实现可观测性
集成 Spring Boot DevTools、Docker Compose 和 Testcontainers
1.2.4:向量数据库与 RAG 支持
跨向量存储提供商提供便携式 API,支持:
Apache Cassandra、Milvus、PGVector、Redis、Elasticsearch、Chroma 等
类 SQL 元数据过滤器 API
检索增强生成(RAG)
1.2.5:工具/函数调用
允许 AI 模型请求执行客户端工具和函数,按需访问实时信息并采取行动。支持通过@Tool注解或java.util.Function对象定义工具。
1.2.6:ETL 框架与可观测性
数据工程的文档摄取 ETL 框架
AI 相关操作的可观测性支持
AI 模型评估工具,帮助防止幻觉响应
1.2.7:Advisors API
封装常见的生成式 AI 模式,转换发送给和来自 LLM 的数据,实现"针对文档的问答"等常见用例。
1.3:核心概念与架构
1.3.1:核心概念
| 概念 | 说明 |
|---|---|
| Model(模型) | 处理和生成信息的算法,Spring AI 支持语言、图像、音频的输入输出 |
| Prompt(提示词) | 引导 AI 模型产生特定输出的语言输入,包含 system/user 等角色 |
| Prompt Template(提示模板) | 使用 StringTemplate 创建和管理提示,支持占位符填充 |
| Embedding(嵌入) | 文本/图像/视频的向量表示,用于捕捉语义关系 |
| Token(令牌) | AI 模型工作的基本单元,约 0.75 个英文单词 |
1.3.2:架构分层
Spring AI 的架构可分为三层:
接口层:通过
AIClient等接口定义 AI 服务的标准调用方式,支持同步/异步核心引擎层:模型管理与动态路由,支持模型版本管理和 A/B 测试
基础设施层:通过自动配置机制支持自定义序列化器、请求拦截器、健康检查等扩展
核心模块包括:
Core Abstractions:统一的 AI 任务抽象
Extensions:通过 Spring 自动配置集成企业级组件
Ecosystem:与 Spring Cloud、Spring Data 等无缝融合
1.4:快速上手
1.4.1:添加依赖
在pom.xml中添加 Spring Milestones 仓库和 BOM:
<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> <properties> <spring-ai.version>1.1.2</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> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> </dependencies>1.4.2:配置 API Key
在application.yml中配置:
spring: ai: openai: api-key: ${OPENAI_API_KEY} chat: options: model: gpt-4o国内开发者可使用阿里云通义千问。
1.4.3:编写调用代码
通过ChatClient即可完成 AI 调用。
1.5:适用场景
| 场景 | 说明 |
|---|---|
| 智能客服 | 传统企业应用快速接入智能问答 |
| RAG 知识库 | 从零搭建基于文档的问答系统 |
| 内容生成 | 代码生成、文案创作、文本摘要 |
| 语义搜索 | 基于文本嵌入的相似性检索 |
| 微服务 AI 模块 | 独立部署 AI 服务模块 |
| AI Agent 开发 | 构建具备工具调用能力的智能体 |
1.6:总结
Spring AI 的核心价值在于:
统一抽象:一套接口覆盖所有主流 AI 模型,切换零成本
降低门槛:Java 开发者无需 AI 底层知识即可集成 AI 能力
企业级就绪:继承 Spring Boot 的生产级特性,开箱即用
完整生态:覆盖模型调用、向量存储、RAG、Agent 等全流程
官方资源:
官网:https://spring.io/projects/spring-ai[reference:64]
官方文档:https://docs.spring.io/spring-ai/reference/index.html[reference:65]
中文文档:https://spring-ai.springdoc.cn/docs/1.0.0/index.html[reference:66]
二:SpringAI特性介绍
Spring AI 是一个面向人工智能工程的应用框架。解决了 AI 集成的基本挑战:将企业数据和API与AI 模型连接起来。
2.1:特性
2.1.1:提示词工厂
可以说是大模型应用中最简单也是最核心的一个技术。他是我们更大模型交互的媒介,提示词给的好大模型才能按你想要的方式响应。
2.1.2:对话拦截advisors
面向切面的思想对对模型对话和响应进行增强。
2.1.3:对话记忆
@Autowired ChatMemoryRepository chatMemoryRepository;通过一个bean组件就可以让大模型拥有对话记忆功能,可谓是做到了开箱即用
2.1.4:tools
让大模型可以跟企业业务API进行互联 ,这一块实现起来也是非常的优雅
class DateTimeTools { @Tool(description = "Get the current date and time in the user's timezone") String getCurrentDateTime() { return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString(); } }2.1.5:RAG技术下的 ETL
让大模型可以跟企业业务数据进行互联(包括读取文件、分隔文件、向量化) 向量数据库支持 目前支持20+种向量数据库的集成。
2.1.6:MCP
让tools外部化,形成公共工具让外部开箱即用。 原来MCP协议的JAVA SDK就是spring ai团队提供的 提供了MCP 客户端、服务端、以及MCP认证授权方案 ,还有目前正在孵化的Spring MCP Agent 开源项目:
2.1.7:模型的评估
可以测试大模型的幻觉反应
2.1.8:可观察性
它把AI运行时的大量关键指标暴露出来, 可以提供Spring Boot actuctor进行观测
2.1.9:agent应用
springai 提供了5种agent模式的示例
- Evaluator Optimizer – The model analyzes its own responses and refines them through a structured process of self-evaluation.
- Routing – This pattern enables intelligent routing of inputs to specialized handlers based on classification of the user request and context.
- Orchestrator Workers – This pattern is a flexible approach for handling complex tasks that require dynamic task decomposition and specialized processing
- Chaining – The pattern decomposes complex tasks into a sequence of steps, where each LLM call processes the output of the previous one.
- Parallelization – The pattern is useful for scenarios requiring parallel execution of LLM calls with automated output aggregation.
学完这5种你会对对模型下的agent应用有一个完整认识
2.2:langchain4j vs springAI
生态 | 不依赖Spring,需要单独集成Spring | Spring官方,和Spring无缝集成 |
诞生 | 更早,中国团队,受 LangChain 启发 | 稍晚,但是明显后来居上 |
jdk | v0.35.0 前的版本支持jdk8 ,后支持jdk17 | 全版本jdk17 |
功能 | 没有mcp server, 官方建议使用quarkus-mcp-server | 早期落后langchain4j, 现在功能全面,并且生态活跃,开源贡献者众多 |
易用性 | 尚可,中文文档 | 易用,api优雅 |
最终 | 不需要spring选择! | 无脑选! |
三:SpringAi快速使用-DeepSeek
代码git地址:
3.1:父工程-MyAi
3.1.1:pom
<?xml version="1.0" encoding="UTF-8"?> <!-- Maven项目对象模型(POM)根元素 --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- POM模型版本 --> <modelVersion>4.0.0</modelVersion> <!-- 父项目配置:继承Spring Boot的默认配置 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.5.3</version> <relativePath/> </parent> <!-- 项目组织标识符 --> <groupId>com.zgs</groupId> <!-- 项目名称 --> <artifactId>MyAi</artifactId> <!-- 项目版本 --> <version>1.0-SNAPSHOT</version> <!-- 项目名称显示名 --> <name>MyAi</name> <!-- 项目描述 --> <description>MyAi</description> <!-- 打包方式:pom表示这是一个聚合项目或父项目 --> <packaging>pom</packaging> <!-- 子模块配置 --> <modules> <module>ai-quick-start</module> </modules> <!-- 项目属性配置 --> <properties> <!-- Java编译器源码版本 --> <maven.compiler.source>17</maven.compiler.source> <!-- Java编译器目标版本 --> <maven.compiler.target>17</maven.compiler.target> <!-- 项目构建编码格式 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- Spring AI版本号 --> <spring-ai.version>1.0.0</spring-ai.version> </properties> <!-- 项目依赖配置 --> <dependencies> <!-- Spring Boot Web starter:提供Web开发功能(包含Tomcat、Spring MVC等) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Test starter:提供测试功能(JUnit、Mockito等) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 依赖管理:统一管理依赖版本,不直接引入依赖 --> <dependencyManagement> <dependencies> <!-- Spring AI BOM:统一管理的AI相关依赖版本 --> <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> <!-- 构建配置 --> <build> <!-- 插件配置 --> <plugins> <!-- Spring Boot Maven插件:支持打包和运行Spring Boot应用 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>3.2:子工程-ai-quick-start
3.2.1:pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.zgs</groupId> <artifactId>MyAi</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>ai-quick-start</artifactId> <version>1.0-SNAPSHOT</version> <name>ai-quick-start</name> <description>ai-quick-start</description> <properties> <java.version>17</java.version> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-ai.version>1.1.0</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> <dependencies> <!--接入deepseek--> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-deepseek</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>3.2.2:application.yml
spring: application: name: ai-quick-start ai: deepseek: api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-v4-flash3.2.3:DeepSeekTest
<artifactId>spring-ai-starter-model-deepseek</artifactId>会为你增加自动配置类, 其中DeepSeekChatModel这个就是专门负责智能对话的。
package com.zgs.deepseek; import org.junit.jupiter.api.Test; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.deepseek.DeepSeekAssistantMessage; import org.springframework.ai.deepseek.DeepSeekChatModel; import org.springframework.ai.deepseek.DeepSeekChatOptions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import reactor.core.publisher.Flux; /** * @description: deepseek测试 * @author: zgs * @date: 2026/6/17 10:36 */ @SpringBootTest public class DeepSeekTest { /** * <artifactId>spring-ai-starter-model-deepseek</artifactId> * 会为你增加自动配置类, * 其中DeepSeekChatModel这个就是专门负责智能对话的。 * * @author: zgs * @date: 2026/6/17 11:22 */ @Test public void testDeepSeek(@Autowired DeepSeekChatModel chatModel) { String call = chatModel.call("你好 你是谁"); System.out.println(call); } /** * 流式演示 * * @author: zgs * @date: 2026/6/17 11:22 */ @Test public void testDeepSeekStream(@Autowired DeepSeekChatModel chatModel) { Flux<String> stream = chatModel.stream("你好 你是谁"); stream.toIterable().forEach(System.out::println); } /** * 其它参数演示 * * @author: zgs * @date: 2026/6/17 11:22 */ @Test public void testDeepSeekParams(@Autowired DeepSeekChatModel chatModel) { DeepSeekChatOptions build = DeepSeekChatOptions.builder() .model("deepseek-v4-pro") .temperature(0.7) // .maxTokens(1024) .build(); Prompt prompt = new Prompt("给我讲一个笑话,请基于程序员思维讲一个笑话,不要讲其他的", build); ChatResponse response = chatModel.call(prompt); System.out.println(response.getResult().getOutput().getText()); } /** * 思考过程打印 * * @author: zgs * @date: 2026/6/17 11:22 */ @Test public void testDeepSeekThink(@Autowired DeepSeekChatModel chatModel) { DeepSeekChatOptions build = DeepSeekChatOptions.builder() .model("deepseek-v4-pro") .temperature(0.7) .maxTokens(1024) .build(); Prompt prompt = new Prompt("给我讲一个笑话,请基于程序员思维讲一个笑话,不要讲其他的", build); ChatResponse call = chatModel.call(prompt); DeepSeekAssistantMessage assistantMessage = (DeepSeekAssistantMessage) call.getResult().getOutput(); System.out.println(assistantMessage.getReasoningContent()); System.out.println("-----------------------------------------"); System.out.println(assistantMessage.getText()); } }3.3:参数讲解
3.3.1:temperatur
0-2 浮点数值
数值越高更有创造性 热情
数值越低 保守
也可以通过提示词降低他的主观臆想:
- 只引用可靠来源中的信息,不做任何假设或扩展描述。
- 请只基于已知事实回答,不要主观臆想或添加额外内容。
- 请简明、客观地给出答案,不要进行修饰或补充未经请求的信息。
建议
temperature 范围 | 建议业务场景 | 输出风格 | 说明/应用举例 |
0.0 ~ 0.2 | 严谨问答、代码补全、数学答题 | 严格、确定、标准 | 法律/金融答题、接口返回模板、考试答卷等 |
0.3 ~ 0.6 | 聊天机器人、日常摘要、辅助写作 | 稍有变化、较稳妥 | 公众号摘要、普通对话、邮件生成等 |
0.7 ~ 1.0 | 创作内容、广告文案、标题生成 | 丰富、有创意、灵活 | 诗歌、短文案、趣味对话、产品描述等 |
1.1 ~ 1.5 | 脑洞风格、头脑风暴、灵感碰撞场景 | 大开脑洞、变化极强 | 故事创作、异想天开的推荐语、多样化内容 |
说明:
- 温度越低,输出越收敛和中规中矩;
- 温度越高,输出越多变、富有惊喜但有风险;
- 实战用法一般建议选0.5~0.8作为日常生产起点,需要根据业务不断测试调整。
3.3.2:maxTokens
默认低 token
maxTokens:限制AI模型生成的最大token数(近似理解为字数上限)。
- 需要简洁回复、打分、列表、短摘要等,建议小值(如10~50)。
- 防止用户跑长对话导致无关内容或花费过多token费用。
- 如果遇到生成内容经常被截断,可以适当配置更大maxTokens。
3.3.3:stop
截断你不想输出的内容 比如:
spring: ai: deepseek: api-key: ${DEEP_SEEK_KEY} chat: options: model: deepseek-chat max-tokens: 20 stop: - "\n" #只想一行 - "。" #只想一句话 - "政治" #敏感词 - "最后最总结一下" #这种AI惯用的模板词, 减少AI词汇, 让文章更拟人3.4:原理
3.4.1:入口:ChatModel.call(String message)默认方法
default String call(String message) { Prompt prompt = new Prompt(new UserMessage(message)); Generation generation = call(prompt).getResult(); return (generation != null) ? generation.getOutput().getText() : ""; }你调用的chatModel.call("你好")并非DeepSeekChatModel直接实现,而是ChatModel接口提供的一个默认方法。这个方法充当了便捷入口的角色。
它的核心作用是将字符串参数转换为框架内部的标准对象:
将
"你好"封装成一个UserMessage对象。再将
UserMessage封装进一个Prompt对象。
Prompt是 Spring AI 的核心数据结构,可以包含多个Message(如系统消息、用户消息、AI消息等),用于构建完整的对话上下文。完成封装后,它会调用另一个重载方法call(Prompt)。
3.4.2:核心:DeepSeekChatModel.internalCall()
public ChatResponse internalCall(Prompt prompt, ChatResponse previousChatResponse) { // a ChatCompletionRequest request = createRequest(prompt, false); //..省略 ResponseEntity<ChatCompletion> completionEntity = this.retryTemplate // b .execute(ctx -> this.deepSeekApi.chatCompletionEntity(request)); var chatCompletion = completionEntity.getBody(); //..省略 ChatResponse chatResponse = new ChatResponse(generations, from(completionEntity.getBody(), accumulatedUsage)); observationContext.setResponse(chatResponse); return chatResponse; //.. 省略 return response; }框架会调用到DeepSeekChatModel类中对call(Prompt)方法的实现,其核心逻辑在internalCall方法中。这是整个流程的枢纽,主要完成三件事:
步骤a:构建请求 (
createRequest)
此步骤是一个适配器模式的体现。它将统一的Prompt对象,转换为 DeepSeek API 所能识别的ChatCompletionRequest对象。转换后的请求体通常包含:model: 指定使用的模型名称。messages: 将Prompt中的Message列表转换为 API 要求的格式(如{"role": "user", "content": "你好"})。参数: 如
temperature、max_tokens等生成参数。
步骤b:发起远程调用 (
retryTemplate.execute)DeepSeekChatModel内置了RetryTemplate,用于安全可靠地发起 HTTP 请求。当网络抖动或服务端临时不可用时,它会自动重试。
真正执行 HTTP 请求的是DeepSeekApi类,它封装了 DeepSeek 的 REST API。请求时会通过HTTP Header携带 API Key 进行认证。
向
https://api.deepseek.com/chat/completions等端点发送一个POST请求,请求体是步骤a构建的 JSON。
步骤c:封装响应
收到 DeepSeek API 返回的 HTTP 响应后(一个包含模型输出等信息的 JSON 对象),此步骤会解析 JSON,并将数据重新封装成 Spring AI 的标准对象ChatResponse。ChatResponse中包含一个或多个Generation对象,每个Generation都包含了模型的输出文本。
3.4.3:返回:结果提取
最后,控制权回到最外层的ChatModel.call(String)默认方法。它会从返回的ChatResponse中提取第一个Generation的文本内容,并将其作为String返回给你。至此,一次完整的 AI 调用就结束了。
3.4.4:总结
从源码角度看,DeepSeekChatModel.call("你好")的执行路径清晰地展示了 Spring AI 的设计哲学:
统一抽象:通过
ChatModel接口和Prompt/ChatResponse等对象,为开发者提供一致的编程模型。适配与转换:在核心实现层 (
internalCall) 完成从通用模型到特定厂商 API 的适配与数据转换。生产就绪:内置了重试 (
RetryTemplate)、可观测性 (ObservationContext)等企业级特性。
四:百炼
代码git地址:
阿里自己的团队维护spring-ai-alibaba. 但是也必须依赖spring-ai 。 好处是扩展度更高,坏处是必须是springai先出来, spring-ai-alibaba.延迟几天出来。
如果需要接入阿里的百炼平台, 就必须用该组件
4.1:SpringAI中接入百炼
4.1.1:申请api-key
在调用前,您需要开通模型服务并获取API Key,再配置API Key到环境变量。
获取APIKEY
写入到环境变量
4.1.2:父工程-POM
<?xml version="1.0" encoding="UTF-8"?> <!-- Maven项目对象模型(POM)根元素 --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- POM模型版本 --> <modelVersion>4.0.0</modelVersion> <!-- 父项目配置:继承Spring Boot的默认配置 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.5.3</version> <relativePath/> </parent> <!-- 项目组织标识符 --> <groupId>com.zgs</groupId> <!-- 项目名称 --> <artifactId>MyAi</artifactId> <!-- 项目版本 --> <version>1.0-SNAPSHOT</version> <!-- 项目名称显示名 --> <name>MyAi</name> <!-- 项目描述 --> <description>MyAi</description> <!-- 打包方式:pom表示这是一个聚合项目或父项目 --> <packaging>pom</packaging> <!-- 子模块配置 --> <modules> <module>ai-quick-start</module> </modules> <!-- 项目属性配置 --> <properties> <!-- Java编译器源码版本 --> <maven.compiler.source>17</maven.compiler.source> <!-- Java编译器目标版本 --> <maven.compiler.target>17</maven.compiler.target> <!-- 项目构建编码格式 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- Spring AI版本号 --> <spring-ai.version>1.0.0</spring-ai.version> <!-- 阿里云AI BOM 版本号 --> <spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version> </properties> <!-- 项目依赖配置 --> <dependencies> <!-- Spring Boot Web starter:提供Web开发功能(包含Tomcat、Spring MVC等) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Test starter:提供测试功能(JUnit、Mockito等) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 依赖管理:统一管理依赖版本,不直接引入依赖 --> <dependencyManagement> <dependencies> <!-- Spring AI BOM:统一管理的AI相关依赖版本 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 阿里云AI BOM:统一管理的阿里云AI相关依赖版本 --> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-bom</artifactId> <version>${spring-ai-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 构建配置 --> <build> <!-- 插件配置 --> <plugins> <!-- Spring Boot Maven插件:支持打包和运行Spring Boot应用 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>4.1.3:子工程-pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.zgs</groupId> <artifactId>MyAi</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>ai-quick-start</artifactId> <version>1.0-SNAPSHOT</version> <name>ai-quick-start</name> <description>ai-quick-start</description> <properties> <java.version>17</java.version> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-ai.version>1.1.0</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> <dependencies> <!--接入deepseek--> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-deepseek</artifactId> </dependency> <!--接入dashscope--> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-dashscope</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>4.1.4:配置YML
spring: application: name: ai-quick-start profiles: active: local ai: # deepseek deepseek: api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-v4-flash # 阿里qWen dashscope: api-key: ${ALI_API_KEY} # chat: # options: # model: qwen-plus4.1.5:简单测试示例
/** * @description: qwen测试 * @author: zgs * @date: 2026/6/17 17:31 */ @SpringBootTest public class QWenTest { @Test public void testQWen(@Autowired DashScopeChatModel chatModel) { DashScopeChatOptions options = DashScopeChatOptions.builder() .withModel("qwen3.6-plus") .build(); Prompt prompt = new Prompt("你好 你是谁", options); String message = chatModel.call(prompt).getResult().getOutput().getText(); System.out.println(message); } }