perf: 全链路 LLM 提示词优化 + 微信公众号配图改为 base64 内联
- research.py: 提示词增加热点关联/独特观点储备/市场价值判断/平台搜索趋势 - outline.py: 增加反常识洞察/平台推荐优化/每章市场价值产出要求 - writer.py _expand_section: 增加独特观点/热点时效/专业简洁/平台推荐友好要求 - writer.py _optimize_title: 各平台补充搜索热词利用/情绪感召/参考真实爆款语气 - writer.py wechat配图: placeholder.jpg 改为 base64 内联 SVG(带相机图标+提示文案),预览可渲染,复制即用
This commit is contained in:
+36
-15
@@ -105,17 +105,26 @@ class Writer:
|
||||
return content
|
||||
if HAVE_LLM and len(content) < 150:
|
||||
logger.info(f"使用 LLM 扩写章节: {section['title']}")
|
||||
prompt = f"""你是一个真人写作者,正在写一篇关于「{self.topic['title']}」的文章。现在写「{section['title']}」这一节。
|
||||
prompt = f"""你是一个真人写作者+行业观察者,正在写一篇关于「{self.topic['title']}」的文章。现在写「{section['title']}」这一节。
|
||||
|
||||
笔记要点:
|
||||
{content}
|
||||
|
||||
要求(逐条对照):
|
||||
要求(逐条对照,每一条都不能跳过):
|
||||
### 热点与时效
|
||||
- **引用2025-2026年最新数据/事件/政策/行业报告**,禁用过时数据
|
||||
- 体现当前国内外在讨论什么、最新的趋势变化
|
||||
- 每个论点尽量配一个真实发生的最新案例
|
||||
|
||||
### 独特观点
|
||||
- 有自己的判断和立场,拒绝"车轱辘话"和"正确废话"
|
||||
- 至少提供一个"大多数人没想到"的角度
|
||||
- 宁可尖锐,也不要平庸
|
||||
|
||||
### 价值
|
||||
- 回答读者一个具体问题或解决一个困惑
|
||||
- 每个论点配真实案例或数据,不写空话
|
||||
- **所有数据必须使用2025-2026年最新数据**,禁用过时数据
|
||||
- 结束时读者要有「学到了」的感觉
|
||||
- 每段回答一个"所以呢?"——读者看完能带走什么
|
||||
- 结束时读者要有「学到了+想转发」的感觉
|
||||
|
||||
### 真人感
|
||||
- 用「你」或「我们」视角,不要用「我」
|
||||
@@ -128,9 +137,14 @@ class Writer:
|
||||
- 自然融入1-2个目标搜索词,不生硬堆砌
|
||||
- 第一句包含核心关键词
|
||||
|
||||
### 长度
|
||||
### 专业与简洁
|
||||
- 语言精准,不注水,不为了字数凑内容
|
||||
- 200-400字,写到点子上就停
|
||||
|
||||
### 平台推荐友好
|
||||
- 节奏不能平,要有起承转合
|
||||
- 结尾要让人有点赞/收藏/转发的冲动
|
||||
|
||||
直接输出段落正文。"""
|
||||
try:
|
||||
expanded = call_llm(prompt, temperature=0.6, max_tokens=1500)
|
||||
@@ -279,11 +293,13 @@ class Writer:
|
||||
|
||||
要求:
|
||||
- 有信息量:一看就知道能解决什么问题
|
||||
- 含知乎搜索关键词(SEO)
|
||||
- 含知乎搜索关键词(SEO),利用知乎搜索联想热词
|
||||
- 带数字或对比最好(「3个方法」「从…到…」)
|
||||
- 20字以内
|
||||
- 参考知乎真实高赞标题,不要套路句式
|
||||
- 参考知乎真实高赞标题风格,不要套路句式
|
||||
- 避免「如何…」废句式、「XXX指南/手册/全攻略」
|
||||
- 有观点、有态度,不是中性描述
|
||||
- 直击目标读者痛点或好奇心
|
||||
- 直接输出3个标题选项,每行一个,不要输出思考过程
|
||||
|
||||
生成 3 个选项,每行一个。""",
|
||||
@@ -295,10 +311,12 @@ class Writer:
|
||||
|
||||
要求:
|
||||
- 制造好奇心和点击欲,让人觉得不点开会错过
|
||||
- 包含微信搜索关键词(微信SEO)
|
||||
- 包含微信搜索关键词(微信SEO),利用搜一搜热门词
|
||||
- 口语化,不要书面腔
|
||||
- 不要感叹号堆砌,不要「重磅/震惊/紧急」
|
||||
- 字数15-25字最佳
|
||||
- 有情绪感召力:共鸣/好奇/焦虑/期待
|
||||
- 参考近期10万+标题的语气节奏
|
||||
- 直接输出3个标题选项,每行一个,不要输出思考过程
|
||||
|
||||
生成 3 个选项,每行一个。""",
|
||||
@@ -310,12 +328,13 @@ class Writer:
|
||||
|
||||
要求:
|
||||
- 20字以内
|
||||
- 采用爆款模式:数字+结果/痛点+方案/反常识观点
|
||||
- 包含小红书搜索关键词(SEO)
|
||||
- 带1个emoji点缀
|
||||
- 有场景感/结果感
|
||||
- 采用爆款模式:数字+结果/痛点+方案/反常识观点/对比式
|
||||
- 包含小红书搜索关键词(SEO),利用搜索下拉热词
|
||||
- 带1个精准emoji点缀,不要三个起堆
|
||||
- 有场景感/结果感/获得感
|
||||
- 不要「必看/收藏/码住」
|
||||
- 像真实用户写的,不是运营写的
|
||||
- 参考小红书搜索热榜标题风格
|
||||
- 直接输出3个标题选项,每行一个,不要输出思考过程
|
||||
|
||||
生成 3 个选项,每行一个。""",
|
||||
@@ -354,8 +373,10 @@ class Writer:
|
||||
|
||||
# WeChat: insert image placeholder at start of body
|
||||
if platform == "wechat":
|
||||
img_tag = '<p><img src="placeholder.jpg" alt="配图" style="width:100%;max-width:1080px;border-radius:8px;"></p>\n'
|
||||
# Insert after <h1> if present, else prepend
|
||||
img_svg = '<svg xmlns="http://www.w3.org/2000/svg" width="1080" height="600" viewBox="0 0 1080 600" style="width:100%;max-width:1080px;border-radius:8px;background:#f0f2f5"><rect width="1080" height="600" fill="#f0f2f5"/><g transform="translate(540,260)" text-anchor="middle" font-family="-apple-system,BlinkMacSystemFont,sans-serif"><circle cx="0" cy="-20" r="40" fill="#d0d5dd"/><path d="M-25,10 L-10,10 L-5,0 L5,0 L10,10 L25,10 L25,60 L-25,60 Z" fill="#d0d5dd"/><circle cx="0" cy="10" r="15" fill="#fff"/><text y="80" font-size="18" fill="#98a2b3">点击替换配图(建议 1080×600)</text></g></svg>'
|
||||
import base64
|
||||
img_b64 = 'data:image/svg+xml;base64,' + base64.b64encode(img_svg.encode('utf-8')).decode('ascii')
|
||||
img_tag = f'<p><img src="{img_b64}" alt="配图" style="width:100%;max-width:1080px;border-radius:8px;"></p>\n'
|
||||
h1_end = html_content.find('</h1>')
|
||||
if h1_end != -1:
|
||||
html_content = html_content[:h1_end + 5] + '\n' + img_tag + html_content[h1_end + 5:]
|
||||
|
||||
Reference in New Issue
Block a user