From 911ad203db499755dab18a8544f8cd8bf9557813 Mon Sep 17 00:00:00 2001 From: hub-gif <2487812171@qq.com> Date: Mon, 20 Apr 2026 17:39:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(strategy):=20=E7=AD=96=E7=95=A5=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E4=B8=8E=E5=89=8D=E6=8F=90=20+=20=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=89=8D=E7=9B=AE=E6=A0=87=E9=80=89=E9=A1=B9=20A=EF=BD=9EE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 底稿在摘要前增加立项表;规划文档写清业务应对齐项与选项;LLM 须先写清针对什么、空字段列待确认与选项。 Made-with: Cursor --- backend/pipeline/llm/generate_strategy.py | 10 ++++--- backend/pipeline/reporting/strategy_draft.py | 25 ++++++++++++++++++ backend/pipeline/tests/test_strategy_draft.py | 1 + .../市场策略稿-示例-20260413_104252_低GI.md | 17 ++++++++++++ .../strategy-marketing-content-alignment.md | 2 +- docs/planning/策略生成-框架确定.md | 26 ++++++++++++++++--- .../市场策略稿-目录模板-六主轴与品牌四线.md | 18 ++++++++++++- 7 files changed, 90 insertions(+), 9 deletions(-) diff --git a/backend/pipeline/llm/generate_strategy.py b/backend/pipeline/llm/generate_strategy.py index b5fc290..6a4eeaf 100644 --- a/backend/pipeline/llm/generate_strategy.py +++ b/backend/pipeline/llm/generate_strategy.py @@ -52,11 +52,11 @@ STRATEGY_SYSTEM = f"""你是市场策略顾问,根据**结构化监测摘要** **决策边界(硬性)**: - **业务已在 `strategy_decisions` 中填写的项**(角色、时间、成功标准、战场一句话、定位勾选、竞争倾向、四柱、目标客群/对标/资源备注、**营销策略**与**总体策略**等)视为**已定决策**:成稿须**落实为具体执行句**,**不得**改写成相反结论或再要求用户「请选择」。 -- **表单中为空或占位(如 *待填*、*骨架占位*)的项**:结合 `structured_brief`、节选与数据摘录**补全为可执行表述**;补全须与数据方向一致。 +- **表单中为空或占位(如 *待填*、*骨架占位*)的项**:结合 `structured_brief`、节选与数据摘录**补全为可执行表述**;补全须与数据方向一致。**例外**:「**策略范围与前提**」中若仍无依据,**允许**保留「待确认」并**列出** A~E 类目标选项,**禁止**用虚构本品角色或目标补满。 - **成稿阶段避免**:反复「请业务决策」「待确认后再定」;**不确定时**须在 §2.1 表中用「类目/细类」列 +「待业务定类」「假设:」**分类**写清,**禁止**只写泛化一句带过。 **输出结构与阅读顺序(须与 `rules_draft_markdown` 章节一致,勿另起目录)**: -**摘要** → **一、顾客是谁**(含人群与路径、细类讨论、本品聚焦)→ **二、产品价值与用户痛点**(**仅 §2.1 针对痛点要怎么做** 表,**勿**再设独立「痛点表/价值对表/负向归因」子节)→ **三、为什么要买「这款产品」**(**仅 §3.1 品类与时机**;**无 §3.2**,转化与价带应对已在 §2 表内则**勿重复**)→ **四、为什么要选「这个品牌」** → **五、与其它品牌有何不同** → **六、阶段目标与路径** → **七、品牌四线**(建设·打造·运营·体验)→ **八、战术支柱**(产品/定价/促销/渠道与传播)→ **九、风险、假设与待验证** → **十、下一步与节奏**(含业务备注)→ **附录**。 +**策略范围与前提(生成前先对齐)** → **摘要** → **一、顾客是谁**(含人群与路径、细类讨论、本品聚焦)→ **二、产品价值与用户痛点**(**仅 §2.1 针对痛点要怎么做** 表,**勿**再设独立「痛点表/价值对表/负向归因」子节)→ **三、为什么要买「这款产品」**(**仅 §3.1 品类与时机**;**无 §3.2**,转化与价带应对已在 §2 表内则**勿重复**)→ **四、为什么要选「这个品牌」** → **五、与其它品牌有何不同** → **六、阶段目标与路径** → **七、品牌四线**(建设·打造·运营·体验)→ **八、战术支柱**(产品/定价/促销/渠道与传播)→ **九、风险、假设与待验证** → **十、下一步与节奏**(含业务备注)→ **附录**。 可微调小节标题用语,**不得**删减上述逻辑块或把「诊断数据」与「落地动作」顺序颠倒;**禁止**私自恢复已删除的小节(如 §3.2)。 **语气**:面向业务读者,避免 CR1、心智等内部缩写;**勿在成稿中反复强调「对齐某报告第几章」**,以策略表述为主。 @@ -66,7 +66,8 @@ STRATEGY_SYSTEM = f"""你是市场策略顾问,根据**结构化监测摘要** - **§2.1 针对痛点要怎么做**(若底稿已有表头)须**填写实质内容**;全稿**动作总锚**为 §2.1。若无表,须在 **§二** 或 **§八** 用等价分条写清「痛点—动作—落地—验证」。 **分节要求(与底稿章节一一对应,勿省略)**: -- **摘要**:除范围样本外,**阶段重点**须含 1~2 条**可执行动作**,且能回扣 §2 中的优先痛点(非空泛「加强运营」)。 +- **策略范围与前提**:回答「**这份策略是针对什么做的**」(监测任务、本品角色、战场、主推类目、**本阶段目标类型**、时间、成功标准)。与 `strategy_decisions`、`business_notes` 对齐;表格占位未填时**禁止**编造决策,应保留「待确认」并**列出**可选目标类型(见 `STRATEGY_USER_PREFIX` 与规划文档「启动前」);可写「建议选项:…」供业务勾选。**禁止**与后文 §2.1、§六 自相矛盾。 +- **摘要**:除范围样本外,**阶段重点**须含 1~2 条**可执行动作**,且能回扣 §2 中的优先痛点(非空泛「加强运营」);须**承接**上文「策略范围与前提」已定的边界。 - **一、顾客是谁**:**禁止**重复报告中的细类词频、分品类样本量展开、文本挖掘方法;用 **少量结论句**(谁搜、关心什么)即可,**1.3 本品聚焦**须写清「本期主攻人群/场景」与 **§2.1** 的对应关系。 - **二**:**仅 §2.1** 一张表:「类目/细类(本决策适用)| 用户痛点(简述)| 策略动作 | 具体怎么做 | 如何验证」。须覆盖监测已支撑的主要维度(**按类目分行**,口感/质地分线、分量/规格、信任与价格等,依数据取舍);**类目列 + 痛点简述列**遵守「§2 表」条款。**禁止**再写独立「痛点与证据表」「价值对表」「负向归因」子节(与 §二 重复的内容一律并入本表或删去)。 - **三**:**仅 §3.1**(品类与时机、检索/样本、购买理由);可结合 brief 写价带锚点一句。**禁止**写 §3.2「转化障碍与应对」;若与购买相关的障碍与应对已在 §2.1 表内,§3.1 **勿再复述**。 @@ -99,7 +100,8 @@ STRATEGY_SYSTEM = f"""你是市场策略顾问,根据**结构化监测摘要** STRATEGY_USER_PREFIX = ( "请基于以下 JSON 输出最终策略稿(Markdown)。" - "输出前自检:全文不得包含输入 JSON 中未出现的具体数字、品牌/店铺名、用户引语与活动规则;不确定处须写「假设」「输入未体现」或「待核对」。\n\n" + "输出前自检:全文不得包含输入 JSON 中未出现的具体数字、品牌/店铺名、用户引语与活动规则;不确定处须写「假设」「输入未体现」或「待核对」。" + "「策略范围与前提」一节:若 `strategy_decisions` 中本品角色、战场、成功标准、主推类目等大量为空,**不得**编造;须列「待确认」并给出**目标类型选项**供业务选择,例如:**A** 上市/首发前验证 **B** 份额追赶 **C** 利润与价盘防守 **D** 新场景/新人群拓展 **E** 其它(简述)——具体措辞见项目规划文档「策略生成-框架确定」之「启动前」。\n\n" ) diff --git a/backend/pipeline/reporting/strategy_draft.py b/backend/pipeline/reporting/strategy_draft.py index 44fb15a..5b9fe5f 100644 --- a/backend/pipeline/reporting/strategy_draft.py +++ b/backend/pipeline/reporting/strategy_draft.py @@ -182,8 +182,33 @@ def build_strategy_draft_markdown( merged_n = scope.get("merged_sku_count") comm_n = scope.get("comment_flat_rows") + pr_role = _esc(d.get("product_role") or "").strip() + bf_line = _esc(d.get("battlefield_one_line") or "").strip() + aud = _esc(d.get("audience_segment") or "").strip() + th = _esc(d.get("time_horizon") or "").strip() + sc = _esc(d.get("success_criteria") or "").strip() + + def _scope_cell(val: str, placeholder: str) -> str: + return val if val else f"*({placeholder})*" + lines.extend( [ + "## 策略范围与前提(生成前先对齐)", + "", + "*回答:**这份策略是针对什么、在什么边界里做的**——属「立项靶心」,不是执行摘要。表单已填则写成短句;未填保留占位,**勿**编造。*", + "*业务侧在动策略稿之前,应先对齐本节;可选目标类型见 `docs/planning/策略生成-框架确定.md`「启动前:须先明确的项」。*", + "", + "| 须明确项 | 填写或待确认 |", + "|----------|----------------|", + f"| **监测任务(数据同源)** | 关键词「{kw}」;批次 **{batch}**;与同任务《竞品分析报告》一致 |", + f"| **策略服务对象(本品角色)** | {_scope_cell(pr_role, '待填:新品 / 追赶 / 防守 / 拓品类 …')} |", + f"| **一句话战场** | {_scope_cell(bf_line, '在哪个需求场景、与谁抢同一批用户?')} |", + f"| **目标客群/场景** | {_scope_cell(aud, '可选')} |", + "| **主推类目/细类** | *(待填:如饼干线 / 面包线 / 多线并行;未定写「待业务定类」)* |", + "| **本阶段策略目标类型** | *(成稿从规划文档「目标类型选项」择一或组合,并与下列成功标准一致)* |", + f"| **时间范围** | {_scope_cell(th, '如本季度 / 未来 12 周')} |", + f"| **成功标准(可量化)** | {_scope_cell(sc, '搜索位次、转化、复购等')} |", + "", "---", "", "## 摘要", diff --git a/backend/pipeline/tests/test_strategy_draft.py b/backend/pipeline/tests/test_strategy_draft.py index 37cca8e..5ba2074 100644 --- a/backend/pipeline/tests/test_strategy_draft.py +++ b/backend/pipeline/tests/test_strategy_draft.py @@ -27,6 +27,7 @@ class StrategyDraftTests(SimpleTestCase): self.assertIn("假设A", md) self.assertIn("重点:华东", md) self.assertIn("## 摘要", md) + self.assertIn("策略范围与前提", md) self.assertIn("针对痛点要怎么做", md) self.assertIn("类目/细类", md) self.assertIn("全局禁止编造", md) diff --git a/docs/demo/市场策略稿-示例-20260413_104252_低GI.md b/docs/demo/市场策略稿-示例-20260413_104252_低GI.md index c0beb84..60f24b0 100644 --- a/docs/demo/市场策略稿-示例-20260413_104252_低GI.md +++ b/docs/demo/市场策略稿-示例-20260413_104252_低GI.md @@ -4,6 +4,23 @@ --- +## 策略范围与前提(生成前先对齐) + +| 须明确项 | 本示例中的填写 | +|----------|----------------| +| **监测任务(数据同源)** | 关键词「低GI」;批次 20260413_104252;与同任务竞品分析报告一致 | +| **策略服务对象(本品角色)** | *(示例占位:追赶型粗粮饼干线,非真实客户定稿)* | +| **一句话战场** | 京东站内「低GI」检索池内,与头部健康零食抢「控糖+饱腹+口感」心智 | +| **目标客群/场景** | 控糖关注型、代餐/加餐、早餐场景为主 | +| **主推类目/细类** | 多线:饼干为主、西式糕点为辅;面点仅观测 | +| **本阶段策略目标类型** | **B** 份额追赶 + **A** 要素验证(商详规格与话术可核验) | +| **时间范围** | *(示例:未来 12 周)* | +| **成功标准(可量化)** | *(示例:主推款加购、差评主题收敛,由业务定 KPI)* | + +*未定项在真实任务中应回填表单或保留「待确认」,勿编造。* + +--- + ## 摘要 - **范围与样本**:检索池覆盖范围、列表与深入样本规模、价格分布见**附录**。 diff --git a/docs/planning/strategy-marketing-content-alignment.md b/docs/planning/strategy-marketing-content-alignment.md index 710d84a..f0672c8 100644 --- a/docs/planning/strategy-marketing-content-alignment.md +++ b/docs/planning/strategy-marketing-content-alignment.md @@ -21,7 +21,7 @@ | 维度 | 要求 | |------|------| | **事实源** | 仅允许来自:同任务 `build_competitor_brief` 产物、已落盘的 `competitor_analysis.md` 中与策略相关的既定小节、各章 LLM 节选 JSON、`strategy_hints`、第九章策略相关落盘(如 `strategy_opportunities_llm.json`)。 | -| **策略稿** | 以规则底稿为骨架;LLM 仅做可读性润色与衔接,**不得新增** brief/底稿中不存在的数字、品牌、销量、价格。全文还须遵守 `generate_strategy.py` 中 `STRATEGY_DATA_RULES` 段首「**全局禁止编造**」(用户引语、活动规则、无依据的落地结果等)。 | +| **策略稿** | 以规则底稿为骨架;**先**通过「策略范围与前提」与规划文档「启动前」对齐**针对什么做策略**;LLM 仅做可读性润色与衔接,**不得新增** brief/底稿中不存在的数字、品牌、销量、价格。全文还须遵守 `STRATEGY_DATA_RULES` 段首「**全局禁止编造**」(用户引语、活动规则、无依据的落地结果等)。 | | **报告第九章** | 继续遵守 `STRATEGY_OPPORTUNITIES_SYSTEM`(`generate_strategy.py`)中的硬性条款:brief 优先、与 `prior_chapter_llm_narratives` 不矛盾、假设性表述等。 | | **营销内容** | 视为**表达层**:不新增事实;把同一批证据改写成面向某类受众的叙事;可核验结论须能指回 brief 或报告节选。 | diff --git a/docs/planning/策略生成-框架确定.md b/docs/planning/策略生成-框架确定.md index 5113a63..b32735b 100644 --- a/docs/planning/策略生成-框架确定.md +++ b/docs/planning/策略生成-框架确定.md @@ -1,8 +1,26 @@ # 策略生成 · 框架确定 -**版本**:2026-04-22(修订:§二 仅 §2.1 表;删除 §3.2) +**版本**:2026-04-23(修订:增加「策略范围与前提」与启动前选项) **目的**:在继续迭代「填表 → 规则底稿 / LLM 成稿 → 导出」之前,把**结构、输入输出、与报告的关系**定死;并明确——**策略成稿不是市场说明书,而是针对用户痛点写清「做什么、怎么做」**。 +--- + +## 启动前:策略针对什么(业务须先对齐) + +动策略稿之前,应能回答:**这份策略是为谁、在什么监测任务下、对哪条产品线/类目、要达成哪一类阶段目标**。若尚未想清,可先**从下列目标类型中选一类或组合**(再落到表单字段与 §2.1),不必空泛「开始做」: + +| 代码 | 目标类型(示例) | 典型成功标准方向(示例,非固定) | +|------|-------------------|----------------------------------| +| **A** | 上市 / 首发前验证 | 主图文案与规格可核验、小样本转化或评价主题可控 | +| **B** | 份额追赶 | 搜索/列表可见性、对标款价差与话术 | +| **C** | 利润与价盘防守 | 到手价带稳定、促销规则可解释 | +| **D** | 新场景或新人群拓展 | 场景词与内容投放与评论侧一致 | +| **E** | 其它 | 在「业务备注」或成功标准中写清一句 | + +**还须对齐(与底稿「策略范围与前提」表一致)**:监测词与批次(与同任务报告同源)、**本品角色**(新品/追赶/防守等)、**一句话战场**、**主推类目/细类**(或多线并行)、**时间范围**、**可量化成功标准**。未定项允许保留「待确认」,由 LLM 成稿时**列选项、禁止编造**(见 `STRATEGY_SYSTEM`)。 + +--- + **关联**: | 说明 | 路径 | @@ -21,7 +39,7 @@ | 产物 | 形态 | 主要用途 | |------|------|----------| -| **独立策略稿** | 摘要 → 一至十 → 附录 | 业务讨论、对外删减版、与表单决策对齐 | +| **独立策略稿** | **策略范围与前提** → 摘要 → 一至十 → 附录 | 业务讨论、对外删减版、与表单决策对齐 | | **报告 · 第九章** | 仅 `####` 小节,嵌在「九、策略与机会」下 | 与第五~八章同源、假设性归纳 | | **营销内容**(规划) | 另管线,共用 brief | 表达层,见 alignment 文档 S2 | @@ -76,7 +94,8 @@ | 顺序 | 章节 | 要点(**策略性要求**) | |------|------|------------------------| -| 0 | **摘要** | 除范围样本外,**阶段重点**须含 1~2 条**可感知动作**(如「主推款商详标明规格与克重」),而非仅「加强运营」 | +| −1 | **策略范围与前提** | **针对什么做策略**:监测任务、本品角色、战场、主推类目、**目标类型(A~E)**、时间、成功标准;未定则列待确认与选项 | +| 0 | **摘要** | 承接上文边界;除范围样本外,**阶段重点**须含 1~2 条**可感知动作**,而非仅「加强运营」 | | 1 | **一、顾客是谁** | 1.1 人群与路径 · 1.2 细类/评论侧归纳 · 1.3 本品聚焦(表单:角色、客群、对标) | | 2 | **二、产品价值与用户痛点** | **仅 §2.1** 表:「类目/细类 → 痛点简述 → 动作 → 落地 → 验证」;多细类**分行**,不确定则「待业务定类」+ 假设 | | 3 | **三、为什么要买「这款产品」** | **仅 §3.1** 品类与时机、购买理由;**无 §3.2**(与 §二 不重复写障碍与应对) | @@ -152,6 +171,7 @@ LLM 路径下:**A** 经 `compact_brief_for_llm` 压缩进 payload;**B** 原 |----------|----------| | 六主轴 + 品牌四线、摘要→一~十→附录 | `build_strategy_draft_markdown`、`STRATEGY_SYSTEM` | | 与竞品报告分工、不重复统计展开 | `STRATEGY_DATA_RULES`、底稿骨架说明 | +| 启动前目标选项 A~E、策略针对什么 | 本文「启动前」节;底稿「策略范围与前提」表;`STRATEGY_SYSTEM` + `STRATEGY_USER_PREFIX` | | 痛点 → 怎么做、仅 §2.1 表(含类目/细类列) | 底稿 §2.1;`STRATEGY_DATA_RULES` + `STRATEGY_SYSTEM` §二 | | 除 §2 外各章须带可执行句 | `STRATEGY_SYSTEM` 分节要求;规划 §1.1 表 | | 语气:少内部缩写、少反复「对齐第几章」 | `STRATEGY_SYSTEM` **语气**段 | diff --git a/docs/templates/市场策略稿-目录模板-六主轴与品牌四线.md b/docs/templates/市场策略稿-目录模板-六主轴与品牌四线.md index eac8871..a1ac6e4 100644 --- a/docs/templates/市场策略稿-目录模板-六主轴与品牌四线.md +++ b/docs/templates/市场策略稿-目录模板-六主轴与品牌四线.md @@ -2,7 +2,23 @@ > **用途**:按「顾客 / 价值与痛点 / 为什么买 / 为什么选品牌 / 竞品差异 / 第一选择」与「品牌建设 · 打造 · 运营 · 体验」组织成稿;供人工撰写、表单字段设计或 LLM 章节提示对齐。 > **语气默认**:**内部评审**(可写假设、待验证);对外删减敏感句与未证实结论,见各节「对外提示」。 -> **与现有模板关系**:工作台自动草稿章节见同目录 [`market-strategy-brief.zh.md`](./market-strategy-brief.zh.md);本文件侧重**战略叙事结构**,可与前者并行对照,合并时以事实源与 [`strategy-marketing-content-alignment.md`](../planning/strategy-marketing-content-alignment.md) 为准。 +> **与现有模板关系**:工作台自动草稿章节见同目录 [`market-strategy-brief.zh.md`](./market-strategy-brief.zh.md);本文件侧重**战略叙事结构**,可与前者并行对照,合并时以事实源与 [`strategy-marketing-content-alignment.md`](../planning/strategy-marketing-content-alignment.md) 为准。 +> **动笔前先对齐**:见 [`策略生成-框架确定.md`](../planning/策略生成-框架确定.md)「启动前」与底稿 **策略范围与前提** 表;目标类型可选 **A~E**(上市验证 / 份额追赶 / 价盘防守 / 场景拓展 / 其它)。 + +--- + +## 策略范围与前提(生成前先对齐) + +| 须明确项 | 填写或待确认 | +|----------|----------------| +| 监测任务(与同任务报告一致) | 关键词 ________ ;批次 ________ | +| 本品角色 | 新品 / 追赶 / 防守 / 拓品类 … | +| 一句话战场 | ________ | +| 目标客群/场景 | ________(可选) | +| 主推类目/细类 | ________(未定写「待业务定类」) | +| 本阶段目标类型 | **A~E** 择一或组合(见规划文档) | +| 时间范围 | ________ | +| 成功标准 | ________ | ---