"""第六家族(最老正交方案去掉实质):形式 × 阶段 × 动作 × 作用 × 知识类型 → 组合 query,过 query_filter。 沿用 query.py 的老轴:形式/作用 取分类树(4级非叶子),阶段=灵感/选题/脚本,动作=构思/策划/组织/ 撰写/改编/润色(+无动作变体),知识类型=怎么做/有哪些/为什么。query 形如「叙事组织 脚本撰写 趣味互动 有哪些」。 只产 query + LLM 筛选,打印看效果。用法:PYTHONPATH=. CK_ENV_FILE=.env python scripts/build_family6.py [n] """ from __future__ import annotations import sys from acquisition.query import ACTIONS, KTYPE_SUFFIX, STAGES, _nonleaf_d4 from acquisition.query_filter import filter_queries from core.config import Settings N = int(sys.argv[1]) if len(sys.argv) > 1 else 24 def build(n: int) -> list[dict]: xs = _nonleaf_d4("形式", 10, under="架构") # 创作手法(架构支) zy = _nonleaf_d4("作用", 10) # 作用 ktypes = list(KTYPE_SUFFIX.items()) # [(what,有哪些),…] stage_act = [(s, a) for s in STAGES for a in ACTIONS] + [("", "")] # +「无动作」变体(=老方案的 /) rows = [] for i in range(n): f_ = xs[i % len(xs)] st, ac = stage_act[i % len(stage_act)] zy_ = zy[i % len(zy)] kt, suf = ktypes[i % len(ktypes)] seg = (st + ac) if ac else "" # 脚本撰写 / 空(动作=/ 时连阶段一起省) parts = [f_] + ([seg] if seg else []) + [zy_, suf] rows.append({"形式": f_, "阶段": st or "/", "动作": ac or "/", "作用": zy_, "知识类型": kt, "query": " ".join(parts)}) return rows def main() -> None: settings = Settings.from_env() rows = build(N) verdicts = filter_queries([r["query"] for r in rows], settings) kept = 0 print(f"第六家族 形式×阶段×动作×作用×知识类型(去实质):{len(rows)} 条\n") print(f"{'留/扔':<4} {'query':<34} 轴(形式/阶段/动作/作用) 理由") for r, v in zip(rows, verdicts): kept += 1 if v["keep"] else 0 mark = "✓留" if v["keep"] else "✕扔" axes = f"{r['形式']}/{r['阶段']}/{r['动作']}/{r['作用']}" print(f"{mark:<4} {r['query']:<34} {axes:<22} {v['reason']}") print(f"\n保留 {kept} / {len(rows)}(排除 {len(rows) - kept})") if __name__ == "__main__": main()