LLM大模型的局限性
大模型的原生局限性:
- 知识滞后:预训练模型的知识截止到特定时间,无法获取实时信息(如最新天气,股票行情)。
- 能力边界:无法直接执行系统命令,操作数据库,调用API(如查询用户订单, 生成PDF文件)。
- 计算短板:对复杂数学运输(如微积分,金融估值模型)的准确性远低于专用工具。
- 不能和公司业务系统打通:无法连接现有的人机系统(如CRM,各个系统API)。
什么是工具调用(Function Call):工具调用是LLM与外部世界交互的接口,让大模型能调用外部功能(如API,函数,数据库)。
为啥大模型需要工具调用:
- 能力扩展:让AI模型通过调用外部工具突破自身限制,如调用天气API获取实时数据。
- 流程自动化:实现端到端业务流程(如用户咨询订单->调用数据库查询->生成回复)。
- 安全可控:通过工具层隔离AI与敏感系统,避免直接暴露数据库,服务器权限。
工具调用应用场景:
- 实时数据查询:如天气,股票,新闻,调用第三方API获取数据。
- 数据库操作:查询用户订单,修改个人信息,使用JPA/MyBatis执行CRUD。
- 文件处理:解析PDF/EXCEL,生成报表,转换格式等。使用Apache POI处理excel文件。
- 系统命令执行:服务器监控(如查看CPU使用率),定时任务调度。
- 复杂计算:金融估值,科学计算,调用属性库或自定义算法。
SpringAI工具调用解决方案:
提供统一的Tool接口抽象,支持注解式/编程式工具定义。通过FunctionCallAdvisor自动拦截对话请求,判断是否需要调用工具。内置工具执行器(ToolExecutor)。处理参数解析,封装结果,异常捕获。
核心模块:
- Tool接口:定义工具的核心方法,包含name(工具名称),execute(执行逻辑)。
- @Tool注解:标记类或者方法为可调用工具,description属性用于模型立即工具功能。
- @ToolParam注解:描述工具参数的含义(如城市名称,格式中文等)。帮助模型生成正确参数。
- FunctionCallAdvisor:SpringAOP拦截器,负责解析用户请求,判断是否需要调用工具(基于模型返回function_call字段),调用ToolExecutor执行工具,并将结果回传给模型。
- ToolExcetor:工具执行引擎,处理参数类型转换,方法反射调用,异常处理。
链路流程

大模型+FunctionCall实战天气查询助手
需求:构建一个SpringAI工具调用(FunctionCall)的智能查询助手。支持通过自然语言获取指定日期的天气信息,需要自动关联日期计算与天气查询工具,实现多工具协调响应。
@RestController
@RequestMapping("/ai")
public class FunctionCallController {
@Autowired
private ChatClient chatClient;
@GetMapping("/function")
public String functionCall(){
String res = this.chatClient
.prompt("明天是几号,北京天气怎么样?")
.tools(new DateTimeTools(),new WeatherTools())
.call()
.content();
return res;
}
private class DateTimeTools {
@Tool(description = "获取当前时间")
String getTime() {
System.out.printf("时间获取工具触发");
return LocalDateTime.now().toString();
}
}
private class WeatherTools {
@Tool(description = "获取天气")
String getWeather(@ToolParam(description = "城市名称")String city,@ToolParam(description = "日期,格式YYYY-MM-DD")String date) {
System.out.println("queryWeather查询指定城市天气情况"+city+","+date);
return String.format("%s%s的天气为:晴,24-30℃,微风", city, date);
}
}
}


1272

被折叠的 条评论
为什么被折叠?



