一、为什么需要 Prompt 模板?
在与 AI 模型交互时,我们经常会遇到输出不稳定、格式混乱的问题。Prompt 模板帮助我们解决这些问题,通过结构化的输入指令来获得可预测且一致的输出结果。
模板的作用主要体现在:
- 固定输出格式,减少随机性
- 提高交互效率,避免重复输入相同指令
- 保证输出质量,明确 AI 任务边界
- 提升用户体验,使 AI 输出易于理解和使用
二、构建稳定可复用的 Prompt 模板策略
高效的 Prompt 模板通常包含以下几个部分:
- 角色定义:明确告诉 AI 它应该扮演什么角色
- 任务说明:详细描述需要完成的任务
- 输出格式:规定 AI 回答的具体结构
- 示例展示:提供输入-输出的样例来引导 AI
- 评估标准:设定质量要求,让 AI 自我检查
以下是一个基本模板示例:
你是一位专业的数据分析师。请根据我提供的数据,生成一份简洁的分析报告。
任务:分析以下销售数据并找出关键趋势。
输出格式要求:
1. 数据摘要(100字以内)
2. 关键发现(3-5点)
3. 建议行动(2-3点)
请使用markdown格式输出,保持专业简洁的语言风格。
三、如何控制输出格式:结构化输出的常见方法
表格输出技巧
表格是展示数据最直观的方式之一。使用 Markdown 格式的表格可以在大多数平台上正确显示。
import streamlit as st
import pandas as pd
import numpy as np
st.title("表格输出示例")
# 生成示例数据
data = {
'产品': ['A产品', 'B产品', 'C产品', 'D产品'],
'销量': [150, 240, 350, 130],
'增长率': ['15%', '22%', '30%', '5%'],
'评分': [4.2, 4.5, 4.8, 3.9]
}
df = pd.DataFrame(data)
# 展示数据表格
st.write("### 原始数据表格")
st.dataframe(df)
# 添加提示输入框
prompt = st.text_area("输入你的分析请求",
"请分析上述产品数据,找出表现最佳的产品和需要改进的产品")
if st.button("生成分析"):
# 模拟AI分析结果
st.write("### 分析结果")
col1, col2 = st.columns(2)
with col1:
st.write("**表现最佳产品**")
st.markdown("""
| 指标 | 产品 | 数值 |
| --- | --- | --- |
| 销量最高 | C产品 | 350 |
| 增长率最高 | C产品 | 30% |
| 评分最高 | C产品 | 4.8 |
""")
with col2:
st.write("**需要改进的产品**")
st.markdown("""
| 指标 | 产品 | 数值 |
| --- | --- | --- |
| 销量最低 | D产品 | 130 |
| 增长率最低 | D产品 | 5% |
| 评分最低 | D产品 | 3.9 |
""")
JSON 格式设计
JSON 格式便于程序处理,尤其适合需要进一步使用 AI 输出的场景。
import streamlit as st
import json
st.title("JSON 格式输出示例")
st.write("### 使用 JSON 结构化数据")
# JSON格式示例
json_prompt = st.text_area("输入分析请求",
"分析最近一周的网站流量数据,提供关键指标和趋势")
if st.button("分析数据"):
# 模拟AI返回的JSON格式数据
analysis_result = {
"time_period": "2023-10-01 to 2023-10-07",
"key_metrics": {
"total_visits": 15240,
"unique_visitors": 8750,
"bounce_rate": "34.2%",
"avg_session_duration": "2m 45s"
},
"trends": [
{"metric": "mobile_traffic", "change": "+15.3%", "note": "移动端访问持续增长"},
{"metric": "conversion_rate", "change": "+2.1%", "note": "转化率小幅提升"},
{"metric": "bounce_rate", "change": "-3.5%", "note": "跳出率有所下降"}
],
"recommendations": [
"优化移动端页面加载速度",
"关注转化漏斗中购物车页面的用户流失",
"增加社交媒体引流渠道"
]
}
# 显示格式化的JSON
st.json(analysis_result)
# 展示如何使用JSON数据
st.write("### 基于JSON数据生成的图表")
# 从JSON数据中提取趋势信息并可视化
trends = analysis_result["trends"]
metrics = [t["metric"] for t in trends]
changes = [float(t["change"].strip("%").strip("+")) for t in trends]
st.bar_chart({
"指标": metrics,
"变化百分比": changes
})
Markdown 样式优化
Markdown 格式兼具可读性和美观性,适合生成报告、文档等内容。
import streamlit as st
st.title("Markdown 样式输出示例")
st.write("### 使用 Markdown 格式化输出")
markdown_prompt = st.text_area("输入研究主题",
"请生成一份关于人工智能在医疗领域应用的简短报告")
if st.button("生成报告"):
# 模拟AI生成的Markdown格式报告
markdown_report = """
# 人工智能在医疗领域的应用
## 摘要
人工智能技术正在医疗健康领域发挥越来越重要的作用,从辅助诊断到药物研发,AI技术正在改变传统医疗模式。
## 主要应用领域
### 1. 医学影像分析
- 利用计算机视觉技术辅助放射科医生读片
- 提高肿瘤、骨折等病变的检出率
- 减少漏诊和误诊概率
### 2. 智能诊断系统
- 基于大数据的症状分析和疾病预测
- 罕见病的辅助诊断
- 农村和偏远地区的远程医疗支持
### 3. 药物研发
- 加速新药筛选过程
- 预测药物分子结构的生物活性
- 降低药物研发成本和周期
## 未来发展趋势
1. **个性化医疗**:AI将帮助实现更精准的个体化治疗方案
2. **预防医学**:通过数据分析预测健康风险,实现早期干预
3. **医患协作**:AI作为辅助工具,增强医患沟通和决策过程
## 结论
人工智能不是要取代医生,而是作为强大的辅助工具,帮助医疗专业人员提高工作效率和诊疗准确性,最终受益的是患者和整个医疗体系。
"""
st.markdown(markdown_report)
四、实战演示:从自由输出到格式固定的演进
下面我们通过一个实际案例,展示如何将自由输出逐步改进为格式固定的结构化输出:
import streamlit as st
import pandas as pd
import numpy as np
st.title("Prompt 模板演进实战演示")
# 创建示例数据
customer_data = pd.DataFrame({
'客户ID': range(1001, 1011),
'年龄': [28, 35, 42, 39, 51, 32, 45, 30, 36, 48],
'性别': ['男', '女', '男', '女', '男', '女', '男', '女', '男', '女'],
'购买频率': ['高', '中', '低', '高', '中', '高', '中', '低', '高', '中'],
'客户价值': ['A', 'B', 'C', 'A', 'B', 'A', 'B', 'C', 'A', 'B']
})
st.write("### 客户数据")
st.dataframe(customer_data)
# 展示不同类型的prompt模板
st.write("## Prompt 模板对比")
tabs = st.tabs(["基础Prompt", "简单模板", "结构化模板", "高级模板"])
with tabs[0]:
st.write("### 基础Prompt(无模板)")
st.code("""分析上面的客户数据,给我一些见解。""", language="text")
if st.button("执行基础分析"):
st.write("#### 分析结果(模拟):")
st.write("""
这份数据包含了10位客户的信息。从性别分布来看,男女各占一半。年龄分布从28岁到51岁不等,平均年龄为38.6岁。
购买频率方面,有4位客户为高频率购买,4位为中等频率,2位为低频率。客户价值方面,A类客户有4人,B类有4人,C类有2人。
建议对A类客户提供更多的优惠和个性化服务,以保持他们的忠诚度。
""")
with tabs[1]:
st.write("### 简单模板")
st.code("""
你是一位客户数据分析专家。请分析提供的客户数据,并回答以下问题:
1. 客户的年龄分布如何?
2. 不同性别客户的购买行为有何差异?
3. 客户价值与购买频率是否相关?
请给出具体的数据支持你的分析。
""", language="text")
if st.button("执行简单模板分析"):
st.write("#### 分析结果(模拟):")
st.write("""
### 客户数据分析
#### 1. 客户的年龄分布
- 年龄范围:28-51岁
- 平均年龄:38.6岁
- 最多客户集中在30-40岁区间(5人)
#### 2. 不同性别客户的购买行为差异
- 女性客户中,高频率购买占60%,男性中高频率购买占40%
- 女性客户无C类价值客户,而男性中有2位C类客户
#### 3. 客户价值与购买频率的相关性
- A类客户中,75%为高频率购买者
- B类客户中,100%为中频率购买者
- C类客户中,100%为低频率购买者
存在明显的正相关关系:购买频率越高,客户价值等级越高。
""")
with tabs[2]:
st.write("### 结构化模板")
st.code("""
角色:你是数据分析师,专精于客户行为分析。
任务:分析所提供的客户数据集,找出关键洞察并提供业务建议。
输出格式:
1. 数据概要(包含客户总数、年龄范围、性别分布)
2. 关键发现(至少3点,每点使用数据支持)
3. 客户分群分析(基于年龄、性别、购买频率进行交叉分析)
4. 业务建议(针对不同客户群体的营销策略,至少3点)
请使用表格和要点列表来组织你的回答,使其清晰易读。
""", language="text")
if st.button("执行结构化模板分析"):
st.write("#### 分析结果(模拟):")
st.write("### 1. 数据概要")
col1, col2, col3 = st.columns(3)
with col1:
st.metric("客户总数", "10")
with col2:
st.metric("年龄范围", "28-51岁")
with col3:
st.metric("性别分布", "男女各5人")
st.write("### 2. 关键发现")
st.markdown("""
- **高价值关联**:所有A类客户(100%)都是高频率购买者,显示购买频率与客户价值强相关
- **年龄特征**:30-40岁年龄段的客户占比最高(50%),且在这一区间内A类客户比例达60%
- **性别差异**:女性客户中高频购买比例(60%)高于男性(40%),但客户平均价值无显著差异
""")
st.write("### 3. 客户分群分析")
st.markdown("""
| 客户群体 | 人数 | 平均年龄 | 高频购买比例 | A类客户比例 |
|---------|-----|--------|------------|-----------|
| 30岁以下男性 | 1 | 28 | 0% | 0% |
| 30岁以下女性 | 1 | 30 | 0% | 0% |
| 30-40岁男性 | 1 | 36 | 100% | 100% |
| 30-40岁女性 | 3 | 35.3 | 67% | 33% |
| 40岁以上男性 | 3 | 45 | 33% | 33% |
| 40岁以上女性 | 1 | 39 | 100% | 100% |
""")
st.write("### 4. 业务建议")
st.markdown("""
1. **针对A类客户**:实施会员忠诚计划,提供专属优惠和提前购买权,维系高价值客户关系
2. **针对30-40岁客户群体**:增加社交媒体和线上营销力度,设计符合职场人士需求的产品和服务
3. **针对女性客户**:开发针对性促销活动,鼓励低频购买女性提升购买频率,有较大转化潜力
4. **针对C类客户**:实施有针对性的促销和交叉销售策略,提升其购买频率和客户价值
""")
with tabs[3]:
st.write("### 高级模板(JSON结构输出)")
st.code("""
你是一位专业的数据分析AI助手。
任务:分析给定的客户数据,提供深入洞察并以JSON格式返回分析结果。
输出要求:你的回答必须是一个有效的JSON对象,具有以下结构:
{
"summary": {
"total_customers": <整数>,
"age_range": {"min": <整数>, "max": <整数>, "avg": <浮点数>},
"gender_distribution": {"male": <整数>, "female": <整数>}
},
"key_findings": [
{"title": <字符串>, "description": <字符串>, "supporting_data": <字符串>},
...(至少3项)
],
"customer_segments": [
{"segment_name": <字符串>, "count": <整数>, "characteristics": [<字符串>, ...]},
...(至少3个细分市场)
],
"recommendations": [
{"target_segment": <字符串>, "action": <字符串>, "expected_outcome": <字符串>},
...(至少3项建议)
]
}
确保你的JSON格式正确无误,可以直接被程序解析。不要在JSON前后添加任何说明或附加文本。
""", language="text")
if st.button("执行高级模板分析"):
st.write("#### 分析结果(模拟JSON输出):")
# 模拟JSON结果
json_result = {
"summary": {
"total_customers": 10,
"age_range": {"min": 28, "max": 51, "avg": 38.6},
"gender_distribution": {"male": 5, "female": 5}
},
"key_findings": [
{
"title": "购买频率与客户价值高度相关",
"description": "高频率购买者更可能成为A类高价值客户",
"supporting_data": "100%的A类客户是高频率购买者"
},
{
"title": "年龄段与购买行为关系明显",
"description": "30-40岁年龄段客户展现出最高的购买频率",
"supporting_data": "该年龄段75%客户为高频购买者,高于其他年龄段"
},
{
"title": "性别差异影响购买频率",
"description": "女性客户表现出更高的购买频率",
"supporting_data": "60%的女性为高频购买者,而男性中仅40%"
}
],
"customer_segments": [
{
"segment_name": "高价值忠诚客户",
"count": 4,
"characteristics": ["A类客户", "高频率购买", "平均年龄35.7岁", "男女比例1:1"]
},
{
"segment_name": "中等价值稳定客户",
"count": 4,
"characteristics": ["B类客户", "中频率购买", "平均年龄42.5岁", "男女比例1:1"]
},
{
"segment_name": "低价值潜力客户",
"count": 2,
"characteristics": ["C类客户", "低频率购买", "平均年龄36岁", "全部为男性"]
}
],
"recommendations": [
{
"target_segment": "高价值忠诚客户",
"action": "推出专属会员福利计划,包括优先购买权和专属客户服务",
"expected_outcome": "提高客户留存率,增加客户终身价值"
},
{
"target_segment": "中等价值稳定客户",
"action": "实施个性化推荐和限时优惠,鼓励增加购买频次",
"expected_outcome": "将25%的B类客户转化为A类客户"
},
{
"target_segment": "低价值潜力客户",
"action": "提供入门级产品促销和首次购买优惠",
"expected_outcome": "将50%的低频客户转化为中频客户"
},
{
"target_segment": "30-40岁女性客户",
"action": "开发针对职业女性的产品线和营销活动",
"expected_outcome": "增加该群体平均购买金额15%"
}
]
}
# 显示JSON并演示如何使用它
st.json(json_result)
st.write("### 基于JSON自动生成的分析视图")
# 创建几个简单的可视化
segments = [seg["segment_name"] for seg in json_result["customer_segments"]]
counts = [seg["count"] for seg in json_result["customer_segments"]]
st.subheader("客户细分分布")
st.bar_chart({"客户数量": counts}, x=segments)
# 展示关键发现
st.subheader("关键发现")
for i, finding in enumerate(json_result["key_findings"]):
st.write(f"**{i+1}. {finding['title']}**")
st.write(finding["description"])
st.caption(f"支持数据: {finding['supporting_data']}")
# 最终实战示例
st.write("## 综合实战Demo:客户分析助手")
with st.form("customer_analysis_form"):
st.write("### 输入你的分析需求")
analysis_goal = st.selectbox(
"分析目标",
["客户细分", "购买行为分析", "客户价值评估", "客户流失风险预测"]
)
output_format = st.selectbox(
"期望输出格式",
["表格形式", "图表形式", "Markdown报告", "JSON数据"]
)
additional_request = st.text_area(
"其他具体需求",
"请重点关注30-40岁年龄段的客户行为特征",
height=100
)
submitted = st.form_submit_button("生成分析")
if submitted:
st.write("### 生成的Prompt模板")
final_prompt = f"""
角色:你是一位专业的客户数据分析师,擅长从客户数据中发现有价值的洞察。
任务:进行{analysis_goal},重点关注{additional_request}。
数据集:客户数据集包含10位客户的年龄、性别、购买频率和客户价值信息。
输出要求:以{output_format}提供分析结果,确保包含以下内容:
1. 数据概述和关键统计指标
2. 主要发现和洞察(至少3点)
3. 基于分析结果的业务建议(至少2点)
请确保分析深入且有数据支持,建议具体可行。
"""
st.code(final_prompt, language="text")
st.write("### 分析结果")
# 这里应该是AI生成的响应,我们用静态内容模拟
if output_format == "表格形式":
st.write("#### 30-40岁客户群体分析")
analysis_df = pd.DataFrame({
'指标': ['客户数量', '占总体比例', 'A类客户比例', '高频购买比例', '平均年龄'],
'30-40岁男性': ['1', '10%', '100%', '100%', '36岁'],
'30-40岁女性': ['3', '30%', '33%', '67%', '35.3岁'],
'30-40岁整体': ['4', '40%', '50%', '75%', '35.5岁'],
})
st.table(analysis_df)
st.write("#### 主要发现")
st.markdown("""
1. **购买能力强**:30-40岁群体中75%为高频购买者,高于整体平均水平(40%)
2. **价值贡献大**:该年龄段贡献了50%的A类高价值客户
3. **性别差异**:该年龄段女性客户数量是男性的3倍,但男性中A类客户占比更高
""")
st.write("#### 业务建议")
st.markdown("""
1. 设计针对30-40岁职场人士的产品套餐,重点关注高频消费需求
2. 为该年龄段男性客户开发会员忠诚计划,最大化客户生命周期价值
3. 加强对30-40岁女性的营销,提高其客户价值等级转化率
""")
elif output_format == "图表形式":
col1, col2 = st.columns(2)
with col1:
st.write("#### 年龄段分布")
age_data = pd.DataFrame({
'年龄段': ['<30', '30-40', '>40'],
'客户数量': [2, 4, 4]
})
st.bar_chart(age_data, x='年龄段', y='客户数量')
with col2:
st.write("#### 30-40岁客户价值分布")
value_data = pd.DataFrame({
'客户价值': ['A类', 'B类', 'C类'],
'比例': [50, 25, 25]
})
st.bar_chart(value_data, x='客户价值', y='比例')
st.write("#### 30-40岁客户购买频率与性别关系")
freq_gender_data = pd.DataFrame({
'性别': ['男性', '男性', '男性', '女性', '女性', '女性'],
'购买频率': ['高', '中', '低', '高', '中', '低'],
'人数': [1, 0, 0, 2, 1, 0]
})
# 创建交叉表
heatmap_data = freq_gender_data.pivot_table(
index='性别',
columns='购买频率',
values='人数',
fill_value=0
)
st.bar_chart(heatmap_data)
st.write("#### 主要发现")
st.markdown("""
1. 30-40岁客户占总体的40%,是最大的客户群体
2. 该年龄段客户中没有低频购买者,75%为高频购买客户
3. 在该年龄段中,A类客户比例(50%)高于整体平均(40%)
""")
st.write("#### 业务建议")
st.markdown("""
1. 将营销资源集中在30-40岁高价值客户群体,提供个性化服务
2. 针对30-40岁女性客户,开发升级方案提高其客户价值等级
""")
elif output_format == "Markdown报告":
markdown_report = """
# 30-40岁客户群体分析报告
## 数据概述
在分析的客户样本中,30-40岁年龄段的客户有4位,占总体的40%。这个年龄段是客户基础中最大的群体,具有以下关键特征:
* **性别分布**:男性1位(25%),女性3位(75%)
* **客户价值**:A类2位(50%),B类1位(25%),C类1位(25%)
* **购买频率**:高频3位(75%),中频1位(25%),低频0位(0%)
## 主要发现
我将补充完整Markdown报告部分的内容:
### 1. 强烈的性别差异
在30-40岁年龄段中,女性占比明显高于男性(75%比25%)。这一性别分布差异具有以下特点:
- 女性客户群体更大,但客户价值分布较为分散
- 男性客户虽然数量少,但100%为高价值A类客户
- 这表明针对不同性别的营销策略应有明显差异
### 2. 高购买频率特征
该年龄段客户的购买频率明显高于其他年龄段:
- 75%的客户为高频购买者(整体样本中仅40%)
- 没有低频购买客户
- 高频购买行为与职业发展和家庭建设阶段高度相关
### 3. 价值潜力巨大
30-40岁客户群体展现出最高的客户价值潜力:
- 贡献了50%的A类高价值客户
- 客户终身价值预期高于其他年龄段
- 客户忠诚度与购买频率呈正相关关系
## 策略建议
基于以上分析,我们建议采取以下策略:
1. **分性别营销策略**:
- 男性客户:重点维护现有高价值客户,提供专属会员服务
- 女性客户:实施价值提升计划,将中频客户转化为高频、高价值客户
2. **个性化产品组合**:
- 设计符合30-40岁职业发展需求的产品套餐
- 针对家庭建设阶段的消费需求提供整合服务
3. **忠诚度计划优化**:
- 完善积分系统,提高复购率
- 设计阶梯式会员权益,鼓励消费升级
4. **数字化触达提升**:
- 加强社交媒体营销,特别是女性用户集中的平台
- 开发移动端个性化推荐功能,提升用户体验
## 结论
30-40岁年龄段客户群体是我们最具价值的客户群体之一,他们处于职业和家庭发展的关键阶段,消费能力和意愿都较高。通过针对性的营销策略和产品设计,我们能够显著提升这一群体的客户价值和忠诚度,从而带动整体业绩增长。
"""
st.markdown(markdown_report)
五、可复制模板库推荐与应用建议
适用于不同场景的模板库
1. 数据分析报告模板
以下是一个通用数据分析报告模板,适用于多种数据分析场景:
你是一位专业的数据分析专家。请根据以下数据进行分析,并提供详细的报告。
数据背景:[数据的来源和背景信息]
分析要求:
- 数据摘要和关键统计指标
- 数据中的趋势和模式识别
- 异常值分析和可能的原因
- 基于数据的预测和建议
输出格式:
- 使用Markdown格式
- 适当使用表格展示比较数据
- 对关键发现使用粗体标注
- 建议部分使用编号列表
分析深度:[基础/中级/高级]
这个模板可以在Streamlit应用中实现,以便用户输入自己的数据并获得分析报告:
import streamlit as st
import pandas as pd
import io
st.title("数据分析报告生成器")
# 上传数据文件
uploaded_file = st.file_uploader("上传CSV或Excel数据文件", type=["csv", "xlsx"])
if uploaded_file is not None:
# 读取数据
try:
if uploaded_file.name.endswith('.csv'):
df = pd.read_csv(uploaded_file)
else:
df = pd.read_excel(uploaded_file)
st.write("### 数据预览")
st.dataframe(df.head())
# 收集分析要求
st.write("### 分析配置")
col1, col2 = st.columns(2)
with col1:
data_background = st.text_area("数据背景", "请描述数据的来源和背景信息")
analysis_depth = st.select_slider(
"分析深度",
options=["基础", "中级", "高级"]
)
with col2:
analysis_focus = st.multiselect(
"重点分析领域",
["时间趋势分析", "类别比较", "相关性分析", "预测建模", "细分群体分析"],
["时间趋势分析", "类别比较"]
)
# 生成模板
if st.button("生成分析报告模板"):
template = f"""
你是一位专业的数据分析专家。请根据以下数据进行分析,并提供详细的报告。
数据背景:{data_background}
分析要求:
1. 数据摘要和关键统计指标
2. {'、'.join(analysis_focus)}的深入分析
3. 异常值分析和可能的原因
4. 基于数据的预测和建议
输出格式:
- 使用Markdown格式
- 适当使用表格展示比较数据
- 对关键发现使用粗体标注
- 建议部分使用编号列表
分析深度:{analysis_depth}
"""
st.code(template, language="text")
# 在实际应用中,这里可以添加将模板发送到AI模型获取回复的代码
st.info("复制此模板并粘贴到您喜欢的AI聊天工具中,同时提供您的数据。")
except Exception as e:
st.error(f"读取文件时发生错误: {e}")
2. 创意内容生成模板
import streamlit as st
st.title("创意内容生成助手")
content_type = st.selectbox(
"选择内容类型",
["博客文章", "社交媒体帖子", "产品描述", "营销邮件", "故事情节"]
)
templates = {
"博客文章": """
你是一位专业的内容创作者。请为以下主题创作一篇引人入胜的博客文章。
主题:[主题]
目标受众:[受众]
文章风格:[风格,如专业、随意、幽默等]
输出要求:
1. 引人注目的标题(提供3个选项)
2. 引言部分(100字左右)
3. 3-5个主要部分,每部分需有小标题
4. 每个部分包含实例和证据支持
5. 总结和行动建议
6. 文章字数控制在[字数]字左右
使用Markdown格式,确保文章逻辑连贯,使用引人入胜的叙述方式。
""",
"社交媒体帖子": """
你是一位社交媒体内容策略专家。请为以下主题创作一组社交媒体帖子。
主题:[主题]
平台:[平台,如微信、微博、抖音等]
目标:[目标,如提高参与度、推广产品、提升品牌认知等]
输出要求:
1. 创建5个不同的帖子文案
2. 每个帖子不超过[字数]字
3. 包含适当的表情符号和话题标签建议
4. 每个帖子都应有明确的号召性行动
5. 提供发布时间建议
确保内容有创意、引人注目并符合平台特性。
""",
"产品描述": """
你是一位产品文案专家。请为以下产品创作一个引人注目且有说服力的产品描述。
产品:[产品名称]
目标受众:[受众]
主要卖点:[3-5个主要卖点]
输出要求:
1. 引人注目的产品标题(30字以内)
2. 简短吸引人的产品概述(50字以内)
3. 详细说明每个主要卖点(每点50-100字)
4. 技术规格列表(如适用)
5. 有说服力的结束语,包含号召性行动
使用生动、形象的语言,突出产品如何解决客户问题或改善生活。
""",
"营销邮件": """
你是一位电子邮件营销专家。请创作一封有效的营销邮件。
目的:[邮件目的,如产品推广、活动通知、会员维护等]
目标受众:[受众]
产品/服务:[产品或服务详情]
输出要求:
1. 引人注目的邮件主题行(3个选项)
2. 个性化的开场白
3. 简明扼要的核心内容(200字左右)
4. 明确的价值主张
5. 突出的号召性行动按钮文本
6. 简短的结束语
确保语言简洁、直接,重点突出价值和好处,而非仅仅列举特性。
""",
"故事情节": """
你是一位创意故事作家。请为以下设定创作一个引人入胜的故事情节。
类型:[故事类型,如科幻、奇幻、爱情、悬疑等]
主角设定:[主角基本设定]
背景设置:[故事背景]
输出要求:
1. 引人入胜的标题
2. 故事梗概(100字左右)
3. 主要人物介绍(每个人物50字左右)
4. 分为三幕的情节概述:
- 第一幕:设定和冲突引入
- 第二幕:冲突发展和转折
- 第三幕:高潮和解决
5. 主题和寓意说明
创造有深度的角色和情节,确保故事具有情感共鸣和引人思考的元素。
"""
}
# 显示选择的模板
if content_type in templates:
st.subheader(f"{content_type}模板")
st.code(templates[content_type], language="text")
# 添加自定义选项
st.subheader("自定义模板参数")
if content_type == "博客文章":
topic = st.text_input("主题", "人工智能在日常生活中的应用")
audience = st.text_input("目标受众", "25-40岁的科技爱好者")
style = st.selectbox("文章风格", ["专业", "随意", "幽默", "教育性", "鼓舞人心"])
word_count = st.slider("文章字数", 800, 3000, 1500)
if st.button("生成定制模板"):
custom_template = templates[content_type].replace("[主题]", topic)\
.replace("[受众]", audience)\
.replace("[风格]", style)\
.replace("[字数]", str(word_count))
st.code(custom_template, language="text")
st.success("模板已生成!复制此模板并粘贴到您喜欢的AI聊天工具中。")
elif content_type == "社交媒体帖子":
topic = st.text_input("主题", "新产品发布")
platform = st.selectbox("平台", ["微信", "微博", "抖音", "小红书", "LinkedIn"])
goal = st.selectbox("目标", ["提高参与度", "推广产品", "提升品牌认知", "引导流量", "收集反馈"])
word_count = st.slider("每个帖子最大字数", 50, 300, 140)
if st.button("生成定制模板"):
custom_template = templates[content_type].replace("[主题]", topic)\
.replace("[平台]", platform)\
.replace("[目标]", goal)\
.replace("[字数]", str(word_count))
st.code(custom_template, language="text")
st.success("模板已生成!复制此模板并粘贴到您喜欢的AI聊天工具中。")
最佳实践和应用技巧
-
根据任务复杂度选择模板:
- 简单任务使用基础模板,减少不必要的复杂性
- 复杂任务使用结构化模板,确保输出全面且有序
- 专业分析使用JSON或表格模板,便于数据处理和可视化
-
模板迭代优化流程:
import streamlit as st
import pandas as pd
st.title("Prompt模板迭代优化工具")
# 创建侧边栏用于模板管理
with st.sidebar:
st.header("模板管理")
template_action = st.radio("选择操作", ["使用现有模板", "创建新模板", "编辑模板"])
# 示例模板库
if 'templates' not in st.session_state:
st.session_state.templates = {
"基础数据分析": {
"content": """
你是一位数据分析师。请分析以下数据并提供见解。
数据:{data_description}
请提供:
1. 关键统计指标
2. 主要发现(3-5点)
3. 建议(2-3点)
""",
"success_rate": 65,
"avg_quality": 3.5
},
"结构化报告": {
"content": """
角色:你是数据分析专家。
任务:深入分析{data_description},找出关键洞察并提供业务建议。
输出格式:
1. 数据概要(包含关键统计指标)
2. 关键发现(至少3点,每点使用数据支持)
3. 业务影响分析
4. 行动建议(针对不同利益相关者,至少3点)
请使用表格和要点列表来组织你的回答,使其清晰易读。
""",
"success_rate": 85,
"avg_quality": 4.2
},
"JSON输出": {
"content": """
你是API数据分析助手。请分析{data_description},并以JSON格式返回分析结果。
输出要求:你的回答必须是一个有效的JSON对象,具有以下结构:
{
"summary": {
"key_metrics": {},
"time_period": ""
},
"insights": [
{"title": "", "description": "", "supporting_data": ""},
...(至少3项)
],
"recommendations": [
{"target": "", "action": "", "expected_outcome": ""},
...(至少3项)
]
}
确保JSON格式正确无误,可以直接被程序解析。
""",
"success_rate": 90,
"avg_quality": 4.7
}
}
if template_action == "使用现有模板":
# 显示现有模板及其性能指标
st.subheader("可用模板及性能数据")
template_data = []
for name, details in st.session_state.templates.items():
template_data.append({
"模板名称": name,
"成功率": f"{details['success_rate']}%",
"平均质量评分": f"{details['avg_quality']}/5.0"
})
template_df = pd.DataFrame(template_data)
st.table(template_df)
# 模板选择和自定义
selected_template = st.selectbox("选择模板", list(st.session_state.templates.keys()))
st.subheader("模板内容")
st.code(st.session_state.templates[selected_template]["content"], language="text")
# 自定义参数
st.subheader("自定义参数")
data_description = st.text_area("数据描述", "过去12个月的销售数据,包含产品类别、区域和客户细分")
if st.button("生成最终模板"):
final_template = st.session_state.templates[selected_template]["content"].format(
data_description=data_description
)
st.code(final_template, language="text")
# 显示使用建议
st.subheader("使用建议")
st.markdown("""
1. **复制模板**: 将生成的模板复制到AI聊天工具中
2. **提供额外上下文**: 如果有特定的分析需求或背景信息,在模板后添加
3. **迭代改进**: 如果结果不理想,尝试添加更多具体的指导或修改格式要求
4. **反馈结果**: 使用后请评价此模板的效果,帮助我们改进
""")
# 在实际应用中,这里可以添加将结果发送到AI模型的代码
elif template_action == "创建新模板":
st.subheader("创建新模板")
new_template_name = st.text_input("模板名称")
new_template_content = st.text_area("模板内容", height=300)
if st.button("保存模板") and new_template_name and new_template_content:
if new_template_name in st.session_state.templates:
st.warning(f"模板 '{new_template_name}' 已存在。请使用不同的名称或选择编辑现有模板。")
else:
st.session_state.templates[new_template_name] = {
"content": new_template_content,
"success_rate": 0,
"avg_quality": 0
}
st.success(f"模板 '{new_template_name}' 已创建!")
elif template_action == "编辑模板":
st.subheader("编辑现有模板")
template_to_edit = st.selectbox("选择要编辑的模板", list(st.session_state.templates.keys()))
edit_content = st.text_area(
"编辑模板内容",
value=st.session_state.templates[template_to_edit]["content"],
height=300
)
if st.button("更新模板") and edit_content:
st.session_state.templates[template_to_edit]["content"] = edit_content
st.success(f"模板 '{template_to_edit}' 已更新!")
# 添加模板效果反馈机制
st.header("模板效果反馈")
with st.expander("提交模板使用反馈"):
feedback_template = st.selectbox("选择使用的模板", list(st.session_state.templates.keys()))
success = st.radio("是否成功获得期望结果", ["是", "否"])
quality = st.slider("输出质量评分", 1, 5, 3)
improvement = st.text_area("改进建议")
if st.button("提交反馈"):
# 在实际应用中,这里可以添加将反馈保存到数据库的代码
success_rate = 100 if success == "是" else 0
current_sr = st.session_state.templates[feedback_template]["success_rate"]
current_q = st.session_state.templates[feedback_template]["avg_quality"]
# 简单模拟更新模板评分(实际应用中应该基于更多数据点)
st.session_state.templates[feedback_template]["success_rate"] = (current_sr + success_rate) / 2
st.session_state.templates[feedback_template]["avg_quality"] = (current_q + quality) / 2
st.success("感谢您的反馈!这将帮助我们改进模板质量。")
- 常见问题解决方案:
问题 | 解决方案 | 模板调整建议 |
---|---|---|
输出太长冗余 | 设定明确的长度限制 | 添加"请控制总字数在X字以内"或"每点描述不超过Y字" |
输出结构混乱 | 使用编号列表和分层标题 | 添加"请使用以下精确格式"并提供示例 |
缺乏具体数据支持 | 要求引用数据或提供证据 | 添加"每个结论必须有具体数据支持" |
内容质量不一致 | 设定质量标准和评估原则 | 添加"分析必须符合以下标准:准确性、相关性、深度、可操作性" |
太过技术化难以理解 | 指定目标受众和预期专业水平 | 添加"解释应适合[目标受众]理解,避免过度专业术语" |
模板动态生成与适配工具
以下是一个动态生成模板的Streamlit工具:
import streamlit as st
import pandas as pd
import json
st.title("AI Prompt模板智能生成器")
# 初始化session state
if 'template_generated' not in st.session_state:
st.session_state.template_generated = False
if 'final_template' not in st.session_state:
st.session_state.final_template = ""
# 第一步:确定任务类型和输出要求
st.header("第一步:定义任务")
task_category = st.selectbox(
"选择任务类别",
["数据分析", "内容创作", "代码生成", "决策支持", "教育培训", "其他"]
)
task_specifics = {
"数据分析": ["趋势分析", "异常检测", "分群分析", "预测建模", "相关性分析", "情感分析"],
"内容创作": ["博客文章", "营销文案", "产品描述", "社交媒体内容", "脚本创作", "技术文档"],
"代码生成": ["函数编写", "算法实现", "调试修复", "代码优化", "API调用", "单元测试"],
"决策支持": ["风险评估", "选项比较", "投资分析", "战略规划", "资源分配", "场景模拟"],
"教育培训": ["概念解释", "教学计划", "练习题生成", "评估标准", "学习路径", "知识总结"],
"其他": ["自定义任务"]
}
specific_task = st.selectbox(
"选择具体任务",
task_specifics[task_category]
)
if specific_task == "自定义任务":
specific_task = st.text_input("请描述您的具体任务")
task_description = st.text_area(
"任务详细描述",
"请详细描述您需要AI完成的任务,包含背景、目标和任何特殊要求。"
)
# 第二步:定义输出格式和结构
st.header("第二步:输出要求")
output_format = st.multiselect(
"选择需要的输出格式元素",
["文本段落", "要点列表", "表格", "JSON结构", "Markdown格式", "代码块", "对话式回复"],
["文本段落", "要点列表"]
)
structure_elements = []
if "文本段落" in output_format:
structure_elements.append(st.text_input("文本段落要求", "简洁明了的概述"))
if "要点列表" in output_format:
points_count = st.number_input("要点数量", 1, 10, 3)
structure_elements.append(f"包含{points_count}个关键要点")
if "表格" in output_format:
table_desc = st.text_input("表格内容描述", "比较数据或选项")
structure_elements.append(f"使用表格展示{table_desc}")
if "JSON结构" in output_format:
with st.expander("定义JSON结构"):
json_template = st.text_area(
"JSON模板结构",
"""{
"summary": "摘要内容",
"key_points": ["要点1", "要点2", "要点3"],
"details": {
"section1": "内容1",
"section2": "内容2"
}
}"""
)
structure_elements.append("使用指定的JSON结构输出")
content_tone = st.select_slider(
"内容语调",
options=["非常正式", "专业", "中性", "友好", "对话式", "幽默"]
)
content_depth = st.select_slider(
"内容深度",
options=["入门级", "基础", "中级", "高级", "专家级"]
)
max_length = st.slider("最大内容长度", 100, 2000, 500)
# 第三步:角色定义和指导原则
st.header("第三步:角色与原则")
ai_role = st.text_input(
"AI应扮演的角色",
"专业的分析师"
)
guiding_principles = st.text_area(
"指导原则",
"保持客观、基于事实,提供有见地的分析,避免模糊不清的结论。"
)
examples_toggle = st.checkbox("包含示例")
example_content = ""
if examples_toggle:
example_content = st.text_area(
"提供示例(输入-输出对)",
"""输入: [示例输入]
输出: [示例输出]"""
)
# 生成模板
if st.button("生成Prompt模板"):
# 构建模板各部分
role_part = f"你是一位{ai_role}。"
task_part = f"任务:{task_description}"
format_items = []
for i, element in enumerate(structure_elements, 1):
format_items.append(f"{i}. {element}")
format_part = "输出格式要求:\n" + "\n".join(format_items)
if max_length > 0:
format_part += f"\n总内容长度不超过{max_length}字。"
tone_part = f"使用{content_tone}的语调,内容深度为{content_depth}级别。"
principles_part = f"指导原则:{guiding_principles}"
examples_part = ""
if examples_toggle and example_content:
examples_part = f"参考示例:\n{example_content}"
# 组合完整模板
st.session_state.final_template = f"""{role_part}
{task_part}
{format_part}
{tone_part}
{principles_part}
"""
if examples_part:
st.session_state.final_template += f"\n{examples_part}"
st.session_state.template_generated = True
# 显示生成的模板
if st.session_state.template_generated:
st.header("生成的Prompt模板")
st.code(st.session_state.final_template, language="text")
# 添加复制按钮
st.success("模板生成成功!您可以复制以上模板用于AI交互。")
# 添加保存功能
if st.button("保存此模板"):
template_name = st.text_input("模板名称", f"{task_category}-{specific_task}")
# 在实际应用中,这里可以添加将模板保存到数据库或文件的代码
st.success(f"模板 '{template_name}' 已保存!")
# 添加直接使用功能(实际应用中可连接到AI API)
st.subheader("测试此模板")
test_input = st.text_area("输入测试数据或问题")
if st.button("发送到AI") and test_input:
# 在实际应用中,这里可以添加调用AI API的代码
st.info("在实际应用中,这里会将您的模板和输入发送到AI并显示结果。")
总结与实践建议
本文介绍了如何通过 Prompt 模板和格式控制技术打造稳定可控的 AI 输出。我们从模板的作用和基本结构出发,详细探讨了三种常见的结构化输出方法:表格、JSON 和 Markdown。通过实战演示,我们展示了如何将简单指令逐步升级为结构化的高级模板,大幅提升 AI 输出的一致性和可用性。
最后,我们提供了适用于各种场景的模板库、最佳实践和一套动态生成工具,帮助读者快速应用这些技术到实际工作中。综合这些实践,可以显著改进与 AI 的交互体验,提高工作效率。
实践建议
- 循序渐进:从简单模板开始,逐步添加结构和复杂度
- 持续迭代:根据输出结果不断调整和优化模板
- 场景匹配:根据具体场景选择合适的输出格式和结构
- 收集反馈:建立模板效果评估机制,追踪成功率和质量
- 保持更新:随着 AI 能力的提升,不断更新模板,保持最佳实践