AI 工具

Jasper 营销文案的风险措辞预检脚本

再好的 Brand Voice 也救不了违法广告语。这篇在把文案送进 Jasper 之前,用启发式规则抓「保证赚钱 / 治愈 / 攻击竞品」等风险措辞。

BINBHO · 图文教程

再好的 Brand Voice 也救不了违法广告语。这篇在把文案送进 Jasper 之前,用启发式规则抓「保证赚钱 / 治愈 / 攻击竞品」等风险措辞。

先看清成品

  • safe 样例 OK;risky 样例报告 absolute/medical/competitor。
  • 2 项 pytest 通过。

合规提醒:Jasper API 需工作区管理员/开发者权限开通;密钥勿进前端或公开仓库。生成营销文案须遵守广告与行业法规,禁止虚假疗效、保证收益等表述。品牌声音与知识库应使用你有权使用的资料。价格与套餐以官网为准,本文不编造。

运行说明:无 Jasper 正式密钥。A/C 为本地校验;B 用本机 mock(X-API-Key)跑通创建 tone + run task。2026-10-23(Asia/Shanghai)pytest 全部通过。对接正式环境时把 --base 设为 https://api.jasper.ai 。

做完之后你会得到什么?

成果 说明
claims_check.py 风险扫描
样例 txt safe/risky
test_97c.py 2 项测试

需要准备哪些环境?

项目 说明
Python 3.10+

关键事实

事实 来源
本工具是启发式,不是法律意见或广告法合规认证 重要
受监管行业(医疗、金融等)应有额外人工与法务流程 实践
Jasper 输出仍须人工终审 实践

文件结构

97-jasper-C-src/
├── claims_check.py
├── sample_safe.txt
├── sample_risky.txt
└── test_97c.py

第 1 步:扫描脚本

#!/usr/bin/env python3
"""Flag risky marketing claims before sending copy into Jasper."""
from __future__ import annotations

import argparse
import json
import re
from pathlib import Path

ABSOLUTES = [
    r"100%\s*有效",
    r"绝对",
    r"永不",
    r"保证赚钱",
    r"稳赚",
    r"无副作用",
    r"治愈",
    r"#1\b",
    r"第一名",
    r"guaranteed",
    r"miracle",
]
MEDICAL = [r"治疗",r"处方",r"FDA\s*批准",r"clinically proven"]
COMPETITOR_SLUR = [r"垃圾竞品", r"山寨", r"抄袭他们"]


def check(text: str) -> list[dict]:
    findings = []
    for pat in ABSOLUTES:
        for m in re.finditer(pat, text, re.I):
            findings.append({"severity": "absolute_claim", "match": m.group(0), "span": m.span()})
    for pat in MEDICAL:
        for m in re.finditer(pat, text, re.I):
            findings.append({"severity": "medical_or_regulated", "match": m.group(0), "span": m.span()})
    for pat in COMPETITOR_SLUR:
        for m in re.finditer(pat, text, re.I):
            findings.append({"severity": "competitor_attack", "match": m.group(0), "span": m.span()})
    return findings


def main(argv=None) -> int:
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument("text_file")
    ap.add_argument("--json", action="store_true")
    args = ap.parse_args(argv)
    text = Path(args.text_file).read_text(encoding="utf-8")
    findings = check(text)
    if args.json:
        print(json.dumps({"ok": not findings, "findings": findings}, ensure_ascii=False, indent=2))
    else:
        if not findings:
            print("OK: 未发现常见风险措辞(启发式,非法律意见)")
        else:
            print(f"FINDINGS: {len(findings)}")
            for f in findings:
                print(f"- [{f['severity']}] {f['match']}")
    return 1 if findings else 0


if __name__ == "__main__":
    raise SystemExit(main())

第 2 步:测试

from pathlib import Path
import subprocess
import sys
from claims_check import check

HERE = Path(__file__).resolve().parent


def test_risky():
    t = (HERE / "sample_risky.txt").read_text()
    f = check(t)
    kinds = {x["severity"] for x in f}
    assert "absolute_claim" in kinds
    assert "medical_or_regulated" in kinds


def test_safe_cli():
    r = subprocess.run(
        [sys.executable, str(HERE / "claims_check.py"), str(HERE / "sample_safe.txt")],
        capture_output=True,
        text=True,
    )
    assert r.returncode == 0
    assert "OK" in r.stdout

第 3 步:运行

OK: 未发现常见风险措辞(启发式,非法律意见)
FINDINGS: 4
- [absolute_claim] 100%有效
- [absolute_claim] 保证赚钱
- [medical_or_regulated] 治疗
- [competitor_attack] 垃圾竞品
..                                                                       [100%]
2 passed in 0.03s

怎么检查结果?

  • 退出码 0 表示未命中规则,不代表合法。
  • 可把 FINDINGS 当作编辑 checklist。

调试示例

漏报很常见。 「临床级配方」可能避开「治疗」词表。把行业禁用词维护成自己的 YAML,再并入脚本。

常见问题

现象 原因 处理
误报 绝对化词在引用中 加白名单或改写
多语言 仅示意中英 按市场扩正则
要不要自动改写 本篇不做 先标红再人工

模板规则

  • 输出必须人工审。
  • 不提供绕过平台审核的方法。
  • 受监管宣称升级法务。

项目资源

用途 地址
Jasper 官网 https://www.jasper.ai/
Authentication(官方) https://developers.jasper.ai/docs/authentication
Using Agents(官方) https://developers.jasper.ai/docs/using-agents

先过声明检查,再谈生成效率。