springAI笔记、springboot3、openAi
·
文章目录
做ai当然是python好,但是springAI支持了,也熟悉下。
如果之前做传统项目,一般都用java8。springai可不是加个包这么简单,整体环境都要换,jdk要用17,springboot要用3.x,相当于整体版本变了。
前提
Spring Boot 3.x # 例如3.3.5
java17
环境变量设置好,例如用阿里百炼的openAi。
DASHSCOPE_API_KEY=具体的apikey值 # python用这个名字
AI_DASHSCOPE_API_KEY=具体的apikey值 # java用这个名字,前面多了AI_
maven依赖
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0-M6</version> <!-- 版本号请根据实际仓库调整,建议使用最新 Milestone -->
</dependency>
完整pom.xml见下文。
创建OpenAiController,代码
package com.example.demo.web;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/openai")
public class OpenAiController {
private final ChatClient chatClient;
public OpenAiController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@PostMapping("/chat")
public ResponseEntity<String> chat(@RequestBody Map<String, String> request) {
try {
String message = request.getOrDefault("message", "你好");
String answer = chatClient.prompt()
.user(message)
.call()
.content();
return ResponseEntity.ok(answer);
} catch (Exception e) {
return ResponseEntity.internalServerError().body("Error: " + e.getMessage());
}
}
@GetMapping("/chat")
public ResponseEntity<String> chatGet(@RequestParam String message) {
try {
String answer = chatClient.prompt()
.user(message)
.call()
.content();
return ResponseEntity.ok(answer);
} catch (Exception e) {
return ResponseEntity.internalServerError().body("Error: " + e.getMessage());
}
}
}
postman发送请求
请求地址:
{{url}}/api/openai/chat
请求报文:
{
"message": "今天是几号"
}
返回报文:
今天的具体日期我这里没办法直接查看,因为我没有实时访问系统日期的功能。你可以通过查看设备右下角的任务栏、使用智能助手或者直接搜索“今天的日期”来获取准确的信息。如果你告诉我你所在的时区或地区,我可以帮助你理解如何更好地查找这个信息。
这回答。。。不过也算调试通了。
推荐使用bom机制
添加版本号:
<properties>
<!-- 添加如下内容 -->
<spring.ai.version>2021.0.5.0</spring.ai.version>
</properties>
添加bom管理:
<dependencyManagement>
<dependencies>
<!-- 如果之前已有dependencyManagement标签,只添加这段内容 -->
<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>
作用:
springAi的其他相关依赖不用写版本号了,统一受bom管理。
完整pom.xml
拿来就能用,方便,可以作为一套boot3.x的方案。
注:springai是通过bom管理的,见本文。
<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>
<!-- 1. 基础 Spring Boot 父工程 (推荐 3.4.5) -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.5</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>spring-ai-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>spring-ai-demo</name>
<properties>
<java.version>17</java.version>
<!-- Spring Boot 3.x 强制要求 JDK 17+ -->
<spring-ai.version>1.1.2</spring-ai.version>
</properties>
<!-- 2. 统一版本管理 (BOM) -->
<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>
<!-- 3. 核心依赖 -->
<dependencies>
<!-- Spring Boot Web (用于暴露 REST API) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI OpenAI Starter (以 OpenAI 为例,可替换为其他模型) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
<!-- 4. 必须配置的仓库 (Spring AI 1.0.0 以上已发布至 Maven Central,但建议保留以防需要快照) -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
openAi配置
是统一的配置形式,只用改这几个参数即可:
ase-url、api-key 和 model
openAi-百炼配置
spring:
ai:
openai:
api-key: ${AI_DASHSCOPE_API_KEY} # 读取你配置好的环境变量
base-url: https://dashscope.aliyuncs.com/compatible-mode # 百炼兼容模式地址
chat:
options:
model: qwen-max # 或 qwen-plus
openAi-deepseek配置
spring:
ai:
openai:
api-key: ${DEEPSEEK_API_KEY} # 读取你配置好的环境变量
base-url: https://api.deepseek.com/v1 # 百炼兼容模式地址
chat:
options:
model: deepseek-chat # 或 deepseek-reasoner
报错
报错 cannot retry due to server authentication, in streaming mode
提示授权,一般是apikey的问题。
1、环境变量是否已设置apikey
如果是报错后才设置的,需要重启idea
直接在yaml中写apikey值不用重启idea,因为直接赋值,不涉及读取环境变量
2、yaml中有没有引入
3、apikey值是否正确
实测自己遇到的是没有设置环境变量,后来设置了也没重启,还是报错,重启后问题解决。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)