fix(writer): auto 模式语言 fallback 改用规则文档,修复日文文档被误判期望 zh

真实 ja 试运行暴露:auto 模式 fallback 误用 impact/data 源数据(含中文元素名
止损风控等 + 汉字标签无假名)→ 把日文文档误判为期望 zh → LLM 正常日文输出被
判违规 → 硬失败。修复:fallback 改用 write_rules/design_rules(RAG 自日文作成
说明书/记入规则检索,含假名可靠判 ja);加回归测试
test_generate_chapter_auto_with_ja_rules_but_chinese_source_data_enforces_ja。
修复后 ja 真实试运行成功(7章);zh 真实试运行成功(7章);425 passed / 99.15%
This commit is contained in:
lhl
2026-08-26 00:36:54 +08:00
parent d01e1b720f
commit 3f4d17cf69
4 changed files with 47 additions and 6 deletions
+27
View File
@@ -170,3 +170,30 @@ def test_generate_chapter_auto_unverifiable_not_enforced():
state=WriterState(["db_design"]), max_retries=1)
content = agent.generate_chapter(_ctx_with_lang("db_design", "DB 設計", "auto"))
assert content is not None
class JaRuleEngine(MixedLanguageEngine):
"""返回日文正文(含假名)。"""
def test_generate_chapter_auto_with_ja_rules_but_chinese_source_data_enforces_ja():
"""回归:真实试运行暴露——auto 模式 fallback 只用规则文档(日文),
不得用 impact/data 源数据(含中文元素名)把期望误判为 zh。
构造:标题纯汉字「機能一覧」(无假名)+ 规则文档日文(含假名)+ 源数据中文,
期望应推导为 ja;日文正文应通过、中文正文应违规。
"""
ja_rules_ctx = GenerationContext(
chapter_id="function_list", title="2. 機能一覧",
template_marker=ChapterSpec(chapter_id="function_list", title="2. 機能一覧"),
structured_source="中文源数据:止损风控、下单流程",
write_rules=["書込規則に従って記述する。"], # 日文含假名
design_rules=["設計方針は本書の通りである。"], # 日文含假名
template_styles=set(),
output_language="auto",
)
engine = MixedLanguageEngine(["本機能は注文処理を行う画面であり、詳細は以下の通り。"])
agent = WriterAgent(session_id="s", engine=engine,
prompt_registry=FakePromptRegistry(),
state=WriterState(["function_list"]), max_retries=1)
content = agent.generate_chapter(ja_rules_ctx)
assert content is not None and "本機能" in content.blocks[0].text