diff --git a/backend/pipeline/reporting/strategy_draft.py b/backend/pipeline/reporting/strategy_draft.py index 396de14..a0dca1d 100644 --- a/backend/pipeline/reporting/strategy_draft.py +++ b/backend/pipeline/reporting/strategy_draft.py @@ -466,13 +466,14 @@ def build_strategy_draft_markdown( if for_llm_input else ["- *(成稿:评价、配料、可核验表述边界。)*", ""] ), - "**主定位(与表单一致)**", - "", - f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带。", - f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带。", - f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限。", - f"- {_pos_mark(pos, 'different')} **另起带**:规格/组合/服务差异化。", - "", + *( + [] + if for_llm_input + else [ + "*本节写**用户为何信任、为何愿意选这个品牌**(承诺、证据、合规边界);**价位阵地**(表单勾选的四类取向)见 **§8.2 定价策略**,勿混写。*", + "", + ] + ), ] ) @@ -672,6 +673,13 @@ def build_strategy_draft_markdown( "", "### 8.2 定价策略", "", + "**价位阵地取向(表单勾选;与监测价带可对读)**", + "", + f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带。", + f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带。", + f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限。", + f"- {_pos_mark(pos, 'different')} **另起带**:规格/组合/服务差异化。", + "", f"- *(表单价格支柱:{_pillar_cell(pr)})*", "", "### 8.3 促销与活动策略", diff --git a/backend/pipeline/tests/test_strategy_draft.py b/backend/pipeline/tests/test_strategy_draft.py index 35d3dc8..15e967a 100644 --- a/backend/pipeline/tests/test_strategy_draft.py +++ b/backend/pipeline/tests/test_strategy_draft.py @@ -100,6 +100,13 @@ class StrategyDraftTests(SimpleTestCase): self.assertIn("**总体策略**:先腰后顶", md) self.assertIn("- [x] **卡腰**", md) self.assertIn("- [ ] **贴顶**", md) + i4 = md.find("## 四、为什么要选") + i5 = md.find("## 五、与其它品牌") + self.assertGreater(i5, i4) + self.assertNotIn("贴顶", md[i4:i5]) + i82 = md.find("### 8.2 定价策略") + self.assertGreater(i82, 0) + self.assertGreater(md.find("- [x] **卡腰**"), i82) self.assertIn("侧翼切入", md) self.assertIn("做低糖配方", md) self.assertIn("### 7.1 品牌建设", md) diff --git a/docs/openapi/pipeline-jobs.openapi.yaml b/docs/openapi/pipeline-jobs.openapi.yaml index 1f1d885..5e3161c 100644 --- a/docs/openapi/pipeline-jobs.openapi.yaml +++ b/docs/openapi/pipeline-jobs.openapi.yaml @@ -70,7 +70,7 @@ paths: description: Not found patch: tags: [jobs] - summary: 仅更新 report_config(报告关注词/场景/外部市场表等) + summary: 仅更新 report_config(外部市场表等;预设关注词/场景已废弃的请求字段将被忽略) parameters: - $ref: "#/components/parameters/JobId" requestBody: @@ -367,23 +367,9 @@ components: ReportConfig: type: object description: | - 允许键仅限下列三项;可全部省略或 `{}` 表示使用脚本内置默认。 + 允许键以后端 ``validate_report_config_body`` 为准(含各 ``llm_*``、``chapter8_text_mining_probe*``、``external_market_table_rows`` 等)。 + 已废弃:``comment_focus_words``、``comment_scenario_groups``、``llm_scenario_group_summaries``(请求中若出现将被忽略)。 properties: - comment_focus_words: - type: array - items: - type: string - comment_scenario_groups: - type: array - items: - type: object - properties: - label: - type: string - triggers: - type: array - items: - type: string external_market_table_rows: type: array items: @@ -533,7 +519,7 @@ components: positioning_choice: type: string enum: ['', 'top', 'mid', 'entry', 'different'] - description: 价格带主定位;空字符串表示文稿中四项均为未勾选 + description: 价位阵地取向(贴顶/卡腰/下探/另起带),写入策略稿「八、战术支柱 · 8.2 定价策略」;与「四、为什么要选这个品牌」(承诺与信任)分离。空字符串表示文稿中四项均为未勾选 competitive_stance: type: string enum: ['', 'flank', 'head_on', 'both', 'undecided'] diff --git a/docs/planning/策略生成-框架确定.md b/docs/planning/策略生成-框架确定.md index 0161ce1..6c96aea 100644 --- a/docs/planning/策略生成-框架确定.md +++ b/docs/planning/策略生成-框架确定.md @@ -99,11 +99,11 @@ | 1 | **一、顾客是谁** | 1.1 人群与路径 · 1.2 细类/评论侧归纳 · 1.3 本品聚焦(表单:角色、客群、对标) | | 2 | **二、产品价值与用户痛点** | **仅 §2.1** 表:「类目/细类 → 痛点简述 → 动作 → 落地 → 验证」;多细类**分行**,不确定则「待业务定类」+ 假设 | | 3 | **三、为什么要买「这款产品」** | **仅 §3.1** 品类与时机、购买理由;**无 §3.2**(与 §二 不重复写障碍与应对) | -| 4 | **四、为什么要选「这个品牌」** | 承诺与调性 · 信任与证据 · 主定位(表单勾选) | +| 4 | **四、为什么要选「这个品牌」** | 承诺与调性 · 信任与证据(**价位阵地**不在本章,见 **§8.2**) | | 5 | **五、与其它品牌有何不同** | 对比对象 · 差异化 · **竞争应对须写可执行应对**(不主动价格战 / 跟价时如何说明等) | | 6 | **六、阶段目标与路径** | 时间 / 成功标准 · **营销与总体策略须写成动作句**(与痛点挂钩) | | 7 | **七、品牌四线** | 建设 · 打造 · 运营 · 体验(与表单 4P 支柱对应,**每条线至少一条「怎么做」**) | -| 8 | **八、战术支柱** | 产品 / 定价 / 促销 / 渠道:**每支柱下写 针对哪条痛点、做什么、怎么落地** | +| 8 | **八、战术支柱** | **§8.2 定价**含**价位阵地取向**(表单贴顶/卡腰/下探/另起带勾选)与定价支柱叙述;其余:产品 / 促销 / 渠道:**每支柱下写 针对哪条痛点、做什么、怎么落地** | | 9 | **九、风险、假设与待验证** | 含表单风险勾选 | | 10 | **十、下一步与节奏** | 含业务备注;**下一步**为可执行任务,非口号 | | 11 | **附录** | 关键数据一览(与 brief 同源) | diff --git a/frontend/src/views/jd/JdStrategyBuildView.vue b/frontend/src/views/jd/JdStrategyBuildView.vue index b6c71bf..a00fd1a 100644 --- a/frontend/src/views/jd/JdStrategyBuildView.vue +++ b/frontend/src/views/jd/JdStrategyBuildView.vue @@ -240,7 +240,7 @@ watch( 。已填项写入底稿并由大模型落实;未填项可由大模型结合监测数据推断(仍受「禁止编造」约束)。
- 与成稿目录对齐(对应下载策略稿 Markdown):「策略范围与前提」→「摘要」→「一、顾客是谁」→「二、针对痛点要怎么做」(主要由数据与模型归纳)→「三~八、购买理由 / 品牌 / 竞品 / 阶段路径 / 品牌四线 / 战术支柱」→「九、风险」→「十、下一步」→「业务约束与备注」→「附录」。下方表单按同一条目顺序分组,便于逐项填写。 + 与成稿目录对齐(对应下载策略稿 Markdown):「策略范围与前提」→「摘要」→「一、顾客是谁」→「二、针对痛点要怎么做」(主要由数据与模型归纳)→「三、为什么要买这款产品」→「四、为什么要选这个品牌」(承诺与信任;底稿占位为主)→「五~七、竞品 / 阶段路径 / 品牌四线」→「八、战术支柱」(含价位阵地勾选与 4P)→「九、风险」→「十、下一步」→「业务约束与备注」→「附录」。第四章叙事本页不设表单项;贴顶/卡腰等价位取向归入第八章定价,见下方「战术支柱」分组。