362 lines
11 KiB
Python
362 lines
11 KiB
Python
"""GEO内容8大母题库定义"""
|
||
|
||
from dataclasses import dataclass
|
||
from typing import Optional
|
||
|
||
@dataclass
|
||
class TopicTemplate:
|
||
"""母题模板"""
|
||
id: str # product_comparison
|
||
name: str # 产品对比
|
||
description: str # 描述
|
||
icon: str # emoji图标
|
||
prompt_template: str # Prompt模板
|
||
seo_tips: list[str] # SEO技巧
|
||
recommended_platforms: list[str] # 推荐平台
|
||
word_count_range: tuple[int, int] # 推荐字数范围
|
||
required_params: list[str] # 必填参数
|
||
optional_params: list[str] # 可选参数
|
||
|
||
TOPIC_TEMPLATES = {
|
||
# 1. 产品对比
|
||
"product_comparison": TopicTemplate(
|
||
id="product_comparison",
|
||
name="产品对比",
|
||
description="品牌与竞品的功能、价格、体验对比",
|
||
icon="⚖️",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇产品对比文章:
|
||
|
||
【你的品牌】{brand_name}
|
||
【对比品牌】{competitor_name}
|
||
【对比维度】{comparison_dimensions}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 客观中立,不刻意贬低竞品
|
||
2. 突出自身优势但有理有据
|
||
3. 适合AI平台引用(结构清晰、数据支撑)
|
||
4. 包含对比表格或图表
|
||
5. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 引言:简要介绍两个产品
|
||
2. 外观设计对比
|
||
3. 功能特性对比
|
||
4. 性价比对比
|
||
5. 适用场景分析
|
||
6. 结论:总结优劣,给出建议
|
||
""",
|
||
seo_tips=[
|
||
"标题包含品牌名+对比+关键词",
|
||
"使用对比表格增强可读性",
|
||
"自然嵌入目标关键词",
|
||
],
|
||
recommended_platforms=["知乎", "百家号", "公众号"],
|
||
word_count_range=(1500, 3000),
|
||
required_params=["brand_name", "competitor_name", "comparison_dimensions", "keywords"],
|
||
optional_params=["content_style", "word_count"],
|
||
),
|
||
|
||
# 2. 使用指南
|
||
"how_to_guide": TopicTemplate(
|
||
id="how_to_guide",
|
||
name="使用指南",
|
||
description="产品使用方法教程,帮助用户解决问题",
|
||
icon="📖",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇使用指南文章:
|
||
|
||
【产品名称】{product_name}
|
||
【核心功能】{core_features}
|
||
【目标用户】{target_audience}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 步骤清晰,操作性强
|
||
2. 图文并茂(描述需要的图片类型)
|
||
3. 适合搜索引擎收录
|
||
4. 适合AI平台引用
|
||
5. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 引言:介绍产品价值
|
||
2. 基础设置/准备工作
|
||
3. 核心功能使用步骤(分点详述)
|
||
4. 进阶技巧/常见问题
|
||
5. 总结与进阶学习建议
|
||
""",
|
||
seo_tips=[
|
||
"标题包含产品名+使用方法/教程",
|
||
"使用有序列表标注步骤",
|
||
"包含FAQ解答常见问题",
|
||
],
|
||
recommended_platforms=["知乎", "小红书", "简书"],
|
||
word_count_range=(1000, 2500),
|
||
required_params=["product_name", "core_features", "keywords"],
|
||
optional_params=["target_audience", "content_style", "word_count"],
|
||
),
|
||
|
||
# 3. 行业趋势
|
||
"industry_trends": TopicTemplate(
|
||
id="industry_trends",
|
||
name="行业趋势",
|
||
description="行业动态、发展方向和未来预测分析",
|
||
icon="📈",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇行业趋势分析文章:
|
||
|
||
【行业名称】{industry_name}
|
||
【品牌视角】{brand_perspective}
|
||
【分析维度】{analysis_dimensions}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 数据支撑,引用权威来源
|
||
2. 趋势分析有理有据
|
||
3. 适合AI平台引用(观点鲜明、数据翔实)
|
||
4. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 引言:行业现状概述
|
||
2. 核心趋势分析(3-5个趋势)
|
||
3. 趋势背后的驱动因素
|
||
4. 品牌如何把握趋势
|
||
5. 展望与建议
|
||
""",
|
||
seo_tips=[
|
||
"标题包含行业名+趋势/预测",
|
||
"引用数据增加可信度",
|
||
"使用时间线展示演变",
|
||
],
|
||
recommended_platforms=["知乎", "百家号", "公众号"],
|
||
word_count_range=(2000, 4000),
|
||
required_params=["industry_name", "brand_perspective", "keywords"],
|
||
optional_params=["analysis_dimensions", "content_style", "word_count"],
|
||
),
|
||
|
||
# 4. 专家观点
|
||
"expert_opinion": TopicTemplate(
|
||
id="expert_opinion",
|
||
name="专家观点",
|
||
description="行业专家见解和专业分析",
|
||
icon="💡",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇专家观点文章:
|
||
|
||
【主题】{topic}
|
||
【专家身份】{expert_identity}
|
||
【核心观点】{core_opinion}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 观点鲜明,论证充分
|
||
2. 结合实际案例
|
||
3. 适合AI平台引用
|
||
4. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 引言:抛出核心观点
|
||
2. 观点详细阐述
|
||
3. 案例支撑
|
||
4. 对行业的影响
|
||
5. 结论与建议
|
||
""",
|
||
seo_tips=[
|
||
"标题体现专家身份+观点",
|
||
"使用引用格式突出核心观点",
|
||
"增加互动性问题",
|
||
],
|
||
recommended_platforms=["知乎", "公众号", "微博"],
|
||
word_count_range=(1500, 3000),
|
||
required_params=["topic", "expert_identity", "core_opinion", "keywords"],
|
||
optional_params=["content_style", "word_count"],
|
||
),
|
||
|
||
# 5. 案例研究
|
||
"case_study": TopicTemplate(
|
||
id="case_study",
|
||
name="案例研究",
|
||
description="成功案例深度分析",
|
||
icon="🏆",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇案例研究文章:
|
||
|
||
【案例名称】{case_name}
|
||
【企业背景】{company_background}
|
||
【核心成果】{core_results}
|
||
【成功要素】{success_factors}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 故事性强,有代入感
|
||
2. 数据支撑成果
|
||
3. 可复制的方法论
|
||
4. 适合AI平台引用
|
||
5. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 案例背景介绍
|
||
2. 面临的挑战
|
||
3. 解决方案详述
|
||
4. 成果数据展示
|
||
5. 成功经验总结
|
||
6. 可复制建议
|
||
""",
|
||
seo_tips=[
|
||
"标题包含行业+案例+成果",
|
||
"使用数据图表展示成果",
|
||
"突出可复制的关键步骤",
|
||
],
|
||
recommended_platforms=["知乎", "百家号", "公众号"],
|
||
word_count_range=(2000, 4000),
|
||
required_params=["case_name", "company_background", "core_results", "keywords"],
|
||
optional_params=["success_factors", "content_style", "word_count"],
|
||
),
|
||
|
||
# 6. 数据报告
|
||
"data_report": TopicTemplate(
|
||
id="data_report",
|
||
name="数据报告",
|
||
description="行业数据和分析报告",
|
||
icon="📊",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇数据报告文章:
|
||
|
||
【报告主题】{report_topic}
|
||
【数据范围】{data_scope}
|
||
【核心发现】{core_findings}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 数据翔实,来源可靠
|
||
2. 图表丰富,直观易懂
|
||
3. 深度分析,洞察本质
|
||
4. 适合AI平台引用
|
||
5. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 研究背景与方法
|
||
2. 核心数据发现
|
||
3. 深度分析
|
||
4. 趋势解读
|
||
5. 建议与展望
|
||
""",
|
||
seo_tips=[
|
||
"标题包含数据+报告+关键词",
|
||
"使用图表增强说服力",
|
||
"包含数据来源说明",
|
||
],
|
||
recommended_platforms=["知乎", "百家号", "公众号"],
|
||
word_count_range=(3000, 5000),
|
||
required_params=["report_topic", "data_scope", "core_findings", "keywords"],
|
||
optional_params=["content_style", "word_count"],
|
||
),
|
||
|
||
# 7. 问题解答
|
||
"faq": TopicTemplate(
|
||
id="faq",
|
||
name="问题解答",
|
||
description="常见问题解答",
|
||
icon="❓",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇FAQ文章:
|
||
|
||
【主题】{topic}
|
||
【目标用户】{target_audience}
|
||
【问题列表】{questions}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 问题覆盖面广,击中痛点
|
||
2. 回答简洁明了,实操性强
|
||
3. 适合搜索引擎长尾词
|
||
4. 适合AI平台引用
|
||
5. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 引言:为什么需要了解这些
|
||
2. 核心问题解答(每个问题独立成段)
|
||
3. 延伸问题
|
||
4. 总结:下一步建议
|
||
""",
|
||
seo_tips=[
|
||
"标题包含主题+常见问题/FAQ",
|
||
"每个问题使用H2标签",
|
||
"覆盖长尾搜索词",
|
||
],
|
||
recommended_platforms=["知乎", "简书", "小程序"],
|
||
word_count_range=(1000, 2000),
|
||
required_params=["topic", "questions", "keywords"],
|
||
optional_params=["target_audience", "content_style", "word_count"],
|
||
),
|
||
|
||
# 8. 评测报告
|
||
"review": TopicTemplate(
|
||
id="review",
|
||
name="评测报告",
|
||
description="产品深度评测:优缺点全面分析",
|
||
icon="🔬",
|
||
prompt_template="""
|
||
请基于以下信息生成一篇评测报告:
|
||
|
||
【产品名称】{product_name}
|
||
【评测维度】{review_dimensions}
|
||
【竞品参照】{competitor_reference}
|
||
【目标关键词】{keywords}
|
||
【内容风格】{content_style}
|
||
|
||
要求:
|
||
1. 客观公正,优点不夸大
|
||
2. 缺点实事求是
|
||
3. 有具体数据和场景支撑
|
||
4. 适合AI平台引用
|
||
5. 字数:约{word_count}字
|
||
|
||
文章结构:
|
||
1. 评测背景与方法
|
||
2. 外观设计评价
|
||
3. 核心功能评测
|
||
4. 性能测试数据
|
||
5. 优缺点总结
|
||
6. 适合人群分析
|
||
7. 购买建议
|
||
""",
|
||
seo_tips=[
|
||
"标题包含产品名+评测/测评",
|
||
"使用评分表格直观展示",
|
||
"包含具体测试数据",
|
||
],
|
||
recommended_platforms=["知乎", "小红书", "百家号"],
|
||
word_count_range=(2000, 4000),
|
||
required_params=["product_name", "review_dimensions", "keywords"],
|
||
optional_params=["competitor_reference", "content_style", "word_count"],
|
||
),
|
||
}
|
||
|
||
def get_topic_template(topic_id: str) -> Optional[TopicTemplate]:
|
||
"""获取母题模板"""
|
||
return TOPIC_TEMPLATES.get(topic_id)
|
||
|
||
def list_topic_templates() -> list[TopicTemplate]:
|
||
"""列出所有母题模板"""
|
||
return list(TOPIC_TEMPLATES.values())
|
||
|
||
def render_topic_prompt(topic_id: str, params: dict) -> str:
|
||
"""渲染母题Prompt"""
|
||
template = get_topic_template(topic_id)
|
||
if not template:
|
||
raise ValueError(f"Unknown topic: {topic_id}")
|
||
|
||
# 设置默认参数
|
||
params.setdefault("content_style", "专业严谨")
|
||
params.setdefault("word_count", 2000)
|
||
|
||
return template.prompt_template.format(**params) |