我用 Claude + Gemini 双模型审核电商文案,3个月后数据说话
我用 Claude + Gemini 双模型审核电商文案,3个月后数据说话
你们团队有没有这种情况——
审核编辑每天改到崩溃,改完一批新的又进来了,结果月底平台扣分通知还是来了。被扣的那几条,偏偏是编辑"感觉没问题"放过去的。
这是我三个月前接手的一个电商客户的真实处境。他们卖的是美妆和保健品,SKU 多、上架频繁,平台对"极限用词"和"虚假功效宣传"的审查越来越严。两个全职编辑每天就干这一件事,违规漏检率还稳定在 7% 左右。
这篇文章记录的,就是我们怎么用双模型流水线把这个问题解掉的——包括踩的坑、调参的过程、以及三个月后的真实数据。不是成功学软文,是有点血腥的工程记录。
---
第一章:背景——这个需求为什么让我头疼
客户的基本情况:月均上架 SKU 超过 3000 条,覆盖美妆、保健品、食品三个品类。平台方面,主要在某宝和某东经营,两个平台的违规规则略有差异,但核心重叠:禁止极限用词("最""第一""国家级")、禁止绝对化功效表述("根治""100% 有效")、禁止无资质的医疗相关宣传。
两名全职编辑,每人每天处理约 200 条文案,总计 400 条,已经是人工极限了。但 3000 条 SKU 意味着每条商品的文案可能随时被运营修改后重新提交审核,实际日均审核量远不止这个数。
为什么不直接用关键词过滤?他们之前用过,效果很差。关键词过滤的问题是:
- 漏网多:违规表述往往是语义层面的,比如"使用后皱纹消失"没有任何违禁词,但表述了不允许的功效
- 误杀多:含有"最"字的正常句子("最新款式""最适合敏感肌")也会被误拦截,反而增加编辑工作量
这个问题值得认真说一下。
单模型方案我们也测试过,用 Claude 单独跑审核+生成。问题在于:当你要求同一个模型又做"挑错"又做"改写",它的注意力会分散,生成的替换文案往往太保守,把原本没问题的表述也改掉了,或者改完之后文案变得干瘪无味。
拆分的逻辑很简单:识别是一种能力,生成是另一种能力,让不同模型专注于自己擅长的事。
Claude 在文本理解、规则遵循、结构化输出方面表现出色,适合做"按规则分类"的审核任务。Gemini 在创意生成和语言流畅度上有自己的优势,适合做"保留语气的合规改写"。
8848 API 的实际作用接入层用的是 8848 的统一 API([api.884819.xyz](https://api.884819.xyz))。这个选择的原因很务实:Claude 和 Gemini 分别有自己的 API 端点、不同的鉴权方式、不同的计费系统。如果分别接入,团队要维护两套 Key、两套账单、两套限流配置。
用 8848 的统一接入层,一个 base_url、一个 API Key、一个后台看所有模型的用量,对一个 3-5 人的工程团队来说,这个管理成本差异是实实在在的。
---
第二章:流水线架构——怎么把两个模型串起来
整体链路如下:
graph TD
A[商品文案输入] --> B[Claude 违规审核]
B --> C{违规判断}
C -->|合规 / 置信度 < 阈值| D[直接通过队列]
C -->|违规 / 置信度 ≥ 阈值| E[Gemini 合规改写]
E --> F[人工最终确认队列]
D --> G[上架]
F --> H{人工确认}
H -->|通过| G
H -->|退回| A
核心设计原则:
1. Claude 只做分类,不做改写:输出结构化 JSON,包含违规类别、违规片段、置信度分数
2. 置信度阈值过滤:低于阈值的判定结果不触发 Gemini,直接进人工队列(避免误判成本)
3. Gemini 只做改写,不做判断:接收 Claude 的结构化结果,专注于生成合规替换文案
4. 人工兜底永远存在:Gemini 的输出不直接上架,进入轻量级人工确认队列(0.5 人复核,而不是 2 人全审)
核心代码示例
import httpx
import json
from typing import Optional
BASE_URL = "https://api.884819.xyz/v1"
API_KEY = "your_8848_api_key"
AUDIT_PROMPT = """
你是一名电商文案合规审核专家。请严格按照以下违规类目标准审核商品文案:
【违规类目】
1. 极限用词:最、第一、顶级、国家级、全网最低等
2. 绝对化功效:根治、100%有效、彻底治愈、永久等
3. 虚假功效宣传:未经证实的医疗/保健功效表述
4. 敏感词:涉及医疗资质要求的宣传内容
【输出格式】(严格JSON)
{
"is_violation": true/false,
"confidence": 0.0-1.0,
"violations": [
{"type": "违规类目", "fragment": "违规片段", "reason": "违规原因"}
]
}
【待审核文案】
{content}
"""
REWRITE_PROMPT = """
你是一名专业的电商文案创作者,擅长在保持品牌调性的同时进行合规改写。
【品牌语气要求】
- 品牌定位:{brand_tone}
- 目标用户:{target_audience}
- 禁止使用:过度营销腔、夸大表述、生硬的合规替换
【改写任务】
原始文案:{original_content}
违规片段:{violation_fragments}
请在保持原文意图和品牌语气的前提下,将违规内容替换为合规表述。
只输出改写后的完整文案,不要添加任何解释。
"""
def audit_content(content: str) -> dict:
"""调用 Claude 进行违规审核"""
response = httpx.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "claude-sonnet-4-6",
"messages": [
{"role": "user", "content": AUDIT_PROMPT.format(content=content)}
],
"temperature": 0.1 # 审核任务要低温度,保持一致性
},
timeout=30
)
result = response.json()
return json.loads(result["choices"][0]["message"]["content"])
def rewrite_content(
original: str,
violations: list,
brand_tone: str,
target_audience: str
) -> str:
"""调用 Gemini 进行合规改写"""
fragments = ", ".join([v["fragment"] for v in violations])
response = httpx.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "gemini-3.1-pro",
"messages": [
{"role": "user", "content": REWRITE_PROMPT.format(
brand_tone=brand_tone,
target_audience=target_audience,
original_content=original,
violation_fragments=fragments
)}
],
"temperature": 0.7 # 生成任务可以适当提高创意度
},
timeout=30
)
result = response.json()
return result["choices"][0]["message"]["content"]
def process_content(
content: str,
confidence_threshold: float = 0.75,
brand_config: Optional[dict] = None
) -> dict:
"""主流水线函数"""
audit_result = audit_content(content)
if not audit_result["is_violation"] or \
audit_result["confidence"] < confidence_threshold:
return {"status": "pass", "content": content, "audit": audit_result}
rewritten = rewrite_content(
original=content,
violations=audit_result["violations"],
brand_tone=brand_config.get("tone", "专业、温和、可信赖"),
target_audience=brand_config.get("audience", "25-40岁女性消费者")
)
return {
"status": "rewritten",
"original": content,
"rewritten": rewritten,
"audit": audit_result,
"needs_human_review": True
}
代码里的 BASE_URL 统一指向 8848 的接入端点。如果你也想同时调用 Claude 和 Gemini 而不想分别申请两套 API Key,可以直接去 [api.884819.xyz](https://api.884819.xyz) 看看,注册后两个模型用同一个 Key 调用,计费也在一个后台看,省了不少管理成本。
---
第三章:3个月踩过的真实坑
这章是全文重点。讲三个真实翻车现场,按时间线排列。
坑1:Claude 过度审核,把正常文案当违规
第一周,误判率 23%。这个数字出来的时候我们都懵了。以为 Claude 会是一个精准的审核工具,结果它比编辑还保守。
真实案例(脱敏):- 原始文案:
"效果显著,用后第三天明显感受到皮肤状态改善" - Claude 判定:违规,类目"绝对化功效",违规片段"效果显著"
- 实际情况:这是完全正常的表述,平台并不禁止
- 原始文案:
"最新研发的温和配方,适合敏感肌使用" - Claude 判定:违规,类目"极限用词",违规片段"最新"
- 实际情况:"最新"在这里修饰的是研发时间,不是竞争排名,平台不做限制
1. Few-shot 示例注入:在 Prompt 里加入 20 个"正常文案"的示例,明确告诉 Claude 什么情况下不算违规
2. 置信度阈值调参:把触发 Gemini 改写的阈值从 0.5 提高到 0.75,低置信度的判定不自动改写,进人工队列
3. 违规类目细化:把"极限用词"拆分成"竞争性极限用词"和"描述性最高级",前者违规,后者不一定
调整后两周,误判率降到了 6% 以下。
坑2:Gemini 生成文案"跑味"
第三周,客户运营总监打电话来说:改出来的文案"不像我们家的风格"。这个问题比误判更难解决,因为它不是对错问题,是"感觉"问题。
真实案例(脱敏):- 原始文案:
"轻盈质地,像云朵一样贴合肌肤,让你整天都能感受到那份温柔" - 违规片段:(假设某个功效表述被识别为违规)
- Gemini 改写后:
"质地轻盈,贴合肌肤,全天保湿效果持久" - 问题:原文有情感温度,改写后变成了干燥的产品说明书
在 Gemini 的 System Prompt 里注入品牌语料库:
【品牌写作风格参考】(以下是该品牌的高分文案示例,请学习其语气和表达方式)
示例1:xxx
示例2:xxx
示例3:xxx
【风格关键词】:温柔、细腻、有画面感、不夸张、像闺蜜推荐
【禁止风格】:硬广腔、参数堆砌、过度理性
加入 5-8 个品牌高分文案作为语气锚点后,生成质量明显提升,客户运营总监的反馈是"这次改出来的感觉对了"。
坑3:并发成本失控
第六周,token 消耗超预算 40%。原因很简单:促销节点前,运营批量提交了大量文案,系统没有任何削峰机制,全部同时打到 Claude 和 Gemini,成本直线拉升。
解决方案,分三层:1. 队列削峰:用 Redis 队列管理任务,高峰期限制并发数,非紧急任务延迟处理
2. 模型降级策略:对非核心品类(比如配件类、低价日用品)的文案,改用更轻量的模型处理初筛,只有美妆、保健品等高风险品类才走完整双模型链路
3. 批量合并:同一个 SKU 的多个文案字段(标题、详情、卖点)合并成一次请求处理,而不是每个字段单独调用
三个措施叠加,成本回到了预算范围内,并且处理量反而提升了,因为队列让任务分布更均匀。
---
第四章:3个月后,数据说话
| 指标 | 改造前 | 改造后 | 变化 | | 审核人力投入 | 2人全职 | 0.5人复核 | 减少 75% | | 日均处理量 | 400条 | 1200条 | 提升 3倍 | | 违规漏检率 | 7% | 1.8% | 下降 74% | | 平均单条处理时长 | 约 4分钟/人工 | 约 40秒/全流程 | 提速 6倍 | | 月均综合成本(人力+API) | 基准值 | 约为基准值的 55% | 节省约 45% | | 编辑满意度(内部问卷) | 低(高度重复劳动) | 高(只处理边界案例) | 质变 |⚠️ 局限性,必须说清楚:
>
这套系统高度依赖平台违规规则的稳定性。某宝和某东的规则每隔一段时间会更新,一旦更新,Claude 的审核基准就需要重新校准。我们目前的做法是每月做一次规则比对,发现差异后更新 Few-shot 示例。这个维护成本是真实存在的,不能忽略。
---
第五章:给想复刻这套方案的人
三条可以直接落地的方法论
① 先跑单模型基线,再上双模型不要一上来就搭双模型流水线。先用 Claude 单独跑两周审核,记录误判率、漏判率、处理速度,建立基线数据。没有基线,你不知道双模型方案到底改善了多少,也没法说服客户。
② 审核 Prompt 和生成 Prompt 要完全解耦管理这两个 Prompt 的迭代节奏完全不同:审核 Prompt 跟着平台规则走,需要频繁小幅更新;生成 Prompt 跟着品牌调性走,相对稳定但需要深度定制。把它们放在同一个配置文件里管理,是埋雷。建议分开版本控制,分开测试。
③ 人工兜底队列是必须的,不是可选的不要做全自动。原因不是技术不够好,而是责任边界问题——平台扣分的最终责任在商家,AI 判断错误的成本需要人来兜底。0.5 人复核的成本是可以接受的,而且复核本身也是在持续校准模型的判断边界。
可迁移的场景
这套架构不只适用于电商文案审核。本质上,只要你的场景符合"规则驱动的内容审核 + 需要保持风格的内容改写"这个模式,都可以迁移:
- 内容社区:帖子违规检测 + 引导用户合规修改
- 招聘平台:JD 中性别歧视/年龄歧视检测 + 合规改写建议
- 广告审核:投放素材的法规合规检测
如果你想先低成本跑通 MVP,建议从单模型开始测。8848 API 支持按量付费,前期测试阶段花不了多少钱,地址还是 [api.884819.xyz](https://api.884819.xyz),我们团队当时就是先用它跑了两周小批量验证再说服客户上正式方案的。新用户注册即送体验 token,Deepseek、千问这些国产模型完全免费,没有月租,测试成本几乎可以忽略。
成本估算参考
如果你想快速估算自己的场景月均 API 费用,可以用这个简单公式:
月均 API 费用 ≈ 月均审核条数 × 平均每条 token 数 × 模型单价
参考值:
- 每条文案(含 Prompt)平均约 800-1200 tokens(审核阶段)
- 改写阶段约 500-800 tokens(仅对违规文案触发,比例约 20-30%)
- 实际成本远低于你的直觉预期,建议直接跑一批小样本测试
---
写在最后
这套方案跑了三个月,最大的收获不是那几个漂亮的数据,而是把编辑从机械重复的劳动里解放出来。现在那两位编辑一个转去做选品分析,一个专门负责新品类的文案规范建设——这才是人应该做的事。
AI 审核做得好不好,不是看它能不能替代人,而是看它能不能让人做更有价值的事。
---
下一篇预告:这套流水线跑稳之后,客户问了我一个新问题——
"能不能让 AI 不只是审核文案,而是直接根据商品图片生成第一版文案?"这就涉及到视觉模型的接入了。我们试了 GPT-5.1 的图片理解能力,也踩了一些新坑。
下篇写:多模态模型做商品图转文案的真实体验,以及它在哪些品类上完全不好用。---
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#AI工程实践 #Claude #Gemini #电商AI #多模型协作 #文案审核 #8848AI #Prompt技巧