diff --git a/src/main/kotlin/JChatGPT.kt b/src/main/kotlin/JChatGPT.kt index 4b2d26b..86e35d6 100644 --- a/src/main/kotlin/JChatGPT.kt +++ b/src/main/kotlin/JChatGPT.kt @@ -481,6 +481,17 @@ object JChatGPT : KotlinPlugin( private val thinkRegex = Regex("[\\s\\S]*?") + /** + * 截断过长的工具输出,并添加省略标记 + */ + private fun truncateToolOutput(content: String, maxLength: Int = PluginConfig.maxToolOutputLength): String { + if (content.length <= maxLength) return content + + val truncated = content.take(maxLength) + val marker = "\n\n[系统提示:因内容过长,部分内容已被省略]" + return truncated + marker + } + private suspend fun startChat(event: MessageEvent) { if (!requestMap.add(event.subject.id)) { logger.warning("The current Contact is busy!") @@ -880,6 +891,13 @@ object JChatGPT : KotlinPlugin( "工具调用失败,请尝试自行回答用户,或如实告知。\n异常信息:${e.message}" } logger.info("Result=\"$result\"") + + // 截断过长的工具输出 + val truncatedResult = truncateToolOutput(result) + if (truncatedResult.length != result.length) { + logger.warning("工具 ${function.name} 返回内容过长,已从 ${result.length} 字符截断至 ${truncatedResult.length} 字符") + } + // 过会撤回加载消息 if (receipt != null) { launch { @@ -895,7 +913,7 @@ object JChatGPT : KotlinPlugin( } } } - return result + return truncatedResult } /** diff --git a/src/main/kotlin/PluginConfig.kt b/src/main/kotlin/PluginConfig.kt index 3ea93cd..bbd04f9 100644 --- a/src/main/kotlin/PluginConfig.kt +++ b/src/main/kotlin/PluginConfig.kt @@ -119,4 +119,7 @@ object PluginConfig : AutoSavePluginConfig("Config") { @ValueDescription("请求主人回复等待时间,单位毫秒,默认300秒") val requestOwnerWaitTimeout: Long by value(300000L) + + @ValueDescription("单个工具调用返回内容的最大字符数,超过将被截断并标注") + val maxToolOutputLength: Int by value(15000) } \ No newline at end of file