run_batch.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. """M5 真实 e2e:把 5 个样例帖跑完整流水线,落 DB(INGEST_ENABLED=False),再回读校验。
  2. 须在能连 DB + OpenRouter 的云端跑(会有 crawler/Gemini/claude 调用费)。
  3. 用法:python scripts/run_batch.py [env_file] [content_id ...]
  4. """
  5. from __future__ import annotations
  6. import json
  7. import sys
  8. from creation_knowledge.config import PgConfig
  9. from creation_knowledge.integrations.db import CkStore
  10. from creation_knowledge.pipeline import run_pipeline
  11. DEFAULT_IDS = [
  12. "67e4bdf50000000006028a59", # HOW+WHAT 海狸
  13. "698481e1000000000a02a7c1", # HOW+WHAT Irvin
  14. "67e2e39b0000000003028ff0", # HOW 拾意
  15. "699308fa0000000016009697", # WHY 方圆
  16. "680659e8000000001a007a11", # HOW+WHY+WHAT 拾意
  17. ]
  18. def main() -> int:
  19. args = sys.argv[1:]
  20. env_file = args[0] if args and args[0].endswith(".env") else ".env"
  21. ids = [a for a in args if not a.endswith(".env")] or DEFAULT_IDS
  22. print(f"=== 跑流水线:{len(ids)} 个样例(ingest 关闭)===")
  23. results = run_pipeline(ids, env_file=env_file)
  24. for r in results:
  25. print(json.dumps(r, ensure_ascii=False))
  26. print("\n=== DB 回读校验 ===")
  27. store = CkStore(PgConfig.from_env(env_file))
  28. for r in results:
  29. pid = r.get("post_id")
  30. if not pid:
  31. print(f"{r['url']} -> {r['status']}")
  32. continue
  33. post = store.read_post(pid)
  34. items = store.read_items(pid)
  35. statuses = [it["ingest_status"] for it in items]
  36. print(f"{pid} stage={post['stage']} items={len(items)} ingest_status={statuses}")
  37. return 0
  38. if __name__ == "__main__":
  39. raise SystemExit(main())