smoke_extract.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """M3 真实验收:对样例帖子调真实 Gemini,打印多模态提取结果。
  2. 须在能联网调 OpenRouter 的云端跑(会产生 API 费用)。
  3. 用 fixture 解析出 Post(含 image_urls),避免重复爬虫调用。
  4. 用法:
  5. python scripts/smoke_extract.py [env_file] [content_id ...]
  6. 默认跑「拾意」两条空正文帖(验收点:from_image 非空、is_empty=false)。
  7. """
  8. from __future__ import annotations
  9. import json
  10. import sys
  11. from pathlib import Path
  12. from acquisition.crawler import parse_detail_response
  13. from creation_knowledge.integrations.extractor import GeminiExtractor
  14. FIXTURES = Path(__file__).resolve().parent.parent / "tests" / "fixtures"
  15. DEFAULT_IDS = ["67e2e39b0000000003028ff0", "680659e8000000001a007a11"]
  16. def main() -> int:
  17. args = sys.argv[1:]
  18. env_file = args[0] if args and args[0].endswith(".env") else ".env"
  19. ids = [a for a in args if not a.endswith(".env")] or DEFAULT_IDS
  20. client = GeminiExtractor.from_env(env_file=env_file)
  21. print(f"[model] {client.model} base={client.base_url}\n")
  22. for cid in ids:
  23. resp = json.loads((FIXTURES / f"xhs_case_{cid}.json").read_text("utf-8"))
  24. post = parse_detail_response(resp, fallback_content_id=cid)
  25. print(f"==== {post.id} 作者={post.author_name} 图片={len(post.image_urls)} ====")
  26. print(f"标题: {post.title}")
  27. print(f"body_text(原文): {post.body_text[:50]!r}")
  28. out = client.extract(post)
  29. print(f" is_empty : {out.is_empty}")
  30. print(f" from_image : {out.from_image[:200]}")
  31. print(f" text : {out.text[:200]}")
  32. print()
  33. return 0
  34. if __name__ == "__main__":
  35. raise SystemExit(main())