当前位置: 首页 > news >正文

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”。

智能客服:结合对话记忆和多轮交互,实现语义理解和自动响应。

数据分析与预测:通过嵌入模型将文本 / 图像转换为向量,支持语义搜索和推荐系统。

下一次学习如何搭建一个智能客服

http://www.dtcms.com/a/302132.html

相关文章:

  • 盲盒抽卡机小程序系统开发:连接线上线下娱乐新桥梁
  • uniapp 更新apk有缓存点不动,卸载安装apk没有问题。android
  • 小程序组件的生命周期,以及在小程序中进行接口请求的方法设置
  • 网络编程概述与UDP编程
  • 【esp32s3】7 - VSCode + PlatformIO + Arduino + 构建项目
  • 基于神经网络的手写数字识别系统
  • 【论文阅读53】-CNN-LSTM-滑坡风险随时间变化研究
  • 【论文阅读】Safety Alignment Should Be Made More Than Just a Few Tokens Deep
  • cacti的RCE
  • 计算机视觉---Halcon概览
  • 实用工具类分享:BeanCopyUtils 实现对象深浅拷贝高效处理
  • 墨者:SQL手工注入漏洞测试(MySQL数据库-字符型)
  • haproxy实列
  • 开源AI智能体-JoyAgent集成Deepseek
  • AI论文阅读方法+arixiv
  • 元宇宙工厂前端新形态:Three.js与WebGL实现3D产线交互的轻量化之路
  • 使用std::transform实现并发计算
  • Java 开发新人,入职后的环境搭建和配置
  • 安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训
  • Netty中trySuccess和setSuccess的区别
  • python-内存管理
  • 【FAQ】MS Dynamics 365 Sales配置方法汇总
  • Linux中应用程序的安装于管理
  • Java面试宝典:Spring Boot
  • 基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现
  • 【Linux学习】(12)环境变量
  • 自定义spring-boot-starter
  • STM32F4—电源管理器
  • 网络安全笔记
  • 图像处理第三篇:初级篇(续)—— 照明的理论知识