From 3cbc4fa62d4b30d9a782bf779f59e9c16750bdcf Mon Sep 17 00:00:00 2001 From: Xinyue-QwQc <255773902+Xinyue-QwQc@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:26:06 +0800 Subject: [PATCH] Fix L0 JSON output routing for reasoning models --- modules/story-summary/vector/llm/atom-extraction.js | 4 ++++ modules/story-summary/vector/llm/llm-service.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/story-summary/vector/llm/atom-extraction.js b/modules/story-summary/vector/llm/atom-extraction.js index 412e4adf..30ff52b5 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 44e86f09..f27f6efc 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; }