diff --git a/src/main/java/com/wok/supportbot/app/SuggestionResponseParser.java b/src/main/java/com/wok/supportbot/app/SuggestionResponseParser.java index c9f4f01..dccae92 100644 --- a/src/main/java/com/wok/supportbot/app/SuggestionResponseParser.java +++ b/src/main/java/com/wok/supportbot/app/SuggestionResponseParser.java @@ -194,6 +194,15 @@ public final class SuggestionResponseParser { // 1. 尝试标准 JSON 解析 String trimmed = jsonPart.strip(); + // 剥离旧版哨兵标记(___SUGGESTIONS___ 及兼容大写变形),取哨兵后的 JSON 部分。 + // 旧版 suggestion_prompt 会要求模型输出哨兵,若未剥离会被按行降级解析成垃圾条目。 + int sentinelIdx = findSentinelIndex(trimmed); + if (sentinelIdx >= 0) { + int matchedLen = trimmed.startsWith(SENTINEL, sentinelIdx) + ? SENTINEL.length() + : LOOSE_SENTINEL.length(); + trimmed = trimmed.substring(sentinelIdx + matchedLen).strip(); + } // 去掉可能的 markdown 代码块包裹 trimmed = trimCodeBlock(trimmed); diff --git a/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java b/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java index 2cdde31..2f9122a 100644 --- a/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java +++ b/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java @@ -1384,18 +1384,10 @@ public class DatabaseInitConfig { """, "ai_system_prompt", "", "AI 对话全局系统提示词(为空则不注入;修改后即时生效,无需重启)"); // AI 推荐问题(suggest-message-list)种子数据 + // 格式要求由 SuggestionGenerator.buildPrompt 统一追加,此处仅提供基础文案, + // 不再要求模型输出 ___SUGGESTIONS___ 哨兵标记(避免与新架构"只输出 JSON 数组"要求矛盾)。 String defaultSuggestionPrompt = """ - 【推荐问题生成规则】 - 在回答正文结束后,请严格按以下格式生成 3 条用户可能继续追问的推荐问题: - - ___SUGGESTIONS___ - ["推荐问题1", "推荐问题2", "推荐问题3"] - - 要求: - 1. 推荐问题需与当前回答内容相关,覆盖用户可能关心的不同方面 - 2. 推荐问题是用户可直接点击发送的完整问题文本 - 3. 必须是合法的 JSON 字符串数组 - 4. ___SUGGESTIONS___ 是分隔标记,不要在回答正文中出现此标记 + 请根据历史对话,生成 3 条用户最可能继续提问的推荐问题。 """; jdbcTemplate.update(""" diff --git a/src/main/resources/init-database.sql b/src/main/resources/init-database.sql index 9a9fc2f..5ff61be 100644 --- a/src/main/resources/init-database.sql +++ b/src/main/resources/init-database.sql @@ -803,17 +803,7 @@ ON CONFLICT (config_key) DO NOTHING; INSERT INTO system_config (config_key, config_value, description) VALUES ('suggestion_prompt', - '【推荐问题生成规则】 -在回答正文结束后,请严格按以下格式生成 3 条用户可能继续追问的推荐问题: - -___SUGGESTIONS___ -["推荐问题1", "推荐问题2", "推荐问题3"] - -要求: -1. 推荐问题需与当前回答内容相关,覆盖用户可能关心的不同方面 -2. 推荐问题是用户可直接点击发送的完整问题文本 -3. 必须是合法的 JSON 字符串数组 -4. ___SUGGESTIONS___ 是分隔标记,不要在回答正文中出现此标记', + '请根据历史对话,生成 3 条用户最可能继续提问的推荐问题。', 'AI 推荐问题 Prompt 模板(仅在 suggestion_enabled=true 时生效)') ON CONFLICT (config_key) DO NOTHING;