74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
内容审核模块
|
||
"""
|
||
|
||
import logging
|
||
import json
|
||
from json_repair import loads as json_repair_loads
|
||
from typing import Dict, Any
|
||
|
||
from core.ai import AIAgent
|
||
# We'll need a specific config for the judger
|
||
# from core.config import ContentJudgerConfig
|
||
from utils.prompts import JudgerPromptBuilder
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
class ContentJudger:
|
||
"""内容审核类,使用AI评估和修正内容"""
|
||
|
||
def __init__(self, ai_agent: AIAgent, system_prompt_path: str):
|
||
"""
|
||
初始化内容审核器
|
||
|
||
Args:
|
||
ai_agent: AIAgent实例
|
||
system_prompt_path: 审核系统提示的文件路径
|
||
"""
|
||
self.ai_agent = ai_agent
|
||
self.prompt_builder = JudgerPromptBuilder(system_prompt_path)
|
||
|
||
def judge(self, product_info: str, generated_content: str) -> Dict[str, Any]:
|
||
"""
|
||
审核内容,返回一个包含分析和修正后内容的字典
|
||
|
||
Args:
|
||
product_info: 用作参考的产品资料
|
||
generated_content: 需要审核的原始生成内容
|
||
|
||
Returns:
|
||
一个包含审核结果的字典,可能包括 "analysis", "title", "content"
|
||
"""
|
||
logger.info("开始内容审核...")
|
||
|
||
# 1. 构建提示
|
||
prompts = self.prompt_builder.build_prompts(product_info, generated_content)
|
||
|
||
# 2. 调用AI
|
||
try:
|
||
raw_result, _, _, _ = self.ai_agent.work(
|
||
system_prompt=prompts["system"],
|
||
user_prompt=prompts["user"]
|
||
)
|
||
except Exception as e:
|
||
logger.critical(f"内容审核时AI调用失败: {e}", exc_info=True)
|
||
return {"judge_success": False, "error": str(e)}
|
||
|
||
# 3. 解析结果
|
||
try:
|
||
# 假设结果是一个JSON字符串
|
||
judged_data = json_repair_loads(raw_result)
|
||
if isinstance(judged_data, dict) and "title" in judged_data and "content" in judged_data:
|
||
judged_data["judge_success"] = True
|
||
logger.info("内容审核成功完成。")
|
||
return judged_data
|
||
else:
|
||
logger.warning(f"审核响应JSON格式不正确或缺少键: {judged_data}")
|
||
return {"judge_success": False, "error": "Invalid JSON response", "raw_response": raw_result}
|
||
except (json.JSONDecodeError, ValueError) as e:
|
||
logger.error(f"解析审核响应JSON失败: {e}")
|
||
return {"judge_success": False, "error": "JSONDecodeError", "raw_response": raw_result} |