Spring AI 2.0:Tool

一、简介

使用@Tool注解标注一个工具方法,使用 @ToolParam 来标记工具方法参数。

二、代码

DTO

java 复制代码
/**
 * 航班订单信息
 */
@Data
@Builder
public class FlightOrder {
    /** 订单号 */
    private String orderNo;
    /** 航班号 */
    private String flightNumber;
    /** 乘客姓名 */
    private String name;
    /** 出发城市 */
    private String fromCity;
    /** 到达城市 */
    private String toCity;
}

定义工具方法:航班订单信息查询 和 取消订单

java 复制代码
@Component
public class MyTools {

    @Tool(description="航班订单信息查询")
    public FlightOrder queryFlightOrder(@ToolParam(description ="航班号") String flightNumber,
                                       @ToolParam(description ="姓名") String name) {
        System.out.println("航班订单信息查询:" + flightNumber + " " + name);
        return FlightOrder.builder()
                .orderNo("F1234")
                .flightNumber(flightNumber)
                .name(name)
                .fromCity("北京")
                .toCity("上海")
                .build();
    }

    @Tool(description="取消订单")
    public String cancelOrder(@ToolParam(description ="订单号") String orderNo,
                              @ToolParam(description ="出发城市") String fromCity,
                              @ToolParam(description ="到达城市") String toCity) {
        System.out.println("取消订单:" + orderNo + " " + fromCity + "→" + toCity);
        return "订单取消成功";
    }
}

Configuration

java 复制代码
@Configuration
public class SpringAiConfig {

    @Bean
    public ChatClient chatClient(DeepSeekChatModel deepSeekChatModel, ChatMemory chatMemory, MyTools myTools) {
        return ChatClient.builder(deepSeekChatModel)
                .defaultSystem("你是AI助手,回答用户的问题。")
                .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
                .defaultTools(myTools)
                .build();
    }
}

航班订单信息查询 和 取消订单 都正常调用了。

现在是每次对话都会将工具作为上下文,当有的对话使用不到该工具时那么就会对上下文带来负面影响,好的方法使用使用Skill,按需加载工具。

相关推荐
实名上网宋凯宣17 小时前
Django
后端·python·django
天河归来18 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
如若12318 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
Knight_AL19 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
砚底藏山河20 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
视觉小萌新20 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
猿究院_夏燊20 小时前
MySQL 的四种隔离级别
java·数据库·mysql
薛定谔的猫-菜鸟程序员21 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
码流子21 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构
霸道流氓气质21 小时前
AI 流式对话与实时聊天平台:SSE 解码竞态、有状态会话隔离与背压取消的 Vue3 + Spring AI 生产级实战
java·人工智能·spring