Spring AI Tool 实现自然语言操作MySql数据库操作详解
目录
一、前言
二、Spring AI 与 Tool 工具介绍
2.1 什么是 Spring AI
2.2 Spring AI 核心能力
2.3 Spring AI Tool 介绍
2.3.1 Tool (工具)介绍
2.3.2 Tool (工具)调用核心概念
2.3.3 Tool (工具)核心应用场景
2.3.4 Spring AI 工具调用
2.3.5 Spring AI 工具应用场景
三、基于Spring AI Tool 操作数据库操作实践
3.1 问题背景
3.2 前置准备
3.2.1 导入核心依赖
3.2.2 准备一张数据表
3.2.3 添加配置文件
3.3 代码整合完整过程
3.3.1 增加业务实现类
3.3.2 增加接口类
3.3.3 增加操作book表的Tool工具类
3.3.4 自定义ChatClient
3.3.5 增加一个ChatController
3.3.6 效果测试
3.4 @ToolParam注解补充说明
3.4.1 什么是 @ToolParam?
3.4.2 @ToolParam 核心功能与属性
3.4.3 @ToolParam 如何使用
3.4.4 @ToolParam 实际使用案例
3.4.5 效果验证
四、写在文末
一、前言
在人工智能与软件开发深度融合的时代,Spring AI 作为一个强大的框架,持续为开发者提供着高效且便捷的工具,以实现与大语言模型(LLM)的无缝交互。Spring AI 的最新版本引入了一系列令人瞩目的特性,其中 Function Calling 到 Tool Calling 的转换以及模型上下文协议(MCP)的应用,标志着该框架在 AI 集成领域的又一次重大飞跃。
Spring AI 的出现一定程度上弥补了Java领域对大模型应用开发的空白,作为web应用开发的主流技术开发语言,有了Spring AI,即可连接各种大模型,并基于大模型的能力完成很多商业化场景的应用开发落地,从而实现应用的价值。
二、Spring AI 与 Tool 工具介绍
2.1 什么是 Spring AI
Spring AI 项目旨在简化应用程序的开发过程,在不增加不必要的复杂性的前提下整合 AI(人工智能)功能。
该项目从 LangChain 和 LlamaIndex 等著名 Python 项目中汲取灵感,但 Spring AI 并不是这些项目的直接移植。项目成立的信念是,下一波生成式人工智能应用将不仅仅是 Python 开发人员的专利,它将在多种编程语言中无处不在。
2.2 Spring AI 核心能力
Spring AI 提供的抽象是开发 AI 应用的基础,这些抽象有多种实现方式,只需修改极少的代码就能轻松实现组件更换。官方文档:Tool Calling :: Spring AI Reference
其主要提供了如下核心能力:
-
跨多家 AI 提供商的 Chat、文本转图像和嵌入模型的可移植 API 支持。支持同步和流式A PI 选项。还可访问特定于模型的功能。
-
支持所有主要的 AI 模型提供商,如 Anthropic、OpenAI、微软、亚马逊、谷歌和 Ollama。
-
支持的模型类型包括:
-
对话补全
-
嵌入
-
文生图
-
音频转录
-
文本转语音
-
内容审核
-
-
-
结构化输出 - 将 AI 模型输出映射到 POJO。
-
支持所有主要的 向量数据库提供商,如 Apache Cassandra、Azure Cosmos DB、Azure Vector Search、Chroma、Elasticsearch、GemFire、MariaDB、Milvus、MongoDB Atlas、Neo4j、OpenSearch、Oracle、PostgreSQL/PGVector、PineCone、Qdrant、Redis、SAP Hana、Typesense 和 Weaviate。
-
跨向量数据库提供商的可移植 API,包括一种新颖的类似 SQL 的元数据过滤器 API。
-
工具/函数调用 - 允许模型请求执行客户端工具和函数,从而根据需要访问必要的实时信息并执行操作。
-
可观测性 - 深入了解 AI 相关操作。
-
用于数据工程的文档摄取 ETL 框架。
-
AI 模型评估 - 帮助评估生成内容和防止幻觉反应的实用工具。
-
针对 AI 模型和向量存储的 Spring Boot 自动配置和 Starter。
-
ChatClient API - 用于与 AI 聊天模型通信的 Fluent API,与 WebClient 和 RestClient API 相似。
-
Advisor API - 封装了重复的生成式 AI 模式,转换发送到和从语言模型(LLMs)返回的数据,并在各种模型和用例之间提供可移植性。
-
支持 聊天对话记忆 和 检索增强生成(RAG)。
2.3 Spring AI Tool 介绍
2.3.1 Tool (工具)介绍
在 AI 大模型能力体系中,工具调用是一项关键功能,它让模型突破了自身知识库和计算能力的局限,能够与外部系统、工具或服务交互,从而更高效地解决复杂问题。
2.3.2 Tool (工具)调用核心概念
工具调用(也称函数调用)是 AI 应用的常见模式,允许模型通过与一组 API(即工具)交互来扩展其能力。其核心概念如下:
-
工具:指能被模型调用以完成特定任务的外部资源,涵盖 API 接口(如天气查询、支付接口)、数据库查询语句、代码解释器、文件处理工具、搜索引擎等。这些工具为模型提供了实时数据获取、复杂计算、特定功能实现等能力。
-
工具调用:是 AI 大模型根据用户需求或任务目标,自主决定调用合适的工具,并通过特定格式将请求参数传递给工具,再接收工具返回结果,最终整合结果生成回答的过程。注意:AI 大模型不执行具体工具调用,仅仅给出要使用哪些参数调用哪个工具的描述信息。
-
客户端应用程序:在工具调用流程中扮演着 “中介” 和 “执行者” 的角色。它负责提供工具调用的核心逻辑,接收模型的工具调用请求,执行具体的工具调用操作,然后将工具返回的结果传递回模型。
2.3.3 Tool (工具)核心应用场景
工具主要应用于以下场景:
-
信息检索:
-
此类工具可用于从外部源检索信息,例如数据库、网络服务、文件系统或网络搜索引擎。其目的是增强模型的知识,使其能够回答原本无法回答的问题。因此,它们可用于检索增强生成(RAG)场景。
-
例如,可以使用工具检索给定位置的当前天气、检索最新新闻文章或查询数据库中的特定记录。
-
-
-
执行操作:
-
此类工具可用于在软件系统中执行操作,例如发送电子邮件、在数据库中创建新记录、提交表单或触发工作流。其目的是自动化那些原本需要人工干预或显式编程的任务。
-
例如,可以使用工具为与聊天机器人交互的客户预订航班、填写网页上的表单,或在代码生成场景中基于自动化测试(TDD)实现 Java 类。
-
-
2.3.4 Spring AI 工具调用
在 Spring AI 中,通过一组灵活的抽象机制支持工具调用功能,这些抽象允许你以统一的方式定义、解析和执行工具。其执行流程如下:
通过上图可以得到下面的信息:
① 当我们想让模型使用某个工具时,我们会在聊天请求中包含该工具的定义。每个工具定义都包括名称(name)、描述(description)和输入参数的模式(input schema)。
② 当模型决定调用工具时,它会发送包含工具名称及符合预定义模式的输入参数的响应。
③ 应用程序负责根据工具名称识别对应工具,并使用提供的输入参数执行该工具。
④ 工具调用的结果由应用程序进行处理。
⑤ 应用程序将工具调用结果返回至模型。
⑥ 模型最终利用工具调用结果作为附加上下文生成响应。
Tool 是工具调用的基础构建单元,通过 ToolCallback 接口进行建模。Spring AI 内置支持从方法和函数生成 ToolCallback,同时你还可以自定义 ToolCallback 实现以满足更多使用场景。内置支持如下图:
上述 TooCallback 实现简单说明:
-
FunctionToolCallback 用于将函数形式的工具能力适配到 ToolCallback 接口规范中。它可以把具体的函数封装起来,让 Spring AI 体系能够识别和调用,实现通过函数来完成工具侧的功能执行。
-
MethodToolCallback 针对方法进行适配。可以把某个类的特定方法封装成符合 ToolCallback 接口的形式,这样就能让 Spring AI 在需要调用工具时,通过调用该方法来完成相应功能。
-
AsyncMcpToolCallback 用于异步场景下与 MCP 相关的工具调用适配。它支持以异步的方式去和 MCP 进行交互,在调用工具时不会阻塞当前线程,能够非同步地执行获取结果,适合处理那些耗时较长、不需要立即拿到返回,或者希望不影响主流程执行的与 MCP 相关的工具调用任务,比如异步从 MCP 拉取数据、异步执行 MCP 相关的业务逻辑等。
-
SyncMcpToolCallback 和上面的 AsyncMcpToolCallback 对应,是同步方式与 MCP 相关的工具调用适配。在调用和 MCP 关联的工具功能时,会阻塞当前线程,直到从 MCP 拿到执行结果返回,适用于那些需要立即获取 MCP 交互结果,且当前流程可以等待的场景,比如同步调用 MCP 接口获取实时业务数据、同步执行 MCP 相关的关键业务逻辑并等待响应等 。
2.3.5 Spring AI 工具应用场景
Spring AI 工具有如下应用场景:
-
数据检索:
-
从数据库或API获取最新信息,
-
通过这种方式,可以增强应用本身的接口能力,甚至是对于不懂数据库操作的人员,只需基于自然语言即可完成对数据库的各种操作;
-
-
数学计算:
-
执行复杂计算任务,由工具下发,大模型驱动,背后调度具体的任务去执行
-
-
系统操作:
-
与外部系统交互,扩展应用自身的能力边界
-
-
多工具协作:
-
串联多个工具完成复杂任务,传统的单任务执行模式,将多个Tool串联起来,从而完成更复杂的任务
-
-
实时信息获取:
-
获取模型训练数据之外的实时信息
-
三、基于Spring AI Tool 操作数据库操作实践
3.1 问题背景
在传统的业务应用开发中,正常的数据使用,或者说数据消费模式为,业务提需求,产品规划交互能力,开发人员把功能做出来,至于背后的取数逻辑,数据表的使用等,对业务人员相当于是黑盒。如果功能不满足要求,业务人员继续提要求,开发继续完善,这样来来回回的更改,无疑是增加了时间成本和人力开销。
试想,如果业务人员或者不懂数据库、编程的人员只需要通过一段自然语言的描述,即可完成对特定场景下的数据进行获取,比如用户提问“获取6月份账单数据”,“获取这个月所有门店中销售额大于100万的销售人员”...
类似这样的需求场景还有很多,放在正常的业务应用中,是需要开发人员进行功能开发,但是有了Tool这样的能够连接AI大模型的能力之后,这个事情就变得相对简单了,接下来将通过实际案例演示下如何基于Spring AI Tool完成对数据库的常用的增删改查操作。
3.2 前置准备
3.2.1 导入核心依赖
创建一个springboot工程,导入下面的核心依赖
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-ai.version>1.0.0-M6</spring-ai.version><spring-ai-alibaba.version>1.0.0-M6.1</spring-ai-alibaba.version>
</properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version><relativePath/>
</parent><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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>${spring-ai-alibaba.version}</version></dependency><!-- Mysql Connector --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><repositories><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><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository>
</repositories>
3.2.2 准备一张数据表
本案例将会操作mysql的数据表,因此提前准备一张数据表
CREATE TABLE `book` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(64) DEFAULT NULL,`author` varchar(32) DEFAULT NULL,`price` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
3.2.3 添加配置文件
在工程配置文件中,添加如下配置信息
-
apikey 需要登录到阿里云的百炼平台即可获取;
-
操作数据库这里使用mybatis-plus;
server:port: 8082spring:ai:dashscope:api-key: 百炼平台的apikeychat:options:model: qwen-maxdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://IP:3306/dbusername: rootpassword: 123456mybatis-plus:# 不支持多包, 如有需要可在注解配置 或 提升扫包等级# 例如 com.**.**.mappermapperPackage: com.congge.mapper# 对应的 XML 文件位置mapperLocations: classpath*:mapper/**/*Mapper.xml# 实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.congge.entityglobal-config:dbConfig:# 主键类型# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID# 如需改为自增 需要将数据库表全部设置为自增idType: ASSIGN_ID# 逻辑已删除值(默认为 1)logic-delete-value: 1# 逻辑未删除值(默认为 0)logic-not-delete-value: 0
3.3 代码整合完整过程
参考下面的代码,完成案例的整合过程。
3.3.1 增加业务实现类
以上面的book表为例,提供业务实现类,完成对book表的增删改查操作,完整的代码如下:
package com.congge.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.congge.entity.Book;
import com.congge.mapper.BookMapper;
import com.congge.service.IBookService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
public class BookServiceImpl implements IBookService {@Resourceprivate BookMapper bookMapper;@Overridepublic Object queryList() {List<Book> books = bookMapper.selectList(new QueryWrapper<>());return books;}@Override@Transactionalpublic void addBook(Book book) {int insert = bookMapper.insert(book);if (insert != 1) {throw new RuntimeException("添加失败");}}@Overridepublic Book queryById(Integer id) {Book book = bookMapper.selectById(id);return book;}public List<Book> queryByBookName(String bookName) {QueryWrapper<Book> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", bookName);List<Book> bookList = bookMapper.selectList(queryWrapper);return bookList;}}
3.3.2 增加接口类
该接口主要是为了测试方便,实际根据自己的情况而定
package com.congge.web;import com.congge.entity.Book;
import com.congge.service.IBookService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/book")
public class BookController {@Resourceprivate IBookService bookService;//localhost:8082/book/queryList@GetMapping("/queryList")public Object queryList(){return bookService.queryList();}@PostMapping("/add")public Object add(@RequestBody Book book){bookService.addBook(book);return "添加成功";}//localhost:8082/book/queryById?id=6@GetMapping("/queryById")public Object queryById(@RequestParam Integer id){Book book =bookService.queryById(id);return book;}}
3.3.3 增加操作book表的Tool工具类
自定义一个Tool工具类,提供用于连接大模型的能力,通过Spring AI 的Tool的相关注解,通过自然语言描述,从而完成对数据库表的增删改查操作,这个工具类,最终要注入到ChatClient的配置bean中进行使用,完整代码如下:
-
通过代码不难看出,该工具类自身做的业务逻辑并不多,对于数据库的操作底层还是借助了业务实现类里面的方法完成;
-
核心在于使用Spring AI的Tool相关的注解,尤其是description 里面的描述至关重要,后面将会进一步说明;
package com.congge.tool;import com.congge.entity.Book;
import com.congge.service.IBookService;
import jakarta.annotation.Resource;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class BookTool {@Resourceprivate IBookService bookService;@Tool(description = "新增一本书")public void addBook(Book book) {bookService.addBook(book);}@Tool(description = "根据指定ID查询书籍")public Book queryBookById(Integer id) {Book dbbook = bookService.queryById(id);return dbbook;}@Tool(description = "查询所有书籍")public List<Book> queryBookList() {List<Book> dbbooks = bookService.queryList();return dbbooks;}@Tool(description = "根据书名查询书籍",returnDirect = true)public List<Book> queryByBookName(@ToolParam(description = "书名",required = true) String bookName) {List<Book> dbbookList = bookService.queryByBookName(bookName);return dbbookList;}}
@Tool注解说明
通过源码,可以看到该注解中提供的几个核心属性参数
1)description
描述信息除了为工具本身提供描述外,你还可为工具的输入参数添加描述。该描述可用于提供参数的关键信息,如参数格式要求、允许取值等,有助于模型理解输入模式及使用方法。Spring AI 内置支持通过以下注解生成输入参数描述:
-
Spring AI 的 @ToolParam(description = "…")
-
Jackson 的 @JsonClassDescription(description = "…")
-
Jackson 的 @JsonPropertyDescription(description = "…")
-
Swagger 的 @Schema(description = "…")
2)resultConverter
工具调用结果通过 ToolCallResultConverter 序列化后返回给 AI 模型,该接口提供将工具调用结果转换为 String 对象的能力。
3.3.4 自定义ChatClient
自定义一个ChatClient的配置类,在ChatClient的构造bean中,可以设置基础的信息,比如使用哪个大模型,配置系统提示词,工具类等信息,这里就需要在ChatClient的配置bean中将上述的工具类添加进去,参考下面的完整代码:
package com.congge.config;import com.congge.tool.BookTool;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;@Configuration
public class ChatConfig {@Resourceprivate BookTool bookTool;@BeanChatClient bookChat(ChatClient.Builder chatClientBuilder) {String systemMessage = """当前时间:{date}。输出结果使用HTML table表格展示。需要自适应页面大小(宽度),字体大小为12px。除HTML相关的内容,不要有任何其它内容。""";ChatClient chatClient = chatClientBuilder//.defaultSystem(systemMessage).defaultTools(bookTool).build();return chatClient;}}
3.3.5 增加一个ChatController
为了方便测试,增加一个Controller,基于上面的ChatClient 调度上面的自定义工具类中的操作数据表方法
package com.congge.web;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/book/chat")
public class BookChatController {@Resourceprivate ChatClient chatClient;//localhost:8082/book/chat/operate?message=新增一本书,书名是《nginx 从入门到精通》,作者john,价格50元//localhost:8082/book/chat/operate?message=查询书名包含nginx的书籍@GetMapping("/operate")public ResponseEntity<?> chat(String message) {Prompt prompt = new Prompt(message) ;String content = this.chatClient.prompt(prompt)// 设置系统文本中的占位符参数//.system(p -> p.param("date", new Date())).call().content() ;return ResponseEntity.ok(content) ;}}
3.3.6 效果测试
接下来通过几个测试用例分别调用一下上面的这个接口,验证下实际效果。
1)新增book数据
在接口工具或浏览器中调用接口:
接口执行成功后,检查数据库,可以看到新增了一条数据
2)根据书名查询数据
查询书名中包含nginx的记录
3)查询所有的书籍
查询表的所有数据
3.4 @ToolParam注解补充说明
基于上面的操作,完成了一个使用Spring AI与数据表交互的完整案例演示。在Spring AI中还有一个非常重要的注解,即@ToolParam,在实际开发中会大量使用,接下来介绍一下这个注解的使用。
3.4.1 什么是 @ToolParam?
@ToolParam 是 Spring AI 框架提供的一个注解,用于在 AI 函数调用(Function Calling) 的场景中,为工具方法(被 @Tool 注解的方法)的参数提供元数据(metadata)和默认值。它的核心作用如下:
-
向 AI 模型描述参数:告诉大模型这个参数的含义、约束和格式。
-
提供默认值:当用户查询中没有明确提供该参数时,可以使用预设的默认值。
-
增强交互:使得 AI 驱动的对话更加智能和上下文相关,AI 能更好地理解何时以及如何使用工具。
@ToolParam 可以理解为 Spring AI 对 Spring 的 @Value 注解在 AI 函数调用上下文中的一个功能扩展。
3.4.2 @ToolParam 核心功能与属性
@ToolParam
注解提供了以下几个重要属性:
-
value
/name
(String): 参数的名称。这是传递给 AI 模型的关键信息。如果省略,则使用方法参数的实际名称。 -
description
(String): 参数的详细描述。这个描述非常重要,它帮助 AI 模型理解这个参数的含义、预期输入是什么,从而能更准确地从用户对话中提取或推断出参数值。 -
required
(boolean): 指示参数是否为必填项。默认为true
。如果设置为false
,AI 模型在调用函数时可能不会提供该参数。 -
defaultValue
(String): 参数的默认值。如果用户没有在对话中提供该参数,并且 AI 模型也没有推断出值,则会使用这个默认值。
3.4.3 @ToolParam 如何使用
首先,你需要一个工具类,其中的方法使用 @Tool
注解标记,表示这些方法可以被 AI 模型调用。如下是一个参考示例:
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.model.Model;
import org.springframework.ai.parser.BeanOutputParser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;@Component
public class WeatherServiceTool {@Tool(name = "getWeather", description = "根据城市名称获取当前天气信息")public String getWeather(@ToolParam(value = "city", description = "城市的名称,例如:北京、上海、纽约。必须是一个有效的城市名。",required = true) String cityName,@ToolParam(value = "unit",description = "温度单位,默认为摄氏度。可选值:'celsius' 或 'fahrenheit'",required = false,defaultValue = "celsius") String unit) {// 这里应该是调用真实天气API的逻辑if ("celsius".equals(unit)) {return String.format("城市 %s 的天气是晴朗,温度为 25 摄氏度。", cityName);} else {return String.format("城市 %s 的天气是晴朗,温度为 77 华氏度。", cityName);}}
}
3.4.4 @ToolParam 实际使用案例
基于上一节的操作数据库的案例,下面增加一个模糊查询数据库的工具方法,如下:
-
不难理解,这里使用该注解相当于是对这个keyword参数做了进一步的解释说明,一定程度上可以让大模型在接收并理解参数信息时更准确。
@Tool(description = "根据关键字查询书名")
public List<Book> queryByKeyWord(@ToolParam(description = "查询关键字",required = true) String keyword) {List<Book> dbbookList = bookService.queryByKeyWord(keyword);return dbbookList;
}
内部业务实现:
public List<Book> queryByKeyWord(String keyword) {QueryWrapper<Book> queryWrapper = new QueryWrapper<>();queryWrapper.like("name",keyword).or().like("author",keyword);List<Book> bookList = bookMapper.selectList(queryWrapper);return bookList;
}
3.4.5 效果验证
启动工程之后,浏览器调用一下接口,通过接口响应接口可以看到能够得到预期的查询结果
四、写在文末
本文通过较大的篇幅详细介绍了基于Spring AI Tool实现自然语言与数据库交互的完整过程,有兴趣的同学还可以基于此继续做深入的研究,本篇到此结束,感谢观看。