Spring AI + DeepSeek API简单使用教程
本文介绍了Spring AI 1.0.0版本的配置与使用,包括Maven仓库设置和依赖管理。详细讲解了DeepSeek API的注册、API keys获取和充值流程。通过SpringBoot项目示例,展示了如何集成DeepSeek ChatModel,提供了两种调用方式:简单查询和自定义prompt评审MySQL建表语句。最后用Postman测试了接口功能,并附上了Spring AI文档参考链接。
1. Spring AI 版本选择
从 1.0.0-M6 开始,正式版本已经发布到 Maven Central 仓库,可以直接通过 Maven/Gradle 引入依赖,无需额外配置仓库地址或修改构建文件。之前的版本则有所区别,所以网上一些博客的代码直接copy运行maven会报错,这里以1.0.0版本为例简单讲一下怎么配置及简单使用。
1.1 Step1-在pom.xml文件中添加如下配置
<!-- 添加快照存储库 -->
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<name>Central Portal Snapshots</name>
<id>central-portal-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- Spring AI 依赖关系管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
如果需要全局生效,可以在maven的setting.xml中进行配置
1.2 Step2-修改maven的settings.xml
<mirror>
<id>my-mirror</id>
<!-- 修改<mirrorof>即可,其他的保持你原本的配置就好 -->
<mirrorOf>*,!spring-snapshots,!central-portal-snapshots</mirrorOf>
<url>https://my-company-repository.com/maven</url>
</mirror>
当 Maven 尝试从某个仓库下载依赖时,会检查 mirrorOf规则,如果匹配,则请求会被重定向到镜像地址。*表示 所有仓库请求 都会被重定向到你的镜像。如果你的镜像仓库(如 https://my-company-repository.com/maven)没有同步 Spring 快照仓库,Maven 将无法从原始地址(如 https://repo.spring.io/snapshot)下载依赖,导致构建失败。这里的配置作用就是排除 Spring 存储库,允许 Maven 直接访问 Spring 快照存储库。
2. DeepSeek API
2.1 注册账号
在DeepSeek开放平台官网注册。
2.2 创建API keys
名字随便填一个即可。这里需要注意,创建好后先复制保存,×掉以后就不能查看和复制完整的API keys了。一定不能泄露这个API keys到网上。
2.3 充值
随便充点先玩玩即可。
3. SpringBoot项目中使用
3.1 创建SprintBoot项目
首先在IDEA中创建一个基本的SpringBoot项目,按照上面说的配置好Spring AI。
3.2 配置application.yml
spring:
ai:
deepseek:
api-key: "yuor-API-keys" # 替换为你的 OpenAI API 密钥
# base-url: "api.deepseek.com" # 默认值,通常无需修改/
chat:
options:
model: "deepseek-chat" # 默认模型
temperature: 0.8 # 生成文本的随机性控制
3.3 测试Demo
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import java.util.List;
import java.util.Map;
@RestController
public class ChatController {
private final DeepSeekChatModel chatModel;
@Autowired
public ChatController(DeepSeekChatModel chatModel) {
this.chatModel = chatModel;
}
/*
极简写法
*/
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatModel.call(message));
}
/*
可以自定义prompt进行调用,比如这实现的功能是对用户发送的MySQL建表语句进行评审。
*/
@GetMapping("/ai/generate_by_prompt")
public Map generateByPrompt(@RequestBody Map<String, String> requestBody) {
String SQL_AUDIT_PROMPT = """
您是软件工程专家,我刚刚发送了数据库设计DDL语句,请对数据库表结构设计进行评审反馈建议,参考: 数据模型评审(实体完整性:检查是否所有实体都已正确定义,
并且主键和外键关系正确无误。属性完整性:确保每个属性的数据类型、长度和约束(如非空、唯一性)都符合业务
需求。关系完整性:检查实体之间的关系是否正确,包括一对一、一对多、多对多关系。)
""";
// 从请求体中获取用户消息,也就是你补充的数据
String userMsg = requestBody.get("userMsg");
// 创建系统消息,也就是预设的提示词模板
SystemMessage systemMessage = new SystemMessage(SQL_AUDIT_PROMPT);
// 构造 Prompt(包含系统提示和用户消息)
Prompt prompt = new Prompt(
List.of(
new UserMessage(userMsg), // 用户消息
systemMessage // 系统消息
)
);
// 调用 DeepSeek 接口并返回结果
return Map.of("generation", chatModel.call(prompt));
}
}
启动项目后,使用Postman之类的进行测试,这里我用的Reqable
URL: GET http://localhost:8080/ai/generate_by_prompt
Body (JSON):
{
"userMsg": "CREATE TABLE user (user_id INT, username VARCHAR(20), password VARCHAR(20), email VARCHAR(255), registration_date TIMESTAMP, PRIMARY KEY (username));"
}
测试结果如下:
更多细节,可以参考Spring AI文档
更多推荐
所有评论(0)