cli.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. """命令行入口:python -m creation_knowledge.cli run --urls <...>"""
  2. from __future__ import annotations
  3. import argparse
  4. import json
  5. from creation_knowledge.pipeline import run_pipeline
  6. def build_parser() -> argparse.ArgumentParser:
  7. parser = argparse.ArgumentParser(prog="creation_knowledge")
  8. sub = parser.add_subparsers(dest="command", required=True)
  9. run = sub.add_parser("run", help="跑流水线:拉取->提取->筛选->拆分->解构->组装[->入库]")
  10. run.add_argument("--urls", nargs="+", required=True, help="帖子链接或 content_id")
  11. run.add_argument("--env-file", default=".env", help="环境变量文件路径")
  12. run.add_argument("--ingest", action="store_true",
  13. help="开启真实入库(默认关闭,只组装+存库)")
  14. run.add_argument("--run-id", default=None,
  15. help="运行批次 id(媒体落盘目录 data/<run_id>/...,默认时间戳)")
  16. return parser
  17. def main() -> int:
  18. args = build_parser().parse_args()
  19. if args.command == "run":
  20. results = run_pipeline(
  21. args.urls,
  22. env_file=args.env_file,
  23. ingest_enabled=True if args.ingest else False,
  24. run_id=args.run_id,
  25. )
  26. for r in results:
  27. print(json.dumps(r, ensure_ascii=False))
  28. ok = sum(1 for r in results if r["status"] == "done")
  29. rej = sum(1 for r in results if r["status"] == "rejected")
  30. skip = sum(1 for r in results if r["status"] == "skipped")
  31. fail = len(results) - ok - rej - skip
  32. print(f"\n汇总:done={ok} rejected={rej} skipped={skip} failed={fail} "
  33. f"/ 共 {len(results)}")
  34. return 0
  35. if __name__ == "__main__":
  36. raise SystemExit(main())