From 812cc1dac7a645ea7e2263604979b7d90848bdb2 Mon Sep 17 00:00:00 2001 From: hub-gif <2487812171@qq.com> Date: Mon, 20 Apr 2026 16:48:25 +0800 Subject: [PATCH] =?UTF-8?q?docs(strategy):=20=E5=85=A8=E5=B1=80=E7=A6=81?= =?UTF-8?q?=E6=AD=A2=E7=BC=96=E9=80=A0=E8=B4=AF=E7=A9=BF=E5=BA=95=E7=A8=BF?= =?UTF-8?q?=E4=B8=8E=E8=A7=84=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 规则底稿骨架增加全局约束说明;规划与 alignment 文档对照表更新;测试断言骨架含「全局禁止编造」。generate_strategy 中全局条款与用户前缀若未提交则一并纳入。 Made-with: Cursor --- backend/pipeline/llm/generate_strategy.py | 22 ++++++++++++++++--- backend/pipeline/reporting/strategy_draft.py | 3 ++- backend/pipeline/tests/test_strategy_draft.py | 1 + .../strategy-marketing-content-alignment.md | 2 +- docs/planning/策略生成-框架确定.md | 4 +++- 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/backend/pipeline/llm/generate_strategy.py b/backend/pipeline/llm/generate_strategy.py index 019b75a..42330e5 100644 --- a/backend/pipeline/llm/generate_strategy.py +++ b/backend/pipeline/llm/generate_strategy.py @@ -13,7 +13,15 @@ from ..reporting.strategy_draft import ( ) from .llm_client import call_llm, estimate_chat_input_tokens, llm_context_window_size -STRATEGY_DATA_RULES = """**与竞品分析报告的分工(硬性)**: +STRATEGY_DATA_RULES = """**全局禁止编造(适用于输出全文各节、各表、各段;独立策略稿与报告第九章策略归纳**共用**本段,硬性)**: +- **事实与数字**:销量、GMV、占比、价带、条数、份额、券面额、满减/满折门槛、到手价、店铺/品牌计数与排名、SKU 数、接口返回量等,**仅可**来自**本次调用输入 JSON** 中已给出的字段(策略稿为 `structured_brief`、`rules_draft_markdown` 内摘录、`report_strategy_excerpt`、`strategy_decisions`、`business_notes`;第九章嵌入为 `competitor_brief`、可选 `prior_chapter_llm_narratives`);**禁止**凭空新增、改口径或写成「已监测证实」而无字段支撑。 +- **主体与名称**:**禁止**引入上述输入中**未出现**的**具体**品牌名、店铺名、SKU 名、商品标题作为**事实陈述**;若 `strategy_decisions`/备注/brief/节选已含则可写;否则用「头部/同类竞品」等泛称或「待业务指定对标」。 +- **用户侧表述**:**禁止**虚构评价原文、访谈引语、带引号的「用户说…」;细则见下文「§2.1 痛点表证据信号」。 +- **促销与活动**:**禁止**编造活动名、具体规则、补贴比例;细则见下文促销与第八章探针相关条款。 +- **策略动作与落地结果**:可写「建议」「假设」「待验证」的动作方向,**不得**编造「已执行」「已上线」「数据显示转化率/复购提升」等**无输入依据**的结果。 +- **信息不足**:须写「输入未体现」「待核对」「假设:」「待验证:」,**禁止**用确定语气掩盖缺失依据。 + +**与竞品分析报告的分工(硬性)**: - 宿主报告已含样本量、价带分布、词频/共现、矩阵、第八章文本挖掘等**统计分析**。策略稿**不得**重复展开同类内容:不重写词频表、细类评论条数罗列、统计方法说明、与报告图表逐条复述。 - **允许**:用一两句**结论性**话概括用户侧/评论侧要点;必要时写「详见同任务《竞品分析报告》§× / 附录」。 - **必须**把篇幅放在**策略**:痛点归纳、§2.5 动作表、怎么做与验证(后文章节)。 @@ -38,6 +46,8 @@ STRATEGY_SYSTEM = f"""你是市场策略顾问,根据**结构化监测摘要** {STRATEGY_DATA_RULES} +**落实范围**:上文「全局禁止编造」适用于**摘要、一至十、附录**的每一句话与表格每一格;**不得**因章节不同而放宽。 + **决策边界(硬性)**: - **业务已在 `strategy_decisions` 中填写的项**(角色、时间、成功标准、战场一句话、定位勾选、竞争倾向、四柱、目标客群/对标/资源备注、**营销策略**与**总体策略**等)视为**已定决策**:成稿须**落实为具体执行句**,**不得**改写成相反结论或再要求用户「请选择」。 - **表单中为空或占位(如 *待填*、*骨架占位*)的项**:结合 `structured_brief`、节选与数据摘录**补全为可执行表述**;补全须与数据方向一致。 @@ -77,7 +87,10 @@ STRATEGY_SYSTEM = f"""你是市场策略顾问,根据**结构化监测摘要** **输出**:仅 Markdown 正文(不要 ``` 围栏);须收束各小节与全文,勿中途截断。""" -STRATEGY_USER_PREFIX = """请基于以下 JSON 输出最终策略稿(Markdown)。\n\n""" +STRATEGY_USER_PREFIX = ( + "请基于以下 JSON 输出最终策略稿(Markdown)。" + "输出前自检:全文不得包含输入 JSON 中未出现的具体数字、品牌/店铺名、用户引语与活动规则;不确定处须写「假设」「输入未体现」或「待核对」。\n\n" +) def generate_strategy_draft_markdown_llm( @@ -218,6 +231,8 @@ STRATEGY_OPPORTUNITIES_SYSTEM = ( **(与独立下载策略稿的关系)**:独立策略稿使用「摘要→一~十→附录」的六主轴结构;本节**不是**完整策略稿,仅输出下列 ``####`` 主题块,避免与宿主第九章标题重复。 +**全局禁止编造**见上文 `STRATEGY_DATA_RULES` 段首;**本节每个 ``####`` 块**均须遵守(含不得虚构用户引语、未在 ``competitor_brief`` 出现的品牌名与数字)。 + **与前文分析严格对齐(硬性,优先于自由发挥)**: - **定性主题**(各细类讨论焦点、正负向体验、场景与关注词归纳、配料/卖点叙事、促销形态描述等)须与 ``prior_chapter_llm_narratives`` 中已出现的表述**方向一致**,**禁止**另写一套与节选**明显矛盾**的品类判断、品牌举例或用户痛点主题。 - **定量与可核验事实**(价带分位数、店铺/品牌占比、条数、评论统计字段等)**以** ``competitor_brief`` **为准**;若节选与 brief 数字冲突,**采纳 brief**,且勿复述与数字冲突的节选句。 @@ -244,7 +259,8 @@ STRATEGY_OPPORTUNITIES_SYSTEM = ( STRATEGY_OPPORTUNITIES_USER_PREFIX = ( "请根据以下 JSON 撰写策略归纳正文(Markdown)。" "``competitor_brief`` 为结构化摘要;若含 ``prior_chapter_llm_narratives``,则为 第五至第八章 大模型归纳节选,须与策略正文对齐。" - "宿主报告已含章节标题,**勿在输出中写第九章或「策略与机会」类标题**。\n\n" + "宿主报告已含章节标题,**勿在输出中写第九章或「策略与机会」类标题**。" + "输出前自检:不得编造 brief 与节选未出现的数字、品牌/店铺名、用户引语与活动规则;不确定须用「假设:」「待验证:」「输入未体现」。\n\n" ) diff --git a/backend/pipeline/reporting/strategy_draft.py b/backend/pipeline/reporting/strategy_draft.py index cc4aa3a..183658b 100644 --- a/backend/pipeline/reporting/strategy_draft.py +++ b/backend/pipeline/reporting/strategy_draft.py @@ -173,7 +173,8 @@ def build_strategy_draft_markdown( "", "> **骨架说明**:本页为**规则骨架**(占位与少量摘录)。大模型成稿时须写成**短、可执行**的完整策略稿,结构与 [`docs/demo` 市场策略稿示例](docs/demo) 一致:**摘要 → 一~十 → 附录**。" "**不与《竞品分析报告》重复**:统计表、词频/共现、细类样本量、文本挖掘方法等以报告为准;策略稿只写**结论要点 + 怎么做**,可写「详见报告 §×」。" - "**决策在策略生成表单完成**;未填项由模型结合本任务摘要与可选节选补全,**成稿不再写「请再选 / 请决策」式套话**。", + "**决策在策略生成表单完成**;未填项由模型结合本任务摘要与可选节选补全,**成稿不再写「请再选 / 请决策」式套话**。" + "**全局禁止编造**:数字、品牌/店铺名、用户引语、活动规则等须能在 `structured_brief` / 报告节选 / 业务备注中核对;无依据处写「假设」「待核对」「输入未体现」(见 `generate_strategy.py` 中 `STRATEGY_DATA_RULES`)。", "", ] if generated_at_iso: diff --git a/backend/pipeline/tests/test_strategy_draft.py b/backend/pipeline/tests/test_strategy_draft.py index 14e7294..a177621 100644 --- a/backend/pipeline/tests/test_strategy_draft.py +++ b/backend/pipeline/tests/test_strategy_draft.py @@ -28,6 +28,7 @@ class StrategyDraftTests(SimpleTestCase): self.assertIn("重点:华东", md) self.assertIn("## 摘要", md) self.assertIn("「证据信号」须与", md) + self.assertIn("全局禁止编造", md) self.assertIn("## 一、顾客是谁", md) self.assertIn("## 七、品牌四线", md) self.assertIn("市场策略制定草稿", md) diff --git a/docs/planning/strategy-marketing-content-alignment.md b/docs/planning/strategy-marketing-content-alignment.md index ee5cc72..710d84a 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/底稿中不存在的数字、品牌、销量、价格。 | +| **策略稿** | 以规则底稿为骨架;LLM 仅做可读性润色与衔接,**不得新增** brief/底稿中不存在的数字、品牌、销量、价格。全文还须遵守 `generate_strategy.py` 中 `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 9193102..3fe040b 100644 --- a/docs/planning/策略生成-框架确定.md +++ b/docs/planning/策略生成-框架确定.md @@ -131,7 +131,7 @@ LLM 路径下:**A** 经 `compact_brief_for_llm` 压缩进 payload;**B** 原 | 模式 | 输出 | 最低验收 | |------|------|----------| | `generator=rules` | 带占位符的 Markdown | 章节齐全;含 **§2.5** 表头;数字仅来自 brief 摘录;与 `chapter8_text_mining_probe` 时无关注词条形图口径冲突 | -| `generator=llm` | 可读成稿 | 章节与骨架一致;无编造数字;已填表单项落实为执行句;节选非空时与第九章方向不矛盾;**全书**能体现「痛点→动作→怎么做」(含摘要、一、三~十);**禁止**仅复述市场描述而无 actionable 句 | +| `generator=llm` | 可读成稿 | 章节与骨架一致;**全书**遵守 `STRATEGY_DATA_RULES` 段首「全局禁止编造」(数字、品牌名、用户引语、活动规则、落地结果等);已填表单项落实为执行句;节选非空时与第九章方向不矛盾;**全书**能体现「痛点→动作→怎么做」(含摘要、一、三~十);**禁止**仅复述市场描述而无 actionable 句 | --- @@ -153,7 +153,9 @@ LLM 路径下:**A** 经 `compact_brief_for_llm` 压缩进 payload;**B** 原 | 除 §2 外各章须带可执行句 | `STRATEGY_SYSTEM` 分节要求;规划 §1.1 表 | | 语气:少内部缩写、少反复「对齐第几章」 | `STRATEGY_SYSTEM` **语气**段 | | 分量/规格/克重痛点 | `STRATEGY_SYSTEM` §二;底稿 §2.1 提示 | +| 全文禁止编造(各节、各表) | `STRATEGY_DATA_RULES` 段首「全局禁止编造」;`STRATEGY_SYSTEM`「落实范围」;用户消息前缀自检句 | | §2.1「证据信号」可溯源、禁编造用户引语 | `STRATEGY_DATA_RULES` §2.1 证据列硬性条款 | +| 报告第九章策略归纳不编造 | `STRATEGY_OPPORTUNITIES_SYSTEM` 引用同一 `STRATEGY_DATA_RULES` + `####` 块说明 | | 负向归因(主题级,可举 brief 已有例证) | `STRATEGY_SYSTEM` §二;底稿 §2.4 | | 口感按细类:酥脆 vs 松软分线,禁止一词盖全站 | `STRATEGY_SYSTEM` **口感/质地与细类** | | 促销:满减/满折/券/跨店,不编造门槛、不全节留空 | `STRATEGY_SYSTEM` **促销**;底稿 §八.3 |