build_query_demo.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """四种打法生成 query 的 demo:只到「生成 query」,写 data/queries/demo.json(不落库)。
  2. 用法:PYTHONPATH=. python scripts/build_query_demo.py
  3. ③ 联想 + ④ LLM 走真实接口,须在能访问 crawler.aiddit.com / OpenRouter 的环境跑。
  4. """
  5. from __future__ import annotations
  6. import json
  7. import time
  8. from pathlib import Path
  9. from acquisition.query import (
  10. ACTIONS, BLOCK, CARRIER_POS_GROUPED, DEMAND, KTYPE_SUFFIX, MODALITIES, STAGES,
  11. sample_nodes, tactic2_form_llm, tactic4_llm, tactic_multiaxis,
  12. )
  13. from core.config import Settings
  14. ROOT = Path(__file__).resolve().parent.parent
  15. OUT = ROOT / "data" / "queries" / "demo.json"
  16. def main() -> None:
  17. settings = Settings.from_env()
  18. topics = sample_nodes("实质", depths=(3,), limit=12, under="理念") # 实质:理念分支(事件/知识/情感…)
  19. forms = sample_nodes("形式", depths=(4,), limit=20, under="架构") # 形式:架构分支(叙事/修辞/创意…)
  20. print(f"实质 {len(topics)}: {topics}")
  21. print(f"形式 {len(forms)}: {forms}")
  22. t2 = tactic2_form_llm(forms, settings)
  23. # ③ 暂留空:小红书/抖音无真·搜索联想接口(keyword_v2 返回的是帖子不是联想词),待接入真 sug 再补
  24. print(f"① LLM 实质: {topics[:5]}")
  25. t4 = tactic4_llm(topics[:5], settings)
  26. t5 = tactic_multiaxis(n=36) # ④ 机械多轴组合(无 LLM)
  27. data = {
  28. "generated_at": int(time.time()),
  29. "block": BLOCK,
  30. "tactic1": {"name": "实质 × 创作阶段 × 需求", "需求点": DEMAND, "items": t4},
  31. "tactic2": {"name": "形式 + 载体位置", "载体位置": CARRIER_POS_GROUPED, "items": t2},
  32. "tactic3": {"name": "搜索词sug扩展", "items": [],
  33. "待接入": "小红书/抖音都没有真正的「输入框搜索联想」接口;keyword_v2 名字像联想、实际返回的是帖子。此页暂空,待接入真 sug 接口后再补。"},
  34. "tactic4": {"name": "多轴正交组合", "items": t5,
  35. "人工轴": {"阶段": STAGES, "动作": ACTIONS, "知识类型": KTYPE_SUFFIX, "模态": MODALITIES}},
  36. }
  37. OUT.parent.mkdir(parents=True, exist_ok=True)
  38. OUT.write_text(json.dumps(data, ensure_ascii=False, indent=1), encoding="utf-8")
  39. print(f"\n① {len(t4)} 条 ② {len(t2)} 条 ③ 待接入 ④ {len(t5)} 条(机械组合) → {OUT}")
  40. if __name__ == "__main__":
  41. main()