上线版: 产品表单统一+form嵌套修复+用户管理+部署+三套叙事

- 产品编辑入口统一走 ProductFormFull(卖点/风格/人群/品牌词全字段);
  修复开任务页 <form> 套 <form> 致"编辑产品"报错、改不了、跳回首个产品
- dashboard 入口卡片对齐实际路由: 系统管理(/config) 与 工作配置(/settings) 分开;
  settings ?tab=products 直达改用挂载后读 URL, 消除 hydration mismatch
- 新增用户管理(users API/admin service/改密页) + alembic 022/023/024
- 上线部署: Dockerfile / docker-compose.prod+https / nginx https / .env.example
- A8 三套正交叙事(痛点/场景/成分背书) + beige 调色去AI化 + 飞轮 text_import 高权重信号

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
yangqianqian
2026-06-30 18:08:13 +08:00
parent a77212781c
commit df1856d793
150 changed files with 8616 additions and 1765 deletions

View File

@@ -137,7 +137,13 @@ def build_fission_prompt(
source_note: dict, product: dict, reference_level: str,
note_count: int, image_count: int, dimensions: list[str] | None = None,
) -> str:
"""组装裂变 user prompt对齐上线版 handleContentSplit 的 prompt 变量拼装)。"""
"""组装裂变 user prompt对齐上线版 handleContentSplit 的 prompt 变量拼装)。
D3修复给每套分配正交叙事主线复用 TEXT_NARRATIVE_BY_STRATEGY A/B/C
套数超过3时按顺序循环套4=A/套5=B让各套开篇/背书/收尾正交拉开。
"""
from app.services.ai_engine.constants import TEXT_NARRATIVE_BY_STRATEGY
src = source_note or {}
prod = product or {}
dims = dimensions or DEFAULT_DIMENSIONS
@@ -149,9 +155,24 @@ def build_fission_prompt(
points = prod.get("selling_points", []) or []
audience = prod.get("target_audience", "") or "未提供"
keywords = prod.get("keywords", []) or []
kw_line = "".join(keywords) if keywords else "".join(
[x for x in [name, audience, "真实测评", "好物分享"] if x and x != "未提供"]
)
# D2修复去掉"真实测评/好物分享"泛词兜底评分prompt明确泛词占≥50%最高6分自打自
# 改用产品真实信息提炼精准词实在无keywords也不塞流量泛词
if keywords:
kw_line = "".join(keywords)
else:
# 从产品卖点/人群/名称里取实质性词,不拼平台泛词
sp_words = [str(s).strip() for s in (points[:2] if points else []) if str(s).strip()]
kw_parts = [x for x in ([name] + sp_words + ([audience] if audience != "未提供" else [])) if x and x != "未提供"]
kw_line = "".join(kw_parts) if kw_parts else ""
# D3修复按套序循环分配 A/B/C 叙事主线
narrative_keys = list(TEXT_NARRATIVE_BY_STRATEGY.keys()) # ["A","B","C"]
narrative_lines = []
for i in range(note_count):
key = narrative_keys[i % len(narrative_keys)]
narrative_lines.append(f"{i+1}套叙事主线:{TEXT_NARRATIVE_BY_STRATEGY[key]}")
narrative_block = "\n".join(narrative_lines)
return f"""爆款参考:
标题:{title}
正文:{content}
@@ -166,7 +187,11 @@ def build_fission_prompt(
生成数量:{note_count}
每套图片数量:{image_count}
【各套正交叙事主线——必须严格执行,这是本次裂变不同质的关键】
{narrative_block}
请生成{note_count}套完整小红书图文笔记包。每套都必须含标题、正文、标签、点击钩子标题、{image_count}张图的imagePlan。
每套必须严格按其指定叙事主线展开开篇/背书/收尾,不同套之间叙事结构必须正交、不重复。
imagePlan必须按叙事链路逐张递进。3张版第2张必须是按当前品类变化的核心证明页不能和第1张重复构图不得让第2张重复第1张标题。
正文必须像真实小红书种草笔记一样自然带2-5个emoji不要把图片规划/配图建议/内部审核建议写进正文。"""