一、简介
使用@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,按需加载工具。