screen.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. """筛选:判断帖子是否值得提取为创作知识。"""
  2. from __future__ import annotations
  3. from typing import Optional
  4. from creation_knowledge.integrations.llm import ChatFn, default_chat
  5. from creation_knowledge.jsonio import to_bool
  6. from creation_knowledge.models import ExtractedContent, Post, ScreeningResult
  7. from creation_knowledge.prompts import load_prompt
  8. from creation_knowledge.stages._common import content_for_llm
  9. SYSTEM = "你是严谨的创作知识筛选器,只认能指导内容创作的知识,作品本身不算。"
  10. def screen_post(
  11. post: Post,
  12. content: ExtractedContent,
  13. *,
  14. chat: Optional[ChatFn] = None,
  15. env_file: str = ".env",
  16. ) -> ScreeningResult:
  17. chat = chat or default_chat(env_file)
  18. user = load_prompt("screen").format(
  19. title=post.title or "(无)",
  20. topics="、".join(post.topic_list) or "(无)",
  21. content=content_for_llm(post, content) or "(空)",
  22. )
  23. data = chat(SYSTEM, user)
  24. return ScreeningResult(
  25. passed=to_bool(data.get("passed")),
  26. score=int(data.get("score") or 0),
  27. reason=str(data.get("reason") or ""),
  28. )