geo/backend/app/services/content/topic_templates.py

362 lines
11 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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)