核心要点

  • 声明工具有两种主流方式:在方法上加 @Tool 注解(用 @ToolParam 描述参数),或编程式注册 ToolCallback/FunctionCallback,框架据此自动生成模型可识别的工具 schema。

  • 把工具挂到 ChatClient:通过 .tools(...).defaultTools(...) 传入工具对象/回调,框架会在请求时把工具的名称、描述、参数 JSON Schema 一并发给模型。

  • 执行闭环由框架托管:模型返回 tool call → Spring AI 解析并调用对应 Java 方法 → 把返回值作为工具消息回传给模型 → 模型据此续答,整个多轮过程默认自动完成。

  • 工具来源灵活:可以是本地业务方法、调用外部微服务/REST API,也可以是数据库查询;工具的名称与描述写得是否清晰,直接决定模型选对工具和填对参数的准确率

标准回答

一、什么是工具调用

工具调用让大模型在回答时不只是「编」答案,而是判断需要外部能力(查天气、查订单、算数)时,输出一个结构化的调用请求,由应用执行真实函数,再把结果交还模型生成最终回复。Spring AI 把这套闭环封装好,开发者只需声明工具。

二、声明工具:@Tool 注解

最常用的是注解式:在一个普通 Java 方法上加 @Tool(description = "..."),并用 @ToolParam 描述每个参数的含义。框架会基于方法签名与注解,自动生成模型所需的工具名称、描述和参数 JSON Schema。例如一个 getWeather(String city) 方法,描述写清「根据城市名查询当前天气」即可。

三、注册工具到 ChatClient

把带 @Tool 方法的对象通过 ChatClient.tools(weatherTools) 传入;若要全局生效可用 .defaultTools(...)。对于更动态的场景,可编程式构造 ToolCallback/FunctionCallback 并注册,适合工具集合在运行时才确定的情况。

四、执行闭环(框架托管)

发起对话后,若模型决定调用工具,会返回一个 tool call(含工具名与参数)。Spring AI 自动:解析该调用 → 反射定位并执行对应方法 → 将返回值包装成工具结果消息 → 连同上下文再次请求模型。模型拿到真实结果后生成最终答案。这一「调用-执行-回传」可能往返多轮,默认全自动;也可关闭自动执行以便人工审批高风险动作。

五、工具来源与最佳实践

工具可以是本地方法、外部 REST 服务封装或数据库查询。实践要点:工具名与描述要语义清晰、参数要有明确说明,这直接影响模型「选不选、选哪个、参数填得对不对」;工具应保持幂等或做好副作用控制;对涉及写操作或费用的工具,建议加确认环节而非全自动执行。

常见误区

⚠️ 常见踩坑

最常见的误区是工具描述含糊或缺失参数说明,导致模型选错工具或填错参数——描述是给模型看的「文档」,必须当成提示词一样认真写。其次是忽视安全:把删除、转账等高风险操作放任自动执行,正确做法是关闭自动执行、引入人工确认。还有人误以为加了工具模型就一定会调用——是否调用由模型自行判断,需要靠清晰描述和必要时的提示引导,并对模型不调用、参数非法、工具异常等情况做好兜底。

追问

追问 1@Tool 注解和编程式 FunctionCallback/ToolCallback 各适合什么场景?

@Tool 注解式声明直观、贴近普通 Spring Bean 写法,适合工具在编译期已确定、逻辑相对固定的场景,可读性最好。编程式的 ToolCallback/FunctionCallback 则更灵活,适合工具列表在运行时动态生成(例如根据用户权限或租户配置装配不同工具集)、或需要自定义 schema 与执行逻辑的场景。两者可以混用,按工具的动态程度选择。

追问 2如何控制工具调用的安全性,避免模型误触发危险操作?

几条常用手段:一是对高风险工具关闭自动执行(返回 tool call 后由应用拦截、走人工确认或二次校验再执行);二是在工具方法内部做参数校验、权限校验和幂等控制,不信任模型给的参数;三是用最小权限原则,只暴露当前会话真正需要的工具;四是记录每次工具调用的入参与结果用于审计。本质是把模型当成不可信的调用方来防御。

追问 3工具调用会经过多轮模型往返,如何控制延迟和成本?

每次工具调用都意味着一次额外的模型请求,往返多会放大延迟Token 成本。优化方向:控制单轮可调用工具数量、避免提供大量无关工具以减少模型选择开销;对可并行的工具调用并行执行;对结果可缓存的查询加缓存;设置最大工具调用轮数上限防止死循环;并通过 Micrometer 监控工具调用次数与耗时,定位异常放大的链路。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习