LLM Moment 辅助发贴助手实现指南

在快节奏的生活中,想要发一条有格调的朋友圈却苦于没有灵感?本项目的 Moment 辅助发帖助手 利用本地部署的大语言模型(LLM),结合你的历史发帖风格,为你智能生成多条不同风格的朋友圈文案供你选择。

核心实现原理

1. 架构设计

助手采用 Python + Ollama + YAML 配置 的轻量级架构:

  • Python 脚本 (publish_moment.py): 核心逻辑控制器,负责交互、调用模型、保存文件。
  • Ollama: 本地 LLM 服务,提供模型推理能力(支持 minicpm-v:8b 等模型)。
  • YAML 配置 (moment_config.yaml): 集中管理模型参数、提示词模板和运行模式。

2. 动态风格学习

助手不是死板地套用模板,而是实时学习你的风格

  • 每次运行时,脚本会自动扫描 content/moments/ 目录。
  • 读取你最近发布的 3 条朋友圈作为 Few-Shot(少样本)示例。
  • 将这些示例注入到提示词中,让模型模仿你的排版、语气和用词习惯。

3. 多选项生成机制

为了避免“一刀切”的生成结果,助手采用多选项策略

  • 要求模型一次性生成 3 个不同风格的选项(如:严格仿古、略带抒情、极简意境)。
  • 用户可以在终端查看并选择最满意的一条,或者输入 4 让模型重新生成。

提示词工程 (Prompt Engineering) 详解

提示词工程是本项目的灵魂,决定了生成文案的质量。我们采用了 System Prompt + User Prompt + Few-Shot 的组合策略。

1. System Prompt (系统提示词)

定义模型的角色和输出格式约束:

system_prompt: |
  你是一位专注分享中国古典文学与诗意生活的朋友圈博主。
  请根据用户的输入诉求,结合提供的历史发帖风格,生成 3 个不同风格程度的选项供用户选择。
  输出要求:
  1. 必须严格基于历史风格(古典、诗词、意境)。
  2. 选项之间要有细微的风格差异(例如:选项 1 严格仿古,选项 2 略带抒情,选项 3 极简意境)。
  3. **必须且只能**输出一个 JSON 数组,格式如下:
  [{"id": 1, "label": "严格仿古", "content": "内容..."}, {"id": 2, "label": "略带抒情", "content": "内容..."}, {"id": 3, "label": "极简意境", "content": "内容..."}]
  4. 不要输出任何 JSON 之外的文字,不要 Markdown 代码块标记。

设计要点:

  • 角色设定: 明确“古典文学博主”的人设,限制模型的发挥范围。
  • 格式强约束: 强制要求输出 JSON 数组,便于 Python 脚本解析。
  • 负向提示: 禁止输出多余的解释性文字,防止解析失败。

2. User Prompt (用户提示词)

动态注入上下文和用户诉求:

user_prompt: |
  参考以下我的历史发帖风格:
  {style_context}
  ---
  我的诉求/草稿:{user_input}
  请生成 3 个选项。

动态变量:

  • {style_context}: 脚本自动提取的最近 3 条历史帖子内容。
  • {user_input}: 用户输入的灵感关键词或草稿(如“写首关于西湖雨天的诗”)。

3. 智能 JSON 提取

考虑到模型偶尔会“啰嗦”,脚本内置了智能提取逻辑:

  • 寻找回复文本中第一个 [ 和最后一个 ] 之间的内容。
  • 自动剥离 Markdown 代码块标记(```json)。
  • 确保即使模型输出不完美,也能稳定解析出选项。

Moment 助手使用步骤

1. 环境准备

确保已安装 Python 3.10+ 和 Ollama,并拉取了模型(如 minicpm-v:8b-2.6-q4_k_m)。

安装 Python 依赖:

cd /Users/bob/Documents/myblog
.venv/bin/pip install pyyaml ollama

2. 配置文件检查

打开 scripts/moment_config.yaml,确认模型名称与本地一致:

llm:
  model: "minicpm-v:8b-2.6-q4_k_m"
  base_url: "http://localhost:11434"

3. 启动助手

在终端任意位置输入命令:

LLM 辅助模式(默认):

moment

手动模式(不经过 LLM):

moment /

4. 交互流程

以 LLM 模式为例,终端会引导你完成以下步骤:

  1. 输入标题:留空则自动生成(如 LLM-Moment-20260404)。
  2. 输入图片链接:支持多个链接,用空格分隔。
  3. 输入地点/意象:如“湿地公园”、“西湖”。
  4. 输入心情/氛围:如“沮丧”、“宁静”。
  5. 输入诉求/草稿:这是最关键的一步,告诉模型你想写什么。
    • 示例:“山外春波山外山,绵绵秋水绿无边”
    • 示例:“写一首关于秋天落叶的诗,带点忧伤”
  6. 选择选项:模型生成 3 个选项后,输入 123 选择。
    • 如果不满意,输入 4 重新生成。
  7. 发布成功:脚本自动保存文件到 content/moments/ 目录。

5. 预览与发布

运行 hugo server 预览生成的朋友圈,确认无误后提交到 Git 仓库即可。

优势总结

  • 风格一致: 动态学习历史帖子,越用越懂你。
  • 灵感爆发: 一次生成 3 个选项,打破思维局限。
  • 本地隐私: 所有数据在本地处理,不上传云端。
  • 高效便捷: 终端交互,无需打开编辑器,几分钟完成发帖。

通过这套助手,发朋友圈不再是负担,而是一次与 AI 共同创作的诗意体验。

运行效果