Files
2026Technology-Competition/src/genesis/writer/context_builder.py
T
lhl d9aa3a3325 fix(writer): 修复概要设计书输出塌缩与章间引用缺失,并补 parser 防灾
- Writer: 表格表头行/Table Grid 边框、列表 List Bullet/Number 样式、行内字符格式不再塌缩(外视 #6 反转)
- Writer: 打通章间引用(WriterState 摘要 → 后章 prompt prior_summaries)
- Writer: 删除 _chunk_source 死代码,章节数据经 DataGate 控 token 预算
- Writer: 章节结果落盘快照,命中即跳过 LLM(录制重拍可续跑,损坏快照自动忽略)
- Parser: 按 body 顺序遍历正文+单元格(含嵌套表、合并单元格去重),修复表格内锚点漏检导致的静默丢章
- Parser/服务层: .xls 显式拒绝(可操作提示),上传即校验扩展名,rules 对齐 docx-only
- 测试: 全量 680 通过,覆盖率 99.37%(红线 99%)
2026-09-15 21:30:55 +08:00

37 lines
1.5 KiB
Python

"""上下文装配:StructuredSource + 模板 + 规则 → 有序 GenerationContext 列表(Phase 5)。"""
from __future__ import annotations
from genesis.data_models import StructuredSource
from genesis.services.rag_service import CannedRagService
from genesis.writer.models import ChapterSpec, GenerationContext
from genesis.writer.template_mapper import map_template
def build_contexts(
structured_source: StructuredSource,
samples_dir: str = "sample",
output_language: str = "auto",
) -> list[GenerationContext]:
specs: list[ChapterSpec] = map_template(structured_source.template)
rag = CannedRagService(samples_dir=samples_dir)
out: list[GenerationContext] = []
for spec in specs:
# RagService 方法为同步(P5-T3 裁定)
write_rules = rag.retrieve_write_rules(spec.chapter_id)
design_rules = rag.retrieve_design_rules(spec.chapter_id)
used = (structured_source.template.styles or {}).get("used", [])
out.append(
GenerationContext(
chapter_id=spec.chapter_id,
title=spec.title,
template_marker=spec,
structured_source=structured_source,
write_rules=write_rules,
design_rules=design_rules,
template_styles=set(used),
impact_report=getattr(structured_source, "impact_report", None),
output_language=output_language,
)
)
return out