我用 Spring AI 2.0 版本写了一个很简单的 demo,通过 tool 查询数据库里几张表的数据,做数据分析。代码很简单,开启
spring.ai.chat.client.observations.log-completion
配置后,看到不断的再提示词上拼接空字符串,以下内容是把控制台输出发给 AI 后的分析结果:
分析 Spring AI ToolCallingAdvisor 内部行为
从日志观察到一个致命现象:每次 prompt 末尾追加的空字符串越积越多:
Round 1 prompt: [system, user]
Round 2 prompt: [system, user, "", ""]
Round 3 prompt: [system, user, "", "", "", ""]
...
这些空字符串是 ToolCallingAdvisor 内部为了模拟 assistant + tool message 占位而追加的文本消息。理论上:
Round 1:模型判断需要工具 → 返回 tool_calls 完成,finish_reason=tool_calls。
Spring AI:提取 tool_calls,调用 Java 方法,构造 role=tool 消息拼回 prompt。
Round 2:模型拿到工具执行结果 → 生成最终文本。
但在本次场景中,ToolCallingAdvisor 一直在发送 prompt,却从未从模型响应中成功提取到 tool_calls 并执行工具,导致模型每次都返回空(因为没有任何内容或工具可调),循环 7 次后超时。
以上是 AI 分析的,不知道您有没有遇到。
环境:
Spring Boot:4.1.0
Spring AI:2.0.0
Java:25.0.3
模型是自建的 kimi2.6
我用 Spring AI 2.0 版本写了一个很简单的 demo,通过 tool 查询数据库里几张表的数据,做数据分析。代码很简单,开启
spring.ai.chat.client.observations.log-completion配置后,看到不断的再提示词上拼接空字符串,以下内容是把控制台输出发给 AI 后的分析结果:
分析 Spring AI ToolCallingAdvisor 内部行为
从日志观察到一个致命现象:每次 prompt 末尾追加的空字符串越积越多:
Round 1 prompt: [system, user]
Round 2 prompt: [system, user, "", ""]
Round 3 prompt: [system, user, "", "", "", ""]
...
这些空字符串是 ToolCallingAdvisor 内部为了模拟 assistant + tool message 占位而追加的文本消息。理论上:
Round 1:模型判断需要工具 → 返回 tool_calls 完成,finish_reason=tool_calls。
Spring AI:提取 tool_calls,调用 Java 方法,构造 role=tool 消息拼回 prompt。
Round 2:模型拿到工具执行结果 → 生成最终文本。
但在本次场景中,ToolCallingAdvisor 一直在发送 prompt,却从未从模型响应中成功提取到 tool_calls 并执行工具,导致模型每次都返回空(因为没有任何内容或工具可调),循环 7 次后超时。
以上是 AI 分析的,不知道您有没有遇到。
环境:
Spring Boot:4.1.0
Spring AI:2.0.0
Java:25.0.3
模型是自建的 kimi2.6