news 2026/5/1 7:04:18

66_Spring AI 干货笔记之工具调用(工具执行与解析)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
66_Spring AI 干货笔记之工具调用(工具执行与解析)

一、工具执行

工具执行是使用提供的输入参数调用工具并返回结果的过程。工具执行由ToolCallingManager接口处理,该接口负责管理工具执行生命周期。

publicinterfaceToolCallingManager{/** * 从模型的工具调用选项中解析工具定义。 */List<ToolDefinition>resolveToolDefinitions(ToolCallingChatOptionschatOptions);/** * 执行模型请求的工具调用。 */ToolExecutionResultexecuteToolCalls(Promptprompt,ChatResponsechatResponse);}

如果您使用任何Spring AI Spring Boot Starters,DefaultToolCallingManager是ToolCallingManager接口的自动配置实现。您可以通过提供自己的ToolCallingManager bean来自定义工具执行行为。

@BeanToolCallingManagertoolCallingManager(){returnToolCallingManager.builder().build();}

默认情况下,Spring AI在每个ChatModel实现内部透明地为您管理工具执行生命周期。但您可以选择退出此行为并自己控制工具执行。本节描述了这两种场景。

1.1 框架控制的工具执行

使用默认行为时,Spring AI将自动拦截来自模型的任何工具调用请求,调用工具并将结果返回给模型。所有这些都由每个使用ToolCallingManager的ChatModel实现透明地完成。

框架控制的工具执行生命周期

  • 当我们希望向模型提供工具时,我们在聊天请求(Prompt)中包含其定义,并调用将请求发送给AI模型的ChatModel API。

  • 当模型决定调用工具时,它会发送一个响应(ChatResponse),其中包含工具名称和根据定义的架构建模的输入参数。

  • ChatModel将工具调用请求发送给ToolCallingManager API。

  • ToolCallingManager负责识别要调用的工具并使用提供的输入参数执行它。

  • 工具调用的结果返回给ToolCallingManager。

  • ToolCallingManager将工具执行结果返回给ChatModel。

  • ChatModel将工具执行结果发送回AI模型(ToolResponseMessage)。

  • AI模型使用工具调用结果作为附加上下文生成最终响应,并通过ChatClient将其发送回调用者(ChatResponse)。

目前,与模型交换的有关工具执行的内部消息不向用户公开。如果您需要访问这些消息,则应使用用户控制的工具执行方法。

确定工具调用是否有资格执行的逻辑由ToolExecutionEligibilityPredicate接口处理。默认情况下,工具执行资格通过检查ToolCallingChatOptions的internalToolExecutionEnabled属性是否设置为true(默认值),以及ChatResponse是否包含任何工具调用来确定。

publicclassDefaultToolExecutionEligibilityPredicateimplementsToolExecutionEligibilityPredicate{@Overridepublicbooleantest(ChatOptionspromptOptions,ChatResponsechatResponse){returnToolCallingChatOptions.isInternalToolExecutionEnabled(promptOptions)&&chatResponse!=null&&chatResponse.hasToolCalls();}}

在创建ChatModel bean时,您可以提供自己的ToolExecutionEligibilityPredicate实现。

1.2 用户控制的工具执行

有些情况下,您可能希望自己控制工具执行生命周期。您可以通过将ToolCallingChatOptions的internalToolExecutionE

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 17:01:24

USB Serial Controller驱动与RS485模块协同工作实战解析

从“插上就用”到稳定通信&#xff1a;USB转RS485实战全解析你有没有遇到过这样的场景&#xff1f;一台工控机没有串口&#xff0c;但现场一堆温湿度传感器、电表、阀门控制器全是RS485接口。怎么办&#xff1f;最简单的方案就是——插个USB转RS485模块。听起来很简单&#xff…

作者头像 李华
网站建设 2026/4/23 16:53:05

Nginx如何实现 TCP和UDP代理?

文章目录 前言 Nginx之TCP和UDP代理 工作原理示意图 配置文件和命令参数注释 基本命令 配置实例说明 TCP代理实例UDP代理实例 总结 前言 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;同时也支持TCP/UDP代理。在1.9.13版本后&#xff0c;Nginx已经支持端口转发&…

作者头像 李华
网站建设 2026/5/1 6:18:02

JLink驱动安装后USB通信超时的完整示例分析

JLink驱动安装后USB通信超时&#xff1f;一文搞懂底层机制与实战排查 你有没有遇到过这样的场景&#xff1a;J-Link插上电脑&#xff0c;设备管理器里“通用串行总线控制器”中赫然显示着“J-Link”&#xff0c;但Keil点下载却弹出“Connection timed out”&#xff1b;或者J-…

作者头像 李华
网站建设 2026/4/12 3:32:03

Matlab实现GNMF测试阶段投影:将新数据映射到低维表示

在实际应用非负矩阵分解(NMF)或图正则化非负矩阵分解(GNMF)时,我们通常会先在训练集上学习基矩阵U,然后面对新来的测试数据时,需要快速得到其在同一低维空间中的表示V。这就是out-of-sample或测试阶段投影问题。 标准的NMF在测试阶段可以通过简单的非负最小二乘求解,但…

作者头像 李华
网站建设 2026/5/1 7:25:06

一文说清Proteus基础操作:适合初学者的通俗解释

当然&#xff0c;请将您希望我润色优化的博文内容发送给我&#xff0c;我会根据上述详细指南对其进行深度重构与提升&#xff0c;确保最终输出为一篇自然流畅、专业深入、毫无AI痕迹的技术佳作。

作者头像 李华
网站建设 2026/5/1 7:17:28

03-MongoDB高级运维

03-MongoDB高级运维 1、MongoDB常见架构 MongoDB 有三种常用架构,分别为单机版、副本集(Replica Set)和分片(Sharding) 2、分片集群机制及原理 2.1 为什么使用分片集群 数据容量日益增大,访问性能日渐降低,怎么破? 新品上线异常火爆,如何支撑更多的并发用户? 单库…

作者头像 李华