内容创作系统 - 打造你的 AI 写作伙伴
系列文章: System Prompt 实战指南(3/6)
难度: ⭐⭐⭐
预计阅读时间: 20 分钟
一、真实案例引入
1.1 场景:营销团队的文案生成工具
某电商公司的营销团队每天需要产出大量文案:
- 社交媒体帖子(微博、小红书、抖音)
- 营销邮件(促销、新品推荐)
- 商品描述(详情页、标题)
- 广告文案(搜索广告、信息流广告)
现状痛点:
- 文案师每天重复劳动,创意枯竭
- 不同渠道风格不统一,品牌调性混乱
- 新人培训周期长(3 个月才能独立产出)
- 高峰期(双 11、618)人手严重不足
解决方案: 构建一个 AI 文案生成工具
1.2 用户需求分析
核心需求:
- 风格可控:生成的文案符合品牌调性
- 格式规范:输出结构化数据(JSON),便于系统集成
- 创意多样:同一产品能生成多个不同角度的文案
- 批量生成:一次生成 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:风格化写作助手
改进点:
- 详细的风格指南:明确语气、用词、句式
- Few-shot 示例:提供 3 个优质案例
- 结构化输出:使用 JSON 格式
- 温度参数:控制创意度
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)}")
核心特性:
- ✅ 模板系统:预定义多种文案模板
- ✅ 变体生成:一次生成多个版本
- ✅ 输出验证:自动检查格式和字数
- ✅ 批量处理:支持批量生成
- ✅ 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%
七、关键要点总结
-
风格控制靠示例
- Few-shot 比描述更精确
- 3-5 个示例即可
-
结构化输出用 JSON
- 明确定义 Schema
- 加入验证机制
-
创意度可调节
- Temperature 参数
- 创意框架引导
-
批量生成要一致
- 使用模板系统
- Prompt Caching
-
成本优化有方法
- 模板复用
- 缓存策略
- 批量处理
下一篇预告: 《RAG 系统 - 让 AI 基于知识库精准回答》
本文是《System Prompt 实战指南》系列的第 3 篇(共 6 篇)
发布日期:2026-05-08

浙公网安备 33010602011771号