TL;DR

在 n8n 里搭四个节点:定时触发 → 调本地大模型 → 提取周报 → 发邮件。你只需要每周照常记流水账(放进一个固定文件/便签),周五下班前周报初稿自动出现在邮箱。40 分钟搭好,办公提示词包的周报模板在这里变成无人值守。

准备

项目说明
Dockern8n 推荐自托管方式
本地 Ollama已完成 Ollama 入门,模型 qwen3:8b 可跑
SMTP 邮箱任一邮箱的 SMTP 授权码(QQ/163/Gmail 均可),用于发周报
流水账来源本教程用”手动粘贴”起步;进阶可改为读笔记 API

架构一分钟:

每周五 17:00 触发 → HTTP 调本地 Ollama(周报提示词 + 本周流水账)
→ 提取模型输出 → SMTP 发到自己邮箱

全部跑在你电脑/你的服务器上——流水账不出内网。

步骤

启动 n8n:

docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

工作流四节点拆解

  1. Schedule Trigger:每周五 17:00(triggerAtDay: [5])
  2. HTTP Request → Ollama:POST http://host.docker.internal:11434/api/chat,body 用表达式把 Set 节点里的流水账拼进周报提示词,stream: false
  3. Set:{{ $json.message.content }} 提取模型输出为「周报」字段
  4. Email Send:主题带日期表达式 周报 {{ $now.format('yyyy-LL-dd') }},正文即周报

提示词里务必保留办公包的量化要求与”推测需标注”条款——定时任务的输出没有人工把关,约束要写死在提示词里。

提示词/配置

HTTP Request 节点的 JSON body(已含周报提示词骨架):

Ollama 请求体
={{ JSON.stringify({ model: "qwen3:8b", stream: false, messages: [{ role: "user", content: "你是资深项目经理,擅长把零散记录提炼成结构化汇报。\n任务:把本周流水账整理成周报,按「进展 / 风险 / 下周计划」三段,进展条目量化(能带数字带数字)。\n输入流水账:" + $json.流水账 + "\n输出:Markdown,三段各 ≤5 条。" }] }) }}
参数 取值 说明
$json.流水账 Set 节点字段 每周只需更新这一处
stream false 定时任务必须关流式,否则拿不到完整 JSON

成品对照

实测邮件截图与节点运行视图将由实测补充(R-004)。自检标准:连续两周自动收到周报初稿,且格式稳定、无需人工调结构。

常见坑

现象原因解法
HTTP 节点报 ECONNREFUSEDDocker 里访问不到宿主机 OllamaURL 用 host.docker.internal,Ollama 监听 0.0.0.0(环境变量 OLLAMA_HOST=0.0.0.0)
响应是 SSE 流不是 JSON忘了关流式body 里 stream: false
模型输出空/被截断上下文超限num_ctx 调到 8192+,或精简流水账
邮件进垃圾箱SMTP 直发信誉低收件人加白名单;或改投递到 Telegram/钉钉 Webhook
定时没触发n8n 时区默认 UTC工作流 Settings → Timezone 设为 Asia/Shanghai
流水账忘了填人工输入环节不可靠进阶:改为固定路径读文件,或接手机快捷指令追加记录

下一步