Spring ai 调用大模型
一、Spring AI(技术框架)
Spring AI 是 Spring 官方推出的人工智能开发框架,旨在将 Spring 生态的设计理念(如模块化、可移植性)引入 AI 领域,帮助 Java 开发者便捷地集成大语言模型(LLM)、向量数据库等 AI 能力。以下是其核心特点和功能:
1. 核心定位与目标
降低开发门槛:通过标准化接口(如 ChatClient)和自动配置(Spring Boot Starter),开发者无需深入 AI 底层即可调用主流模型(如 OpenAI、Anthropic、Google Gemini 等)。
企业级工程化:解决生产环境中的稳定性、可观测性和成本控制问题,支持函数调用、结构化输出映射(POJO)、AOT 原生镜像优化等企业级功能。
生态融合:无缝集成 Spring Boot、Spring Cloud,可复用现有 Spring 开发经验,例如通过 @Bean 配置模型客户端,或利用 Spring 的依赖注入管理 AI 组件。
2. 关键技术与功能
多模型支持:覆盖聊天、嵌入、图像生成等多模态能力,支持 20+ 模型供应商(如 Ollama、阿里云百炼),并提供跨模型可移植的 API。
向量数据库集成:抽象统一的向量存储接口,兼容 Chroma、Milvus、PostgreSQL/PGVector 等 15+ 数据库,内置轻量级 ETL 框架处理文档注入。
智能体(Agent)开发:通过模型上下文协议(MCP)支持自主决策的智能体,可动态发现工具、维护执行记忆,并递归优化策略。
可观测性:集成 Spring 监控工具(如 Micrometer),跟踪模型调用指标、提示词模板性能和向量存储状态,便于调试和优化。
二、Spring AI 使用
1,接入大模型
1,首先创建一个spring boot 的项目,下面是我的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.2</version> <relativePath/></parent><groupId>com.ai</groupId><artifactId>spring-ai</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai</name><description>spring-ai</description><properties><java.version>17</java.version><spring-ai.version>1.0.0-M6</spring-ai.version> <!-- 统一Spring AI版本 --></properties><dependencyManagement><dependencies><!-- Spring AI BOM:版本与spring-ai.version一致,统一管理所有Spring 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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI 核心依赖 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-core</artifactId><version>${spring-ai.version}</version></dependency><!-- OpenAI Starter(自动配置ChatClient的核心依赖) --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>${spring-ai.version}</version></dependency><!-- 响应式支持(Flux依赖) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><repositories><!-- 里程碑仓库(获取1.0.0-M6版本) --><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><!-- 快照仓库(可选,如需SNAPSHOT版本时开启) --><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
2,修改application.yml文件
spring:ai:openai:api-key: 你的keybase-url: https://api.siliconflow.cnchat:options:model: Qwen/Qwen2.5-7B-Instruct #(模型名字)# OpenAI 客户端专属的重试配置(推荐)retry:max-attempts: 3 # 最大尝试次数(包括首次调用,默认值通常为3)backoff:initial-interval: 1000ms # 首次重试的间隔时间(默认1000ms)max-interval: 3000ms # 最大重试间隔(默认3000ms)multiplier: 1.5 # 间隔倍数(下次间隔 = 当前间隔 * multiplier,默认1.0)
你的key可以去硅基流动里面拿,选择一个喜欢的模型进行调用
3,创建controller进行测试
package com.ai.springai.config;import com.ai.springai.dto.ChatDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.ai.chat.client.ChatClient;/*** @author kk* @version 1.0* @description: TODO* @date 2025-07-25 11:16*/
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/test")
@Slf4j
public class ModelController {private ChatClient chatClient;public ModelController(ChatClient.Builder builder) {this.chatClient = builder.defaultSystem("假如你是特朗普,请以特朗普的身份回答问题").build();}@PostMapping("/ai/chat")public String chatApi(@RequestBody ChatDto chatDto) {return chatClient.prompt().user(chatDto.getMessage()).call().content();}}
进行调用发现
很有意思的一个点,你要是问他几点了
4,工具调用
如何可以知道现在几点了,需要调用工具类,可以自己写,那些模型可以调用呢?
查看硅基流动页面
使用方法。
package com.ai.springai.config;import com.ai.springai.dto.ChatDto;
import com.ai.springai.tools.DateTimeTools;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.*;/*** @author wkk* @version 1.0* @description: TODO* @date 2025-07-25 15:54*/
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/qwen")
@Slf4j
public class QwenController {private ChatClient chatClient;public QwenController(ChatClient.Builder builder) {this.chatClient = builder.defaultSystem("你是机器人小美,请根据用户提问回答").defaultTools(DateTimeTools.class).build();}/*** @param* @return*/@PostMapping("/tool")public String get(@RequestBody ChatDto chatDto) {return chatClient.prompt(chatDto.getPrompt()).tools(new DateTimeTools()).call().content();}}
package com.ai.springai.tools;import org.springframework.ai.tool.annotation.Tool;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; /*** @author wkk* @version 1.0* @description: TODO* @date 2025-07-25 15:58*/
@Component
public class DateTimeTools {@Tool(description = "获取用户时区的当前日期和时间")String getCurrentDateTime() {return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();}@Tool(description = "在给定时间设置用户提醒,以 ISO-8601 格式提供")void setAlarm(String time) {LocalDateTime alarmTime = LocalDateTime.parse(time, DateTimeFormatter.ISO_DATE_TIME);System.out.println("Alarm set for " + alarmTime);}}
测试一把
获取时间。
以上就是springai的基本调用大模型的使用
典型应用场景
知识问答系统:基于企业文档构建检索增强生成(RAG)应用,例如 “Chat with Your Documentation”。
智能客服:结合对话记忆和多轮交互,实现语义理解和自动响应。
数据分析与预测:通过嵌入模型将文本 / 图像转换为向量,支持语义搜索和推荐系统。
下一次学习如何搭建一个智能客服