No. | 文章 |
---|---|
1 | 大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅 |
2 | 大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略 |
3 | 大模型之Spring AI实战系列(三):Spring Boot + OpenAI 实现聊天应用上下文记忆功能 |
4 | 大模型之Spring AI实战系列(四):Spring Boot + OpenAI 使用OpenAI Embedding实现文本向量化 |
5 | 大模型之Spring AI实战系列(五):Spring Boot + OpenAI 构建带角色设定的智能对话系统 |
6 | 大模型之Spring AI实战系列(六):Spring Boot + OpenAI 利用PromptTemplate构建动态提示词系统 |
7 | 大模型之Spring AI实战系列(七):Spring Boot + OpenAI 构建结构化输出的AI响应系统 |
8 | 大模型之Spring AI实战系列(八):Spring Boot + OpenAI 使用Whisper实现语音转文本功能 |
9 | 大模型之Spring AI实战系列(九):Spring Boot + OpenAI 使用TTS实现文本转语音功能 |
10 | 大模型之Spring AI实战系列(十):Spring Boot + OpenAI 使用 DALL·E实现文本生成图像功能 |
11 | 大模型之Spring AI实战系列(十一):Spring Boot + OpenAI 集成本地向量数据库Chroma |
12 | 大模型之Spring AI实战系列(十二):Spring Boot + OpenAI 构建基于RAG的智能问答系统 |
13 | 大模型之Spring AI实战系列(十三):Spring Boot + OpenAI 基于 Tool Calling 实现单个外部工具调用 |
14 | 大模型之Spring AI实战系列(十四):Spring Boot + OpenAI 支持多个 Tool 的插件化调用实践 |
15 | 大模型之 Spring AI实战系列(十五):Spring AI Tools 初体验——搭建首个可调用工具 |
16 | 大模型之 Spring AI实战系列(十六):Spring AI Tools 初级开发——解锁天气查询与数据库操作工具 |
17 | 大模型之 Spring AI实战系列(十七):Spring AI Tools 高级技巧——异步调用、事务控制与错误处理攻略 |
18 | 大模型之 Spring AI实战系列(十八):Spring AI Tools 进阶实战——深度集成 RESTful API 联通外部服务 |
19 | 大模型之Spring AI实战系列(十九):Spring Boot + 智谱AI 一站式开发指南,带你玩转大模型 |
20 | 大模型之Spring AI实战系列(二十):Spring AI + MCP + Brave Search 实战指南 |
21 | 大模型之Spring AI实战系列(二十一):Spring AI + MCP + 本地文件系统实战指南 |
22 | 大模型之Spring AI实战系列(二十二):Spring AI + MCP + SQLite 数据库实战指南 |
23 | 大模型之Spring AI实战系列(二十三):Spring AI + MCP + 自定义MCP服务开发实战 |
24 | 大模型之Spring AI实战系列(二十四):Spring Boot + OpenAI 集成DeepSeek模型构建智能对话应用 |
25 | 大模型之Spring AI实战系列(二十五):Spring Boot + DeepSeekAPI构建DeepSeek模型智能对话应用 |
26 | 大模型之Spring AI实战系列(二十六):Spring Boot + DeepSeek 实战指南:构建AI聊天应用 |
27 | 大模型之Spring AI实战系列(二十七):Spring Boot + DeepSeek 实战指南:构建智能代码生成器 |
28 | 大模型之Spring AI实战系列(二十八):Spring Boot + DeepSeek 实战指南:构建推理系统与思维链解析 |
29 | 大模型之Spring AI实战系列(二十九):Spring Boot + DeepSeek 实战指南:构建多轮对话系统 |
30 | 大模型之Spring AI实战系列(三十):Spring Boot + DeepSeek 实战指南:系统提示词设计 |
31 | 大模型之Spring AI实战系列(三十一):Spring Boot + DeepSeek 实战指南:结构化输出处理与实战应用 |
32 | 大模型之Spring AI实战系列(三十二):Spring Boot + DeepSeek 实战指南:工具函数(Function Call)实战应用 |
随着人工智能技术的飞速发展,大模型在各个领域的应用日益广泛,为开发者带来了前所未有的机遇和挑战。在众多的框架和平台中,Spring Boot以其简洁、高效的特点,成为了构建企业级应用的首选之一。而DeepSeek作为一款强大的人工智能平台,提供了丰富的API接口和功能,能够满足各种复杂的应用需求。本文将深入探讨如何将Spring Boot与DeepSeek相结合,通过工具函数(Function Call)的实战应用,帮助读者快速掌握这一前沿技术,实现高效、智能的应用开发。
本项目采用Java 17进行编译和运行,请务必确保你的开发环境已成功安装JDK 17。你可以在命令行中输入以下命令进行检查:
java -version
输出应类似如下内容:
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)
确保你已安装 Maven 并配置好环境变量:
mvn -v
输出应类似如下内容:
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
你需要注册 DeepSeek 官网 获取 API Key,并设置为环境变量:
export DEEPSEEK_API_KEY="your_deepseek_api_key"
注意:出于安全考虑,不建议将密钥硬编码在代码中,推荐使用环境变量或配置中心进行管理。
引入DeepSeek集成依赖包
<dependencies>
<dependency>
<groupId>org.springframework.aigroupId>
<artifactId>spring-ai-starter-model-deepseekartifactId>
dependency>
dependencies>
此依赖包用于实现DeepSeek 的集成,为后续与DeepSeek 进行交互提供了必要的支持。
在application.yml中配置DeepSeek服务的基本信息:
server:
port: 8080
spring:
ai:
deepseek:
api-key: ${DEEPSEEK_API_KEY}
base-url: https://api.deepseek.com
chat:
options:
model: deepseek-chat
temperature: 0.8
关键配置说明:
DEEPSEEK_API_KEY
管理敏感信息,避免硬编码deepseek-chat
模型,但在代码中会动态切换到deepseek-reasoner
这是 Spring Boot 的启动类,非常简洁:
@SpringBootApplication
public class DeepSeekApplication {
public static void main(String[] args) {
SpringApplication.run(DeepSeekApplication.class, args);
}
}
Spring Boot会自动扫描并加载所有的Controller、Service等Bean,为项目的启动和运行奠定基础。它通过@SpringBootApplication注解开启了Spring Boot的自动配置功能,使得项目能够快速搭建起一个完整的Spring应用环境。
public class WeatherService implements Function<WeatherService.WeatherRequest, WeatherService.WeatherResponse> {
public WeatherResponse apply(WeatherRequest request) {
return new WeatherResponse(30.0, Unit.C);
}
public enum Unit { C, F }
public record WeatherRequest(String location, Unit unit) {}
public record WeatherResponse(double temp, Unit unit) {}
}
@Configuration(proxyBeanMethods = false)
class WeatherTools {
public static final String CURRENT_WEATHER_TOOL = "currentWeather";
@Bean(CURRENT_WEATHER_TOOL)
@Description("Get the weather in location")
Function<WeatherRequest, WeatherResponse> currentWeather() {
return request -> {
Assert.notNull(request, "Weather request cannot be null");
double temperature = fetchTemperature(request.location());
return new WeatherResponse(temperature, request.unit());
};
}
public enum Unit {
C, F
}
public record WeatherRequest(String location, WeatherService.Unit unit) {}
public record WeatherResponse(double temp, WeatherService.Unit unit) {}
private double fetchTemperature(String location) {
return (Math.random() * 30 + 10); // 温度范围10~40°C
}
}
这个配置类完成了以下重要功能:
CURRENT_WEATHER_TOOL
@Bean
注解注册天气查询工具/**
* 函数调用控制器
*
* 该控制器用于演示如何使用 DeepSeek 模型进行函数调用(工具调用)。
* 提供了两种不同的函数调用方式:
* - /function/tool/test1:直接注册并调用天气查询工具
* - /function/tool/test2:通过工具名称调用已注册的天气查询工具
*
* @author 寻道AI小兵
*/
@RestController
@RequestMapping("/function/tool")
public class FunctionCallingController {
private static final Logger logger = LoggerFactory.getLogger(FunctionCallingController.class);
private final DeepSeekChatModel chatModel;
/**
* 构造函数注入 DeepSeekChatModel 实例
*
* @param chatModel Spring AI 提供的 DeepSeek 聊天模型实例
*/
@Autowired
public FunctionCallingController(DeepSeekChatModel chatModel) {
this.chatModel = chatModel;
}
/**
* 函数调用测试接口1 - 直接注册并调用工具
*
* 示例请求:GET /function/tool/test1
*
* 功能描述:
* - 创建一个直接绑定到 WeatherService 的函数调用回调
* - 构建包含工具调用选项的 ChatOptions
* - 向 DeepSeek 模型发送带有工具调用能力的提示
* - 返回模型处理后的文本响应
*
* @return 包含 Copenhagen 当前天气信息的文本响应
*/
@GetMapping("/test1")
public String functionCallingTest1() {
// 创建函数调用回调,绑定到 WeatherService
ToolCallback toolCallback = FunctionToolCallback
.builder("currentWeather", new WeatherService())
.description("Get the weather in location")
.inputType(WeatherService.WeatherRequest.class)
.build();
// 构建包含工具调用选项的 ChatOptions
ChatOptions chatOptions = ToolCallingChatOptions.builder()
.toolCallbacks(toolCallback)
.build();
// 创建包含提示和工具调用配置的 Prompt 对象
Prompt prompt = new Prompt("What's the weather like in Copenhagen?", chatOptions);
// 调用 DeepSeek 模型处理请求
ChatResponse response = chatModel.call(prompt);
// 返回模型处理后的文本响应
return response.getResult().getOutput().getText();
}
/**
* 函数调用测试接口2 - 通过工具名称调用已注册工具
*
* 示例请求:GET /function/tool/test2
*
* 功能描述:
* - 使用已注册的工具名称构建工具调用选项
* - 向 DeepSeek 模型发送带有工具调用能力的提示
* - 返回模型处理后的文本响应
*
* 注意事项:
* - 这种方式依赖于已在 Spring 上下文中注册的工具
* - 在本示例中需要确保 WeatherTools 配置类已被正确加载
*
* @return 包含 Copenhagen 当前天气信息的文本响应
*/
@GetMapping("/test2")
public String functionCallingTest2() {
// 使用已注册工具名称构建工具调用选项
ChatOptions chatOptions = ToolCallingChatOptions.builder()
.toolNames("currentWeather")
.build();
// 创建包含提示和工具调用配置的 Prompt 对象
Prompt prompt = new Prompt("What's the weather like in Copenhagen?", chatOptions);
// 调用 DeepSeek 模型处理请求
ChatResponse response = chatModel.call(prompt);
// 返回模型处理后的文本响应
return response.getResult().getOutput().getText();
}
}
控制器提供了两种不同的实现方式:
直接注册工具方式:通过functionCallingTest1
方法演示
ChatOptions
Prompt
对象通过工具名称调用方式:通过functionCallingTest2
方法演示
可以直接基于IntelliJ IDEA启动并运行Spring Boot应用程序,也可以进入项目根目录,执行 mvn clean package 进行打包,之后采用 java -jar xxx.jar 命令进行部署运行。运行成功后,应用将在 http://localhost:8080 启动。
完成上述步骤后,你可以运行项目并通过浏览器访问以下URL来测试接口是否正常工作:
可以使用Postman、curl或其他HTTP客户端测试API接口:
1./function/tool/test1:直接注册并调用天气查询工具
http://localhost:8080/function/tool/test1
响应输出:
The current temperature in Copenhagen is 30°C.
2./function/tool/test2:通过工具名称调用已注册的天气查询工具
http://localhost:8080/function/tool/test2
响应输出:
The current temperature in Copenhagen is approximately 34.1°C.
通过本文的详细讲解,我们成功地将Spring Boot与DeepSeek进行了集成,并实现了工具函数(Function Call)的实战应用。从开发环境的准备到核心代码的实现,再到最终的部署与测试,每一步都为大家提供了清晰的指导。通过两种不同的函数调用方式的演示,大家可以灵活地选择适合自己的方法来实现功能。希望本文能够为大家在人工智能领域的开发实践提供有价值的参考,助力大家在未来的项目中更好地利用Spring Boot和DeepSeek的强大功能,开发出更加智能、高效的应用程序。
更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践 其他专栏可以查看博客主页
作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方二维码,回复‘入群’ 即刻上车,获取邀请链接。
领取三大专属福利:1️⃣免费赠送AI+编程500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!