369 lines
14 KiB
Python
369 lines
14 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Default Configuration Provider
|
|
默认配置提供器 - 提供算法包的默认配置,支持动态提示词加载
|
|
"""
|
|
|
|
from typing import Dict, Any
|
|
import os
|
|
from pathlib import Path
|
|
|
|
|
|
class DefaultConfigProvider:
|
|
"""默认配置提供器"""
|
|
|
|
@staticmethod
|
|
def get_ai_model_config() -> Dict[str, Any]:
|
|
"""获取AI模型默认配置 - 支持任务级别参数"""
|
|
return {
|
|
"model": "qwq-plus",
|
|
"api_url": os.getenv("AI_API_URL", ""),
|
|
"api_key": os.getenv("AI_API_KEY", ""),
|
|
"temperature": 0.7,
|
|
"top_p": 0.5,
|
|
"presence_penalty": 1.2,
|
|
"frequency_penalty": 0.0,
|
|
"max_tokens": None,
|
|
"timeout": 60,
|
|
"max_retries": 3,
|
|
"enable_stream": True,
|
|
"stream_chunk_size": 1024,
|
|
|
|
# 任务级别的模型参数配置
|
|
"task_configs": {
|
|
"topic_generation": {
|
|
"temperature": 0.8, # 主题生成需要更高创造性
|
|
"top_p": 0.9,
|
|
"presence_penalty": 1.0
|
|
},
|
|
"content_generation": {
|
|
"temperature": 0.7, # 内容生成平衡创造性和准确性
|
|
"top_p": 0.8,
|
|
"presence_penalty": 1.2
|
|
},
|
|
"content_judging": {
|
|
"temperature": 0.3, # 内容审核需要更严格和一致
|
|
"top_p": 0.5,
|
|
"presence_penalty": 0.5
|
|
},
|
|
"poster_generation": {
|
|
"temperature": 0.6, # 海报文案生成
|
|
"top_p": 0.7,
|
|
"presence_penalty": 1.0
|
|
}
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def get_prompt_config() -> Dict[str, Any]:
|
|
"""获取提示词默认配置 - 支持动态加载"""
|
|
return {
|
|
# 提示词模板目录配置
|
|
"template_directory": "templates/prompts",
|
|
"enable_template_loading": True,
|
|
|
|
# 提示词文件映射
|
|
"template_files": {
|
|
"topic_generation": {
|
|
"system": "generateTopics/system.txt",
|
|
"user": "generateTopics/user.txt"
|
|
},
|
|
"content_generation": {
|
|
"system": "generateContent/system.txt",
|
|
"user": "generateContent/user.txt"
|
|
},
|
|
"content_judging": {
|
|
"system": "judgeContent/system.txt",
|
|
"user": "judgeContent/user.txt"
|
|
},
|
|
"poster_generation": {
|
|
"system": "generatePoster/system.txt",
|
|
"user": "generatePoster/user.txt"
|
|
}
|
|
},
|
|
|
|
# 回退的默认提示词(当文件加载失败时使用)
|
|
"fallback_prompts": {
|
|
"topic_generation": {
|
|
"system": "你是一个专业的旅游选题策划师。",
|
|
"user": "请生成{numTopics}个旅游主题。日期:{month}"
|
|
},
|
|
"content_generation": {
|
|
"system": "你是一个专业的旅游文案写手。",
|
|
"user": "请根据以下主题生成旅游内容:{topic_info}"
|
|
},
|
|
"content_judging": {
|
|
"system": "你是一个专业的内容审核专家。",
|
|
"user": "请审核以下内容:{content}"
|
|
}
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def get_content_generation_config() -> Dict[str, Any]:
|
|
"""获取内容生成默认配置"""
|
|
return {
|
|
"topic_count": 5,
|
|
"topic_date_range": None,
|
|
"topic_style": "default",
|
|
"content_length": "medium",
|
|
"content_style": "default",
|
|
"enable_auto_judge": True,
|
|
"judge_enabled": True,
|
|
"judge_threshold": 0.7,
|
|
"refer_sampling_rate": 0.5,
|
|
"enable_refer_content": True,
|
|
|
|
# JSON修复配置
|
|
"enable_json_repair": True,
|
|
"json_repair_attempts": 3,
|
|
|
|
# 结果字段映射配置
|
|
"result_field_mapping": {
|
|
"topic_generation": {
|
|
"expected_fields": ["index", "date", "logic", "object", "product", "productLogic", "style", "styleLogic", "targetAudience", "targetAudienceLogic"],
|
|
"required_fields": ["index", "date", "logic", "object"]
|
|
},
|
|
"content_generation": {
|
|
"expected_fields": ["title", "content", "tag"],
|
|
"required_fields": ["title", "content"]
|
|
},
|
|
"content_judging": {
|
|
"expected_fields": ["analysis", "title", "content"],
|
|
"required_fields": ["title", "content"]
|
|
}
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def get_poster_generation_config() -> Dict[str, Any]:
|
|
"""获取海报生成默认配置 - 从硬编码中提取"""
|
|
return {
|
|
"default_size": [900, 1200],
|
|
"supported_sizes": [
|
|
[900, 1200], # 竖屏海报
|
|
[1080, 1080], # 方形海报
|
|
[750, 1334] # 手机屏幕
|
|
],
|
|
"default_template": "vibrant",
|
|
"available_templates": ["vibrant", "business", "collage"],
|
|
"template_selection_mode": "manual",
|
|
|
|
# 字体配置
|
|
"font_configs": {
|
|
"chinese_bold": {
|
|
"family": "兰亭粗黑简",
|
|
"fallback": ["SimHei", "Arial"]
|
|
},
|
|
"default": {
|
|
"family": "Arial",
|
|
"fallback": ["Times New Roman"]
|
|
}
|
|
},
|
|
"default_font_family": "chinese_bold",
|
|
|
|
# 颜色主题 - 从VibrantTemplate中提取
|
|
"color_themes": {
|
|
"ocean_deep": {
|
|
"primary": [[0, 30, 80], [20, 120, 220]],
|
|
"secondary": [[10, 50, 150], [40, 140, 240]]
|
|
},
|
|
"sunset_warm": {
|
|
"primary": [[255, 94, 77], [255, 154, 0]],
|
|
"secondary": [[240, 80, 60], [240, 140, 20]]
|
|
},
|
|
"cool_mint": {
|
|
"primary": [[64, 224, 208], [127, 255, 212]],
|
|
"secondary": [[80, 200, 190], [100, 230, 200]]
|
|
},
|
|
"royal_purple": {
|
|
"primary": [[75, 0, 130], [138, 43, 226]],
|
|
"secondary": [[90, 20, 150], [120, 60, 200]]
|
|
},
|
|
"forest_green": {
|
|
"primary": [[34, 139, 34], [144, 238, 144]],
|
|
"secondary": [[50, 120, 50], [120, 220, 120]]
|
|
},
|
|
"fire_red": {
|
|
"primary": [[220, 20, 60], [255, 69, 0]],
|
|
"secondary": [[200, 40, 80], [230, 90, 30]]
|
|
}
|
|
},
|
|
"default_color_theme": "ocean_deep",
|
|
|
|
# 毛玻璃效果配置 - 从VibrantTemplate中提取
|
|
"glass_effect": {
|
|
"max_opacity": 240,
|
|
"blur_radius": 22,
|
|
"transition_height": 80,
|
|
"intensity_multiplier": 1.5
|
|
},
|
|
|
|
# 文本效果配置
|
|
"text_effects": {
|
|
"shadow": True,
|
|
"shadow_offset": [2, 2],
|
|
"shadow_color": [0, 0, 0, 128],
|
|
"outline": False,
|
|
"outline_width": 1,
|
|
"outline_color": [255, 255, 255]
|
|
},
|
|
|
|
# 输出配置
|
|
"output_format": "PNG",
|
|
"output_quality": 95,
|
|
"generate_thumbnail": True,
|
|
"thumbnail_size": [300, 400]
|
|
}
|
|
|
|
@staticmethod
|
|
def get_document_processing_config() -> Dict[str, Any]:
|
|
"""获取文档处理默认配置"""
|
|
return {
|
|
"supported_extensions": [".txt", ".md", ".pdf", ".docx", ".doc", ".xlsx", ".xls"],
|
|
"max_file_size": 50 * 1024 * 1024, # 50MB
|
|
"encoding": "utf-8",
|
|
"extract_images": True,
|
|
"extract_tables": True,
|
|
"enable_content_cleaning": True,
|
|
"remove_extra_whitespace": True,
|
|
"normalize_text": True,
|
|
"enable_web_scraping": True,
|
|
"scraping_config": {
|
|
"max_notes": 20,
|
|
"sort_type": 0,
|
|
"note_type": 0,
|
|
"download_media": True,
|
|
"timeout": 30
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def get_output_config() -> Dict[str, Any]:
|
|
"""获取输出配置 - 解决硬编码的文件名问题"""
|
|
return {
|
|
"base_output_directory": "result",
|
|
"enable_timestamped_folders": True,
|
|
"folder_name_pattern": "run_{timestamp}",
|
|
|
|
# 文件命名模式 - 替代硬编码的文件名
|
|
"file_naming": {
|
|
"topics": "topics.json",
|
|
"content": "article.json",
|
|
"poster": "poster.png",
|
|
"raw_response": "{stage}_raw_response.txt",
|
|
"system_prompt": "{stage}_system_prompt.txt",
|
|
"user_prompt": "{stage}_user_prompt.txt",
|
|
"judged_content": "article_judged.json",
|
|
"metadata": "metadata.json"
|
|
},
|
|
|
|
"save_raw_responses": True,
|
|
"save_prompts": True,
|
|
"save_metadata": True,
|
|
"enable_compression": False,
|
|
"backup_count": 5
|
|
}
|
|
|
|
@staticmethod
|
|
def get_resource_config() -> Dict[str, Any]:
|
|
"""获取资源配置 - 包括static文件管理"""
|
|
return {
|
|
"resource_base_directory": None, # 由调用方设置
|
|
"font_directory": "assets/fonts",
|
|
|
|
# 字体文件映射 - 解决硬编码字体路径
|
|
"font_files": {
|
|
"chinese_bold": "兰亭粗黑简.TTF",
|
|
"default": "Arial.ttf"
|
|
},
|
|
|
|
"prompt_template_directory": "templates/prompts",
|
|
"image_assets_directory": "assets/images",
|
|
"default_background_images": [],
|
|
|
|
# 静态文件配置 - 解决爬虫模块依赖
|
|
"static_files_directory": "static",
|
|
"required_js_files": {
|
|
"xhs_xs_xsc_56": "xhs_xs_xsc_56.js",
|
|
"xhs_xray": "xhs_xray.js",
|
|
"xhs_creator_xs": "xhs_creator_xs.js",
|
|
"xhs_xray_pack1": "xhs_xray_pack1.js",
|
|
"xhs_xray_pack2": "xhs_xray_pack2.js"
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def get_web_crawling_config() -> Dict[str, Any]:
|
|
"""获取网页爬虫默认配置"""
|
|
return {
|
|
"request_interval": 1.0,
|
|
"max_requests": 100,
|
|
"request_timeout": 30.0,
|
|
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
"enable_proxy": False,
|
|
"proxy_config": None,
|
|
"max_retries": 3,
|
|
"retry_delay": 2.0,
|
|
"min_content_length": 50,
|
|
"max_content_length": 10000,
|
|
"xhs_search_config": {
|
|
"default_sort_type": 0,
|
|
"default_note_type": 0,
|
|
"enable_image_download": True,
|
|
"enable_video_download": False,
|
|
"search_result_limit": 50
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def get_keyword_analysis_config() -> Dict[str, Any]:
|
|
"""获取关键词分析默认配置"""
|
|
return {
|
|
"max_keywords": 20,
|
|
"min_keyword_length": 2,
|
|
"max_keyword_length": 10,
|
|
"enable_ai_analysis": True,
|
|
"ai_analysis_threshold": 100,
|
|
"frequency_weight": 0.4,
|
|
"position_weight": 0.3,
|
|
"type_weight": 0.3,
|
|
"enable_categorization": True,
|
|
"category_threshold": 2,
|
|
"max_suggestions": 20,
|
|
"enable_combination_suggestions": True
|
|
}
|
|
|
|
@staticmethod
|
|
def get_content_analysis_config() -> Dict[str, Any]:
|
|
"""获取内容分析默认配置"""
|
|
return {
|
|
"content_length_weight": 0.25,
|
|
"title_quality_weight": 0.20,
|
|
"media_richness_weight": 0.20,
|
|
"structure_weight": 0.20,
|
|
"tag_completeness_weight": 0.15,
|
|
"likes_weight": 0.40,
|
|
"comments_weight": 0.35,
|
|
"shares_weight": 0.25,
|
|
"enable_sentiment_analysis": True,
|
|
"enable_theme_extraction": True,
|
|
"enable_readability_analysis": True,
|
|
"max_themes": 10,
|
|
"theme_frequency_threshold": 2
|
|
}
|
|
|
|
@classmethod
|
|
def get_complete_default_config(cls) -> Dict[str, Any]:
|
|
"""获取完整的默认配置"""
|
|
return {
|
|
"ai_model": cls.get_ai_model_config(),
|
|
"prompts": cls.get_prompt_config(),
|
|
"content_generation": cls.get_content_generation_config(),
|
|
"poster_generation": cls.get_poster_generation_config(),
|
|
"document_processing": cls.get_document_processing_config(),
|
|
"output": cls.get_output_config(),
|
|
"resources": cls.get_resource_config()
|
|
} |