diff --git a/src/main/java/com/superbiz/agent/hook/AgentLoggingHook.java b/src/main/java/com/superbiz/agent/hook/AgentLoggingHook.java index 9703b5d..491c862 100644 --- a/src/main/java/com/superbiz/agent/hook/AgentLoggingHook.java +++ b/src/main/java/com/superbiz/agent/hook/AgentLoggingHook.java @@ -73,8 +73,14 @@ public class AgentLoggingHook extends MessagesModelHook { } if (lastAssistant != null) { - log.info("*** [Agent 思考] 模型输出: "); - // AssistantMessage 的内容通过 toString() 或在工具调用中体现 + // 打印模型返回的文本内容 + String textContent = extractTextContent(lastAssistant); + if (textContent != null && !textContent.isEmpty()) { + log.info("*** [Agent 思考] 模型返回文本: {}", + textContent.length() > 500 + ? textContent.substring(0, 500) + "... (已截断,总长度: " + textContent.length() + ")" + : textContent); + } // 检查是否有工具调用 if (lastAssistant.getToolCalls() != null && !lastAssistant.getToolCalls().isEmpty()) { @@ -98,6 +104,43 @@ public class AgentLoggingHook extends MessagesModelHook { return new AgentCommand(previousMessages); } + /** + * 提取 AssistantMessage 的文本内容 + */ + private String extractTextContent(AssistantMessage message) { + try { + // 尝试通过反射获取 text 或 content 字段 + // Spring AI 的 AssistantMessage 通常有 text 字段 + java.lang.reflect.Field textField = null; + try { + textField = message.getClass().getDeclaredField("text"); + } catch (NoSuchFieldException e) { + try { + textField = message.getClass().getDeclaredField("content"); + } catch (NoSuchFieldException ex) { + // 字段不存在 + } + } + + if (textField != null) { + textField.setAccessible(true); + Object value = textField.get(message); + return value != null ? value.toString() : null; + } + + // 如果找不到字段,尝试 toString() + String toString = message.toString(); + if (toString != null && !toString.startsWith("AssistantMessage@")) { + return toString; + } + + return null; + } catch (Exception e) { + log.debug("无法提取 AssistantMessage 文本内容: {}", e.getMessage()); + return null; + } + } + /** * 获取消息角色 */