"""筛选:判断帖子是否值得提取为创作知识。""" from __future__ import annotations from typing import Optional from creation_knowledge.integrations.llm import ChatFn, default_chat from creation_knowledge.jsonio import to_bool from creation_knowledge.models import ExtractedContent, Post, ScreeningResult from creation_knowledge.prompts import load_prompt from creation_knowledge.stages._common import content_for_llm SYSTEM = "你是严谨的创作知识筛选器,只认能指导内容创作的知识,作品本身不算。" def screen_post( post: Post, content: ExtractedContent, *, chat: Optional[ChatFn] = None, env_file: str = ".env", ) -> ScreeningResult: chat = chat or default_chat(env_file) user = load_prompt("screen").format( title=post.title or "(无)", topics="、".join(post.topic_list) or "(无)", content=content_for_llm(post, content) or "(空)", ) data = chat(SYSTEM, user) return ScreeningResult( passed=to_bool(data.get("passed")), score=int(data.get("score") or 0), reason=str(data.get("reason") or ""), )