关键调整:

social_short 从“1句 + 1条”改成“最多2句 + 最多2条”,允许续发,避免戛然而止。
qa_fast / qa_with_context 也改为允许分条续发,避免中间硬断。
smart_clip 的弱标点回看窗口从 4 提高到 12,更容易切在自然停顿处(逗号/顿号等)。
同步更新了长度规则文案:明确“必要时可拆两条,保证语义完整”。
你给的这句原文在新逻辑下会优先拆成两条,而不是第一条被截到“我听着怎么这”这种半句。
This commit is contained in:
liuwei
2026-04-15 10:52:33 +08:00
parent 5ce60cbd95
commit 96f50d929b

View File

@@ -12,11 +12,12 @@ def finalize_reply(response: str, reply_mode: str) -> List[str]:
text = text.replace("\n", " ").strip()
if reply_mode == "social_short":
return split_reply_chunks(text, sentence_limit=1, char_limit=48, chunk_limit=1, allow_clip_split=False)
# 社交短句允许拆成两条,避免长句被硬截断成半句。
return split_reply_chunks(text, sentence_limit=2, char_limit=48, chunk_limit=2, allow_clip_split=True)
if reply_mode == "qa_fast":
return split_reply_chunks(text, sentence_limit=2, char_limit=42, chunk_limit=2, allow_clip_split=False)
return split_reply_chunks(text, sentence_limit=2, char_limit=42, chunk_limit=2, allow_clip_split=True)
if reply_mode == "qa_with_context":
return split_reply_chunks(text, sentence_limit=2, char_limit=54, chunk_limit=2, allow_clip_split=False)
return split_reply_chunks(text, sentence_limit=2, char_limit=54, chunk_limit=2, allow_clip_split=True)
return [take_first_sentence(text, 28).strip()]
@@ -29,7 +30,7 @@ def preview_text(text: str, limit: int = 80) -> str:
def build_length_rule(reply_mode: str) -> str:
if reply_mode == "social_short":
return "默认只回1句短话尽量简短但必须表达完整通常控制在8到24个字必要时可以放宽到一整句短句截半句。"
return "默认优先1句短话必要时可以拆成2条短消息保证语义完整不要截半句。"
if reply_mode == "qa_fast":
return "优先1句话如果确实需要可以拆成2条短消息发出每条尽量控制在42字内先给结论不要主动补第二层解释。"
if reply_mode == "qa_with_context":
@@ -90,7 +91,7 @@ def smart_clip(text: str, limit: int) -> str:
weak_punctuation = ",、;;:"
split_at = _find_split_at(window, strong_punctuation)
if split_at < 0:
split_at = _find_split_at(window, weak_punctuation, lookback=4)
split_at = _find_split_at(window, weak_punctuation, lookback=12)
if split_at >= 0:
return window[:split_at].rstrip(",、;;:。!?!? ").strip()
return window.rstrip(",、;;: ").strip()