批量内容生产
批量写商品描述和营销文案,用一个便宜的对话模型写初稿,再从中抽一部分交给更强的模型检查和润色。按每月 2 万条商品描述、抽检 10% 估算,用最低价分组计算,模型费用每月约 ¥152。并发数、排队和失败重试都由你的程序控制。
价格更新于 2026年11月12日 20:17|
01
业务问题
电商上新、内容运营、广告投放都要大量文字:每个 SKU 一段描述,每个渠道一套标题,每次活动几十条文案。人工写跟不上节奏,外包的质量又时好时坏。
让模型写一条并不难,难在稳定地写几万条:任务要排队并发,遇到限流和网络错误要重试,语气要统一,还不能出现商品没有的卖点。
常见做法是先把商品属性整理成结构化数据,按固定模板生成初稿,再抽一部分交给更强的模型或人工复核,问题集中的批次整体重跑。
02
推荐模型组合
写初稿(对话模型)
deepseek-v4.1-flashDeepSeek输入 ¥2.8 / 输出 ¥11.2 每百万 tokens· 国产模型分组承担绝大部分调用量,选输出单价低、中文表达自然的模型。初稿只按给定属性写,不需要模型自己发挥卖点。
抽检与润色(更强的模型)
Claude Sonnet 5.5Anthropic输入 ¥3.2 / 输出 ¥16 每百万 tokens· Claude 经济分组抽一部分初稿检查内容是否和商品属性一致、语气是否统一,必要时直接改写。只处理抽检部分,单价高一些也能接受。
推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月12日 20:17。点模型名可查看全部分组价格。
03
参考架构
- 1
整理输入
把商品属性(名称、材质、规格、适用场景)和品牌语气说明整理成结构化数据,敏感词和禁用说法单独列成清单。
- 2
排队并发
任务进入队列,用固定并发数(比如 8 到 16)调用对话模型;429 和 5xx 按指数退避重试,400 类错误记录下来修正输入,不要重试。
- 3
生成初稿
系统提示词固定,每个商品的属性放进用户消息;限制输出长度,按段落或 JSON 返回,方便直接入库。
- 4
自动检查
用程序检查字数、禁用词,以及有没有出现属性里没有的数字或认证,不合格的打回重写。
- 5
抽检润色
抽 10% 左右交给更强的模型复核和润色,问题集中的批次整体重跑;上线前运营再人工过一遍。
04
成本估算
假设:每月生成 2 万条商品描述,每条输入约 800 tokens(商品属性、品牌语气和一个示例),输出约 400 tokens;抽 10%(2,000 条)交给更强的模型复核,每条输入约 1,200 tokens,输出约 300 tokens。
| 项目 | 模型 | 用量假设 | 费用 |
|---|---|---|---|
| 生成初稿 | deepseek-v4.1-flash | 20,000 次 × 输入 800 + 输出 400 tokens | ¥134.4 |
| 抽检润色 | Claude Sonnet 5.5 | 2,000 次 × 输入 1,200 + 输出 300 tokens | ¥17.28 |
| 合计(每月) | ¥151.68 | ||
按各模型最低价分组的实时价格计算,价格更新于 2026年11月12日 20:17。
只含模型调用费用。失败重试会产生额外调用,失败率高时费用相应增加。条数翻倍,费用大致翻倍;描述写得越长,输出费用越高。
05
示例代码
用信号量限制同时进行的请求数,429、5xx 和网络错误按指数退避重试,其他 4xx 直接记录,结果写成 JSONL 方便入库。
import asyncio
import json
import os
import random
from openai import APIConnectionError, APIStatusError, AsyncOpenAI
client = AsyncOpenAI(base_url="https://open.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"], max_retries=0)
LIMIT = asyncio.Semaphore(8) # requests in flight at the same time
PROMPT = (
"Write a product description for an online store in a friendly, concrete tone. "
"Use only the facts provided. Do not add awards, certifications or numbers that are not listed. "
"Return 3 short paragraphs."
)
async def write(product, attempts=4):
async with LIMIT:
for i in range(attempts):
try:
resp = await client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{"role": "system", "content": PROMPT},
{"role": "user", "content": json.dumps(product, ensure_ascii=False)},
],
max_tokens=600,
temperature=0.8,
)
return {"sku": product["sku"], "text": resp.choices[0].message.content}
except APIConnectionError:
pass # network problem or timeout: retry
except APIStatusError as e:
if e.status_code != 429 and e.status_code < 500:
# 4xx means the request itself is wrong (or no balance): fix it, do not retry
return {"sku": product["sku"], "error": e.status_code}
await asyncio.sleep(2 ** i + random.random()) # back off: ~1s, 2s, 4s, 8s
return {"sku": product["sku"], "error": "gave up after retries"}
async def main(products):
results = await asyncio.gather(*(write(p) for p in products))
with open("descriptions.jsonl", "w", encoding="utf-8") as f:
for r in results:
f.write(json.dumps(r, ensure_ascii=False) + "\n")
products = [
{"sku": "A1001", "name": "Ceramic mug", "material": "stoneware", "capacity_ml": 350, "dishwasher_safe": True},
]
asyncio.run(main(products))
# then send about 10% of the results to claude-sonnet-5-5 for a fact and tone check常见问题
每月 2 万条商品描述大概多少钱?
按每条输入约 800 tokens、输出约 400 tokens,再抽 10% 交给更强的模型复核估算,用最低价分组计算约 ¥152。输出越长费用越高,可以在提示词里限定字数。
有专门的批量接口吗?
没有单独的批量接口。批量任务就是并发调用普通的 Chat Completions 接口,按实际用量计费,并发数、排队和重试由你的程序控制。
并发开多少合适?
先从 4 到 8 个并发开始,看 429 出现的比例再慢慢调高。收到 429 时等一会儿再重试,不要立刻重发。不同模型和分组能承受的并发不同,可以参考文档里的限流说明。
怎么防止模型编造卖点?
只把商品已有的属性给模型,提示词里写明不得添加属性以外的功效、认证和数据;输出后再用程序检查其中的数字和关键词,确认都能在属性里找到。
生成的文案能直接上线吗?
建议先抽检。商品描述和广告文案有广告法等合规要求,模型并不了解你们的具体规定,上线前应由运营或法务按规则复核。