空概括回显探测修复:extractJson收紧空值判null后,旧'parsed!=null'式emptyEcho探测永远进不去(重试提示词误标'不是合法JSON');改原文正则探测{"概括":""},重试用准确措辞'空概括'并附强约束;现场raw(9)=空schema回显(键名正确格式合法,纯EMPTY进EMPTY出)

This commit is contained in:
liwenhao2 2026-09-16 13:39:15 +08:00
parent caee985dcc
commit b14c5486ef
1 changed files with 6 additions and 4 deletions

View File

@ -396,10 +396,12 @@ class SummarizePipeline(
maxNewTokens = 900, temperature = 0f,
)
var parsed = extractJson(out)
// 空笔记视同失败:小模型吃不透指令时会把输入的空模板原样复读
// (EMPTY 进 EMPTY 出)。首轮空结果带一次强约束重试再判。
val emptyEcho = parsed != null && idx == 0 &&
resumeNotes == null && notesEntriesEmpty(parsed)
// 空概括回显(EMPTY 进 EMPTY 出):小模型(尤其 MiniCPM5)会把提示词里
// 的空 schema 原样抄回。2026-09-16 现场 raw(9)={"概括":""}。
// 注意:extractJson 对空值已判 null,"parsed!=null"式旧探测永远
// 进不去——改为对原文正则探测,让重试提示词用准确措辞
val emptyEcho = parsed == null && idx == 0 && resumeNotes == null &&
Regex("\"概括\"\\s*:\\s*\"\\s*\"").containsMatchIn(out)
if (parsed == null || emptyEcho) {
// 一次修复重试:把畸形/空洞输出递回去(仍失败保留旧笔记,计 failed)
if (listener.isCancelled()) throw SummarizeCancelledException()