<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>工作流 &#8211; 95博客</title>
	<atom:link href="https://95bok.cn/tag/%e5%b7%a5%e4%bd%9c%e6%b5%81/feed/" rel="self" type="application/rss+xml" />
	<link>https://95bok.cn</link>
	<description>云烟</description>
	<lastBuildDate>Mon, 13 Apr 2026 08:49:10 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://95bok.cn/wp-content/uploads/2025/11/cropped-1740116058152-32x32.jpg</url>
	<title>工作流 &#8211; 95博客</title>
	<link>https://95bok.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OpenClaw 太重了？试试这个轻量本地替代：n8n + Ollama 搭建你的私人数字员工</title>
		<link>https://95bok.cn/openclaw-%e5%a4%aa%e9%87%8d%e4%ba%86%ef%bc%9f%e8%af%95%e8%af%95%e8%bf%99%e4%b8%aa%e8%bd%bb%e9%87%8f%e6%9c%ac%e5%9c%b0%e6%9b%bf%e4%bb%a3%ef%bc%9an8n-ollama-%e6%90%ad%e5%bb%ba%e4%bd%a0%e7%9a%84/</link>
					<comments>https://95bok.cn/openclaw-%e5%a4%aa%e9%87%8d%e4%ba%86%ef%bc%9f%e8%af%95%e8%af%95%e8%bf%99%e4%b8%aa%e8%bd%bb%e9%87%8f%e6%9c%ac%e5%9c%b0%e6%9b%bf%e4%bb%a3%ef%bc%9an8n-ollama-%e6%90%ad%e5%bb%ba%e4%bd%a0%e7%9a%84/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 08:49:10 +0000</pubDate>
				<category><![CDATA[Docker容器]]></category>
		<category><![CDATA[本地AI]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[OpenClaw]]></category>
		<category><![CDATA[对比]]></category>
		<category><![CDATA[工作流]]></category>
		<category><![CDATA[轻量]]></category>
		<guid isPermaLink="false">https://95bok.cn/openclaw-%e5%a4%aa%e9%87%8d%e4%ba%86%ef%bc%9f%e8%af%95%e8%af%95%e8%bf%99%e4%b8%aa%e8%bd%bb%e9%87%8f%e6%9c%ac%e5%9c%b0%e6%9b%bf%e4%bb%a3%ef%bc%9an8n-ollama-%e6%90%ad%e5%bb%ba%e4%bd%a0%e7%9a%84/</guid>

					<description><![CDATA[# OpenClaw 太重了？试试这个轻量本地替代：n8n + Ollama 搭建你的私人数字员工 2026  ... <a title="OpenClaw 太重了？试试这个轻量本地替代：n8n + Ollama 搭建你的私人数字员工" class="read-more" href="https://95bok.cn/openclaw-%e5%a4%aa%e9%87%8d%e4%ba%86%ef%bc%9f%e8%af%95%e8%af%95%e8%bf%99%e4%b8%aa%e8%bd%bb%e9%87%8f%e6%9c%ac%e5%9c%b0%e6%9b%bf%e4%bb%a3%ef%bc%9an8n-ollama-%e6%90%ad%e5%bb%ba%e4%bd%a0%e7%9a%84/" aria-label="阅读 OpenClaw 太重了？试试这个轻量本地替代：n8n + Ollama 搭建你的私人数字员工">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p># OpenClaw 太重了？试试这个轻量本地替代：n8n + Ollama 搭建你的私人数字员工</p>
<p>2026 年了，本地 AI 工具越来越多，但也越来越重。</p>
<p>我之前装了 OpenClaw，功能确实强——智能体、多平台接入、插件系统、定时任务样样有。但问题是，它对低配机器不太友好。跑起来吃资源不说，光是依赖就装了一大堆。</p>
<p>如果你只是想<strong>让 AI 帮你干点日常活儿</strong>（新闻摘要、邮件分类、服务器巡检、定时提醒），而不是搞什么复杂的智能体编排，那 <strong>n8n + Ollama</strong> 可能更合适。</p>
<p>轻量、简单、够用。</p>
<hr />
<h2>先对比一下</h2>
<h3>OpenClaw</h3>
<p><strong>优点：</strong></p>
<ul>
<li>功能全：多平台接入（Telegram/微信/Discord）、智能体系统、插件生态</li>
<li>支持多种 LLM 后端（本地 Ollama / OpenAI / Claude）</li>
<li>定时任务、心跳检查、工作流编排</li>
<li>社区活跃，更新快</li>
<p><strong>缺点：</strong></p>
<li>依赖多：Node.js + 各种 npm 包 + 浏览器 + 缓存</li>
<li>资源占用：跑起来轻松 500MB~1GB</li>
<li>学习曲线：配置文件多，概念也多（Agent/Skill/Memory/Heartbeat）</li>
<li>小机器上可能跑不动，或者跑起来了没剩多少资源干别的</li>
<h3>n8n + Ollama</h3>
<p><strong>优点：</strong></p>
<li>轻量：n8n 自身 300MB 左右，Ollama 看模型大小</li>
<li>画布式界面，拖拽连线，直观</li>
<li>内置 300+ 集成节点（Telegram/邮件/Slack/HTTP/GitHub&#8230;）</li>
<li>工作流可视化管理，执行记录一目了然</li>
<li>Docker 一键部署，升级方便</li>
<p><strong>缺点：</strong></p>
<li>没有智能体系统——得自己搭逻辑</li>
<li>没有多平台统一接入——每个平台得单独配</li>
<li>没有内置插件生态——得靠 HTTP/脚本自己接</li>
<li>复杂任务（多步决策、动态路由）不如 OpenClaw 灵活</li>
<hr />
<h2>什么时候该选 n8n + Ollama？</h2>
<p>如果你符合以下情况：</p>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 机器内存 ≤ 4G</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 主要需求是&#8221;定时跑任务 + AI 处理 + 通知结果&#8221;</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 不想花太多时间学配置和概念</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 工作流数量不多（5 个以内）</li>
<p>那 n8n + Ollama 够用。</p>
<p>如果你有这些需求：</p>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 多平台统一消息接入（一个 Agent 同时管 Telegram/微信/飞书）</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 智能体自主决策（根据情况动态选择下一步）</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 复杂的技能系统（几十上百个技能按需加载）</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 需要浏览器自动化（自动打开网页、点击、截图）</li>
<p>那还是 OpenClaw 更合适，或者两者配合用——OpenClaw 管接入和智能体，n8n 管具体的工作流。</p>
<hr />
<h2>部署</h2>
<h3>1. 装 Ollama</h3>
<pre><code class="language-bash">curl -fsSL https://ollama.com/install.sh | sh
</code></pre>
<p>拉个小模型：</p>
<pre><code class="language-bash">ollama pull qwen2.5:3b
</code></pre>
<h3>2. 装 n8n</h3>
<pre><code class="language-bash">mkdir -p /opt/n8n &amp;&amp; cd /opt/n8n</p><p>cat &gt; docker-compose.yml &lt;&lt; &#039;EOF&#039;
version: &quot;3.8&quot;
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - &quot;5678:5678&quot;
    volumes:
      - n8n-data:/home/node/.n8n
    environment:
      - GENERIC_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_URL=redis://redis:6379
      - N8N_CONCURRENCY_PRODUCTION_LIMIT=1
    depends_on:
      - redis
    deploy:
      resources:
        limits:
          memory: 512M
  
  redis:
    image: redis:7-alpine
    container_name: n8n-redis
    restart: unless-stopped
    command: redis-server --maxmemory 64mb --maxmemory-policy allkeys-lru
    deploy:
      resources:
        limits:
          memory: 64M</p><p>volumes:
  n8n-data:
EOF</p><p>docker compose up -d
</code></pre>
<h3>3. 让 n8n 能访问 Ollama</h3>
<pre><code class="language-bash">mkdir -p /etc/systemd/system/ollama.service.d
cat &gt; /etc/systemd/system/ollama.service.d/override.conf &lt;&lt; &#039;EOF&#039;
[Service]
Environment=&quot;OLLAMA_HOST=0.0.0.0&quot;
Environment=&quot;OLLAMA_CONTEXT_LENGTH=2048&quot;
Environment=&quot;OLLAMA_KEEP_ALIVE=1m&quot;
EOF</p><p>systemctl daemon-reload &amp;&amp; systemctl restart ollama
</code></pre>
<p>n8n 里 Ollama 的 URL 填 <code>http://172.17.0.1:11434</code>（Docker 网关）。</p>
<hr />
<h2>快速搭建 3 个实用工作流</h2>
<h3>工作流 1：每日新闻摘要</h3>
<pre><code class="language-">Schedule (每天 8:00)
  → RSS Feed Read (3 个源)
    → Ollama Chat (总结 + 分类)
      → Telegram Bot (发送)
</code></pre>
<p>Ollama 的 System Prompt：</p>
<pre><code class="language-">你是一个新闻摘要助手。以下是今天的新闻列表，请用简洁的中文总结每条的核心内容，
按类别分组，每条一句话。总字数控制在 500 字以内。
</code></pre>
<h3>工作流 2：邮件智能分类</h3>
<pre><code class="language-">IMAP Trigger (收到新邮件)
  → Ollama Chat (判断：重要/一般/垃圾)
    → IF (重要？)
      / 
    是   否
    ↓     ↓
  Telegram  归档到文件夹
</code></pre>
<p>Ollama 的 System Prompt：</p>
<pre><code class="language-">你是一封邮件的分类助手。判断这封邮件是：重要 / 一般 / 垃圾。
重要的标准：工作相关、含截止日期、需要你回复。
只输出一个词：重要/一般/垃圾
</code></pre>
<h3>工作流 3：服务器巡检</h3>
<pre><code class="language-">Schedule (每天 18:00)
  → Execute Command (df -h, free -m, systemctl status)
    → Ollama Chat (分析状态)
      → IF (有异常？)
        / 
      是   否
      ↓     ↓
    Telegram  结束（不打扰）
</code></pre>
<hr />
<h2>进阶：加个 Webhook 接口</h2>
<p>想让外部服务触发工作流？加一个 Webhook 节点：</p>
<pre><code class="language-">Webhook (POST /webhook/check)
  → 接收 JSON 数据
    → Ollama Chat (处理)
      → 返回结果
</code></pre>
<p>然后任何服务都能调：</p>
<pre><code class="language-bash">curl -X POST http://your-server:5678/webhook/check 
  -H "Content-Type: application/json" 
  -d '{"text": "帮我分析一下这段日志..."}'
</code></pre>
<hr />
<h2>和 OpenClaw 配合用</h2>
<p>如果你已经有 OpenClaw，也不用二选一。可以配合：</p>
<li><strong>OpenClaw</strong> 管消息接入和智能体对话</li>
<li><strong>n8n</strong> 管定时工作流和数据处理</li>
<li>两者通过 Webhook 通信</li>
</ul>
<p>比如：OpenClaw 收到用户的&#8221;帮我看看服务器状态&#8221;，通过 Webhook 触发 n8n 的巡检工作流，拿到结果后 OpenClaw 再把结果发回给用户。</p>
<pre><code class="language-">用户 → Telegram → OpenClaw → Webhook → n8n 工作流 → 结果返回 → OpenClaw → Telegram
</code></pre>
<hr />
<h2>总结</h2>
<p>n8n + Ollama 不是 OpenClaw 的&#8221;降级版&#8221;，而是一个<strong>不同定位的选择</strong>。</p>
<p>OpenClaw 是一个完整的 AI 助手框架，适合想要多平台接入、智能体系统、复杂任务编排的人。</p>
<p>n8n + Ollama 是一个轻量工作流方案，适合只想&#8221;让 AI 帮我跑几个定时任务&#8221;的人。</p>
<p>资源有限、需求简单的情况下，轻量方案反而更舒服。不用学一堆概念，打开 n8n 画布，拖几个节点连起来，就能跑。</p>
<p>等哪天你觉得不够用了，再迁移到 OpenClaw 也不迟。n8n 的 Webhook 接口是开放的，工作流逻辑也能复用。</p>
<p>先跑起来，再考虑升级。别一上来就搞太重的东西。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/openclaw-%e5%a4%aa%e9%87%8d%e4%ba%86%ef%bc%9f%e8%af%95%e8%af%95%e8%bf%99%e4%b8%aa%e8%bd%bb%e9%87%8f%e6%9c%ac%e5%9c%b0%e6%9b%bf%e4%bb%a3%ef%bc%9an8n-ollama-%e6%90%ad%e5%bb%ba%e4%bd%a0%e7%9a%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ollama + n8n 工作流实战：从抓取网页 → 总结 → 分类存档 → 推送提醒，全程本地零云端</title>
		<link>https://95bok.cn/ollama-n8n-%e5%b7%a5%e4%bd%9c%e6%b5%81%e5%ae%9e%e6%88%98%ef%bc%9a%e4%bb%8e%e6%8a%93%e5%8f%96%e7%bd%91%e9%a1%b5-%e2%86%92-%e6%80%bb%e7%bb%93-%e2%86%92-%e5%88%86%e7%b1%bb%e5%ad%98%e6%a1%a3-%e2%86%92/</link>
					<comments>https://95bok.cn/ollama-n8n-%e5%b7%a5%e4%bd%9c%e6%b5%81%e5%ae%9e%e6%88%98%ef%bc%9a%e4%bb%8e%e6%8a%93%e5%8f%96%e7%bd%91%e9%a1%b5-%e2%86%92-%e6%80%bb%e7%bb%93-%e2%86%92-%e5%88%86%e7%b1%bb%e5%ad%98%e6%a1%a3-%e2%86%92/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 08:23:34 +0000</pubDate>
				<category><![CDATA[Docker容器]]></category>
		<category><![CDATA[本地AI]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[分类]]></category>
		<category><![CDATA[工作流]]></category>
		<category><![CDATA[自动化]]></category>
		<guid isPermaLink="false">https://95bok.cn/ollama-n8n-%e5%b7%a5%e4%bd%9c%e6%b5%81%e5%ae%9e%e6%88%98%ef%bc%9a%e4%bb%8e%e6%8a%93%e5%8f%96%e7%bd%91%e9%a1%b5-%e2%86%92-%e6%80%bb%e7%bb%93-%e2%86%92-%e5%88%86%e7%b1%bb%e5%ad%98%e6%a1%a3-%e2%86%92/</guid>

					<description><![CDATA[# Ollama + n8n 工作流实战：从抓取网页 → 总结 → 分类存档 → 推送提醒，全程本地零云端 这 ... <a title="Ollama + n8n 工作流实战：从抓取网页 → 总结 → 分类存档 → 推送提醒，全程本地零云端" class="read-more" href="https://95bok.cn/ollama-n8n-%e5%b7%a5%e4%bd%9c%e6%b5%81%e5%ae%9e%e6%88%98%ef%bc%9a%e4%bb%8e%e6%8a%93%e5%8f%96%e7%bd%91%e9%a1%b5-%e2%86%92-%e6%80%bb%e7%bb%93-%e2%86%92-%e5%88%86%e7%b1%bb%e5%ad%98%e6%a1%a3-%e2%86%92/" aria-label="阅读 Ollama + n8n 工作流实战：从抓取网页 → 总结 → 分类存档 → 推送提醒，全程本地零云端">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p># Ollama + n8n 工作流实战：从抓取网页 → 总结 → 分类存档 → 推送提醒，全程本地零云端</p>
<p>这篇不讲故事，直接上干货。把一个完整的工作流从 0 搭到能用的状态，每一步的命令和配置都列出来。</p>
<hr />
<h2>最终效果</h2>
<p>跑起来之后，这个工作流会：</p>
<p>1. 定时抓取你指定的网页/RSS<br />
2. AI 自动总结内容<br />
3. 判断内容分类（科技/财经/工具/其他）<br />
4. 存档到 SQLite 数据库<br />
5. 如果命中你关心的关键词，额外推送通知</p>
<p>全程本地，不依赖任何云端 API。</p>
<hr />
<h2>前置环境</h2>
<p>已经装好的：</p>
<ul>
<li>Ollama（qwen2.5:7b）</li>
<li>n8n（Docker）</li>
<p>还需要加两个服务：</p>
<pre><code class="language-bash">mkdir -p /opt/n8n-services &amp;&amp; cd /opt/n8n-services</p><p>cat &gt; docker-compose.yml &lt;&lt; &#039;EOF&#039;
version: &quot;3.8&quot;
services:
  # SQLite 不需要单独容器，n8n 内置支持
  # 但如果想外部访问数据，可以加一个 sqlite-web
  sqlite-web:
    image: coleifer/sqlite-web
    container_name: sqlite-web
    restart: unless-stopped
    ports:
      - &quot;8002:8080&quot;
    volumes:
      - n8n-data:/data
    environment:
      - SQLITE_DATABASE=/data/n8n-sqlite.db
volumes:
  n8n-data:
    external: true
EOF</p><p>docker compose up -d
</code></pre>
<p>SQLite Web 只是方便查看数据，不是必须的。</p>
<hr />
<h2>第 1 步：创建数据库表</h2>
<p>在 n8n 里加一个 Execute Command 节点，初始化数据库：</p>
<pre><code class="language-bash">sqlite3 /home/node/.n8n/database.sqlite &lt;&lt; &#039;SQL&#039;
CREATE TABLE IF NOT EXISTS content_archive (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    summary TEXT,
    category TEXT,
    source_url TEXT,
    keywords_matched INTEGER DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);</p><p>CREATE INDEX IF NOT EXISTS idx_category ON content_archive(category);
CREATE INDEX IF NOT EXISTS idx_created ON content_archive(created_at);
SQL
</code></pre>
<p>或者直接在 n8n 里用 SQLite 节点的 &#8220;Execute Query&#8221; 功能创建。</p>
<hr />
<h2>第 2 步：搭建工作流</h2>
<p>打开 n8n，新建 Workflow，按顺序添加节点。</p>
<h3>节点 1：Schedule（定时触发）</h3>
<li>触发模式：<code>Every Day</code></li>
<li>时间：<code>09:00</code>（或者你喜欢的时间）</li>
<h3>节点 2：RSS Feed Read（抓取内容）</h3>
<p>添加 3~5 个你常看的源。我用的几个：</p>
<pre><code class="language-">https://feeds.feedburner.com/36kr/news
https://rsshub.app/36kr/news/latest
https://rsshub.app/ithome/news
</code></pre>
<blockquote>
<p>RSSHub 可以自己部署，<code>docker run -d -p 1200:1200 diygod/rsshub</code></p>
</blockquote>
<h3>节点 3：Code（数据清洗）</h3>
<p>RSS 抓回来的数据需要整理：</p>
<pre><code class="language-javascript">// 合并所有 RSS 条目，去重
const items = $input.all();
const seen = new Set();
const unique = items.filter(item =&gt; {
  const url = item.json.link || item.json.guid || '';
  if (seen.has(url)) return false;
  seen.add(url);
  return true;
});</p><p>// 每条提取关键字段
const articles = unique.map(item =&gt; ({
  title: item.json.title || '无标题',
  content: item.json.contentSnippet || item.json.content || '',
  link: item.json.link || item.json.guid || '',
  date: item.json.pubDate || item.json.isoDate || ''
}));</p><p>return [{ json: { articles, count: articles.length } }];
</code></pre>
<h3>节点 4：Ollama Chat（AI 处理）</h3>
<p>这是核心节点。System Prompt：</p>
<pre><code class="language-">你是一个内容处理助手。请对以下文章列表进行处理：</p><p>1. 为每篇文章生成 50 字以内的中文摘要
2. 判断分类：科技/财经/工具/其他
3. 提取 3 个关键词</p><p>输出格式为 JSON 数组，不要其他内容：
[
  {
    "title": "文章标题",
    "summary": "摘要",
    "category": "分类",
    "keywords": ["关键词1", "关键词2", "关键词3"],
    "link": "原文链接"
  }
]
</code></pre>
<p>User Message：</p>
<pre><code class="language-">以下是需要处理的文章列表：
{{ JSON.stringify($node["Code"].json.articles) }}
</code></pre>
<blockquote>
<p><strong>注意：</strong> 如果文章太多，一次性处理可能会超时。建议在 Code 节点里限制数量（比如取最新的 10 条）。</p>
</blockquote>
<h3>节点 5：Code（解析 AI 输出）</h3>
<p>AI 返回的是 JSON 字符串，需要解析成 n8n 能处理的格式：</p>
<pre><code class="language-javascript">const raw = $input.first().json.content || $input.first().json.message?.content;
let articles;</p><p>try {
  // 有时候 AI 会在 JSON 外面包一些废话，用正则提取
  const jsonMatch = raw.match(/[[sS]*]/);
  articles = jsonMatch ? JSON.parse(jsonMatch[0]) : [];
} catch (e) {
  articles = [];
}</p><p>// 拆分成多条，每条是一个文章
return articles.map(a =&gt; ({
  json: {
    title: a.title || '',
    summary: a.summary || '',
    category: a.category || '其他',
    keywords: a.keywords || [],
    link: a.link || ''
  }
}));
</code></pre>
<h3>节点 6：IF（关键词匹配）</h3>
<p>检查文章是否包含你关心的关键词：</p>
<pre><code class="language-">条件：keywords 数组包含以下任意一个
  - "AI" 或 "人工智能" 或 "Ollama" 或 "Docker" 或 "Linux"
</code></pre>
<p>匹配到的文章走&#8221;是&#8221;分支，否则走&#8221;否&#8221;分支。</p>
<h3>节点 7：SQLite（存档 &#8211; 所有文章）</h3>
<p>&#8220;否&#8221;分支和&#8221;是&#8221;分支都连一个 SQLite 插入：</p>
<pre><code class="language-sql">INSERT INTO content_archive (title, summary, category, source_url, keywords_matched)
VALUES ('{{ $json.title }}', '{{ $json.summary }}', '{{ $json.category }}', '{{ $json.link }}', 0);
</code></pre>
<p>&#8220;是&#8221;分支的 <code>keywords_matched</code> 设为 1。</p>
<h3>节点 8：Telegram Bot（推送 &#8211; 仅命中关键词的文章）</h3>
<p>只有命中关键词的文章才推送：</p>
<pre><code class="language-">&#x1f4cc; 关键词命中提醒</p><p>标题：{{ $json.title }}
分类：{{ $json.category }}
摘要：{{ $json.summary }}</p><p>{{ $json.link }}
</code></pre>
<hr />
<h2>完整工作流结构</h2>
<pre><code class="language-">Schedule (每天 9:00)
  ↓
RSS Feed Read (3~5 个源)
  ↓
Code (去重 + 提取字段)
  ↓
Ollama Chat (总结 + 分类 + 关键词)
  ↓
Code (解析 JSON 输出)
  ↓
     IF (关键词匹配?)
    / 
  是   否
  ↓     ↓
SQLite  SQLite
(标记1) (标记0)
  ↓
Telegram 推送
</code></pre>
<hr />
<h2>优化点</h2>
<h3>1. 分页处理</h3>
<p>如果 RSS 源很多（20+ 条），建议分批处理：</p>
<pre><code class="language-javascript">// Code 节点里加一个分页器
const articles = $input.first().json.articles;
const PAGE_SIZE = 5;
const page = $execution.resumeData?.page || 0;
const slice = articles.slice(page * PAGE_SIZE, (page + 1) * PAGE_SIZE);</p><p>if (slice.length === 0) {
  return []; // 处理完毕
}</p><p>// 设置下次继续
$execution.resumeData = { page: page + 1 };</p><p>return [{ json: { articles: slice, hasMore: (page + 1) * PAGE_SIZE &lt; articles.length } }];
</code></pre>
<h3>2. 错误重试</h3>
<p>n8n 支持节点级别的错误重试。在 Ollama Chat 节点设置里：</p>
<li><code>On Error</code> → <code>Retry</code></li>
<li><code>Max Retries</code> → <code>3</code></li>
<li><code>Retry Interval</code> → <code>30s</code></li>
<p>模型加载慢或者超时时自动重试，不用手动重跑。</p>
<h3>3. 导出工作流</h3>
<p>搭好的工作流可以导出备份：</p>
<p>n8n → Workflow → 右上角三点 → Download</p>
<p>导出的 JSON 文件就是你的工作流模板，换机器直接导入。</p>
<hr />
<h2>验证</h2>
<p>跑完之后，打开 SQLite Web（<code>http://IP:8002</code>），应该能看到 <code>content_archive</code> 表里有记录了。</p>
<p>每条记录包含：</p>
<li>标题、摘要、分类</li>
<li>是否命中关键词</li>
<li>抓取时间</li>
<p>可以按分类筛选，看看 AI 分得准不准。</p>
<hr />
<h2>资源占用</h2>
<p>一次完整执行（10 篇文章）：</p>
<li>Ollama 推理：约 30~60 秒</li>
<li>n8n 内存峰值：约 400MB</li>
<li>磁盘占用：每天 10 条约 50KB（纯文本）</li>
<p>如果是 8G 内存的机器，建议：</p>
<li>文章数量限制在 5 条以内</li>
<li>模型换成 qwen2.5:3b</li>
<li>执行间隔拉到 12 小时一次</li>
</ul>
<hr />
<h2>扩展方向</h2>
<p>这个工作流是基础版，后续可以：</p>
<p>1. <strong>加去重逻辑</strong>——用 SQLite 的 title 做 UNIQUE 约束，避免重复存档<br />
2. <strong>加 Webhook 触发</strong>——不只是定时，有新内容时通过 Webhook 立即触发<br />
3. <strong>加邮件摘要</strong>——每周日把当周存档汇总成一封邮件<br />
4. <strong>接入多模态</strong>——用 LLaVA 模型处理网页里的截图/图片</p>
<p>工作流 JSON 模板就不贴了（太长），有需要的可以自己按上面的节点配置搭。每一步都不难，主要是把流程想清楚再动手。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/ollama-n8n-%e5%b7%a5%e4%bd%9c%e6%b5%81%e5%ae%9e%e6%88%98%ef%bc%9a%e4%bb%8e%e6%8a%93%e5%8f%96%e7%bd%91%e9%a1%b5-%e2%86%92-%e6%80%bb%e7%bb%93-%e2%86%92-%e5%88%86%e7%b1%bb%e5%ad%98%e6%a1%a3-%e2%86%92/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>这周我用 n8n + Ollama 搭了个本地自动化助手，结果它真帮我把每天的新闻和日志处理完了</title>
		<link>https://95bok.cn/%e8%bf%99%e5%91%a8%e6%88%91%e7%94%a8-n8n-ollama-%e6%90%ad%e4%ba%86%e4%b8%aa%e6%9c%ac%e5%9c%b0%e8%87%aa%e5%8a%a8%e5%8c%96%e5%8a%a9%e6%89%8b%ef%bc%8c%e7%bb%93%e6%9e%9c%e5%ae%83%e7%9c%9f%e5%b8%ae/</link>
					<comments>https://95bok.cn/%e8%bf%99%e5%91%a8%e6%88%91%e7%94%a8-n8n-ollama-%e6%90%ad%e4%ba%86%e4%b8%aa%e6%9c%ac%e5%9c%b0%e8%87%aa%e5%8a%a8%e5%8c%96%e5%8a%a9%e6%89%8b%ef%bc%8c%e7%bb%93%e6%9e%9c%e5%ae%83%e7%9c%9f%e5%b8%ae/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 07:46:32 +0000</pubDate>
				<category><![CDATA[Docker容器]]></category>
		<category><![CDATA[本地AI]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[工作流]]></category>
		<category><![CDATA[新闻摘要]]></category>
		<category><![CDATA[日志分析]]></category>
		<category><![CDATA[自动化]]></category>
		<guid isPermaLink="false">https://95bok.cn/%e8%bf%99%e5%91%a8%e6%88%91%e7%94%a8-n8n-ollama-%e6%90%ad%e4%ba%86%e4%b8%aa%e6%9c%ac%e5%9c%b0%e8%87%aa%e5%8a%a8%e5%8c%96%e5%8a%a9%e6%89%8b%ef%bc%8c%e7%bb%93%e6%9e%9c%e5%ae%83%e7%9c%9f%e5%b8%ae/</guid>

					<description><![CDATA[# 这周我用 n8n + Ollama 搭了个本地自动化助手，结果它真帮我把每天的新闻和日志处理完了 这周一我 ... <a title="这周我用 n8n + Ollama 搭了个本地自动化助手，结果它真帮我把每天的新闻和日志处理完了" class="read-more" href="https://95bok.cn/%e8%bf%99%e5%91%a8%e6%88%91%e7%94%a8-n8n-ollama-%e6%90%ad%e4%ba%86%e4%b8%aa%e6%9c%ac%e5%9c%b0%e8%87%aa%e5%8a%a8%e5%8c%96%e5%8a%a9%e6%89%8b%ef%bc%8c%e7%bb%93%e6%9e%9c%e5%ae%83%e7%9c%9f%e5%b8%ae/" aria-label="阅读 这周我用 n8n + Ollama 搭了个本地自动化助手，结果它真帮我把每天的新闻和日志处理完了">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p># 这周我用 n8n + Ollama 搭了个本地自动化助手，结果它真帮我把每天的新闻和日志处理完了</p>
<p>这周一我盯着满屏幕的 RSS 订阅源和一堆没看的新闻，突然冒出一个想法：<strong>能不能让 AI 帮我把这些消化掉，早上起来只看一份整理好的摘要？</strong></p>
<p>于是折腾了几天。中间踩了不少坑，但最后效果确实不错。记录一下整个过程。</p>
<hr />
<h2>周一：装 n8n</h2>
<p>之前已经装过 Ollama，模型用的 qwen2.5:7b，跑起来没问题。这次就差一个工作流引擎。</p>
<pre><code class="language-bash">mkdir -p /opt/n8n &amp;&amp; cd /opt/n8n</p><p>cat &gt; docker-compose.yml &lt;&lt; &#039;EOF&#039;
version: &quot;3.8&quot;
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - &quot;5678:5678&quot;
    volumes:
      - n8n-data:/home/node/.n8n
    environment:
      - GENERIC_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
volumes:
  n8n-data:
EOF</p><p>docker compose up -d
</code></pre>
<p>装完打开 <code>http://IP:5678</code>，注册账号，进去了。界面长这样——左边一堆节点，右边画布，跟搭积木差不多。</p>
<p>第一个想法很简单：<strong>每天早上 8 点，抓几条新闻，让 AI 总结一下发给我。</strong></p>
<hr />
<h2>周二：踩坑——n8n 连不上 Ollama</h2>
<p>我加了个 Ollama 节点，填了 <code>http://localhost:11434</code>，一点测试——连不上。</p>
<p>折腾了半天才想起来：<strong>n8n 跑在 Docker 里，localhost 指向的是容器自己，不是宿主机。</strong></p>
<p>解决：</p>
<pre><code class="language-bash"># 查看 Docker 网关地址
docker network inspect bridge --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}'
# 输出：172.17.0.1
</code></pre>
<p>然后 n8n 里 Ollama 的 URL 改成 <code>http://172.17.0.1:11434</code>。</p>
<p>但还连不上。又查了一下——Ollama 默认只监听 127.0.0.1，外面访问不到。</p>
<pre><code class="language-bash"># 改 Ollama 配置，监听所有接口
mkdir -p /etc/systemd/system/ollama.service.d
cat &gt; /etc/systemd/system/ollama.service.d/override.conf &lt;&lt; &#039;EOF&#039;
[Service]
Environment=&quot;OLLAMA_HOST=0.0.0.0&quot;
EOF
systemctl daemon-reload &amp;&amp; systemctl restart ollama
</code></pre>
<p>这下通了。测试一下：</p>
<pre><code class="language-bash">curl http://172.17.0.1:11434/api/generate -d '{"model":"qwen2.5:7b","prompt":"你好","stream":false}'
</code></pre>
<p>返回了正常响应。踩了两个坑，浪费半天。</p>
<hr />
<h2>周三：搭第一个工作流——新闻摘要</h2>
<p>思路：Schedule 定时 → RSS 抓取 → AI 总结 → 通知。</p>
<p>具体节点：</p>
<h3>1. Schedule 触发器</h3>
<ul>
<li>时间：每天早上 8:00</li>
<li>时区：Asia/Shanghai</li>
<h3>2. RSS Feed Read 节点</h3>
<li>填入几个常看的 RSS 地址</li>
<li>每条取标题和摘要</li>
<h3>3. Code 节点（数据预处理）</h3>
<p>RSS 抓回来是列表，需要拼成一段话给 AI：</p>
<pre><code class="language-javascript">// 把多条 RSS 合并成一段文本
const items = $input.all();
const text = items.map(item =&gt; {
  return <code>标题：${item.json.title}n摘要：${item.json.contentSnippet || ''}</code>;
}).join('nn<hr />nn');</p><p>return [{ json: { combined_text: text, count: items.length } }];
</code></pre>
<h3>4. Ollama Chat 节点</h3>
<p>System Prompt：</p>
<pre><code class="language-">你是一个新闻摘要助手。以下是今天的几条新闻，请用简洁的中文总结每条的核心内容，
按类别分组（科技/财经/国际/其他），每条一句话。总字数控制在 500 字以内。
</code></pre>
<p>User Message 填上一步的 <code>{{ $json.combined_text }}</code>。</p>
<h3>5. Telegram Bot 通知</h3>
<p>用 Telegram Bot 发给我（飞书/邮件/钉钉都行）。消息内容填 AI 的回复。</p>
<p>完整流程：</p>
<pre><code class="language-">Schedule (8:00)
  → RSS Feed Read (3个源)
    → Code (合并文本)
      → Ollama Chat (总结)
        → Telegram Bot (发送)
</code></pre>
<p>第一次跑的时候，等了大概 15 秒，手机收到消息了。AI 把 10 条新闻分成了 4 类，每条一句话，看起来清爽多了。</p>
<hr />
<h2>周四：第二个——服务器日志分析</h2>
<p>每天看日志太烦了。干脆让 AI 帮我看。</p>
<p>先写个脚本提取关键信息：</p>
<pre><code class="language-bash">cat &gt; /opt/n8n/log-analyzer.sh &lt;&lt; &#039;SCRIPT&#039;
#!/bin/bash
# 提取昨天的关键日志</p><p>echo "=== Nginx 错误 (昨天) ==="
yesterday=$(date -d "yesterday" +%Y/%m/%d)
grep "$yesterday" /var/log/nginx/error.log | tail -20</p><p>echo ""
echo "=== 系统异常 ==="
grep -i "error|fail|kill|oom" /var/log/syslog | tail -20</p><p>echo ""
echo "=== 磁盘 ==="
df -h / | tail -1</p><p>echo ""
echo "=== 内存峰值 ==="
echo "昨日最高内存使用: $(cat /proc/meminfo | grep MemTotal)"
SCRIPT</p><p>chmod +x /opt/n8n/log-analyzer.sh
</code></pre>
<p>n8n 里加一个工作流：</p>
<li>Schedule：每天 22:00</li>
<li>Execute Command：跑上面的脚本</li>
<li>Ollama Chat：分析日志，找出需要关注的问题</li>
<li>通知：有异常才发，没问题就不打扰</li>
<p>Ollama 的 System Prompt：</p>
<pre><code class="language-">你是运维助手。分析以下日志，如果有异常（服务崩溃、磁盘不足、OOM 等），
列出问题和修复建议。如果一切正常，回复"今日日志正常"，不需要展开。
</code></pre>
<p>跑了两天，第一天确实抓到了一个 Nginx 的 upstream 超时问题，AI 建议检查后端服务的响应时间，顺藤摸瓜找到了一个慢查询。</p>
<hr />
<h2>周五：踩坑——n8n 自己占了太多内存</h2>
<p>周五早上看服务器，发现 n8n 占了 800MB 内存。我一共就 24G，倒是不紧张，但跑在 8G 机器上就够呛了。</p>
<p>查了一下，n8n 默认把所有执行记录都存在内存里。改一下：</p>
<pre><code class="language-yaml"># docker-compose.yml 里加环境变量
environment:
  - EXECUTIONS_MODE=database
  - DB_TYPE=sqlite
  - GENERIC_TIMEZONE=Asia/Shanghai
  - TZ=Asia/Shanghai
</code></pre>
<p>再加上资源限制：</p>
<pre><code class="language-yaml">deploy:
  resources:
    limits:
      memory: 512M
</code></pre>
<p>改完重启，内存降到 300MB 左右。</p>
<p>另外，工作流如果设置了&#8221;保存执行记录&#8221;，数据会越积越多。建议在 n8n 设置里把 <strong>保存天数</strong> 改成 3~7 天，自动清理。</p>
<hr />
<h2>周末：把几个工作流串起来</h2>
<p>有了新闻和日志两个工作流，周末又把之前做的服务器监控工作流也加进来了。现在每天的时间线是这样的：</p>
<p>| 时间 | 工作流 | 作用 |<br />
|</p>
<hr />
<hr />
<p>|</p>
<hr />
<hr />
<p>&#8211;|</p>
<hr />
<hr />
<p>|<br />
| 8:00 | 新闻摘要 | 抓 RSS，AI 总结，发我手机 |<br />
| 12:00 | 邮件检查 | 有新邮件自动分类摘要 |<br />
| 18:00 | 服务器巡检 | CPU/内存/磁盘/服务状态 |<br />
| 22:00 | 日志分析 | 分析当天日志 |</p>
<p>四个工作流，全部跑在本地。</p>
<hr />
<h2>给小内存机器的建议</h2>
<p>如果你跑在 8G 或更小的机器上：</p>
<li><strong>模型用 phi3:3.8b 或 qwen2.5:3b</strong>，内存占用 2~3G</li>
<li><strong>n8n 限制 512MB 内存</strong>，执行记录保存天数设短一点</li>
<li><strong>工作流别设太频繁</strong>，新闻摘要每天 1~2 次就够了</li>
<li><strong>Ollama 和 n8n 分开部署</strong>的话，可以放在不同机器上</li>
</ul>
<hr />
<h2>总结</h2>
<p>折腾了一周，几个感受：</p>
<p>1. <strong>n8n 上手不难</strong>，画布式的界面比写代码直观，但第一次连本地 Ollama 确实会踩坑<br />
2. <strong>本地 AI 够用</strong>——qwen2.5:7b 做摘要、分类、简单分析完全没问题，就是速度慢点（5~15 秒一次）<br />
3. <strong>自动化这东西，一旦跑起来就停不下来了</strong>——我现在已经开始想把 RSS 换成微信公众号了……</p>
<p>下一篇打算写写沙箱和长期记忆的方案。AI 光会总结还不够，得能&#8221;记住&#8221;之前的事，并且安全地执行一些操作。到时候再聊。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/%e8%bf%99%e5%91%a8%e6%88%91%e7%94%a8-n8n-ollama-%e6%90%ad%e4%ba%86%e4%b8%aa%e6%9c%ac%e5%9c%b0%e8%87%aa%e5%8a%a8%e5%8c%96%e5%8a%a9%e6%89%8b%ef%bc%8c%e7%bb%93%e6%9e%9c%e5%ae%83%e7%9c%9f%e5%b8%ae/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
