diff --git a/modules/story-summary/vector/llm/atom-extraction.js b/modules/story-summary/vector/llm/atom-extraction.js index 412e4ad..30ff52b 100644 --- a/modules/story-summary/vector/llm/atom-extraction.js +++ b/modules/story-summary/vector/llm/atom-extraction.js @@ -83,6 +83,8 @@ const SYSTEM_PROMPT = `你是场景摘要器。从一轮对话中提取1-2个场 输出: {"anchors":[{"scene":"火山口上艾拉举起圣剑刺穿古龙的心脏,龙血溅满铠甲,古龙轰然倒地,艾拉跪倒在滚烫的岩石上痛哭,完成了她不得不做的弑杀","edges":[{"s":"艾拉","t":"古龙","r":"以圣剑刺穿心脏"}],"where":"火山口"}]}`; +const JSON_PREFILL = '{"anchors":['; + // ============================================================================ // 睡眠工具 // ============================================================================ @@ -221,6 +223,8 @@ async function extractAtomsForRoundWithRetry(userMessage, aiMessage, aiFloor, op const response = await callLLM([ { role: 'system', content: SYSTEM_PROMPT }, { role: 'user', content: input }, + // Force the model to continue a JSON object instead of planning in a reasoning channel. + { role: 'assistant', content: JSON_PREFILL }, ], { temperature: 0.3, max_tokens: 600, diff --git a/modules/story-summary/vector/llm/llm-service.js b/modules/story-summary/vector/llm/llm-service.js index 44e86f0..f27f6ef 100644 --- a/modules/story-summary/vector/llm/llm-service.js +++ b/modules/story-summary/vector/llm/llm-service.js @@ -125,7 +125,7 @@ export async function callLLM(messages, options = {}) { max_tokens, stream: false, }; - if (model.includes('Qwen3')) { + if (model.toLowerCase().includes('qwen3')) { body.enable_thinking = false; }