
想象一下这个场景:你让AI助手帮你查个天气,结果它带着50个工具箱出门了——有修电脑的、做饭的、修车的、甚至还有做核酸的工具!这就像你只想拧个螺丝,却背着整个五金店出门一样荒谬。
更要命的是,每次它出门前都要把所有工具的说明书读一遍,光是翻说明书就花了你55000个令牌的费用。而你只是想知道明天要不要带伞啊!
这就是现在AI工具调用的真实写照。今天我们就来聊聊Spring AI是如何治好AI的"工具选择困难症"的。
让我们先看看传统的AI工具调用是怎么工作的:

图1:传统工具调用的"带着大炮打蚊子"现场
就像有个同事开会前要把所有可能用到的文件都打印出来,即使只讨论一个议题。AI也是这样,它要把所有工具的定义都加载到上下文里,哪怕你只是想查个天气。
当AI面对30+个名字相似的工具时,就像你在超市面对50种洗发水一样懵逼。getWeather()、getCurrentWeather()、fetchWeatherData()...天哪,它们看起来都能查天气!
每次调用都为用不到的工具定义买单,就像点外卖必须把整个菜单都买下来,即使你只想要一碗面。
Spring AI引入了一个叫"工具搜索工具"的聪明做法,就像给AI配了个智能管家:

图2:Spring AI的"按需点菜"工具发现流程
这个过程就像这样:
weather工具应该合您意"而不是传统的:
让我们看个具体例子。假设你要开发一个AI穿搭助手:
@SpringBootApplication
public class StyleAdvisorApp {
@Bean
CommandLineRunner demo(ChatClient.Builder builder, ToolSearcher toolSearcher) {
return args -> {
// 这里注册了100多个工具,但AI一开始看不到!
var advisor = ToolSearchToolCallAdvisor.builder()
.toolSearcher(toolSearcher)
.build();
ChatClient chatClient = builder
.defaultTools(new StyleTools()) // 偷偷注册100+工具
.defaultAdvisors(advisor) // 启动"智能管家"模式
.build();
var answer = chatClient.prompt("""
帮我规划今天在上海的穿搭建议,
顺便推荐几家现在还开门的服装店。
""").call().content();
System.out.println(answer);
};
}
static class StyleTools {
@Tool(description = "获取指定位置和时间的天气")
public String weather(String location, String time) {
// 就像问天气预报员
return "阳光明媚,15°C,适合轻薄外套";
}
@Tool(description = "获取指定位置和时间营业的服装店")
public List<String> clothingStores(String location, String time) {
// 就像问本地向导
return Arrays.asList("H&M", "Zara", "Uniqlo");
}
@Tool(description = "获取指定位置的当前时间")
public String currentTime(String location) {
// 就像看手表
return "2025-12-08T11:30";
}
// ...还有其他97个工具
}
}currentTimeweatherclothingStores整个过程AI只"看到"了3个真正需要的工具,而不是全部100个!
我们来看看实际测试数据(虽然作者很诚实地说这是初步测试,但数据还是很有说服力的):
AI模型 | 传统方式令牌数 | Spring AI方式 | 节省比例 |
|---|---|---|---|
Gemini | 5,375 | 2,165 | 60% 💰 |
OpenAI | 7,175 | 4,706 | 34% 💰 |
Anthropic | 17,342 | 6,273 | 64% 💰 |
这些数字意味着什么?
就像点外卖一样:
传统方式:
Spring AI方式:
Spring AI提供了三种工具搜索策略,就像三种不同的图书馆管理员:
这个管理员很聪明,你说"我想要做饭相关的",他会给你找到炒菜、烘焙、调料等所有相关工具。
适合场景: 自然语言描述,模糊查找
// 用户说:我想处理图片
// 它会找到:resizeImage, cropImage, filterImage 等这个管理员比较直接,你说"weather",他就找所有包含"weather"的工具。
适合场景: 精确匹配,已知工具名
// 用户说:weather
// 它会找到:getWeather, getCurrentWeather, fetchWeatherData 等这个管理员是个技术宅,懂各种模式匹配。
适合场景: 工具命名有规律
// 模式:get_*_data
// 它会找到:get_weather_data, get_user_data, get_stock_data 等就像以下情况,你绝对需要这个功能:
想试试这个省钱神器?来,5分钟搞定:
<dependency>
<groupId>org.springaicommunity</groupId>
<artifactId>tool-search-tool</artifactId>
<version>1.0.1</version>
</dependency>
<!-- 选择一个搜索策略,我推荐Lucene -->
<dependency>
<groupId>org.springaicommunity</groupId>
<artifactId>tool-searcher-lucene</artifactId>
<version>1.0.1</version>
</dependency>@Configuration
public class AIConfig {
@Bean
public ToolSearchToolCallAdvisor toolSearchAdvisor(ToolSearcher searcher) {
return ToolSearchToolCallAdvisor.builder()
.toolSearcher(searcher)
.maxResults(5) // 最多返回5个工具,防止选择困难症复发
.build();
}
}// AI会自动按需发现工具,你什么都不用管!
var response = chatClient.prompt("帮我查查明天北京的天气").call().content();就这么简单!AI会自动变聪明,账单会自动变小。
你可能会问:"我就是个Java后端开发,为什么要关心AI的工具调用?"
假设你在开发一个电商的智能客服系统:
@Service
public class CustomerServiceAI {
// 你的系统需要这些能力
@Tool("查询订单状态") public OrderStatus getOrderStatus(String orderId) {...}
@Tool("查询物流信息") public ShippingInfo getShippingInfo(String trackingId) {...}
@Tool("处理退款申请") public RefundResult processRefund(String orderId) {...}
@Tool("查询商品信息") public ProductInfo getProductInfo(String productId) {...}
@Tool("查询用户信息") public UserInfo getUserInfo(String userId) {...}
@Tool("发送邮件通知") public void sendEmail(String to, String subject) {...}
@Tool("查询库存") public int getInventory(String productId) {...}
@Tool("查询优惠券") public List<Coupon> getCoupons(String userId) {...}
@Tool("计算运费") public BigDecimal calculateShipping(String address) {...}
@Tool("查询售后政策") public String getReturnPolicy() {...}
// ... 还有40个工具
}传统方式的问题:
Spring AI工具搜索的优势:
getOrderStatus和getShippingInfo相关工具虽然Spring AI的工具搜索很棒,但也有一些需要注意的地方:
就像教你爷爷用智能手机一样,有些老版本的AI模型可能搞不定这套流程。这时候你可能需要:
这是个经典的时间换空间的问题:
就像快递一样,你是愿意一次搬个大箱子,还是分几次搬小包裹?
Spring AI团队正在考虑把这个功能加入核心框架,这意味着:
同时,他们还在研究:
Spring AI的工具搜索模式本质上就是AI版的"断舍离":
它告诉我们一个道理:有时候,少即是多。
当你的AI助手不再是个"工具囤积狂",而是个"按需专家"时,你会发现:
所以,如果你正在开发AI应用,特别是需要大量工具集成的场景,不妨试试Spring AI的工具搜索模式。
让AI学会"断舍离",让你的钱包松口气!
想了解更多Spring AI的黑科技?关注我们的Java技术分享,每周为你带来最实用的开发技巧!
原文链接: https://jishuba.cn/article/ai%e5%b7%a5%e5%85%b7%e9%80%89%e6%8b%a9%e5%9b%b0%e9%9a%be%e7%97%87%ef%bc%9fspring-ai%e5%b8%ae%e4%bd%a0%e7%9c%81%e6%8e%8964%e7%9a%84%e4%bb%a4%e7%89%8c%e8%b4%b9%e7%94%a8/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。