mirror of
https://github.com/primedigitaltech/market-assistant.git
synced 2026-07-21 23:41:39 +08:00
refactor(strategy): 策略成稿章节顺序与 LLM 提示对齐
底稿重排为诊断→方向→4P→风险→约束→行动;前端表单 legend 与成稿章节一致;generate_strategy 系统提示约束一至十顺序;JdStrategyBuildView 补充成稿说明与 hint-flow 样式。 Made-with: Cursor
This commit is contained in:
parent
99bd2ef40d
commit
c096f69082
@ -36,6 +36,8 @@ STRATEGY_SYSTEM = """你是市场策略顾问,根据**结构化监测摘要**
|
||||
- 用户洞察、场景与传播结论须与宿主报告 **§8 文本挖掘** 及 `report_strategy_excerpt`(第九章)一致。
|
||||
- **促销与活动**:若 `report_strategy_excerpt` 或 `structured_brief.price_promotion_signals` 中出现满减、券、到手价差、促销形态等,成稿须在**价格/营销/渠道**相关段落**承接**,与报告 **第六章、第九章** 建议一致,**不得无故省略**;**禁止**编造具体满减门槛或补贴比例(仅复述输入中已有线索)。
|
||||
|
||||
**输出结构与阅读顺序**:成稿建议保持与规则底稿一致:**一至十** 依次为——目标与边界 → 战场与样本 → 竞争与本品态势 → 价格带与定位 → 用户与评论侧 → 营销策略与总体方向 → 机会与 4P 支柱 → 风险 → 业务约束 → 下一步;可微调标题用语,**勿**把「诊断数据」与「落地动作」顺序颠倒。
|
||||
|
||||
**输出**:仅 Markdown 正文(不要 ``` 围栏);须收束各小节与全文,勿中途截断。"""
|
||||
|
||||
STRATEGY_USER_PREFIX = """请基于以下 JSON 输出最终策略稿(Markdown)。\n\n"""
|
||||
|
||||
@ -172,6 +172,7 @@ def build_strategy_draft_markdown(
|
||||
"",
|
||||
"> **骨架说明**:本页为**规则骨架**(占位与少量摘录)。勾选大模型生成时,在骨架与数据上写**短、可执行**成稿。"
|
||||
"**决策在策略生成表单完成**;未填项由模型结合本任务摘要与报告节选补全,**成稿不再写「请再选 / 请决策」式套话**。",
|
||||
"> **阅读顺序**:目标与边界 → 战场与样本 → 竞争与本品态势 → 价格带与定位 → 用户与评论侧 → 营销与总体方向 → 机会与 4P 支柱 → 风险 → 业务约束 → 下一步行动。",
|
||||
"",
|
||||
]
|
||||
if generated_at_iso:
|
||||
@ -211,30 +212,12 @@ def build_strategy_draft_markdown(
|
||||
]
|
||||
)
|
||||
|
||||
lines.extend(
|
||||
[
|
||||
"## 二、营销策略与总体方向",
|
||||
"",
|
||||
_goal_bullet(
|
||||
"营销策略",
|
||||
str(d.get("marketing_strategy") or ""),
|
||||
"传播、活动、投放、内容主线等(可选)",
|
||||
),
|
||||
_goal_bullet(
|
||||
"总体策略",
|
||||
str(d.get("general_strategy") or ""),
|
||||
"增长/品类/经营层面的总原则,可与 4P 支柱呼应(可选)",
|
||||
),
|
||||
"",
|
||||
]
|
||||
)
|
||||
|
||||
scope = brief.get("scope") or {}
|
||||
merged_n = scope.get("merged_sku_count")
|
||||
comm_n = scope.get("comment_flat_rows")
|
||||
lines.extend(
|
||||
[
|
||||
"## 三、战场与样本",
|
||||
"## 二、战场与样本",
|
||||
"",
|
||||
f"- **监测关键词 / 货架语境**:{kw}",
|
||||
f"- **批次**:{_esc(brief.get('batch_label')) or '—'}",
|
||||
@ -256,7 +239,7 @@ def build_strategy_draft_markdown(
|
||||
conc = brief.get("concentration") or {}
|
||||
shops = conc.get("shops_from_list") or {}
|
||||
dbrand = conc.get("detail_brand_among_merged") or {}
|
||||
lines.extend(["## 四、竞争结构(摘录)", ""])
|
||||
lines.extend(["## 三、竞争结构与本品态势(摘录)", ""])
|
||||
n_shop = _cr_narrative(
|
||||
"列表侧店铺集中度",
|
||||
concentration_first_share(shops),
|
||||
@ -284,6 +267,8 @@ def build_strategy_draft_markdown(
|
||||
"",
|
||||
]
|
||||
)
|
||||
lines.append("### 本品竞争态势(与表单「竞争态势自判」一致)")
|
||||
lines.append("")
|
||||
stance = _esc(d.get("competitive_stance") or "").strip()
|
||||
stance_line = {
|
||||
"flank": "- **本品倾向**:侧翼切入,避免与头部正面硬碰。",
|
||||
@ -305,7 +290,7 @@ def build_strategy_draft_markdown(
|
||||
lines.append("")
|
||||
|
||||
pst = brief.get("price_stats") or {}
|
||||
lines.extend(["## 五、价格带与定位(业务已选)", ""])
|
||||
lines.extend(["## 四、价格带与定位(业务已选)", ""])
|
||||
if pst.get("n"):
|
||||
src = _esc(brief.get("price_stats_source")) or "—"
|
||||
lines.extend(
|
||||
@ -339,7 +324,7 @@ def build_strategy_draft_markdown(
|
||||
|
||||
ckw = brief.get("comment_focus_keywords") or []
|
||||
usc = brief.get("usage_scenarios") or []
|
||||
lines.extend(["## 六、用户与评论侧", ""])
|
||||
lines.extend(["## 五、用户与评论侧", ""])
|
||||
if use_ch8_probe:
|
||||
lines.extend(
|
||||
[
|
||||
@ -375,6 +360,24 @@ def build_strategy_draft_markdown(
|
||||
lines.append("*摘要中无关注词/场景组,请结合评论侧分析补全本节。*")
|
||||
lines.append("")
|
||||
|
||||
lines.extend(
|
||||
[
|
||||
"## 六、营销策略与总体方向",
|
||||
"",
|
||||
_goal_bullet(
|
||||
"营销策略",
|
||||
str(d.get("marketing_strategy") or ""),
|
||||
"传播、活动、投放、内容主线等(可选)",
|
||||
),
|
||||
_goal_bullet(
|
||||
"总体策略",
|
||||
str(d.get("general_strategy") or ""),
|
||||
"增长/品类/经营层面的总原则,可与下方 4P 支柱呼应(可选)",
|
||||
),
|
||||
"",
|
||||
]
|
||||
)
|
||||
|
||||
raw_hints = brief.get("strategy_hints") or []
|
||||
hints = (
|
||||
filter_strategy_hints_for_ch8_probe(raw_hints)
|
||||
@ -383,7 +386,7 @@ def build_strategy_draft_markdown(
|
||||
)
|
||||
lines.extend(
|
||||
[
|
||||
"## 七、机会与策略支柱",
|
||||
"## 七、机会与策略支柱(4P 落地)",
|
||||
"",
|
||||
(
|
||||
"### 摘要提示(`strategy_hints`,已按探针口径过滤)"
|
||||
@ -405,7 +408,7 @@ def build_strategy_draft_markdown(
|
||||
lines.extend(
|
||||
[
|
||||
"",
|
||||
"### 策略支柱(表单已填优先)",
|
||||
"### 4P 策略支柱(表单已填优先)",
|
||||
"",
|
||||
"| 支柱 | 本品动作 | 与头部差异 | 证据 / 出处 |",
|
||||
"|------|----------|------------|-------------|",
|
||||
|
||||
@ -188,6 +188,9 @@ watch(
|
||||
<RouterLink to="/jd/strategy-view">策略稿预览</RouterLink>
|
||||
。<strong>决策在本页完成</strong>:已填项会写入底稿并由大模型落实为执行句;未填项由大模型结合数据补全。成稿不再重复「请再选」式表述。
|
||||
</p>
|
||||
<p class="hint-top hint-flow">
|
||||
<strong>成稿章节顺序</strong>:一 目标与边界 → 二 战场与样本 → 三 竞争与本品态势 → 四 价格带与定位 → 五 用户与评论侧(由报告 §8/摘要支撑,本页无单独表单项)→ 六 营销与总体方向 → 七 4P 支柱 → 八 风险 → 九 业务约束 → 十 下一步。
|
||||
</p>
|
||||
|
||||
<div class="toolbar">
|
||||
<label class="chk-inline">
|
||||
@ -299,7 +302,7 @@ watch(
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fieldset">
|
||||
<legend>五、营销策略与总体策略</legend>
|
||||
<legend>六、营销策略与总体策略</legend>
|
||||
<label class="fld fld-block">
|
||||
<span>营销策略</span>
|
||||
<textarea
|
||||
@ -319,7 +322,7 @@ watch(
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fieldset">
|
||||
<legend>六、策略支柱 — 本品打算怎么做(可先填一列)</legend>
|
||||
<legend>七、策略支柱(4P)— 本品打算怎么做(可先填一列)</legend>
|
||||
<label class="fld fld-block">
|
||||
<span>产品</span>
|
||||
<textarea v-model="decisions.pillar_product" rows="2" />
|
||||
@ -339,7 +342,7 @@ watch(
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fieldset">
|
||||
<legend>七、风险确认(已知晓则勾选)</legend>
|
||||
<legend>八、风险确认(已知晓则勾选)</legend>
|
||||
<label class="chk">
|
||||
<input v-model="decisions.ack_risk_keywords" type="checkbox" />
|
||||
关注词 / 场景可能以偏概全(需原评论抽样)
|
||||
@ -355,7 +358,7 @@ watch(
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="fieldset">
|
||||
<legend>八、业务约束与内部判断</legend>
|
||||
<legend>九、业务约束与内部判断</legend>
|
||||
<label class="fld fld-block">
|
||||
<span>业务备注</span>
|
||||
<textarea
|
||||
@ -376,6 +379,12 @@ watch(
|
||||
color: #4b5563;
|
||||
line-height: 1.55;
|
||||
}
|
||||
.hint-flow {
|
||||
margin-top: -0.6rem;
|
||||
padding-top: 0.5rem;
|
||||
border-top: 1px solid #e5e7eb;
|
||||
font-size: 0.84rem;
|
||||
}
|
||||
.hint-top a,
|
||||
.hint-top :deep(a) {
|
||||
color: #2563eb;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user