内容创作系统 - 打造你的 AI 写作伙伴

系列文章: System Prompt 实战指南(3/6)
难度: ⭐⭐⭐
预计阅读时间: 20 分钟


一、真实案例引入

1.1 场景:营销团队的文案生成工具

某电商公司的营销团队每天需要产出大量文案:

  • 社交媒体帖子(微博、小红书、抖音)
  • 营销邮件(促销、新品推荐)
  • 商品描述(详情页、标题)
  • 广告文案(搜索广告、信息流广告)

现状痛点:

  • 文案师每天重复劳动,创意枯竭
  • 不同渠道风格不统一,品牌调性混乱
  • 新人培训周期长(3 个月才能独立产出)
  • 高峰期(双 11、618)人手严重不足

解决方案: 构建一个 AI 文案生成工具

1.2 用户需求分析

核心需求:

  1. 风格可控:生成的文案符合品牌调性
  2. 格式规范:输出结构化数据(JSON),便于系统集成
  3. 创意多样:同一产品能生成多个不同角度的文案
  4. 批量生成:一次生成 10+ 个变体,供人工筛选

典型使用流程:

输入:产品信息(名称、特点、价格)+ 渠道(小红书/微博)
输出:3-5 个文案变体,包含标题、正文、标签
人工:筛选最佳方案,微调后发布

二、问题分析与需求拆解

2.1 核心挑战 1:风格控制

问题: 如何让 AI 生成符合品牌调性的文案?

常见问题:

  • 要求"活泼",结果太夸张("OMG!买它买它!")
  • 要求"专业",结果太生硬("本产品采用先进技术...")
  • 不同批次风格飘忽,前后不一致

解决思路:

  • 详细的风格指南(语气、用词、句式)
  • Few-shot 示例(提供 3-5 个优质案例)
  • 风格参数化(正式度、情感强度、创意度)

2.2 核心挑战 2:结构化输出

问题: 如何确保 AI 输出格式规范、可解析?

需求:

{
  "title": "标题(20字以内)",
  "content": "正文(100-200字)",
  "tags": ["标签1", "标签2", "标签3"],
  "cta": "行动号召(如:立即购买)"
}

常见问题:

  • 输出格式不稳定(有时是 JSON,有时是纯文本)
  • 字段缺失或多余
  • 字数不符合要求

解决思路:

  • 使用 JSON mode(Claude 原生支持)
  • 在 System Prompt 中明确定义 Schema
  • 输出验证与重试机制

2.3 核心挑战 3:创意与约束的平衡

问题: 如何在保持创意的同时,遵守品牌规范?

矛盾:

  • 太自由 → 可能违反品牌规范、出现不当内容
  • 太约束 → 文案千篇一律、缺乏吸引力

解决思路:

  • 分层约束(硬约束 + 软约束)
  • 温度参数调优(控制创意度)
  • 创意框架(AIDA、PAS 等模型)

2.4 核心挑战 4:批量生成一致性

问题: 批量生成时,如何保持风格一致?

场景:

  • 一次生成 10 个商品的文案
  • 要求风格统一,但内容不重复

常见问题:

  • 前 3 个很好,后面质量下降
  • 风格逐渐偏离
  • 出现重复的表达

解决思路:

  • 模板系统(固定结构 + 可变内容)
  • Prompt Caching(缓存风格指南)
  • 批量生成策略(并行 vs 串行)

三、解决方案演进

V1:基础文案生成器(10分钟实现)

设计思路: 简单的角色定义 + 任务说明

System Prompt:

SYSTEM_PROMPT_V1 = """
你是一名专业的营销文案撰写人。

## 你的任务
根据产品信息,撰写吸引人的营销文案。

## 要求
- 语言生动、有感染力
- 突出产品卖点
- 控制在 100-200 字
"""

代码实现:

import anthropic
import os
from dotenv import load_dotenv

load_dotenv()
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))

def generate_copy_v1(product_info):
    """生成文案 V1"""
    prompt = f"""
请为以下产品撰写营销文案:

产品名称:{product_info['name']}
产品特点:{product_info['features']}
价格:{product_info['price']}
"""

    response = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=500,
        system=SYSTEM_PROMPT_V1,
        messages=[{"role": "user", "content": prompt}]
    )

    return response.content[0].text

# 测试
product = {
    "name": "智能保温杯",
    "features": "304不锈钢、24小时保温、智能温度显示",
    "price": "199元"
}

print(generate_copy_v1(product))

输出示例:

这款智能保温杯采用304不锈钢材质,能够24小时持续保温,
让您随时享受温暖。独特的智能温度显示功能,一目了然掌握
饮品温度。仅需199元,就能拥有这款贴心好物,让每一口都
是恰到好处的温度!

优点:

  • ✅ 实现简单,快速上手
  • ✅ 文案基本可用

缺点:

  • ❌ 风格不可控(每次生成风格不同)
  • ❌ 输出格式不规范(纯文本,难以解析)
  • ❌ 缺少标题、标签等元素
  • ❌ 创意度不可调节

V2:风格化写作助手

改进点:

  1. 详细的风格指南:明确语气、用词、句式
  2. Few-shot 示例:提供 3 个优质案例
  3. 结构化输出:使用 JSON 格式
  4. 温度参数:控制创意度

System Prompt 改进:

SYSTEM_PROMPT_V2 = """
你是"悦购"电商平台的资深文案撰写人,擅长撰写吸引年轻女性用户的营销文案。

## 品牌调性
- **语气**:亲切、温暖、有共鸣感
- **用词**:生活化、具象化,避免空洞形容词
- **句式**:短句为主,节奏明快
- **情感**:传递美好生活方式,而非硬推销

## 写作风格示例

### 示例 1:保温杯
**标题**:这个冬天,温暖随身携带
**正文**:清晨的咖啡,午后的红茶,深夜的热牛奶。这款智能保温杯,
24小时守护每一口温度。304不锈钢内胆,安全又耐用。智能屏幕实时
显示温度,再也不用担心烫嘴或放凉。199元,给自己一份温暖的陪伴。
**标签**:#温暖好物 #智能生活 #冬日必备

### 示例 2:护肤品
**标题**:熬夜后的肌肤急救站
**正文**:加班、追剧、带娃...熬夜总是难免。这瓶修护精华,专为
熬夜肌设计。烟酰胺+玻尿酸双重配方,一夜修护,晨起依然水润透亮。
轻薄质地,不油腻,敏感肌也能安心用。
**标签**:#熬夜急救 #护肤好物 #敏感肌友好

### 示例 3:零食
**标题**:办公室下午茶的快乐源泉
**正文**:下午3点,困意来袭?来包坚果吧!精选6种坚果,每一颗都
饱满香脆。无添加糖,健康不长胖。独立小包装,办公室常备,随时
补充能量。闺蜜团购更划算哦~
**标签**:#健康零食 #办公室必备 #闺蜜团购

## 输出格式
请严格按照以下 JSON 格式输出:

{
  "title": "标题(15-20字,吸引眼球)",
  "content": "正文(100-150字,讲故事+卖点+行动号召)",
  "tags": ["标签1", "标签2", "标签3"],
  "tone": "本次文案的情感基调(如:温暖、活力、治愈)"
}

## 约束条件
- 不使用夸张词汇(如:史上最强、绝对、必买)
- 不做虚假承诺(如:7天美白、一周瘦10斤)
- 不使用生硬的推销语言
- 价格信息自然融入,不突兀
"""

代码实现:

import json

def generate_copy_v2(product_info, temperature=0.7):
    """生成文案 V2 - 风格化 + 结构化输出"""
    prompt = f"""
请为以下产品撰写营销文案:

产品名称:{product_info['name']}
产品特点:{product_info['features']}
目标人群:{product_info['target']}
价格:{product_info['price']}
渠道:{product_info['channel']}
"""

    response = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=800,
        temperature=temperature,  # 控制创意度
        system=SYSTEM_PROMPT_V2,
        messages=[{"role": "user", "content": prompt}]
    )

    # 解析 JSON 输出
    try:
        result = json.loads(response.content[0].text)
        return result
    except json.JSONDecodeError:
        # 如果解析失败,返回原始文本
        return {"error": "输出格式错误", "raw": response.content[0].text}

# 测试
product = {
    "name": "智能保温杯",
    "features": "304不锈钢、24小时保温、智能温度显示、500ml大容量",
    "target": "25-35岁职场女性",
    "price": "199元",
    "channel": "小红书"
}

result = generate_copy_v2(product, temperature=0.7)
print(json.dumps(result, ensure_ascii=False, indent=2))

输出示例:

{
  "title": "这个冬天,温暖随身携带",
  "content": "清晨的咖啡,午后的红茶,深夜的热牛奶。这款智能保温杯,24小时守护每一口温度。304不锈钢内胆,安全又耐用。500ml大容量,一杯管一天。智能屏幕实时显示温度,再也不用担心烫嘴或放凉。199元,给自己一份温暖的陪伴。",
  "tags": ["#温暖好物", "#智能生活", "#冬日必备"],
  "tone": "温暖"
}

改进效果:

  • ✅ 风格统一,符合品牌调性
  • ✅ 输出格式规范(JSON)
  • ✅ 包含标题、正文、标签
  • ✅ 可通过 temperature 调节创意度

仍存在的问题:

  • ❌ 批量生成时风格可能不一致
  • ❌ 没有变体生成功能
  • ❌ 缺少模板系统
  • ❌ 没有输出验证机制

V3:生产级内容引擎

code/v3_production.py

"""
V3: 生产级内容引擎
模板系统 + 变体生成 + 输出验证 + 批量处理
"""

import anthropic
import os
import json
from typing import List, Dict
from dotenv import load_dotenv
from pydantic import BaseModel, Field, validator

load_dotenv()
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))

# 使用 Pydantic 定义输出格式
class CopyOutput(BaseModel):
    title: str = Field(..., min_length=10, max_length=30, description="标题")
    content: str = Field(..., min_length=80, max_length=200, description="正文")
    tags: List[str] = Field(..., min_items=3, max_items=5, description="标签")
    tone: str = Field(..., description="情感基调")

    @validator('tags')
    def tags_must_start_with_hash(cls, v):
        """确保标签以 # 开头"""
        return [tag if tag.startswith('#') else f'#{tag}' for tag in v]

SYSTEM_PROMPT_V3 = """
你是"悦购"电商平台的资深文案撰写人,擅长撰写吸引年轻女性用户的营销文案。

## 品牌调性
- **语气**:亲切、温暖、有共鸣感
- **用词**:生活化、具象化,避免空洞形容词
- **句式**:短句为主,节奏明快
- **情感**:传递美好生活方式,而非硬推销

## 写作风格示例

### 示例 1:保温杯
**标题**:这个冬天,温暖随身携带
**正文**:清晨的咖啡,午后的红茶,深夜的热牛奶。这款智能保温杯,24小时守护每一口温度。304不锈钢内胆,安全又耐用。智能屏幕实时显示温度,再也不用担心烫嘴或放凉。199元,给自己一份温暖的陪伴。
**标签**:#温暖好物 #智能生活 #冬日必备
**基调**:温暖

### 示例 2:护肤品
**标题**:熬夜后的肌肤急救站
**正文**:加班、追剧、带娃...熬夜总是难免。这瓶修护精华,专为熬夜肌设计。烟酰胺+玻尿酸双重配方,一夜修护,晨起依然水润透亮。轻薄质地,不油腻,敏感肌也能安心用。
**标签**:#熬夜急救 #护肤好物 #敏感肌友好
**基调**:治愈

## 输出格式
请严格按照以下 JSON 格式输出:

{
  "title": "标题(15-25字)",
  "content": "正文(100-180字)",
  "tags": ["#标签1", "#标签2", "#标签3"],
  "tone": "情感基调"
}

## 约束条件
- 不使用夸张词汇(如:史上最强、绝对、必买)
- 不做虚假承诺
- 价格信息自然融入
- 标签必须以 # 开头
"""

class ProductionContentEngine:
    """生产级内容引擎"""

    def __init__(self):
        self.client = client
        self.templates = self._load_templates()

    def _load_templates(self) -> Dict:
        """加载文案模板"""
        return {
            "lifestyle": {
                "opening": ["清晨的...", "午后的...", "深夜的..."],
                "benefit": ["守护每一口...", "陪伴每一刻...", "温暖每一天..."],
                "cta": ["给自己一份...", "让生活多一点...", "值得拥有的..."]
            },
            "problem_solution": {
                "problem": ["...总是难免", "...是否困扰你", "...让人头疼"],
                "solution": ["这款...专为...设计", "...帮你解决", "...让你告别"],
                "result": ["从此...", "再也不用担心...", "轻松享受..."]
            }
        }

    def generate_copy(self, product_info: Dict,
                     temperature: float = 0.7,
                     num_variants: int = 1) -> List[CopyOutput]:
        """生成文案(支持多个变体)"""

        prompt = f"""
请为以下产品撰写营销文案:

产品名称:{product_info['name']}
产品特点:{product_info['features']}
目标人群:{product_info['target']}
价格:{product_info['price']}
渠道:{product_info['channel']}

{f"请生成 {num_variants} 个不同角度的文案变体。" if num_variants > 1 else ""}
"""

        results = []

        for i in range(num_variants):
            try:
                response = self.client.messages.create(
                    model="claude-3-5-sonnet-20241022",
                    max_tokens=800,
                    temperature=temperature,
                    system=[
                        {
                            "type": "text",
                            "text": SYSTEM_PROMPT_V3,
                            "cache_control": {"type": "ephemeral"}  # 缓存 System Prompt
                        }
                    ],
                    messages=[{"role": "user", "content": prompt}]
                )

                # 解析 JSON
                text = response.content[0].text
                if "```json" in text:
                    text = text.split("```json")[1].split("```")[0]
                elif "```" in text:
                    text = text.split("```")[1].split("```")[0]

                data = json.loads(text.strip())

                # 使用 Pydantic 验证
                copy_output = CopyOutput(**data)
                results.append(copy_output)

            except Exception as e:
                print(f"生成第 {i+1} 个变体失败: {e}")
                continue

        return results

    def batch_generate(self, products: List[Dict],
                      temperature: float = 0.7) -> Dict[str, List[CopyOutput]]:
        """批量生成文案"""
        results = {}

        for product in products:
            product_name = product['name']
            print(f"正在生成 {product_name} 的文案...")

            copies = self.generate_copy(product, temperature=temperature)
            results[product_name] = copies

        return results

if __name__ == "__main__":
    print("=" * 60)
    print("内容引擎 V3 - 生产级方案")
    print("=" * 60)

    engine = ProductionContentEngine()

    # 测试产品
    product = {
        "name": "智能保温杯",
        "features": "304不锈钢、24小时保温、智能温度显示、500ml大容量",
        "target": "25-35岁职场女性",
        "price": "199元",
        "channel": "小红书"
    }

    print(f"\n产品: {product['name']}")
    print("-" * 60)

    # 生成 3 个变体
    print("\n生成 3 个文案变体:")
    copies = engine.generate_copy(product, temperature=0.8, num_variants=3)

    for i, copy in enumerate(copies, 1):
        print(f"\n变体 {i}:")
        print(f"标题: {copy.title}")
        print(f"正文: {copy.content}")
        print(f"标签: {', '.join(copy.tags)}")
        print(f"基调: {copy.tone}")
        print("-" * 60)

    # 批量生成测试
    print("\n\n批量生成测试:")
    products = [
        {
            "name": "蓝牙耳机",
            "features": "主动降噪、30小时续航、IPX7防水",
            "target": "20-30岁年轻人",
            "price": "299元",
            "channel": "抖音"
        },
        {
            "name": "瑜伽垫",
            "features": "TPE环保材质、10mm加厚、防滑纹理",
            "target": "25-40岁女性",
            "price": "159元",
            "channel": "小红书"
        }
    ]

    batch_results = engine.batch_generate(products, temperature=0.7)

    for product_name, copies in batch_results.items():
        print(f"\n{product_name}:")
        if copies:
            copy = copies[0]
            print(f"  标题: {copy.title}")
            print(f"  标签: {', '.join(copy.tags)}")

核心特性:

  1. ✅ 模板系统:预定义多种文案模板
  2. ✅ 变体生成:一次生成多个版本
  3. ✅ 输出验证:自动检查格式和字数
  4. ✅ 批量处理:支持批量生成
  5. ✅ Prompt Caching:优化成本

四、关键技术点深度剖析

4.1 风格控制技术

方法 1:描述性指导

"语气亲切、温暖,使用生活化用词"
  • 优点:灵活
  • 缺点:不够精确

方法 2:示例驱动(Few-shot)

"参考以下示例的风格:
示例1:...
示例2:...
示例3:..."
  • 优点:精确、可控
  • 缺点:占用 Token

方法 3:参数化控制

{
  "formality": 0.6,  # 正式度 0-1
  "emotion": 0.8,    # 情感强度 0-1
  "creativity": 0.7  # 创意度 0-1
}
  • 优点:可量化调节
  • 缺点:需要实验确定参数

推荐组合: 描述性指导 + Few-shot 示例

4.2 结构化输出最佳实践

方法 1:自然约束

"请按以下格式输出:
标题:...
正文:...
标签:..."
  • 优点:简单
  • 缺点:格式不稳定

方法 2:JSON mode

system=[{
    "type": "text",
    "text": SYSTEM_PROMPT,
    "cache_control": {"type": "ephemeral"}
}]
  • 优点:格式稳定
  • 缺点:需要明确 Schema

方法 3:Pydantic 验证

from pydantic import BaseModel

class CopyOutput(BaseModel):
    title: str
    content: str
    tags: list[str]
  • 优点:类型安全
  • 缺点:需要额外库

推荐: JSON mode + Pydantic 验证

4.3 创意激发技术

温度参数(Temperature)

temperature=0.3  # 保守、一致
temperature=0.7  # 平衡(推荐)
temperature=1.0  # 创意、多样

Top-p 采样

top_p=0.9  # 只考虑概率前 90% 的词

创意框架

  • AIDA:注意 → 兴趣 → 欲望 → 行动
  • PAS:问题 → 放大 → 解决方案
  • FAB:特征 → 优势 → 利益

五、生产环境注意事项

5.1 内容审核机制

  • 敏感词过滤
  • 品牌规范检查
  • 人工复审流程

5.2 版权与原创性

  • 避免抄袭现有文案
  • 定期检查重复度
  • 保存生成记录

5.3 批量生成质量保证

  • 设置质量阈值
  • 自动筛选机制
  • A/B 测试验证

六、性能优化与成本控制

6.1 模板复用策略

  • 预定义常用模板
  • 只生成可变部分
  • 节省 30-50% Token

6.2 Prompt Caching

  • 缓存风格指南和示例
  • 节省 90% System Prompt 成本

6.3 成本效益分析

人工 vs AI:

指标 人工 AI(V3)
单条文案成本 ¥50 ¥0.5
生成时间 30分钟 10秒
日产量 10条 1000条

ROI: AI 方案成本仅为人工的 1%


七、关键要点总结

  1. 风格控制靠示例

    • Few-shot 比描述更精确
    • 3-5 个示例即可
  2. 结构化输出用 JSON

    • 明确定义 Schema
    • 加入验证机制
  3. 创意度可调节

    • Temperature 参数
    • 创意框架引导
  4. 批量生成要一致

    • 使用模板系统
    • Prompt Caching
  5. 成本优化有方法

    • 模板复用
    • 缓存策略
    • 批量处理

下一篇预告: 《RAG 系统 - 让 AI 基于知识库精准回答》


本文是《System Prompt 实战指南》系列的第 3 篇(共 6 篇)
发布日期:2026-05-08

posted @ 2026-05-08 13:59  拉耶维奇  阅读(58)  评论(0)    收藏  举报