feat(writer): 输出语言一致性保障 + 用户可选输出语言
- 步骤0: 新增中文镜像模板 scripts/make_zh_template.py 与 samples/概要设计书模板_中文.docx(7章锚点原样保留) - 步骤1: config.WriterConfig.output_language→Settings.writer;GenerationContext.output_language + to_vars.language_instruction(zh/ja/auto);writer_agent【语言约束】改引变量;context_builder/orchestrator/run_trial 透传 --output-language - 步骤A: 新建 src/genesis/writer/language.py(detect_script/resolve_expected_language/find_language_violations);WriterAgent.generate_chapter 按期望语言强制、违规重试、耗尽硬失败;max_retries 默认 1→2 - 步骤B: _format_impact 影响调查标签按 output_language 本地化(zh 新建/变更/删除/警告) - 步骤C: eval scorer 第 11 维度 language_consistency(不可验证=满分,不拉低总分);ChapterArtifact.expected_language;QAValidator.validate_doc 透传;QALoop.run 透传 output_language - 测试: test_zh_template/test_language_plumbing/test_writer_language/test_scorer_language/test_language_coverage,并更新 test_phase5_e2e - 全量 pytest 424 passed / 99.15%(覆盖率门槛 99% 达标)
This commit is contained in:
@@ -12,13 +12,14 @@ from genesis.qa.qa_loop import QALoop
|
||||
class FakeEngine:
|
||||
def chat_structured(self, *, session_id, prompt, variables, schema, retry_count=2):
|
||||
cid = variables.get("title", "x")
|
||||
# 日文模板章节(标题含假名)→ 返回日文正文,满足语言一致性强制
|
||||
return SimpleNamespace(
|
||||
data={
|
||||
"title": cid,
|
||||
"blocks": [
|
||||
{"type": "heading", "level": 2, "text": f"{cid} 小节"},
|
||||
{"type": "paragraph", "text": "由 FakeLLM 生成的充分说明内容,满足写入规则要求。"},
|
||||
{"type": "table", "caption": "示例表", "rows": [["列1", "列2"], ["值1", "值2"]]},
|
||||
{"type": "heading", "level": 2, "text": f"{cid} 小節"},
|
||||
{"type": "paragraph", "text": "本機能はFakeLLMにより生成された十分な説明内容であり、書込規則を満たす。"},
|
||||
{"type": "table", "caption": "示例表", "rows": [["列1", "列2"], ["値1", "値2"]]},
|
||||
],
|
||||
},
|
||||
status="ok",
|
||||
@@ -50,5 +51,5 @@ def test_phase5_e2e_fake_llm(tmp_path):
|
||||
assert report.passed is True
|
||||
loaded = Document(str(out))
|
||||
text = _all_text(loaded)
|
||||
assert "由 FakeLLM 生成的充分说明内容" in text
|
||||
assert "本機能はFakeLLMにより生成された十分な説明内容" in text
|
||||
assert "示例表" in text
|
||||
|
||||
Reference in New Issue
Block a user