From 71395d217c43db3d43ea61a598a85b0fa901e0d7 Mon Sep 17 00:00:00 2001 From: hub-gif <2487812171@qq.com> Date: Mon, 20 Apr 2026 16:45:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(strategy):=20=E7=A6=81=E6=AD=A2=20=C2=A72.1?= =?UTF-8?q?=20=E7=BC=96=E9=80=A0=E7=94=A8=E6=88=B7=E5=BC=95=E8=AF=AD?= =?UTF-8?q?=E4=B8=8E=E6=97=A0=E4=BE=9D=E6=8D=AE=E7=97=9B=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 STRATEGY_DATA_RULES 明确证据信号列须可溯源;无原话时写主题归纳或待抽样,禁止伪装成已监测结论。底稿与测试同步。 Made-with: Cursor --- backend/pipeline/llm/generate_strategy.py | 6 +++++- backend/pipeline/reporting/strategy_draft.py | 2 ++ backend/pipeline/tests/test_strategy_draft.py | 11 +++++++---- docs/planning/策略生成-框架确定.md | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/backend/pipeline/llm/generate_strategy.py b/backend/pipeline/llm/generate_strategy.py index afc66b3..019b75a 100644 --- a/backend/pipeline/llm/generate_strategy.py +++ b/backend/pipeline/llm/generate_strategy.py @@ -19,6 +19,10 @@ STRATEGY_DATA_RULES = """**与竞品分析报告的分工(硬性)**: - **必须**把篇幅放在**策略**:痛点归纳、§2.5 动作表、怎么做与验证(后文章节)。 **数据与口径(硬性,与宿主分析报告同源输入)**: +- **§2.1 痛点表「证据信号」列(反捏造,硬性)**: + - **禁止**书写「用户反馈『……』」「评价称『……』」等**带引号的逐字原话**,除非该片段在 `structured_brief`、`strategy_hints`、`report_strategy_excerpt` 或 `business_notes` 中**已出现相同或明显包含**的文本;否则一律**不得**用引号假装引用。 + - 若输入仅有主题级信号(关注词、负向归因方向、价差行数等),证据信号应写**可追溯归纳**,例如「与 brief 中 ×× 字段一致」「与报告第八章/节选已归纳的 ×× 主题一致」「监测摘要见 `strategy_hints` 第 n 条」,或写「**待原评论抽样核实**」——**禁止**把合理推测写成「用户已明确说……」的事实口吻。 + - **禁止**凭空发明痛点行(如「配料相似」「卖点雷同」「性价比一般」)作为**已监测结论**;此类表述仅当 `structured_brief`、节选或备注中**确有同类主题或措辞**时方可写入,否则不写或标为待验证假设。 - **不得编造**销量、GMV、未在 `structured_brief` 与底稿中出现的占比或价格;底稿与摘要中的数字须保持一致。 - **店铺集中度**仅可依据 `structured_brief.concentration` 与底稿,并区分**列表行**与**去重 SKU**;用「第一大……份额」「前三家合计」等中文,**不要用** CR1、CR3。 - **禁止编造**「京东自营 SKU 占比」「自营超 X%」等摘要中未给出的定量句。 @@ -52,7 +56,7 @@ STRATEGY_SYSTEM = f"""你是市场策略顾问,根据**结构化监测摘要** **分节要求(与底稿章节一一对应,勿省略)**: - **摘要**:除范围样本外,**阶段重点**须含 1~2 条**可执行动作**,且能回扣 §2 中的优先痛点(非空泛「加强运营」)。 - **一、顾客是谁**:**禁止**重复报告中的细类词频、分品类样本量展开、文本挖掘方法;用 **少量结论句**(谁搜、关心什么)即可,**1.3 本品聚焦**须写清「本期主攻人群/场景」与 **§2 痛点**的对应关系。 -- **二**:§2.1 痛点表须**写全**监测已支撑的主要维度,至少覆盖:**口感/质地预期**(按细类分线,见下条)、**分量/规格/克重与场景是否匹配**(若摘要、负向主题或 `strategy_hints` 中出现该方向则**不可省略**)、信任与价格感知等;用**短语结论**,不写统计过程。§2.4 负向归因写**主题级结论**即可;若 brief/节选已出现具体品牌或例句可作**佐证**,**禁止**编造未出现的品牌或评价原文。§2.5 为全稿**动作总锚**,后文须能指回。 +- **二**:§2.1 痛点表须**写全**监测已支撑的主要维度,至少覆盖:**口感/质地预期**(按细类分线,见下条)、**分量/规格/克重与场景是否匹配**(若摘要、负向主题或 `strategy_hints` 中出现该方向则**不可省略**)、信任与价格感知等;用**短语结论**,不写统计过程。**证据信号列遵守上文「§2.1 证据信号」硬性条款**,**禁止**为凑行数而捏造用户引语或未监测结论。§2.4 负向归因写**主题级结论**即可;若 brief/节选已出现具体品牌或例句可作**佐证**,**禁止**编造未出现的品牌或评价原文。§2.5 为全稿**动作总锚**,后文须能指回。 - **三**:§3.2 **每条转化障碍**须对应**至少一条应对动作**(谁、在什么页面/环节、改什么);§3.1 时机叙述后须**承接** §2 中优先解决的痛点。 - **四**:品牌承诺与调性须能落到**可感知触点**(如商详第几屏、包装、客服首句),避免只有形容词。 - **五**:§5.2 差异化、§5.3 竞争应对须写清**相对竞品多做什么/少做什么、具体一步动作**。 diff --git a/backend/pipeline/reporting/strategy_draft.py b/backend/pipeline/reporting/strategy_draft.py index 410bca9..cc4aa3a 100644 --- a/backend/pipeline/reporting/strategy_draft.py +++ b/backend/pipeline/reporting/strategy_draft.py @@ -294,6 +294,8 @@ def build_strategy_draft_markdown( "", "*成稿须列全监测已支撑的主要维度(依数据取舍),通常含:**口感/质地**(按细类分线)、**分量/规格/克重与场景**、信任与配料、价格与促销感知等。*", "", + "*「证据信号」须与 `structured_brief` / 策略线索 / 报告节选**可核对**;**禁止**编造「用户反馈『……』」式引语,除非原句已出现在上述输入中。*", + "", "| 痛点 | 证据信号 | 优先级 |", "|------|----------|--------|", "| *(成稿依数据与评论归纳)* | | |", diff --git a/backend/pipeline/tests/test_strategy_draft.py b/backend/pipeline/tests/test_strategy_draft.py index bec5310..14e7294 100644 --- a/backend/pipeline/tests/test_strategy_draft.py +++ b/backend/pipeline/tests/test_strategy_draft.py @@ -26,8 +26,10 @@ class StrategyDraftTests(SimpleTestCase): self.assertIn("任务 ID**:99", md) self.assertIn("假设A", md) self.assertIn("重点:华东", md) - self.assertIn("目标与边界", md) - self.assertIn("营销策略与总体方向", md) + self.assertIn("## 摘要", md) + self.assertIn("「证据信号」须与", md) + self.assertIn("## 一、顾客是谁", md) + self.assertIn("## 七、品牌四线", md) self.assertIn("市场策略制定草稿", md) def test_strategy_decisions_merge(self) -> None: @@ -56,7 +58,8 @@ class StrategyDraftTests(SimpleTestCase): self.assertIn("- [x] **卡腰**", md) self.assertIn("- [ ] **贴顶**", md) self.assertIn("侧翼切入", md) - self.assertIn("| 产品 | 做低糖配方 |", md) + self.assertIn("做低糖配方", md) + self.assertIn("### 7.1 品牌建设", md) self.assertIn("- [x] 关注词/场景统计是否以偏概全", md) self.assertIn("- [ ] 价格带是否含大促", md) self.assertIn("- [x] 列表集中度与深入样本品牌是否不一致", md) @@ -154,5 +157,5 @@ class StrategyDraftTests(SimpleTestCase): self.assertNotIn("评价文本中「口感", md) self.assertNotIn("用途/场景中「控糖", md) self.assertIn("样本内品牌较分散", md) - self.assertIn("促销与活动(须与报告对齐)", md) + self.assertIn("price_promotion_signals", md) self.assertIn("price_promotion_signals", md) diff --git a/docs/planning/策略生成-框架确定.md b/docs/planning/策略生成-框架确定.md index 2422d74..9193102 100644 --- a/docs/planning/策略生成-框架确定.md +++ b/docs/planning/策略生成-框架确定.md @@ -153,6 +153,7 @@ LLM 路径下:**A** 经 `compact_brief_for_llm` 压缩进 payload;**B** 原 | 除 §2 外各章须带可执行句 | `STRATEGY_SYSTEM` 分节要求;规划 §1.1 表 | | 语气:少内部缩写、少反复「对齐第几章」 | `STRATEGY_SYSTEM` **语气**段 | | 分量/规格/克重痛点 | `STRATEGY_SYSTEM` §二;底稿 §2.1 提示 | +| §2.1「证据信号」可溯源、禁编造用户引语 | `STRATEGY_DATA_RULES` §2.1 证据列硬性条款 | | 负向归因(主题级,可举 brief 已有例证) | `STRATEGY_SYSTEM` §二;底稿 §2.4 | | 口感按细类:酥脆 vs 松软分线,禁止一词盖全站 | `STRATEGY_SYSTEM` **口感/质地与细类** | | 促销:满减/满折/券/跨店,不编造门槛、不全节留空 | `STRATEGY_SYSTEM` **促销**;底稿 §八.3 |