This commit is contained in:
2025-11-07 09:05:11 +08:00
parent 614f360996
commit 135c64f83a

View File

@@ -0,0 +1,401 @@
"""
PPT大纲生成相关提示词
包含所有用于生成PPT大纲的提示词模板
"""
from typing import Dict, Any, List
class OutlinePrompts:
"""PPT大纲生成相关的提示词集合"""
@staticmethod
def get_outline_prompt_zh(topic: str, scenario_desc: str, target_audience: str,
style_desc: str, requirements: str, description: str,
research_section: str, page_count_instruction: str,
expected_page_count: int, language: str) -> str:
"""获取中文大纲生成提示词"""
return f"""你是一位专业的PPT大纲策划专家请基于以下项目信息生成一个**结构清晰、内容创意、专业严谨、格式规范的JSON格式PPT大纲**。
### 📌【项目信息】:
- **主题**{topic}
- **应用场景**{scenario_desc}
- **目标受众**{target_audience}
- **PPT风格**{style_desc}
- **特殊要求**{requirements or ''}
- **补充说明**{description or ''}
{research_section}
### 📄【页数要求】:
{page_count_instruction}
---
### 📋【大纲生成规则】:
1. **内容契合度要求**
- 所有幻灯片内容必须与上述项目信息严格匹配,确保主题明确、风格统一、内容相关。
- 信息表达要专业可信,同时具有吸引力与传播力。
2. **页面结构规范**
- 必须包含以下结构:封面页、目录页、内容页(若干)、结论页。
- 内容页应合理分层,逻辑清晰;封面和结论页需具备视觉冲击力或独特设计说明。
3. **内容点控制**
- 每页控制在36个内容要点之间。
- 每个要点内容简洁清晰,可做适当解释,但**不超过50字符**。
- 内容分布需均衡,避免信息堆积或重复。
4. **图表展示优化**
- 对适合可视化的信息,**建议并提供图表配置**,写入 `chart_config` 字段中。
- 图表需明确类型如柱状图、折线图、饼图、甘特图、森林图、韦恩图、upset图、生存曲线图、漏斗图、环形图、和弦图、词云图、关联图、瀑布图、条形图、面积图等、说明含义、配置样式及数据结构。
5. **语言风格与语境一致性**
- 使用统一语言({language}),保持语境一致,适合目标受众理解与接受。
---
### 🧾【输出格式要求】:
请严格使用如下JSON格式进行输出**使用代码块包裹,内容必须有效且结构完整**
```json
{{
"title": "专业且吸引人的PPT标题",
"total_pages": {expected_page_count},
"page_count_mode": "final",
"slides": [
{{
"page_number": 1,
"title": "页面标题",
"content_points": ["要点1", "要点2", "要点3"],
"slide_type": "title/content/conclusion",
"type": "content",
"description": "此页的简要说明与目的",
"chart_config": {{
"type": "bar",
"data": {{
"labels": ["示例A", "示例B", "示例C"],
"datasets": [{{
"label": "数据说明",
"data": [80, 95, 70],
"backgroundColor": ["#FF6B6B", "#4ECDC4", "#FFD93D"],
"borderColor": ["#FF5252", "#26A69A", "#F4A261"],
"borderWidth": 2
}}]
}},
"options": {{
"responsive": true,
"plugins": {{
"legend": {{"position": "top"}},
"title": {{"display": true, "text": "图表标题"}}
}},
"scales": {{"y": {{"beginAtZero": true}}}}
}}
}}
}}
],
"metadata": {{
"scenario": "{scenario_desc}",
"language": "{language}",
"total_slides": {expected_page_count},
"generated_with_ai": true,
"enhanced_with_charts": true,
"content_depth": "professional"
}}
}}
```"""
@staticmethod
def get_outline_prompt_en(topic: str, scenario_desc: str, target_audience: str,
style_desc: str, requirements: str, description: str,
research_section: str, page_count_instruction: str,
expected_page_count: int, language: str) -> str:
"""获取英文大纲生成提示词"""
return f"""You are a **professional presentation outline designer**. Based on the following project details, please generate a **well-structured, creative, and professional JSON-format PowerPoint outline**.
### 📌【Project Details】:
- **Topic**: {topic}
- **Scenario**: {scenario_desc}
- **Target Audience**: {target_audience}
- **PPT Style**: {style_desc}
- **Special Requirements**: {requirements or 'None'}
- **Additional Notes**: {description or 'None'}
{research_section}
**Page Count Requirements:**
{page_count_instruction}
---
### 📋【Outline Generation Rules】:
1. **Content Relevance**:
- All slide content must strictly align with the project details above.
- Ensure the theme is clear, the tone is consistent, and the message is well-targeted.
2. **Slide Structure**:
- The deck must include: **Title Slide**, **Agenda Slide**, **Content Slides**, and **Conclusion Slide**.
- Title and Conclusion slides should be visually distinct or offer special design instructions.
- Content slides must follow a logical and clear structure.
3. **Content Density Control**:
- Each slide must contain **36 concise bullet points**.
- Each point should be **no more than 50 characters**.
- Distribute content evenly across slides to avoid overload or redundancy.
4. **Chart Suggestions**:
- For any data, comparisons, or visual-friendly content, suggest a chart and include its configuration under `chart_config`.
- Specify chart type (e.g., bar, pie, line), provide sample data, and chart options.
5. **Language & Tone**:
- The entire outline should be in **{language}** and aligned with the communication preferences of the target audience.
---
### 🧾【Required Output Format】:
Please follow the exact JSON format below, and **wrap the result in a code block**. The JSON must be valid and complete.
```json
{{
"title": "A compelling and professional PPT title",
"total_pages": {expected_page_count},
"page_count_mode": "final",
"slides": [
{{
"page_number": 1,
"title": "Slide Title",
"content_points": ["Point 1", "Point 2", "Point 3"],
"slide_type": "title/content/conclusion",
"type": "content",
"description": "Brief description of this slide",
"chart_config": {{
"type": "bar",
"data": {{
"labels": ["Metric A", "Metric B", "Metric C"],
"datasets": [{{
"label": "Performance Data",
"data": [80, 95, 70],
"backgroundColor": ["#FF6B6B", "#4ECDC4", "#FFD93D"],
"borderColor": ["#FF5252", "#26A69A", "#F4A261"],
"borderWidth": 2
}}]
}},
"options": {{
"responsive": true,
"plugins": {{
"legend": {{"position": "top"}},
"title": {{"display": true, "text": "Chart Title"}}
}},
"scales": {{"y": {{"beginAtZero": true}}}}
}}
}}
}}
],
"metadata": {{
"scenario": "{scenario_desc}",
"language": "{language}",
"total_slides": {expected_page_count},
"generated_with_ai": true,
"enhanced_with_charts": true,
"content_depth": "professional"
}}
}}
```"""
@staticmethod
def get_streaming_outline_prompt(topic: str, target_audience: str, ppt_style: str,
page_count_instruction: str, research_section: str) -> str:
"""获取流式大纲生成提示词"""
return f"""作为专业的PPT大纲生成助手请为以下项目生成详细的PPT大纲。
项目信息:
- 主题:{topic}
- 目标受众:{target_audience}
- PPT风格{ppt_style}
{page_count_instruction}{research_section}
请严格按照以下JSON格式生成PPT大纲
{{
"title": "PPT标题",
"slides": [
{{
"page_number": 1,
"title": "页面标题",
"content_points": ["要点1", "要点2", "要点3"],
"slide_type": "title"
}},
{{
"page_number": 2,
"title": "页面标题",
"content_points": ["要点1", "要点2", "要点3"],
"slide_type": "content"
}}
]
}}
slide_type可选值
- "title": 标题页/封面页
- "content": 内容页
- "agenda": 目录页
- "thankyou": 结束页/感谢页
要求:
1. 必须返回有效的JSON格式
2. 严格遵守页数要求
3. 第一页通常是标题页,最后一页是感谢页
4. 每页至少包含2-5个内容要点可做适当解释
5. 页面标题要简洁明确
6. 内容要点要具体实用
7. 根据重点内容和技术亮点安排页面内容
请只返回JSON使用```json```代码块包裹,不要包含其他文字说明。
示例格式:
```json
{{
"title": "PPT标题",
"slides": [
{{
"page_number": 1,
"title": "页面标题",
"content_points": ["要点1", "要点2"],
"slide_type": "title"
}}
]
}}
```"""
@staticmethod
def get_outline_generation_context(topic: str, target_audience: str, ppt_style: str,
page_count_instruction: str, focus_content: List[str],
tech_highlights: List[str], description: str) -> str:
"""获取大纲生成上下文提示词"""
focus_content_str = ', '.join(focus_content) if focus_content else ''
tech_highlights_str = ', '.join(tech_highlights) if tech_highlights else ''
return f"""请为以下项目生成详细的PPT大纲
项目信息:
- 主题:{topic}
- 目标受众:{target_audience}
- PPT风格{ppt_style}
- 重点展示内容:{focus_content_str}
- 技术亮点:{tech_highlights_str}
- 其他说明:{description or ''}
{page_count_instruction}
请生成结构化的PPT大纲包含每页的标题、内容要点和页面类型。确保内容逻辑清晰符合目标受众需求。"""
@staticmethod
def get_streaming_outline_prompt(topic: str, target_audience: str, ppt_style: str,
page_count_instruction: str, research_section: str) -> str:
"""获取流式大纲生成提示词"""
prompt = f"""
作为专业的PPT大纲生成助手请为以下项目生成详细的PPT大纲。
项目信息:
- 主题:{topic}
- 目标受众:{target_audience}
- PPT风格{ppt_style}
{page_count_instruction}{research_section}
请严格按照以下JSON格式生成PPT大纲
{{
"title": "PPT标题",
"slides": [
{{
"page_number": 1,
"title": "页面标题",
"content_points": ["要点1", "要点2", "要点3"],
"slide_type": "title"
}},
{{
"page_number": 2,
"title": "页面标题",
"content_points": ["要点1", "要点2", "要点3"],
"slide_type": "content"
}}
]
}}
slide_type可选值
- "title": 标题页/封面页
- "content": 内容页
- "agenda": 目录页
- "thankyou": 结束页/感谢页
要求:
1. 必须返回有效的JSON格式
2. 严格遵守页数要求
3. 第一页通常是标题页,最后一页是感谢页
4. 每页至少包含2-5个内容要点可做适当解释
5. 页面标题要简洁明确
6. 内容要点要具体实用
7. 根据重点内容和技术亮点安排页面内容
请只返回JSON使用```json```代码块包裹,不要包含其他文字说明。
示例格式:
```json
{{
"title": "PPT标题",
"slides": [
{{
"page_number": 1,
"title": "页面标题",
"content_points": ["要点1", "要点2"],
"slide_type": "title"
}}
]
}}
```
"""
return prompt
@staticmethod
def get_outline_generation_context(topic: str, target_audience: str, page_count_instruction: str,
ppt_style: str, custom_style: str, description: str,
page_count_mode: str) -> str:
"""获取大纲生成上下文提示词"""
context = f"""
项目信息:
- 主题:{topic}
- 目标受众:{target_audience}
{page_count_instruction}
- PPT风格{ppt_style}
- 自定义风格说明:{custom_style}
- 其他说明:{description}
任务生成完整的PPT大纲
请生成一个详细的PPT大纲包括
1. PPT标题
2. 各页面标题和主要内容要点
3. 逻辑结构和流程
4. 每页的内容重点
5. 根据页数要求合理安排内容分布
请以JSON格式返回大纲使用```json```代码块包裹,格式如下:
```json
{{
"title": "PPT标题",
"total_pages": 实际页数,
"page_count_mode": "{page_count_mode}",
"slides": [
{{
"page_number": 1,
"title": "页面标题",
"content_points": ["要点1", "要点2", "要点3"],
"slide_type": "title|content|conclusion",
"description": "页面内容描述"
}}
]
}}
```
"""
return context