build_family6.py 2.4 KB

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