L2-1、打造稳定可控的 AI 输出 —— Prompt 模板与格式控制

一、为什么需要 Prompt 模板?

在与 AI 模型交互时,我们经常会遇到输出不稳定、格式混乱的问题。Prompt 模板帮助我们解决这些问题,通过结构化的输入指令来获得可预测且一致的输出结果。

模板的作用主要体现在:

  • 固定输出格式,减少随机性
  • 提高交互效率,避免重复输入相同指令
  • 保证输出质量,明确 AI 任务边界
  • 提升用户体验,使 AI 输出易于理解和使用

二、构建稳定可复用的 Prompt 模板策略

高效的 Prompt 模板通常包含以下几个部分:

  1. 角色定义:明确告诉 AI 它应该扮演什么角色
  2. 任务说明:详细描述需要完成的任务
  3. 输出格式:规定 AI 回答的具体结构
  4. 示例展示:提供输入-输出的样例来引导 AI
  5. 评估标准:设定质量要求,让 AI 自我检查

以下是一个基本模板示例:

复制代码
你是一位专业的数据分析师。请根据我提供的数据,生成一份简洁的分析报告。

任务:分析以下销售数据并找出关键趋势。

输出格式要求:
1. 数据摘要(100字以内)
2. 关键发现(3-5点)
3. 建议行动(2-3点)

请使用markdown格式输出,保持专业简洁的语言风格。

三、如何控制输出格式:结构化输出的常见方法

表格输出技巧

表格是展示数据最直观的方式之一。使用 Markdown 格式的表格可以在大多数平台上正确显示。

python 复制代码
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 输出的场景。

python 复制代码
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 格式兼具可读性和美观性,适合生成报告、文档等内容。

python 复制代码
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)

四、实战演示:从自由输出到格式固定的演进

下面我们通过一个实际案例,展示如何将自由输出逐步改进为格式固定的结构化输出:

python 复制代码
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. 数据分析报告模板

以下是一个通用数据分析报告模板,适用于多种数据分析场景:

你是一位专业的数据分析专家。请根据以下数据进行分析,并提供详细的报告。

数据背景:[数据的来源和背景信息]

分析要求:

  1. 数据摘要和关键统计指标
  2. 数据中的趋势和模式识别
  3. 异常值分析和可能的原因
  4. 基于数据的预测和建议

输出格式:

  • 使用Markdown格式
  • 适当使用表格展示比较数据
  • 对关键发现使用粗体标注
  • 建议部分使用编号列表

分析深度:[基础/中级/高级]

这个模板可以在Streamlit应用中实现,以便用户输入自己的数据并获得分析报告:

python 复制代码
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. 创意内容生成模板
python 复制代码
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聊天工具中。")

最佳实践和应用技巧

  1. 根据任务复杂度选择模板

    • 简单任务使用基础模板,减少不必要的复杂性
    • 复杂任务使用结构化模板,确保输出全面且有序
    • 专业分析使用JSON或表格模板,便于数据处理和可视化
  2. 模板迭代优化流程

python 复制代码
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("感谢您的反馈!这将帮助我们改进模板质量。")
  1. 常见问题解决方案
问题 解决方案 模板调整建议
输出太长冗余 设定明确的长度限制 添加"请控制总字数在X字以内"或"每点描述不超过Y字"
输出结构混乱 使用编号列表和分层标题 添加"请使用以下精确格式"并提供示例
缺乏具体数据支持 要求引用数据或提供证据 添加"每个结论必须有具体数据支持"
内容质量不一致 设定质量标准和评估原则 添加"分析必须符合以下标准:准确性、相关性、深度、可操作性"
太过技术化难以理解 指定目标受众和预期专业水平 添加"解释应适合[目标受众]理解,避免过度专业术语"

模板动态生成与适配工具

以下是一个动态生成模板的Streamlit工具:

python 复制代码
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 的交互体验,提高工作效率。

实践建议

  1. 循序渐进:从简单模板开始,逐步添加结构和复杂度
  2. 持续迭代:根据输出结果不断调整和优化模板
  3. 场景匹配:根据具体场景选择合适的输出格式和结构
  4. 收集反馈:建立模板效果评估机制,追踪成功率和质量
  5. 保持更新:随着 AI 能力的提升,不断更新模板,保持最佳实践
相关推荐
pljnb1 分钟前
SVM(支持向量机)
人工智能·机器学习·支持向量机
掘金詹姆斯1 分钟前
LangChain4j—持久化聊天记忆 Persistence(五)
java·人工智能
梓羽玩Python13 分钟前
开源AI代理爆火!Suna:3天内新增5.5K+标星,自然对话驱动的自动化神器!
人工智能·python·github
新智元17 分钟前
70% 大小,100% 准确!完美压缩 LLM 性能 0 损失,推理速度最高飙升 39 倍
人工智能·openai
Ann20 分钟前
RAG:让AI回答更“靠谱”
人工智能·llm
新智元22 分钟前
GPT-4.5 功臣遭驱逐!奥特曼盛赞工作出色,美国深陷 AI 人才危机
人工智能·openai
带娃的IT创业者28 分钟前
《AI大模型趣味实战》智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用
人工智能·python·flask
一只韩非子33 分钟前
什么是MCP?为什么引入MCP?(通俗易懂版)
人工智能·aigc·mcp
新智元36 分钟前
毛骨悚然!o3 精准破译照片位置,只靠几行 Python 代码?人类在 AI 面前已裸奔
人工智能·openai
Tech Synapse1 小时前
电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎
人工智能·python·tensorflow