docs(strategy): 补充口感分线与促销口径说明

在策略骨架 §8.3 与规划文档中明确:酥脆/松软按细类分线;促销须写原则,满减满折无数据时待运营对齐,禁止编造门槛。

Made-with: Cursor
This commit is contained in:
hub-gif 2026-04-20 16:36:52 +08:00
parent c096f69082
commit 6c6deb0ba8
2 changed files with 468 additions and 169 deletions

View File

@ -162,84 +162,263 @@ def build_strategy_draft_markdown(
strategy_decisions: dict[str, Any] | None = None,
report_config: dict[str, Any] | None = None,
) -> str:
"""生成可下载的 Markdown策略骨架为主,附录为数据速览。"""
"""生成可下载的 Markdown与「六主轴 + 品牌四线」示例稿同构的规则骨架,附录为数据速览。"""
use_ch8_probe = report_uses_chapter8_text_mining_probe(report_config)
d = strategy_decisions or {}
pos = _esc(d.get("positioning_choice") or "").strip()
kw = _esc(brief.get("keyword")) or _esc(keyword) or ""
batch = _esc(brief.get("batch_label")) or ""
lines: list[str] = [
f"# 市场策略制定草稿 · 「{kw}",
"",
"> **骨架说明**:本页为**规则骨架**(占位与少量摘录)。勾选大模型生成时,在骨架与数据上写**短、可执行**成稿"
"**决策在策略生成表单完成**;未填项由模型结合本任务摘要与报告节选补全,**成稿不再写「请再选 / 请决策」式套话**。",
"> **阅读顺序**:目标与边界 → 战场与样本 → 竞争与本品态势 → 价格带与定位 → 用户与评论侧 → 营销与总体方向 → 机会与 4P 支柱 → 风险 → 业务约束 → 下一步行动",
"> **骨架说明**:本页为**规则骨架**(占位与少量摘录)。大模型成稿时须写成**短、可执行**的完整策略稿,结构与 [`docs/demo` 市场策略稿示例](docs/demo) 一致:**摘要 → 一~十 → 附录**"
"**不与《竞品分析报告》重复**:统计表、词频/共现、细类样本量、文本挖掘方法等以报告为准;策略稿只写**结论要点 + 怎么做**,可写「详见报告 §×」。"
"**决策在策略生成表单完成**;未填项由模型结合本任务摘要与可选节选补全,**成稿不再写「请再选 / 请决策」式套话**",
"",
]
if generated_at_iso:
lines.append(f"> **生成时间**{_esc(generated_at_iso)} · **任务 ID**{job_id}")
lines.append("")
scope = brief.get("scope") or {}
merged_n = scope.get("merged_sku_count")
comm_n = scope.get("comment_flat_rows")
lines.extend(
[
"---",
"",
"## 一、目标与边界",
"## 摘要",
"",
f"- **范围与样本**:监测词「{kw}」;批次 **{batch}**"
+ (
f"深入 SKU ≈ {_num(merged_n)};评价条数 ≈ {_num(comm_n)}"
if merged_n is not None or comm_n is not None
else "样本规模见附录。"
),
"- **用户侧***(一两句结论即可:讨论焦点与负向主题;**勿**展开与报告重复的细类统计、词频。)*",
"- **阶段重点***(须含 12 条**可执行动作**,回扣 §2 优先痛点;勿仅写「加强运营」。)*",
"",
"## 一、顾客是谁",
"",
"### 1.1 人群与决策路径",
"",
f"- **检索与货架语境**{kw};批次 {batch}",
]
)
bf = _esc(d.get("battlefield_one_line") or "").strip()
if bf:
lines.append(f"- **一句话战场**{bf}")
else:
lines.append("- **一句话战场***(在哪个需求场景、与谁抢同一批用户?)*")
lines.extend(
[
"- **典型路径***(成稿:搜索 → 列表比价 → 详情与配料 → 评价 → 下单/复购。)*",
"",
"*成稿须与 §2 痛点一致:写清「谁在什么任务下检索、决策」,为后文「针对痛点怎么做」埋伏笔。*",
"",
"### 1.2 细类讨论焦点(评论文本分析)",
"",
]
)
if use_ch8_probe:
lines.extend(
[
"*当前任务以**第八章评论侧文本挖掘**为主呈现时,此处**不**逐条罗列关注词子串命中次数。*",
"",
"- **饼干 / 糕点 / 面点等***(骨架占位;成稿用**一句归纳**/用户关心点,**勿**复述 §8 词频与条数。)*",
"",
]
)
else:
ckw = brief.get("comment_focus_keywords") or []
usc = brief.get("usage_scenarios") or []
lines.append("*下列为关注词/场景**统计摘录**(仅底稿审计用);**成稿删除逐条枚举**,只保留对策略有用的一两句结论,避免与同任务竞品分析报告重复。*")
lines.append("")
if ckw:
for item in ckw[:8]:
if isinstance(item, dict):
w = _esc(item.get("word"))
c = _num(item.get("count"))
lines.append(
f"- 「{w}」:子串统计命中约 **{c}** 次(口径同报告关注词)。"
)
if usc:
for item in usc[:6]:
if isinstance(item, dict):
sc = _esc(item.get("scenario"))
cn = _num(item.get("count"))
sh = _pct(item.get("share_of_text_units"))
lines.append(
f"- 场景「{sc}」:约 **{cn}** 条,约占 **{sh}** 文本单元(预设场景分组)。"
)
if not ckw and not usc:
lines.append("*摘要中无关注词/场景组,请结合评论侧分析补全本节。*")
lines.append("")
mix = brief.get("category_mix_top") or []
if mix:
lines.append("### 类目结构(摘录)")
lines.append("")
for item in mix[:6]:
if isinstance(item, dict):
lines.append(f"- {_esc(item.get('label'))}{_num(item.get('count'))}")
lines.append("")
lines.extend(
[
"### 1.3 本品聚焦(占位)",
"",
"*成稿写清本期**主攻人群/场景**与 §2.1 痛点的对应关系。*",
"",
_goal_bullet("本品角色", str(d.get("product_role") or ""), "新品 / 追赶 / 防守 / 拓品类 …"),
_goal_bullet("时间范围", str(d.get("time_horizon") or ""), "如:本季度 / 未来 12 周"),
_goal_bullet(
"成功标准(可量化)",
str(d.get("success_criteria") or ""),
"如:搜索位次、转化率、声量、复购 …",
),
_goal_bullet("非目标", str(d.get("non_goals") or ""), "明确不做什么(可选)"),
_goal_bullet(
"目标客群",
str(d.get("audience_segment") or ""),
"一句话:为谁、什么场景(可选)",
"为谁、什么场景(可选)",
),
_goal_bullet(
"主要对标",
str(d.get("competitor_reference") or ""),
"品牌或价位带参照(可选)",
),
_goal_bullet(
"资源与预算备注",
str(d.get("resource_notes") or ""),
"人力、投放、产能等量级(可选)",
),
"",
]
)
scope = brief.get("scope") or {}
merged_n = scope.get("merged_sku_count")
comm_n = scope.get("comment_flat_rows")
lines.extend(
[
"## 二、战场与样本",
"## 二、产品价值与用户痛点",
"",
"### 2.1 痛点与证据",
"",
"| 痛点 | 证据信号 | 优先级 |",
"|------|----------|--------|",
"| *(成稿依数据与评论归纳)* | | |",
"",
"### 2.2 本品价值(占位)",
"",
"- **功能***(占位)*",
"- **情感/社会价值***(占位;对外须合规)*",
"",
"### 2.3 痛点—价值—证据",
"",
"| 痛点 | 本品价值(占位) | 素材 |",
"|------|------------------|------|",
"| | | |",
"",
"### 2.4 负向评价主题归因(若有)",
"",
"*成稿只写**归因结论**(如分量、口感适配);**勿**复述报告中的案例枚举与统计细节。*",
"",
"### 2.5 策略动作总表(痛点 → 怎么做)",
"",
"*成稿须**逐行填写**:针对用户哪条痛点,采取什么策略动作,在具体触点怎么做,如何验证。*",
"",
"| 用户痛点 | 策略动作(做什么) | 具体怎么做(触点/话术/规格/渠道) | 如何验证 |",
"|----------|-------------------|-----------------------------------|----------|",
"| *(与 §2.1 对应)* | *(动词句)* | *(可执行)* | *(指标或抽样)* |",
"| | | | |",
"",
f"- **监测关键词 / 货架语境**{kw}",
f"- **批次**{_esc(brief.get('batch_label')) or ''}",
]
)
if merged_n is not None or comm_n is not None:
raw_hints = brief.get("strategy_hints") or []
hints = (
filter_strategy_hints_for_ch8_probe(raw_hints)
if use_ch8_probe
else (list(raw_hints) if isinstance(raw_hints, list) else [])
)
if hints:
lines.append("**摘要自动线索(`strategy_hints`**")
lines.append("")
for h in hints:
lines.append(f"- {_esc(h)}")
lines.append("")
pst = brief.get("price_stats") or {}
lines.extend(
[
"## 三、为什么要买「这款产品」",
"",
"### 3.1 品类与时机",
"",
]
)
raw = brief.get("pc_search_raw") or {}
if raw.get("result_count_consensus") is not None:
lines.append(
f"- **深入样本**:深入 SKU ≈ {_num(merged_n)};评价扁平条数 ≈ {_num(comm_n)}"
f"- **列表申报规模resultCount**{_num(raw.get('result_count_consensus'))}(非销售额)"
)
bf = _esc(d.get("battlefield_one_line") or "").strip()
if bf:
lines.append(f"- **一句话战场**{bf}")
elif merged_n is not None:
lines.append(f"- **深入样本 SKU 数**{_num(merged_n)}")
else:
lines.append(
"- **一句话战场***(在哪个需求场景、与谁抢同一批用户?)*"
)
lines.append("- **品类与时机***(成稿结合摘要与监测范围。)*")
lines.append("")
lines.append(
"*成稿在§3.1 末尾用 12 句**承接** §2 中优先解决的痛点(再写购买理由)。*"
)
lines.append("")
lines.extend(
[
"### 3.2 转化障碍与应对",
"",
]
)
if pst.get("n"):
src = _esc(brief.get("price_stats_source")) or ""
lines.extend(
[
f"- **价格摘录**:来源 {src}n = {_num(pst.get('n'))}"
f"区间 {_num(pst.get('min'))}{_num(pst.get('max'))};中位数 {_num(pst.get('median'))}",
"- **障碍与应对*****每条障碍**对应**至少一条应对动作**:谁、在哪个页面/环节、改什么;含价带锚点、规格、信任等。)*",
"",
]
)
else:
lines.append("*摘要中无价带统计,请结合本批次价格数据补全。*")
lines.append("")
lines.append(
"*若无价带摘录,成稿仍须写障碍与应对,并与 §2 痛点挂钩。*"
)
lines.append("")
lines.extend(
[
"## 四、为什么要选「这个品牌」",
"",
"### 4.1 品牌承诺与调性(占位)",
"",
"*成稿:承诺与调性须能落到**触点**(商详/包装/客服首句等)上的**具体句子**,勿仅形容词。*",
"",
"- **一句话***(占位)*",
"- **调性**:透明、可验证、合规控糖叙事(成稿可细化)。",
"",
"### 4.2 信任与证据",
"",
"- *(成稿:评价、配料、可核验表述边界。)*",
"",
"**主定位(与表单一致)**",
"",
f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带。",
f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带。",
f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限。",
f"- {_pos_mark(pos, 'different')} **另起带**:规格/组合/服务差异化。",
"",
]
)
conc = brief.get("concentration") or {}
shops = conc.get("shops_from_list") or {}
dbrand = conc.get("detail_brand_among_merged") or {}
lines.extend(["## 三、竞争结构与本品态势(摘录)", ""])
lines.extend(
[
"## 五、与其它品牌有何不同",
"",
"### 5.1 对比对象(摘录)",
"",
]
)
n_shop = _cr_narrative(
"列表侧店铺集中度",
concentration_first_share(shops),
@ -263,11 +442,23 @@ def build_strategy_draft_markdown(
lines.extend(
[
"",
"- **自测**:头部已占稳心智时,侧翼还是正面替代?分散时是否用细分场景或内容教育切入?",
"- **环境自测**:头部强势时是侧翼还是正面替代?格局分散时是否用细分场景切入?",
"",
"### 5.2 差异化方向(占位)",
"",
"*成稿:相对竞品**多做什么/少做什么**,写**可执行的一步**(非空泛「更好」)。*",
"",
"| 差异点 | 说明 | 风险 |",
"|--------|------|------|",
"| | *待填* | |",
"",
]
)
lines.append("### 本品竞争态势(与表单「竞争态势自判」一致)")
lines.append("### 5.3 竞争应对")
lines.append("")
lines.append(
"*成稿:在表单倾向基础上,写清**跟价/不跟价时具体话术或机制**(一句即可)。*"
)
lines.append("")
stance = _esc(d.get("competitive_stance") or "").strip()
stance_line = {
@ -278,164 +469,114 @@ def build_strategy_draft_markdown(
}.get(stance)
if stance_line:
lines.append(stance_line)
lines.append("")
mix = brief.get("category_mix_top") or []
if mix:
lines.append("### 类目结构Top")
lines.append("")
for item in mix[:6]:
if isinstance(item, dict):
lines.append(f"- {_esc(item.get('label'))}{_num(item.get('count'))}")
lines.append("")
pst = brief.get("price_stats") or {}
lines.extend(["## 四、价格带与定位(业务已选)", ""])
if pst.get("n"):
src = _esc(brief.get("price_stats_source")) or ""
lines.extend(
[
f"- **价格来源**{src},有效价样本 n = {_num(pst.get('n'))}",
f"- **展示价区间**{_num(pst.get('min'))} {_num(pst.get('max'))}**中位数** {_num(pst.get('median'))}",
"",
"**主定位(与表单一致)**",
"",
f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带,强调品质/成分/背书。",
f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带,强调性价比与场景匹配。",
f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限,强调入门与拉新(注意毛利与调性)。",
f"- {_pos_mark(pos, 'different')} **另起带**:避开主价格带,用规格/组合/服务差异化。",
"",
]
)
else:
lines.append("*摘要中无价带统计,请结合本批次价格数据补全。*")
lines.append("")
lines.extend(
[
"**主定位(与表单一致)**",
"",
f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带,强调品质/成分/背书。",
f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带,强调性价比与场景匹配。",
f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限,强调入门与拉新(注意毛利与调性)。",
f"- {_pos_mark(pos, 'different')} **另起带**:避开主价格带,用规格/组合/服务差异化。",
"",
]
)
ckw = brief.get("comment_focus_keywords") or []
usc = brief.get("usage_scenarios") or []
lines.extend(["## 五、用户与评论侧", ""])
if use_ch8_probe:
lines.extend(
[
"*当前任务报告以**第八章评论侧文本挖掘**为主呈现时,此处**不**逐条罗列子串命中次数(与报告 §8 口径一致)。*",
"",
"- **需求焦点***(骨架占位;成稿写 12 句可执行结论)*",
"- **场景侧重***(骨架占位)*",
"- **传播切入点***(骨架占位)*",
"",
]
)
else:
lines.append("*下列为关注词/场景**统计摘录**(口径同本批次摘要);成稿时写成具体动作,勿重复统计句。*")
lines.append("")
if ckw:
for item in ckw[:8]:
if isinstance(item, dict):
w = _esc(item.get("word"))
c = _num(item.get("count"))
lines.append(
f"- 「{w}」:子串统计命中约 **{c}** 次(口径同报告关注词)。"
)
if usc:
for item in usc[:6]:
if isinstance(item, dict):
sc = _esc(item.get("scenario"))
cn = _num(item.get("count"))
sh = _pct(item.get("share_of_text_units"))
lines.append(
f"- 场景「{sc}」:约 **{cn}** 条,约占 **{sh}** 文本单元(预设场景分组)。"
)
if not ckw and not usc:
lines.append("*摘要中无关注词/场景组,请结合评论侧分析补全本节。*")
lines.append("")
lines.extend(
[
"## 六、营销策略与总体方向",
"## 六、阶段目标与路径",
"",
"### 6.1 本阶段定义",
"",
_goal_bullet("时间范围", str(d.get("time_horizon") or ""), "如:本季度 / 未来 12 周"),
_goal_bullet(
"成功标准(可量化)",
str(d.get("success_criteria") or ""),
"搜索位次、转化、复购等",
),
_goal_bullet("非目标", str(d.get("non_goals") or ""), "明确不做什么(可选)"),
"",
"### 6.2 路径",
"",
"*成稿:路径须与 **§2.5** 动作可对齐;营销/总体策略为**动词句**,回扣痛点。*",
"",
_goal_bullet(
"营销策略",
str(d.get("marketing_strategy") or ""),
"传播、活动、投放、内容主线等(可选)",
"传播、活动、投放、内容主线(可选)",
),
_goal_bullet(
"总体策略",
str(d.get("general_strategy") or ""),
"增长/品类/经营层面的总原则,可与下方 4P 支柱呼应(可选)",
"增长/品类/经营总原则(可选)",
),
_goal_bullet(
"资源与预算备注",
str(d.get("resource_notes") or ""),
"人力、投放、产能等(可选)",
),
"",
]
)
raw_hints = brief.get("strategy_hints") or []
hints = (
filter_strategy_hints_for_ch8_probe(raw_hints)
if use_ch8_probe
else (list(raw_hints) if isinstance(raw_hints, list) else [])
)
lines.extend(
[
"## 七、机会与策略支柱4P 落地)",
"",
(
"### 摘要提示(`strategy_hints`,已按探针口径过滤)"
if use_ch8_probe
else "### 摘要提示(`strategy_hints`"
),
"",
]
)
if hints:
for h in hints:
lines.append(f"- {_esc(h)}")
else:
lines.append("*(当前无自动线索)*")
pp = str(d.get("pillar_product") or "")
pr = str(d.get("pillar_price") or "")
pch = str(d.get("pillar_channel") or "")
pcm = str(d.get("pillar_comm") or "")
lines.extend(
[
"## 七、品牌四线:建设 · 打造 · 运营 · 体验",
"",
"### 4P 策略支柱(表单已填优先)",
"*与表单「4P 策略支柱」对应:产品 / 定价 / 渠道 / 传播。)*",
"*成稿:**每条线**至少一句——服务哪类痛点、本阶段**具体做哪一步**。*",
"",
"| 支柱 | 本品动作 | 与头部差异 | 证据 / 出处 |",
"|------|----------|------------|-------------|",
f"| 产品 | {_pillar_cell(pp)} | *待填* | *§* |",
f"| 价格 | {_pillar_cell(pr)} | *待填* | *§* |",
f"| 渠道/触点 | {_pillar_cell(pch)} | *待填* | *§* |",
f"| 传播与内容 | {_pillar_cell(pcm)} | *待填* | *§* |",
"### 7.1 品牌建设",
"",
f"- {_pillar_cell(pp)}",
"",
"### 7.2 品牌打造",
"",
f"- {_pillar_cell(pr)}",
"",
"### 7.3 品牌运营",
"",
f"- {_pillar_cell(pch)}",
"",
"### 7.4 品牌体验",
"",
f"- {_pillar_cell(pcm)}",
"",
]
)
if use_ch8_probe:
pst_sig = brief.get("price_promotion_signals") or {}
has_promo = isinstance(pst_sig, dict) and bool(pst_sig)
lines.extend(
[
"### 促销与活动(须与报告对齐)",
"",
"*评论侧需求与场景以报告 **§8 文本挖掘** 为准,**不以**关注词/场景子串统计为论据。*",
(
"*促销、满减、券后价差等:须与报告 **第六章** 及摘要 `price_promotion_signals`、**第九章**节选一致;成稿须承接报告已写明的活动与价差线索。*"
if has_promo
else "*促销与价差:若报告 **第六章/第九章** 或摘要 `price_promotion_signals` 有归纳,成稿须承接;无则勿编造具体满减门槛。*"
),
"*促销与活动线索:须与摘要 `price_promotion_signals` 及第六章/第九章已有归纳一致;无则勿编造具体满减门槛。*"
if has_promo
else "*促销与价差:若摘要或价格信号有归纳则承接;无则勿编造。*",
"",
]
)
lines.extend(
[
"## 八、战术支柱",
"",
"*成稿:四支柱分别回扣 **痛点→动作→落地**(可与 §2.5 呼应,避免纯重复)。*",
"",
"### 8.1 产品策略",
"",
f"- *(表单产品支柱:{_pillar_cell(pp)}*",
"",
"### 8.2 定价策略",
"",
f"- *(表单价格支柱:{_pillar_cell(pr)}*",
"",
"### 8.3 促销与活动策略",
"",
"*须写促销**原则**(券/到手价/跟价节奏);**满减、满折、跨店**等:能引用的写清来源;监测未捕获具体门槛时写「待与运营/后台对齐」,**勿**整节留空,**勿**编造门槛数字。*",
"*与 `price_promotion_signals`、报告第六章一致;勿虚构活动。*",
"",
"### 8.4 渠道与传播",
"",
f"- *(渠道/传播:{_pillar_cell(pch)} / {_pillar_cell(pcm)}*",
"",
]
)
rk = bool(d.get("ack_risk_keywords"))
rp = bool(d.get("ack_risk_price"))
rc = bool(d.get("ack_risk_concentration"))
@ -446,37 +587,39 @@ def build_strategy_draft_markdown(
)
lines.extend(
[
"## 八、风险核对项",
"## 九、风险、假设与待验证",
"",
_risk_line(rk, rk_kw),
_risk_line(rp, "价格带是否含大促/异常挂价?(需核对清洗规则)"),
_risk_line(rc, "列表集中度与深入样本品牌是否不一致?(需解释渠道差异)"),
"",
"*成稿:每条风险尽量带**应对动作或验证计划**(抽样、核对规则),勿只列标题。*",
"",
"*业务备注见下节。*",
"",
"## 十、下一步与节奏",
"",
"*成稿:下列为**可执行任务**(可补负责人/时间);与 §2.5 / §六 优先级一致。*",
"",
"- [ ] 锁定主推款与对标;过法务与合规。",
"- [ ] 统一对外数据口径与话术。",
"- [ ] 下轮监测更新后迭代策略。",
"",
]
)
notes = _esc(business_notes)
lines.extend(
[
"## 九、业务约束与备注",
"### 业务约束与备注",
"",
(notes if notes else "*(未填写业务备注。)*"),
"",
]
)
lines.extend(
[
"## 十、下一步(可执行)",
"",
"- [ ] 对齐 **§一** 目标与 **§九** 约束,锁定 12 条主命题。",
"- [ ] 为 **§七** 支柱各补 **1 条数据证据** + **12 周内可交付动作**(负责人 + 时间)。",
"",
"---",
"",
"## 附录 · 本任务关键数据速",
"## 附录:本任务关键数据一览",
"",
f"- **关键词**{kw} · **摘要版本**v{_num(brief.get('schema_version'))}",
f"- **关键词**{kw} · **批次**{batch} · **摘要版本**v{_num(brief.get('schema_version'))}",
]
)
meta = brief.get("meta")

View File

@ -0,0 +1,156 @@
# 策略生成 · 框架确定
**版本**2026-04-21修订强化「痛点 → 怎么做」)
**目的**:在继续迭代「填表 → 规则底稿 / LLM 成稿 → 导出」之前,把**结构、输入输出、与报告的关系**定死;并明确——**策略成稿不是市场说明书,而是针对用户痛点写清「做什么、怎么做」**。
**关联**
| 说明 | 路径 |
|------|------|
| 原则与 S1/S2 路线 | `docs/planning/strategy-marketing-content-alignment.md` |
| 规则底稿(骨架) | `backend/pipeline/reporting/strategy_draft.py``build_strategy_draft_markdown` |
| LLM 成稿 | `backend/pipeline/llm/generate_strategy.py``generate_strategy_draft_markdown_llm` |
| 人工可读示例(低 GI 批次) | `docs/demo/市场策略稿-示例-20260413_104252_低GI.md` |
| API | `JobStrategyDraftView``POST` 策略稿,`generator=rules \| llm` |
---
## 1. 我们说的「策略生成」指什么
在本仓库里,**策略生成**特指:**独立市场策略稿**Markdown由任务数据 + 业务表单驱动,**不是**竞品报告全文,也**不是**报告里第九章那一小段嵌入块。
| 产物 | 形态 | 主要用途 |
|------|------|----------|
| **独立策略稿** | 摘要 → 一至十 → 附录 | 业务讨论、对外删减版、与表单决策对齐 |
| **报告 · 第九章** | 仅 `####` 小节,嵌在「九、策略与机会」下 | 与第五~八章同源、假设性归纳 |
| **营销内容**(规划) | 另管线,共用 brief | 表达层,见 alignment 文档 S2 |
框架确定**只锁定第一行**:独立策略稿。
---
## 0. 与《竞品分析报告》的分工(避免重复)
| 放在分析报告 | 放在策略稿 |
|--------------|------------|
| 样本量、列表/深入口径、词频、共现、LDA、细类条数、图表解读、方法说明 | **不写或一句带过**;可写「详见同任务竞品分析报告 §× / 附录」 |
| — | **要写**:痛点归纳(结论短语)、**怎么做**§2.5 及后续动作)、资源与节奏、风险应对 |
策略稿**不是第二份统计报告**;统计分析已在报告中完成,策略稿只消费其**结论**并转为**行动**。
### 常见质疑(口径)
**Q凭什么写「松软」评论里还有很多人要「酥脆」**
**A** 二者常对应**不同细类**(糕点/面包 vs 饼干)。策略须**按主推款/细类**写口感与工艺,分线表述;禁止用单一词覆盖全池。若多线并行,饼干线与糕点线应分别有策略句。
**Q满减、满额打折是不是不管了**
**A** **不是不管。** 能来自 `price_promotion_signals` / 报告第六章的须写进 §八.3**禁止编造**未监测到的门槛。未捕获具体规则时,须写「待运营按后台活动补齐」类表述,并保留促销**原则**(透明、跟价节奏、券类型方向),避免整节空白。
---
## 1.1 核心:策略部分要写「怎么做」,不能只写「是什么」
| 不满意的表现 | 应有的表现 |
|--------------|------------|
| 大量篇幅描述市场、品类、数据,读完不知道「我们要做什么」 | 每条策略**能回答**:针对**哪类用户、哪条痛点**,我们**采取什么动作****在具体触点怎么做**(商详第几屏、主图文案、规格怎么标、客服话术等) |
| 痛点与后面章节脱节 | **第二节**列清痛点后,**第六节起**(目标与路径、品牌四线、战术支柱)必须能**回扣**到痛点,避免「泛泛而谈增长」 |
| 只有「建议重视体验」 | 写成**可执行句**:谁、在什么渠道、在什么时间窗口、做什么改动、如何验收 |
**强制结构(逻辑闭环)**
1. **用户痛点**(来自数据与评论归纳,第二节)
2. **对应策略意图**(价值主张、差异化、目标)
3. **怎么做**(动作 + 落地载体:页面/投放/产品/价格/促销)
4. **如何验证**(指标、抽样、时间)
规则底稿中增加 **§2.5 策略动作总表** 占位LLM 成稿须**填满**该表或等价表述,且 **§六~§八** 以**动词导向**(应做、通过、在…上)为主,避免纯名词堆砌。
---
## 2. 成稿结构(已定,勿随意增删块)
**`build_strategy_draft_markdown` / `STRATEGY_SYSTEM`**、示例稿 **一致**,顺序如下:
| 顺序 | 章节 | 要点(**策略性要求** |
|------|------|------------------------|
| 0 | **摘要** | 除范围样本外,**阶段重点**须含 12 条**可感知动作**(如「主推款商详标明规格与克重」),而非仅「加强运营」 |
| 1 | **一、顾客是谁** | 1.1 人群与路径 · 1.2 细类/评论侧归纳 · 1.3 本品聚焦(表单:角色、客群、对标) |
| 2 | **二、产品价值与用户痛点** | 痛点表 · 本品价值 · 对表 · 负向归因 **· 2.5 策略动作总表(痛点 → 怎么做)** |
| 3 | **三、为什么要买「这款产品」** | 品类与时机 · **转化障碍每条对应「应对动作」**(怎么做),不是只列障碍 |
| 4 | **四、为什么要选「这个品牌」** | 承诺与调性 · 信任与证据 · 主定位(表单勾选) |
| 5 | **五、与其它品牌有何不同** | 对比对象 · 差异化 · **竞争应对须写可执行应对**(不主动价格战 / 跟价时如何说明等) |
| 6 | **六、阶段目标与路径** | 时间 / 成功标准 · **营销与总体策略须写成动作句**(与痛点挂钩) |
| 7 | **七、品牌四线** | 建设 · 打造 · 运营 · 体验(与表单 4P 支柱对应,**每条线至少一条「怎么做」** |
| 8 | **八、战术支柱** | 产品 / 定价 / 促销 / 渠道:**每支柱下写 针对哪条痛点、做什么、怎么落地** |
| 9 | **九、风险、假设与待验证** | 含表单风险勾选 |
| 10 | **十、下一步与节奏** | 含业务备注;**下一步**为可执行任务,非口号 |
| 11 | **附录** | 关键数据一览(与 brief 同源) |
**命名约定**:对外文档可称「六主轴 + 品牌四线」——六主轴对应 **一~六** 的叙事链,**七** 为品牌四线,**八** 为 4P 战术落地。
**§2.5 策略动作总表(推荐列)**
| 用户痛点(可来自 2.1 | 策略动作(我们做什么) | 具体怎么做(触点/话术/规格/渠道) | 如何验证 |
|------------------------|------------------------|-----------------------------------|----------|
| | | | |
**全文各章「怎么做」补充(除 §2.5 外,摘要与一、三~五、九、十亦须落地)**
| 章节 | 除数据叙述外,必须带上的策略性内容 |
|------|--------------------------------------|
| **摘要** | **阶段重点**含 12 条可执行动作,回扣 §2 优先痛点 |
| **一** | **1.3** 写清主攻人群/场景与 §2 痛点的对应;与后文动作一致 |
| **三** | §3.1 末承接 §2 优先痛点§3.2 **每条障碍**对应**至少一条应对动作**(页面/环节/改什么) |
| **四** | 承诺落到**触点**(商详/包装/客服等)的具体句子 |
| **五** | 差异化 = 相对竞品**多做什么/少做什么**;竞争应对 = 跟价/不跟价时的**具体话术或机制** |
| **六** | 路径与 §2.5 对齐;营销/总体策略为**动词句** |
| **七** | 四线各至少一句:**服务哪类痛点、本阶段做哪一步** |
| **八** | 四支柱分别回扣 **痛点→动作→落地** |
| **九** | 风险项带**应对动作或验证计划**,勿只列标题 |
| **十** | 可执行任务,与 §2.5 / §六 优先级一致 |
(代码与 `STRATEGY_SYSTEM` 已同步上述要求;规则底稿各节均有对应 *成稿须…* 提示。)
---
## 3. 输入框架(三层)
| 层 | 内容 | 来源 |
|----|------|------|
| **A. 数据层** | `build_competitor_brief` 的 JSON | 同任务 `run_dir` CSV + `effective_report_config.json`,与报告**同一套计数** |
| **B. 决策层** | `strategy_decisions` | 前端策略表单:战场一句话、定位四选一、竞争倾向、四柱、营销/总体策略、风险勾选等 |
| **C. 对齐层(可选)** | `report_strategy_excerpt` | `load_report_strategy_excerpt`:优先 `strategy_opportunities_llm.json``markdown`,否则从 `competitor_analysis.md` 第九章截取 |
LLM 路径下:**A** 经 `compact_brief_for_llm` 压缩进 payload**B** 原样进入;**C** 截断后进入。
**规则路径**无 LLM**A+B** 写入骨架,**C** 不参与(但 API 仍返回节选元数据便于核对)。
---
## 4. 输出与验收
| 模式 | 输出 | 最低验收 |
|------|------|----------|
| `generator=rules` | 带占位符的 Markdown | 章节齐全;含 **§2.5** 表头;数字仅来自 brief 摘录;与 `chapter8_text_mining_probe` 时无关注词条形图口径冲突 |
| `generator=llm` | 可读成稿 | 章节与骨架一致;无编造数字;已填表单项落实为执行句;节选非空时与第九章方向不矛盾;**全书**能体现「痛点→动作→怎么做」(含摘要、一、三~十);**禁止**仅复述市场描述而无 actionable 句 |
---
## 5. 与「报告第九章」的边界(防混)
- **第九章**:短、假设性、`####` 标题,服务**已读报告的人**。
- **独立策略稿**:长结构、服务**要单独拿策略讨论/对外节选的人**。
- 二者数据同源brief**不要求**策略稿复述「第九章原文」,只要求**方向与数字不打架**(见 `STRATEGY_DATA_RULES`)。
---
## 6. 待你方拍板的扩展(不影响上述已定框架)
若后续要改,单独立项,不混进「框架确定」:
- 是否增加「仅摘要 / 仅战术章」等**变体模板**
- 是否在表单增加字段(如新里程碑);
- 营销内容 S2 与策略稿的**强制依赖顺序**(建议:策略稿稳定后再接营销)。
---
*本文件为框架锚点;实现以代码与 `strategy-marketing-content-alignment.md` 为准,如有冲突以代码与 alignment 原则优先。*