ai(3) spring ai 大模型的调用

  1. 上一篇
    1.  ai(2) 大模型的调用
  2. 创建一个spring ai项目
    1. jdk25 + springboot4.1.0 + spring ai 2.0.0-M2
    2. image

      image

  3. 增加pom,添加需要的依赖。比如智谱官方 SDK ,openai 、deepseek等

    1. <?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>com.zwj</groupId>
      <artifactId>zwj-one-ai</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      </parent>

      <artifactId>zwj-one-ai-core</artifactId>

      <properties>
      <java.version>25.0.3</java.version>
      <spring-ai.version>2.0.0-M2</spring-ai.version>
      <lombok.version>1.18.46</lombok.version>
      <logback.version>1.5.25</logback.version>
      <!-- <jackson.version>3.1.1</jackson.version>-->
      <tomcat.version>11.0.21</tomcat.version>
      <spring-framework.version>7.0.7</spring-framework.version>
      <!-- Jackson 统一版本:修复 WS-2026-0003 -->
      <jackson.version>2.21.2</jackson.version>
      <assertj.version>3.27.7</assertj.version>
      <!-- <bouncycastle.version>1.84</bouncycastle.version>-->
      <!-- 修复所有 Hutool 高危漏洞,直接升级到安全版本 -->
      <hutool.version>5.8.40</hutool.version>
      <!-- core/databind 用 3.1.1(groupId=tools.jackson.core) -->
      <jackson3.version>3.1.1</jackson3.version>
      <!-- annotations 用 2.x 最新安全版 -->
      <jackson.annotations.version>2.21.3</jackson.annotations.version>
      <!-- Netty 安全版本(修复 CVE-2026-33871 + CVE-2026-33870) -->
      <netty.version>4.2.13.Final</netty.version>

      <exp4j.version>0.4.8</exp4j.version>
      <mybatis-plus.version>3.5.15</mybatis-plus.version>

      <zwj-log.starter.version>0.0.1-SNAPSHOT</zwj-log.starter.version>
      <zwj-web-starter.version>0.0.1</zwj-web-starter.version>
      <tika-core.version>3.2.2</tika-core.version>
      <hutool-all.version>5.8.40</hutool-all.version>

      </properties>

      <dependencies>
      <!-- 依赖 contract 模块 -->
      <dependency>
      <groupId>com.zwj</groupId>
      <artifactId>zwj-one-ai-contract</artifactId>
      </dependency>

      <!-- =====================Spring boot===================== -->

      <!-- Spring Boot 核心依赖,包含了 Spring Boot 的自动配置和启动器。
      Spring Boot 自动配置:Spring Boot 会根据项目的依赖自动配置应用程序,减少了手动配置的工作量。
      Spring Boot 启动器:启动器是一组依赖的集合,用于简化项目的依赖管理。例如,spring-boot-starter-web 启动器包含了构建 Web 应用所需的所有依赖。
      Spring Boot 应用程序:Spring Boot 应用程序是一个独立的可执行 JAR 文件,包含了所有的依赖和配置信息。 -->
      <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <!-- 生产级监控和管理‌的核心模块
      健康检查 (Health Checks): /actuator/health 端点提供应用的健康状态,包括数据库连接、缓存、消息队列等。
      指标收集 (Metrics):/actuator/metrics 端点提供应用的运行时指标,如 CPU 使用率、内存占用、请求计数等。
      应用信息暴露 (Info & Env):/actuator/info 和 /actuator/env 端点提供应用的基本信息和环境变量。
      /actuator/beans:查看 Spring 容器中所有 Bean 的列表及其依赖关系。
      /actuator/configprops:查看应用中所有配置属性的详细信息。
      /actuator/metrics:查看应用的运行时指标,如内存使用、请求计数等。
      /actuator/loggers:动态查看和修改日志级别(无需重启应用即可调整日志输出等级)。
      /actuator/threaddump:获取线程快照,用于排查死锁或性能瓶颈。
      /actuator/shutdown:优雅关闭应用(默认禁用,需手动开启) -->
      <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>

      <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      </dependency>

      <!-- Spring AI 核心客户端 -->
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-client-chat</artifactId>
      </dependency>


      <!-- &lt;!&ndash; Spring AI &ndash;&gt;-->
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-starter-model-deepseek</artifactId>
      </dependency>
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-starter-model-openai</artifactId>
      </dependency>




      <!-- 智谱官方 SDK -->
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-starter-model-zhipuai</artifactId>
      </dependency>
      <!-- ollama SDK -->
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-starter-model-ollama</artifactId>
      </dependency>

      <!-- ai3. Chroma 向量数据库 Java 客户端 -->
      <!-- 只需要引入这一个 Starter -->
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-starter-vector-store-chroma</artifactId>
      <!-- 注意:这里不需要写 <version>,版本由上面的 BOM 控制 -->
      </dependency>
      <!-- 添加 JDBC 聊天记忆存储支持,用于生产级持久化 -->
      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId>
      </dependency>


      <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-pdf-document-reader</artifactId>
      </dependency>

      <!-- 测试 -->
      <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      </dependency>


      <!-- AOP 日志 -->
      <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aspectj</artifactId>
      </dependency>


      <!-- ===================== zwj starter ===================== -->
      <dependency>
      <groupId>com.zwj</groupId>
      <artifactId>zwj-log-starter</artifactId>
      <version>${zwj-log.starter.version}</version>
      </dependency>
      <dependency>
      <groupId>com.zwj</groupId>
      <artifactId>zwj-web-starter</artifactId>
      <version>${zwj-web-starter.version}</version>
      </dependency>



      <!-- 工具类 -->
      <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>${hutool-all.version}</version>
      </dependency>

      <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
      </dependency>
      <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      </dependency>



      <!-- ai1. 文档读取:PDF/Word/TXT/Excel -->
      <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-core</artifactId>
      <version>${tika-core.version}</version>
      </dependency>
      <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-parsers-standard-package</artifactId>
      <version>${tika-core.version}</version>
      <type>pom</type>
      </dependency>

      <!-- ai2. ONNX Runtime:运行本地向量化模型 -->
      <dependency>
      <groupId>com.microsoft.onnxruntime</groupId>
      <artifactId>onnxruntime</artifactId>
      <version>1.17.1</version>
      </dependency>

      <!-- 数学计算 -->
      <dependency>
      <groupId>net.objecthunter</groupId>
      <artifactId>exp4j</artifactId>
      <version>${exp4j.version}</version>
      </dependency>

      <!-- MySQL 驱动 - 必须添加 -->
      <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <scope>runtime</scope>
      </dependency>
      <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-spring-boot4-starter</artifactId>
      <version>${mybatis-plus.version}</version>
      </dependency>
      <!-- 2. 新增 jsqlparser 依赖,用于解决插件类找不到的问题 -->
      <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-jsqlparser</artifactId>
      <version>${mybatis-plus.version}</version>
      </dependency>

      <!-- 1. 具体模型集成 Starter,以 OpenAI 兼容接口为例 -->
      <!-- <dependency>-->
      <!-- <groupId>dev.langchain4j</groupId>-->
      <!-- <artifactId>langchain4j-open-ai-spring-boot4-starter</artifactId>-->
      <!-- <version>1.13.1-beta23</version> &lt;!&ndash; 建议使用最新版本 &ndash;&gt;-->
      <!-- </dependency>-->

      <!-- 2. LangChain4j 核心 Starter,提供 @AiService 等核心能力 -->
      <!-- <dependency>-->
      <!-- <groupId>dev.langchain4j</groupId>-->
      <!-- <artifactId>langchain4j-spring-boot4-starter</artifactId>-->
      <!-- <version>1.13.1-beta23</version> &lt;!&ndash; 版本需与上个依赖保持一致 &ndash;&gt;-->
      <!-- </dependency>-->

      </dependencies>

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

      <!-- 强制锁定 bouncycastle 版本 -->
      <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk18on</artifactId>
      <version>1.84</version>
      </dependency>
      <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcpkix-jdk18on</artifactId>
      <version>1.84</version>
      </dependency>

      <!-- 强制锁定 Jackson 安全版本,修复 CVE-2026-29062 -->
      <!-- Jackson 3.x 核心(修复 CVE-2026-29062) -->
      <dependency>
      <groupId>tools.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson3.version}</version>
      </dependency>
      <dependency>
      <groupId>tools.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson3.version}</version>
      </dependency>


      <!-- Jackson Core(修复 DoS 漏洞) 锁定版本 -->
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
      </dependency>

      <!-- 常用配套,必须同版本 锁定版本 -->
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
      </dependency>

      <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-resolver-dns-native-macos</artifactId>
      <version>4.1.115.Final</version>
      <classifier>osx-aarch_64</classifier> <!-- Apple Silicon (M1/M2/M3) -->
      <!-- 如果是 Intel Mac,使用 classifier: osx-x86_64 -->
      </dependency>

      <!-- 修复 CVE-2026-28208 CVE-2026-41245 -->
      <dependency>
      <groupId>com.github.junrar</groupId>
      <artifactId>junrar</artifactId>
      <version>7.5.10</version>
      </dependency>



      </dependencies>
      </dependencyManagement>

      <build>
      <plugins>
      <!-- Spring Boot 打包插件 -->
      <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
      <mainClass>com.zwj.ai.core.AiApplication</mainClass>
      <jvmArguments>--enable-preview</jvmArguments>
      </configuration>

      </plugin>

      <!-- 编译插件:指定 JDK 版本 让 Lombok 生效 -->
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <!-- <version>3.13.0</version>-->
      <configuration>
      <!-- JDK 版本 -->
      <release>${java.version}</release>
      <!-- 开启 Java 预览功能 -->
      <compilerArgs>
      <arg>--enable-preview</arg>
      </compilerArgs>
      <!-- 让 Lombok 生效 -->
      <!-- <annotationProcessorPaths>-->
      <!-- <path>-->
      <!-- <groupId>org.projectlombok</groupId>-->
      <!-- <artifactId>lombok</artifactId>-->
      <!-- <version>${lombok.version}</version>-->
      <!-- </path>-->
      <!-- </annotationProcessorPaths>-->
      <target>${java.version}</target>
      <source>${java.version}</source>
      </configuration>
      </plugin>
      </plugins>
      </build>
      </project>
  4.   配置yml

    1.   下面包含了openai、deepseek、智谱、本地大模型等,实际用的时候配置一个就行

      spring:
      ai:

      # DeepSeek
      deepseek:
      api-key: XXXXXXXXXXXXXXXX
      base-url: https://api.deepseek.com # API 基础 URL(默认值,通常无需修改)[reference:9]
      chat:
      enabled: true # 是否启用 DeepSeek 聊天自动配置,默认为 true[reference:10]
      options:
      model: deepseek-chat # 使用的模型名称[reference:11]

      OpenAI:
      api-key: XXXXXXXXXXXXXXXXXXXXXXX
      base-url: https://ark.cn-beijing.volces.com/api
      chat:
      options:
      model: doubao-seed-1-6-flash-250828
      # 豆包
      doubao:
      api-key: XXXXXXXXXXXXXXXXXX
      base-url: https://ark.cn-beijing.volces.com/api
      model: doubao-seed-1-6-flash-250828

      # 智谱
      zhipuai:
      api-key: XXXXXXXXXXXXXXXXX
      base-url: https://open.bigmodel.cn/api/paas
      chat:
      options:
      model: GLM-4.7-Flash
      temperature: 0.1 # 降低随机性
      top-p: 0.9
      max-tokens: 2048
      do-sample: true # 必须启用才能应用 temperature
      ollama:
      # 【修改】基础地址指向本地 Ollama 服务
      base-url: http://192.168.251.130:11434
      chat:
      options:
      # 【修改】指定你已下载的模型名称,例如 qwen2.5:7b
      model: qwen2.5:0.5b
      # 可选:调整温度参数控制回复的创造性
      temperature: 0.8
      # 启动时若模型不存在则自动拉取
      pull-model-strategy: always
  5.  调用接口

    1. private static final String CHAT_SYSTEM_PROMPT = "你是智能助手,请根据用户问题查询资料回答。";
      
          /** 智谱 AI 聊天模型 */
          private final ZhiPuAiChatModel zhipuAiChatModel;
      
          @Override
          public String chat(String question) {
              Assert.isTrue(StringUtils.hasText(question), "问题不能为空");
              try {
                  return zhipuAiChatModel.call(question);
              } catch (Exception e) {
                  log.error("调用大模型生成回答失败", e);
                  return "抱歉,服务暂时不可用,请稍后重试。" + e.getMessage();
              }
          }
  6. 下一篇

    1.   ai(4) spring ai  rag检索

       

posted @ 2026-08-12 11:24  zwjvzwj  阅读(6)  评论(0)    收藏  举报