mirror of
https://github.com/primedigitaltech/market-assistant.git
synced 2026-07-21 23:41:39 +08:00
docs: 对齐竞品报告第八章新节号与情感 LLM 说明
第三节/§8.3 改为第二节/§8.2(关注词与场景路径);策略规划表区分报告章与策略稿 §8.x;快照 omission_note 与 brief 无 lexicon 一致;generate_sections/comment_sentiment 注释反映报告不再发图。 Made-with: Cursor
This commit is contained in:
parent
23ddf115ee
commit
30ea9783b3
@ -409,7 +409,7 @@ def build_comment_sentiment_llm_payload(
|
||||
(全量去重后的评价句确定性洗牌抽样,供模型结合语境自行判断褒贬)。
|
||||
|
||||
``sentiment_bucket_method``:有有效评分列时为 ``score_then_lexeme``,否则为 ``keyword_substring_heuristic``;
|
||||
条形图与 ``comment_sentiment_lexicon`` 计数方式与之一致,正文归纳仍以整句语义为准。
|
||||
``comment_sentiment_lexicon`` 与各象限计数一致(竞品报告与 brief **已不再**发布同口径图);正文归纳仍以整句语义为准。
|
||||
"""
|
||||
use_score_column = bool(
|
||||
scores is not None
|
||||
|
||||
@ -292,7 +292,7 @@ def build_scenario_groups_llm_payload(
|
||||
sku_header: str,
|
||||
title_h: str,
|
||||
) -> dict[str, Any]:
|
||||
"""供 ``generate_scenario_group_summaries_llm``;计数与 §8.3 图右栏(场景)一致。"""
|
||||
"""供 ``generate_scenario_group_summaries_llm``;计数与 **§8.2** 关注词/场景路径下图右栏(场景)一致。"""
|
||||
if not feedback_groups:
|
||||
return {}
|
||||
sku_meta: dict[str, tuple[str, str, str]] = {}
|
||||
|
||||
@ -51,7 +51,7 @@ def generate_matrix_group_summaries_llm(
|
||||
|
||||
COMMENT_GROUPS_SYSTEM = """你是用户研究与品类顾问。输入为 JSON:``keyword`` 与 ``groups``。
|
||||
每个 group 含 ``group``(与 第五章矩阵一致的细分类目名)、``comment_flat_rows``、``effective_text_lines``、
|
||||
``focus_hit_lines``(关注词子串命中摘要,与 第八章第三节 同源)、``sample_text_snippets``(评价短摘录,已截断)。
|
||||
``focus_hit_lines``(关注词子串命中摘要,与 **第八章第二节**(关注词与场景路径)左栏同源)、``sample_text_snippets``(评价短摘录,已截断)。
|
||||
摘录行通常以 ``【细类:…|SKU:…|品名:…|店铺:…】`` 开头:细类可与本 group 名对照,**品名/SKU/店铺**表示该句具体出自哪条链接;归纳时若引用原话,**须交代是「哪家店、哪条 SKU、哪款品名」上的反馈**,勿只写「有用户说口感差」而不指代产品。
|
||||
关注词命中为子串统计,可能与句意不一致;**请以整句语义**判断褒贬(如「软硬适中」「没那么甜」常为满意表述,不得据此写成质地问题)。
|
||||
|
||||
@ -163,9 +163,9 @@ def generate_comment_group_summaries_llm(
|
||||
|
||||
|
||||
SCENARIO_GROUPS_SYSTEM = """你是用户研究与品类顾问。输入为 JSON:``keyword``、``scenario_lexicon``、``groups``。
|
||||
``scenario_lexicon`` 列出各场景标签及示例触发子串(与报告 **第八章第三节** 右栏统计规则一致)。
|
||||
``scenario_lexicon`` 列出各场景标签及示例触发子串(与报告 **第八章第二节**(关注词与场景路径)右栏统计规则一致)。
|
||||
``groups`` 每项含 ``group``(与 第五章矩阵一致的细分类目名)、``effective_text_count``(有效评价文本条数)、
|
||||
``scenario_distribution``(各预设场景的 ``mention_rows`` 与 ``share_of_effective_texts``;**一条评价可计入多场景**;与 第八章第三节 图右栏同源)、
|
||||
``scenario_distribution``(各预设场景的 ``mention_rows`` 与 ``share_of_effective_texts``;**一条评价可计入多场景**;与 **第八章第二节** 图右栏同源)、
|
||||
``sample_text_snippets``(摘录行常含细类、SKU、品名、店铺等前缀的短引文,已截断)。
|
||||
统计为**子串命中**,不是语义主题模型。
|
||||
|
||||
@ -179,7 +179,7 @@ SCENARIO_GROUPS_SYSTEM = """你是用户研究与品类顾问。输入为 JSON
|
||||
|
||||
|
||||
SCENARIO_GROUPS_USER_PREFIX = (
|
||||
"请根据以下 JSON 撰写竞品报告 第八章第三节(右栏:使用场景)之后的「使用场景要点归纳」正文(Markdown)。\n\n"
|
||||
"请根据以下 JSON 撰写竞品报告 第八章第二节(右栏:使用场景)之后的「使用场景要点归纳」正文(Markdown)。\n\n"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
"""第八章情感解读、报告分章、章节衔接等 LLM。"""
|
||||
"""评价情感 LLM(可选):默认**不**写入竞品报告;供独立调用或历史任务兼容。"""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
@ -10,9 +10,9 @@ from .llm_client import call_llm
|
||||
|
||||
SENTIMENT_LLM_SYSTEM = """你是电商/食品类用户研究助手。输入 JSON 含:
|
||||
|
||||
- ``comment_sentiment_lexicon``:子串词表统计(与报告条形图**同一计数方式**,**仅作定量参考**;子串命中≠说话人态度)。
|
||||
- ``comment_sentiment_lexicon``:子串词表统计(与载荷内各计数字段**同一计数方式**;竞品报告**已不再**发布同口径扇形图/条形图;**仅作定量参考**;子串命中≠说话人态度)。
|
||||
- ``positive_lexeme_hits_top`` / ``negative_lexeme_hits_top``:短语级命中摘要(同源)。
|
||||
- ``sentiment_bucket_method``:``score_then_lexeme`` 表示**先按 1~5 星分桶**(无评分行再按关键词);``keyword_substring_heuristic`` 表示**仅关键词**分桶;与条形图一致。``sample_reviews_positive_biased`` / ``negative`` / ``mixed_tone`` 按该规则**机械归类**的抽样,**可能与整句真实褒贬不一致**(例如「软硬适中」曾被误归负向)。
|
||||
- ``sentiment_bucket_method``:``score_then_lexeme`` 表示**先按 1~5 星分桶**(无评分行再按关键词);``keyword_substring_heuristic`` 表示**仅关键词**分桶;与 ``comment_sentiment_lexicon`` 内四象限计数一致。``sample_reviews_positive_biased`` / ``negative`` / ``mixed_tone`` 按该规则**机械归类**的抽样,**可能与整句真实褒贬不一致**(例如「软硬适中」曾被误归负向)。
|
||||
- **``sample_reviews_semantic_pool``**(若有):本批评价经去重后的**随机/洗牌抽样**(来自全部有效条,不限于某一象限)。**归纳正/负向体验、引用「」短引文时,优先以此池与上述各列表中的原文为准,自行结合语境理解**:转折、对比(如「没那么甜」「软硬适中」)、先抑后扬/先扬后抑整句态度;**不得以子串是否命中负面词来断言该句为抱怨**。
|
||||
|
||||
每条样本通常以 ``【细类:…|SKU:…|品名:…|店铺:…】`` 开头,表示 **第五章细类、SKU、品名、店铺**;写归纳与「」引文时须能还原「哪家店、哪条 SKU、哪款品名」,或保留前缀,**禁止**无指代地写「用户普遍…」。
|
||||
@ -24,7 +24,7 @@ SENTIMENT_LLM_SYSTEM = """你是电商/食品类用户研究助手。输入 JSON
|
||||
- **定性归纳**(满意点/抱怨点、引语是否算差评):以**整句语义**为准;若某句在语义上为褒义或中性描述,**不得**放入「质地差、口感硬」等负向归因;若词表归类结果与句意冲突,**以句意为准**,并在「使用注意」点明「关键词归类**仅反映子串计数,不作态度判断**」。
|
||||
- **负向主题优先级(硬性)**:写「主要」「集中」「突出」类抱怨前,**必须对照** ``negative_lexeme_hits_top`` 各短语的 ``texts_matched``:若「口感硬/咬不动/发硬」等**预设短语命中为 0 或明显低于**其它维度(如分量、少、物流),**不得**把质地硬写成首要负向主题;若抽样原文与语义池里**反复出现**「分量少、太少、不够吃」等而预设短语未列出,仍须**单独归纳**(用户常用生活化表述,不必与预设表完全一致)。
|
||||
- 若某措辞**未**出现在任一抽样原文(含前缀后正文)中,**禁止**用引号写成直接引语。
|
||||
- **不要**只复述「某词出现 N 次」——条形图已展示;你的价值是**语义归纳**。
|
||||
- **不要**只复述「某词出现 N 次」——若业务侧仍配图表则由图展示;你的价值是**语义归纳**。
|
||||
|
||||
**建议结构**(使用四级标题 ``####``):
|
||||
1. ``#### 正向体验主题``:3~6 条;概括满意点(口感、甜度、性价比等),**尽量**用「」引用 ``sample_reviews_semantic_pool`` 或其它样本中**语义确为正面**的短句(勿把对比褒义句当差评例子)。
|
||||
@ -36,7 +36,7 @@ SENTIMENT_LLM_SYSTEM = """你是电商/食品类用户研究助手。输入 JSON
|
||||
|
||||
|
||||
def generate_comment_sentiment_analysis_llm(payload: dict[str, Any]) -> str:
|
||||
"""基于 lexicon 统计 + 语义池与按词表归类的抽样,生成 第八章第二节 大模型解读段落(Markdown)。"""
|
||||
"""基于 lexicon 统计 + 语义池与按词表归类的抽样,生成评价情感归纳段落(Markdown);**默认不**嵌入竞品报告正文。"""
|
||||
p = dict(payload)
|
||||
raw = json.dumps(p, ensure_ascii=False)
|
||||
if len(raw) > 88_000:
|
||||
|
||||
@ -145,7 +145,9 @@ class BuildCompetitorBriefTests(SimpleTestCase):
|
||||
self.assertIn("店铺:", lines[0])
|
||||
self.assertIn("整体口感还差点意思", lines[0])
|
||||
|
||||
def test_scenario_groups_llm_payload_matches_section_8_4_counts(self) -> None:
|
||||
def test_scenario_groups_llm_payload_matches_chapter8_sec2_right_rail_counts(
|
||||
self,
|
||||
) -> None:
|
||||
sku_h = "SKU(skuId)"
|
||||
merged = [
|
||||
{
|
||||
|
||||
@ -9,7 +9,7 @@ reportlab>=4.0
|
||||
matplotlib>=3.8
|
||||
playwright>=1.40
|
||||
|
||||
# 第八章评论文本补充分析(默认写入竞品报告第八章第三节时需安装)
|
||||
# 第八章评论文本补充分析(默认写入竞品报告第八章第二节时需安装)
|
||||
jieba>=0.42
|
||||
scikit-learn>=1.4
|
||||
numpy>=1.26
|
||||
|
||||
11
docs/demo/市场策略稿-示例-20260410_134015_低GI.md
Normal file
11
docs/demo/市场策略稿-示例-20260410_134015_低GI.md
Normal file
@ -0,0 +1,11 @@
|
||||
# 市场策略稿(示例 · 批次 20260410_134015)— 已过时
|
||||
|
||||
本文件曾基于较早跑批撰写,其中 **§1.2「核心场景」规则统计占比表**(如早餐/代餐 28.6%)来自简报 **`usage_scenarios` 词组规则**,**已非当前产品主依据**。
|
||||
|
||||
当前版本已改为以 **第八章第二节「评论文本补充分析」(文本挖掘:分词、词频、共现、LDA、词云)** 作为评论侧策略依据(`chapter8_text_mining_probe` 开启时);**不再**使用原「评价正负面粗判」预设口语短语扇形图/条形图。未开探针时第八章第二节仍为「关注词与使用场景」并列图路径。
|
||||
|
||||
**请改读:**
|
||||
|
||||
- **[市场策略稿-示例-20260413_104252_低GI.md](./市场策略稿-示例-20260413_104252_低GI.md)**(`data/JD/pipeline_runs/20260413_104252_低GI`,与现有文本挖掘产出一致)
|
||||
|
||||
目录模板仍见:[市场策略稿-目录模板-六主轴与品牌四线.md](../templates/市场策略稿-目录模板-六主轴与品牌四线.md)。
|
||||
File diff suppressed because one or more lines are too long
@ -184,7 +184,7 @@ LLM 路径下:**A** 经 `compact_brief_for_llm` 压缩进 payload;**B** 原
|
||||
| 口感按细类:酥脆 vs 松软分线,禁止一词盖全站 | `STRATEGY_SYSTEM` **口感/质地与细类** |
|
||||
| 促销:满减/满折/券/跨店,不编造门槛、不全节留空 | `STRATEGY_SYSTEM` **促销**;底稿 §八.3 |
|
||||
| 报告第九章仍用 `generate_strategy_opportunities_llm`,runner 正文拼装不改 | 代码现状;本文件 §5 |
|
||||
| 人工可读示例(低 GI) | `docs/demo/市场策略稿-示例-20260413_104252_低GI.md`(含 §2.1、§8.3 范例句) |
|
||||
| 人工可读示例(低 GI) | `docs/demo/市场策略稿-示例-20260413_104252_低GI.md`(含 §2.1;策略稿目录 §8.x 为「战术支柱」促销等,勿与竞品报告第八章节号混淆) |
|
||||
|
||||
**另行立项(本文件不承诺已编码)**:营销内容管线 S2/S3(见 `strategy-marketing-content-alignment.md`)、仅摘要模板、表单新字段、输出数字同源性自动校验 S4。
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user