<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>信息技术 on OHTLY Blog</title>
    <link>https://blog.ohtly.com/categories/%E4%BF%A1%E6%81%AF%E6%8A%80%E6%9C%AF/</link>
    <description>Recent content in 信息技术 on OHTLY Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 29 May 2026 19:29:59 +0800</lastBuildDate>
    <atom:link href="https://blog.ohtly.com/categories/%E4%BF%A1%E6%81%AF%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用 Prometheus 监控 MinIO 对象存储</title>
      <link>https://blog.ohtly.com/posts/2026-05-29-minio-prometheus-monitoring/</link>
      <pubDate>Fri, 29 May 2026 19:29:59 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-29-minio-prometheus-monitoring/</guid>
      <description>&lt;p&gt;前四篇介绍了不同场景的监控方案：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-29-couchdb-loki-monitoring/&#34; &gt;CouchDB 日志告警&lt;/a&gt; → Alloy + Loki + LogQL&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-29-windmill-loki-monitoring/&#34; &gt;Windmill 日志告警&lt;/a&gt; → Alloy + Loki + LogQL&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-29-alertmanager-feishu/&#34; &gt;告警通知到飞书&lt;/a&gt; → Alertmanager → transformer → OpenClaw&lt;/li&gt;&#xA;&lt;li&gt;MinIO 指标监控（本篇）→ 一行配置 + Prometheus 指标告警&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这篇最短，因为 MinIO 自带 Prometheus 端点，不需要额外 exporter，也不需要日志采集。&lt;/p&gt;</description>
    </item>
    <item>
      <title>告警通知到飞书：Alertmanager → OpenClaw 中转方案</title>
      <link>https://blog.ohtly.com/posts/2026-05-29-alertmanager-feishu/</link>
      <pubDate>Fri, 29 May 2026 19:10:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-29-alertmanager-feishu/</guid>
      <description>&lt;p&gt;前两篇介绍了用 Alloy + Loki Ruler 实现日志告警：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-29-couchdb-loki-monitoring/&#34; &gt;CouchDB 日志监控&lt;/a&gt;：文本日志的 LogQL 告警&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-29-windmill-loki-monitoring/&#34; &gt;Windmill 日志监控&lt;/a&gt;：JSON 日志的 LogQL 告警&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;两条链路最终都汇入 Alertmanager，由它统一分派到飞书。但 Alertmanager 原生没有飞书 receiver——它的 webhook 输出的是原始 JSON，飞书看不懂。中间需要一层适配器来转换格式。这个适配器就是 &lt;strong&gt;alert-transformer&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windmill 日志监控：Alloy &#43; Loki Ruler 告警实战</title>
      <link>https://blog.ohtly.com/posts/2026-05-29-windmill-loki-monitoring/</link>
      <pubDate>Fri, 29 May 2026 18:20:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-29-windmill-loki-monitoring/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-29-couchdb-loki-monitoring/&#34; &gt;前一篇&lt;/a&gt; 介绍了用 Alloy + Loki 给 CouchDB 做日志告警。这篇文章是同一套路在 Windmill 上的应用。&lt;/p&gt;&#xA;&lt;p&gt;Windmill 是一个工作流调度平台，由多个 Docker 容器组成：server（API 服务）、worker（任务执行）、worker_gpu（GPU 任务）。这些容器的日志里包含各种运行错误——&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;API Token 权限不足&lt;/li&gt;&#xA;&lt;li&gt;S3 存储配置丢失&lt;/li&gt;&#xA;&lt;li&gt;Worker 执行异常&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;它们不会体现在 Prometheus 指标上，只有查看容器日志才能发现。需要一套日志级的告警来及时发现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CouchDB 日志监控：Alloy &#43; Loki Ruler 告警</title>
      <link>https://blog.ohtly.com/posts/2026-05-29-couchdb-loki-monitoring/</link>
      <pubDate>Fri, 29 May 2026 17:57:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-29-couchdb-loki-monitoring/</guid>
      <description>&lt;p&gt;上篇&lt;a href=&#34;https://blog.ohtly.com/posts/2026-05-16-docker-couchdb-prometheus-monitoring/&#34; &gt;《用 Prometheus 监控 Docker CouchDB 实例》&lt;/a&gt;介绍了用 &lt;code&gt;couchdb-exporter&lt;/code&gt; 采集 CouchDB 的运行指标（存活状态、连接数等），通过 Prometheus + Alertmanager 实现指标级告警。&lt;/p&gt;&#xA;&lt;p&gt;但这个方案有一个盲区：&lt;strong&gt;CouchDB 的 Erlang 进程错误不会体现在 Prometheus 指标上&lt;/strong&gt;。比如 &lt;code&gt;_users&lt;/code&gt; 数据库缺失导致的持续报错，exporter 的指标一切正常，只有 &lt;code&gt;docker logs&lt;/code&gt; 才能看到 &lt;code&gt;[error]&lt;/code&gt;。需要一个日志级别的告警渠道来填补这个空白。&lt;/p&gt;</description>
    </item>
    <item>
      <title>FaceFusion 3.6.1 安装和使用方式：Web UI 和 Headless</title>
      <link>https://blog.ohtly.com/posts/2026-05-29-facefusion-guide/</link>
      <pubDate>Fri, 29 May 2026 17:00:05 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-29-facefusion-guide/</guid>
      <description>&lt;p&gt;FaceFusion 是一个开源的、业界领先的人脸操作平台，支持换脸、画质增强、唇形同步等功能。基于 Python + ONNX Runtime，提供 GPU 加速推理，同时提供 Web UI 交互界面和 headless 命令行模式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenClaw 异步通知：Agent Turn 与 Wake 选型指南</title>
      <link>https://blog.ohtly.com/posts/2026-05-27-openclaw-message-agent-turn-vs-wake/</link>
      <pubDate>Wed, 27 May 2026 19:20:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-27-openclaw-message-agent-turn-vs-wake/</guid>
      <description>&lt;h2 id=&#34;为什么需要这个&#34;&gt;&#xA;  为什么需要这个&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81%e8%bf%99%e4%b8%aa&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;AI Agent 经常需要执行耗时较长的异步任务（视频剪辑、字幕生成、模型推理等）。任务完成后，如何通知用户？&lt;/p&gt;&#xA;&lt;p&gt;有三种常见实现方式：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;方式&lt;/th&gt;&#xA;          &lt;th&gt;过程&lt;/th&gt;&#xA;          &lt;th&gt;优点&lt;/th&gt;&#xA;          &lt;th&gt;缺点&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;同步等待&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;发起任务 → 一直等到完成 → 返回结果&lt;/td&gt;&#xA;          &lt;td&gt;实现简单&lt;/td&gt;&#xA;          &lt;td&gt;长时间阻塞，用户体验差&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;异步轮询&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;发起任务 → 拿到 job_id → 不断查询 → 完成&lt;/td&gt;&#xA;          &lt;td&gt;不阻塞&lt;/td&gt;&#xA;          &lt;td&gt;对话不能断开，浪费 token&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;异步+通知&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;发起任务 → 返回&amp;quot;已提交&amp;quot; → 完成后主动推送&lt;/td&gt;&#xA;          &lt;td&gt;体验最好，资源最优&lt;/td&gt;&#xA;          &lt;td&gt;需要服务端支持回调&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;OpenClaw 的独特优势在于它拥有 &lt;strong&gt;Webhook/Hook 机制&lt;/strong&gt;，可以作为服务端接收外部回调，主动推送消息到飞书。&lt;/p&gt;&#xA;&lt;p&gt;对比其他 AI 工具：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;OpenCode / Claude Code&lt;/strong&gt;：纯 CLI 工具，只有&amp;quot;触发→等待→返回&amp;quot;的模式，没有回调机制&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt;：内置 Gateway 服务，支持 &lt;code&gt;/hooks/*&lt;/code&gt; 端点，天然适合异步回调&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;所以 &lt;strong&gt;&amp;ldquo;异步+通知&amp;rdquo;&lt;/strong&gt; 是 OpenClaw 的场景的最优解。&lt;/p&gt;&#xA;&lt;h2 id=&#34;整体架构&#34;&gt;&#xA;  整体架构&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%95%b4%e4%bd%93%e6%9e%b6%e6%9e%84&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;sequenceDiagram&#xA;    participant U as 用户（飞书）&#xA;    participant O as OpenClaw Agent&#xA;    participant W as Windmill / 外部系统&#xA;    participant H as OpenClaw Hook&#xA;&#xA;    U-&gt;&gt;O: 发消息处理这个视频&#xA;    O-&gt;&gt;W: API 调用（异步）&#xA;    O--&gt;&gt;U: 任务已提交&#xA;    Note over W: 几分钟后...&#xA;    W--&gt;&gt;H: POST /hooks/agent&#xA;    H-&gt;&gt;H: 创建 Agent Turn&#xA;    H-&gt;&gt;U: 飞书消息（带下载链接）&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;agent-turn-与-wake&#34;&gt;&#xA;  Agent Turn 与 Wake&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#agent-turn-%e4%b8%8e-wake&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;OpenClaw 提供了两种代码触发的消息通知方式，它们都通过 Gateway 的 &lt;code&gt;/hooks/*&lt;/code&gt; 端点实现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenClaw 飞书能力实战：踩坑、绕路、最终打通云文档/日历/任务</title>
      <link>https://blog.ohtly.com/posts/2026-05-27-openclaw-feishu-practice/</link>
      <pubDate>Wed, 27 May 2026 11:08:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-27-openclaw-feishu-practice/</guid>
      <description>&lt;h2 id=&#34;为什么选飞书&#34;&gt;&#xA;  为什么选飞书&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89%e9%a3%9e%e4%b9%a6&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;OpenClaw 接入 IM 的几种方式里，飞书是目前最好的选择。Telegram、Discord 都是国外平台，国内访问不稳定；微信个人号方案有封号风险。飞书拥有开放的 API 生态、免公网 IP 的长连接方式，以及云文档、多维表格、日历、任务等一体化工作能力，天然适合作为 AI Agent 的操作界面。&lt;/p&gt;&#xA;&lt;h2 id=&#34;踩坑飞书官方插件&#34;&gt;&#xA;  踩坑：飞书官方插件&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%b8%a9%e5%9d%91%e9%a3%9e%e4%b9%a6%e5%ae%98%e6%96%b9%e6%8f%92%e4%bb%b6&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;飞书官方推出了 OpenClaw 插件 &lt;code&gt;@larksuite/openclaw-lark&lt;/code&gt;，号称可以让 Agent 以用户身份操作飞书资源：创建文档、管理任务、查看日历等。我按照官方文档在服务器上安装并启用后，对话正常，Agent 也能回复消息。&lt;/p&gt;&#xA;&lt;p&gt;但问题来了——让 Agent 创建一个飞书任务，它回复&amp;quot;已创建&amp;quot;；让创建云文档，也说&amp;quot;已创建&amp;quot;。然而打开飞书，&lt;strong&gt;任务列表里空空如也，云文档里也没有任何新文件&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;查日志发现了关键错误：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[plugins] plugin must declare contracts.tools before registering agent tools&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;追到 OpenClaw 主仓库，发现这是 OpenClaw 核心框架的一个 bug（&lt;a href=&#34;https://github.com/openclaw/openclaw/issues/80621&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;issue #80621&lt;/a&gt;）：插件明明正确声明了 &lt;code&gt;contracts.tools: true&lt;/code&gt;，但运行时在注册工具时被拒绝。修复补丁（&lt;a href=&#34;https://github.com/openclaw/openclaw/pull/84512&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PR #84512&lt;/a&gt;）已提交，但尚未合入。&lt;/p&gt;&#xA;&lt;p&gt;所以 openclaw-lark 本身没有 bug，是上游 OpenClaw 框架的 &lt;code&gt;registerTool&lt;/code&gt; 检查逻辑有问题，导致飞书官方插件的所有工具（任务、文档、日历等）都无法注册到 Agent。Agent 回退到用 &lt;code&gt;message&lt;/code&gt; 工具发送文本消息，所以&amp;quot;已创建&amp;quot;只是发了一条消息到飞书聊天里，实际什么都没创建。&lt;/p&gt;&#xA;&lt;h2 id=&#34;绕路内置-feishu-插件--飞书-cli&#34;&gt;&#xA;  绕路：内置 feishu 插件 + 飞书 CLI&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%bb%95%e8%b7%af%e5%86%85%e7%bd%ae-feishu-%e6%8f%92%e4%bb%b6--%e9%a3%9e%e4%b9%a6-cli&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;既然飞书官方插件暂时不可用，替代方案是：&lt;strong&gt;OpenClaw 自带的 &lt;code&gt;@openclaw/feishu&lt;/code&gt; 插件 + 飞书 CLI&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenClaw Tools：异步调用 Windmill Script</title>
      <link>https://blog.ohtly.com/posts/2026-05-26-openclaw-tools-windmill-async/</link>
      <pubDate>Tue, 26 May 2026 20:00:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-26-openclaw-tools-windmill-async/</guid>
      <description>&lt;p&gt;Windmill 提供 MCP Server，可以将脚本/流程暴露给 AI Agent。但 MCP 的脚本调用能力无法同时满足「传参」和「异步执行」两个需求。本文将介绍如何通过编写 OpenClaw Tools Plugin 来绕过这些限制，实现灵活的异步调用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenCode 同步调用 Windmill 脚本：GitOps 工作流实践</title>
      <link>https://blog.ohtly.com/posts/2026-05-26-opencode-windmill-gitops/</link>
      <pubDate>Tue, 26 May 2026 11:38:22 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-26-opencode-windmill-gitops/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Windmill 支持 GitOps 流程——所有脚本和工作流都可以通过 Git 进行版本管理。本文介绍一种简化的个人/小团队工作流：本地开发，通过 &lt;code&gt;wmill&lt;/code&gt; CLI 同步到 Windmill，手动管理 Git 仓库。&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Windmill &#43; MCP：构建可编排的 AI Agent 工作流</title>
      <link>https://blog.ohtly.com/posts/2026-05-25-windmill-mcp-ai-agent-workflow/</link>
      <pubDate>Mon, 25 May 2026 19:35:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-25-windmill-mcp-ai-agent-workflow/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;AI Agent 开发中，长时间运行的任务是常见痛点。同步等待导致超时、资源占用影响响应速度。如果采用传统异步方案（如消息队列），需要处理队列配置、序列化、消费者逻辑、死信管理等，繁琐且维护成本高。本文介绍如何使用 Windmill 实现异步任务——只需写一个脚本函数，通过 Webhook 或 API 即可触发，并可通过其内置的 MCP Server 让 AI Agent 直接编排，大幅降低开发复杂度。&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>auto-editor：命令行视频粗剪工具介绍</title>
      <link>https://blog.ohtly.com/posts/2026-05-25-auto-editor-intro/</link>
      <pubDate>Mon, 25 May 2026 17:30:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-25-auto-editor-intro/</guid>
      <description>&lt;h2 id=&#34;什么是-auto-editor&#34;&gt;&#xA;  什么是 auto-editor&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e4%bb%80%e4%b9%88%e6%98%af-auto-editor&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/WyattBlue/auto-editor&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;auto-editor&lt;/a&gt; 是一个命令行视频自动编辑工具，通过检测音频响度或画面运动来自动识别&amp;quot;死区&amp;quot;（dead space）并进行处理。&lt;/p&gt;&#xA;&lt;p&gt;核心功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;自动检测静音/低音量片段&lt;/li&gt;&#xA;&lt;li&gt;支持多种编辑动作：删除、加速、变速、调音量&lt;/li&gt;&#xA;&lt;li&gt;纯命令行操作，适合批量处理和集成到工作流&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;为什么口播视频需要粗剪&#34;&gt;&#xA;  为什么口播视频需要粗剪&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e5%8f%a3%e6%92%ad%e8%a7%86%e9%a2%91%e9%9c%80%e8%a6%81%e7%b2%97%e5%89%aa&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;录制口播视频时，难免会有：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;停顿、思考&lt;/li&gt;&#xA;&lt;li&gt;重复、重录&lt;/li&gt;&#xA;&lt;li&gt;口头禅、碎语&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些&amp;quot;死区&amp;quot;手动删除枯燥耗时，尤其当视频长达 15-30 分钟时。粗剪工具可以快速定位并处理这些片段，后续再导入专业软件精剪。&lt;/p&gt;&#xA;&lt;h2 id=&#34;环境搭建&#34;&gt;&#xA;  环境搭建&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;auto-editor 提供预编译二进制，但需要较新的 glibc 版本（Ubuntu 24.04+）。下面是一个精简的 Docker 镜像：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; ubuntu:24.04&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; apt-get update &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    software-properties-common &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    curl &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; add-apt-repository -y ppa:ubuntu-toolchain-r/test &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get update &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y libstdc++6 &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf /var/lib/apt/lists/*&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; curl -L https://github.com/WyattBlue/auto-editor/releases/download/30.2.4/auto-editor-linux-x86_64 &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    -o /usr/local/bin/auto-editor &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod +x /usr/local/bin/auto-editor&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ENTRYPOINT&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;auto-editor&amp;#34;&lt;/span&gt;]&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：预编译版本依赖 GLIBCXX_3.4.32，Ubuntu 24.04 之前的系统需要额外升级 libstdc++ 或自行编译。&lt;/p&gt;</description>
    </item>
    <item>
      <title>FunASR 视频字幕生成原型</title>
      <link>https://blog.ohtly.com/posts/2026-05-25-funasr-subtitle/</link>
      <pubDate>Mon, 25 May 2026 15:47:21 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-25-funasr-subtitle/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;&#xA;  背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;最近在研究从视频中自动生成字幕，选中了阿里云的 FunASR（Fun Audio Speech Recognition）模型。FunASR 支持端到端的语音识别和时间戳提取，理论上非常适合用于视频字幕生成。&lt;/p&gt;&#xA;&lt;h2 id=&#34;已知-bug&#34;&gt;&#xA;  已知 Bug&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%b7%b2%e7%9f%a5-bug&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;FunASR v1.3.1（PyPI 最新版）配合 Fun-ASR-Nano 模型使用时存在两个官方未修复的 bug：&lt;/p&gt;&#xA;&lt;h3 id=&#34;bug-1-batch-decoding-is-not-implemented&#34;&gt;&#xA;  Bug 1: batch decoding is not implemented&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#bug-1-batch-decoding-is-not-implemented&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;VAD 切段后 ASR 模型收到 batch 输入会抛出 &lt;code&gt;NotImplementedError&lt;/code&gt;。原因是 &lt;code&gt;auto_model.py&lt;/code&gt; 默认将 &lt;code&gt;batch_size&lt;/code&gt; 设为 300000，但模型不支持 batch 输入。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;修复&lt;/strong&gt;：传入 &lt;code&gt;batch_size_s=0&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;详见：&lt;a href=&#34;https://github.com/modelscope/FunASR/issues/2273&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#2273 - NotImplementedError: batch decoding is not implemented&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;bug-2-keyerror-0&#34;&gt;&#xA;  Bug 2: KeyError: 0&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#bug-2-keyerror-0&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;逐段处理后时间戳偏移时报 &lt;code&gt;KeyError: 0&lt;/code&gt;。原因是 Fun-ASR-Nano 返回的时间戳是 dict 格式 &lt;code&gt;{&amp;quot;start_time&amp;quot;: ..., &amp;quot;end_time&amp;quot;: ...}&lt;/code&gt;，而代码假设是 list 格式 &lt;code&gt;[start, end]&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>搭建基于 Katago 的围棋游戏</title>
      <link>https://blog.ohtly.com/posts/2026-05-24-%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8E-katago-%E7%9A%84%E5%9B%B4%E6%A3%8B%E6%B8%B8%E6%88%8F/</link>
      <pubDate>Sun, 24 May 2026 20:00:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-24-%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8E-katago-%E7%9A%84%E5%9B%B4%E6%A3%8B%E6%B8%B8%E6%88%8F/</guid>
      <description>&lt;h1 id=&#34;搭建基于-katago-的围棋游戏&#34;&gt;&#xA;  搭建基于 Katago 的围棋游戏&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%90%ad%e5%bb%ba%e5%9f%ba%e4%ba%8e-katago-%e7%9a%84%e5%9b%b4%e6%a3%8b%e6%b8%b8%e6%88%8f&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;回顾&#34;&gt;&#xA;  回顾&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%9b%9e%e9%a1%be&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;李世石-vs-alphago&#34;&gt;&#xA;  李世石 vs AlphaGo&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9d%8e%e4%b8%96%e7%9f%b3-vs-alphago&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;2016 年 3 月，韩国首尔，全世界都在关注一场特殊的围棋比赛。&lt;/p&gt;&#xA;&lt;p&gt;李世石九段对战 DeepMind 的 AlphaGo。五番棋，1:4。李世石赢下了第四局——那一步&amp;quot;挖&amp;quot;成了围棋史上的经典。那时候，人们还在讨论：AI 到底能不能真正理解围棋？&lt;/p&gt;&#xA;&lt;p&gt;答案是：能，而且远超人类。&lt;/p&gt;&#xA;&lt;h3 id=&#34;开源的-katago&#34;&gt;&#xA;  开源的 KataGo&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%bc%80%e6%ba%90%e7%9a%84-katago&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;仅仅几年后，开源的 &lt;strong&gt;KataGo&lt;/strong&gt; 横空出世。它基于 AlphaGo Zero 的论文思路，但做了大量优化——更快的训练速度、更强的网络结构、支持多规则多路盘、还开源。&lt;/p&gt;&#xA;&lt;p&gt;到今天，KataGo 的官方评级系统中，主力模型 &lt;strong&gt;ELO 已经达到 14095&lt;/strong&gt;。作为参考：职业顶尖棋手在这个标度上大约是 3000-3500 ELO。&lt;/p&gt;&#xA;&lt;p&gt;差距已经不是&amp;quot;能不能赢&amp;quot;的问题，而是&amp;quot;赢多少&amp;quot;的问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;平民化部署&#34;&gt;&#xA;  平民化部署&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%b9%b3%e6%b0%91%e5%8c%96%e9%83%a8%e7%bd%b2&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;最让人感慨的是——这样的 AI 不需要 Google 的超级计算机。&lt;/p&gt;&#xA;&lt;p&gt;一台普通单机服务器 + 一块 &lt;strong&gt;NVIDIA RTX 4060 Ti&lt;/strong&gt;（~3000元级别显卡），配合 &lt;strong&gt;TensorRT&lt;/strong&gt; 加速，就能跑起 KataGo，棋力依然碾压一切人类选手。&lt;/p&gt;&#xA;&lt;p&gt;这正是本文想要分享的部署方案：用最普通的硬件，搭建一套基于 KataGo 的围棋对弈环境。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 OpenClaw 管理 Obsidian 笔记</title>
      <link>https://blog.ohtly.com/posts/2026-05-16-openclaw-obsidian/</link>
      <pubDate>Sat, 16 May 2026 20:00:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-16-openclaw-obsidian/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;&#xA;  概述&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%a6%82%e8%bf%b0&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;本文介绍如何配置 OpenClaw AI Agent 来管理 Obsidian 笔记，实现多设备实时同步和 AI 辅助笔记管理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;架构&#34;&gt;&#xA;  架构&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9e%b6%e6%9e%84&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;flowchart TB&#xA;    subgraph &#34;本地设备 (Mac Mini)&#34;&#xA;        A[&#34;OpenClaw&lt;br/&gt;AI Agent&#34;] --&gt;|obsidian CLI| B[&#34;Obsidian CLI&lt;br/&gt;~/Documents/vault&#34;]&#xA;        A -.-&gt;|skills| C[&#34;obsidian-skills&#34;]&#xA;    end&#xA;&#xA;    B -.-&gt;|&#34;LiveSync&#34;| D[(&#34;CouchDB&lt;br/&gt;couchdb:5984&#34;)]&#xA;    E[&#34;其他设备&#34;] -.-&gt;|&#34;LiveSync&#34;| D&#xA;&#xA;    style A fill:#e3f2fd,stroke:#1565c0,stroke-width:2px&#xA;    style B fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px&#xA;    style C fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px&#xA;    style D fill:#fff3e0,stroke:#e65100,stroke-width:2px&#xA;    style E fill:#fce4ec,stroke:#c62828,stroke-width:2px&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;架构说明&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt;：AI Agent Gateway，通过自然语言管理笔记&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Obsidian CLI&lt;/strong&gt;：命令行工具，依赖 Obsidian 图形界面&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Vault&lt;/strong&gt;：~/Documents/&lt;vault-name&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;LiveSync + CouchDB&lt;/strong&gt;：多设备实时同步方案&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;obsidian-skills&lt;/strong&gt;：让 AI 理解如何正确使用 Obsidian 语法的技能包&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;准备工作&#34;&gt;&#xA;  准备工作&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;obsidian-cli&#34;&gt;&#xA;  Obsidian CLI&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#obsidian-cli&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Obsidian 提供官方 CLI 工具，需要配合 Obsidian 图形界面使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 Prometheus 监控 Docker CouchDB 实例</title>
      <link>https://blog.ohtly.com/posts/2026-05-16-docker-couchdb-prometheus-monitoring/</link>
      <pubDate>Sat, 16 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-16-docker-couchdb-prometheus-monitoring/</guid>
      <description>&lt;p&gt;最近在项目中使用了 CouchDB 作为文档数据库，考虑到生产环境的需求，研究了一套基于 Prometheus 的监控方案。这套方案全部跑在 Docker 环境下，现在整理成文，供有需要的同学参考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 Slidev 打造你的幻灯片</title>
      <link>https://blog.ohtly.com/posts/2026-05-11-%E4%BD%BF%E7%94%A8-slidev-%E7%BC%96%E5%86%99%E5%B9%BB%E7%81%AF%E7%89%87%E6%8C%87%E5%8D%97/</link>
      <pubDate>Mon, 11 May 2026 12:40:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-11-%E4%BD%BF%E7%94%A8-slidev-%E7%BC%96%E5%86%99%E5%B9%BB%E7%81%AF%E7%89%87%E6%8C%87%E5%8D%97/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;基于真实项目 &lt;code&gt;slidev-in-action&lt;/code&gt; 的完整实战指南&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;生成的幻灯片项目截图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.ohtly.com/images/slidev-guide/combined-2rows.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-为什么选择-slidev&#34;&gt;&#xA;  1. 为什么选择 Slidev？&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89%e6%8b%a9-slidev&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;传统的 PPT 工具（PowerPoint、Keynote）虽然功能强大，但在开发者场景下存在明显痛点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;版本控制困难&lt;/strong&gt;：二进制文件难以用 Git 管理，协作时冲突频发&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;代码展示简陋&lt;/strong&gt;：粘贴代码后丢失高亮，更新代码需要手动同步&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;排版效率低&lt;/strong&gt;：调字体、拉对齐线耗费大量时间&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分享不灵活&lt;/strong&gt;：导出 PDF 后无法交互，网页分享需要额外上传&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Slidev&lt;/strong&gt; 是一个基于 Vue 的幻灯片引擎，它将 Markdown 文件渲染为交互式网页演示。对开发者而言，它的优势显而易见：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;✅ 用 &lt;strong&gt;Markdown&lt;/strong&gt; 编写内容，专注表达而非排版&lt;/li&gt;&#xA;&lt;li&gt;✅ &lt;strong&gt;代码高亮&lt;/strong&gt; 原生支持，支持行号、聚焦、动画&lt;/li&gt;&#xA;&lt;li&gt;✅ &lt;strong&gt;版本控制友好&lt;/strong&gt;，Git diff 清晰可读&lt;/li&gt;&#xA;&lt;li&gt;✅ 内置 &lt;strong&gt;Mermaid&lt;/strong&gt; 图表、&lt;strong&gt;LaTeX&lt;/strong&gt; 公式、&lt;strong&gt;Vue 组件&lt;/strong&gt; 支持&lt;/li&gt;&#xA;&lt;li&gt;✅ 一键导出 &lt;strong&gt;PDF / PPTX&lt;/strong&gt;，也可部署为静态站点&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果你经常做技术分享、内部培训或开源项目演示，Slidev 几乎是最佳选择。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-环境准备与安装&#34;&gt;&#xA;  2. 环境准备与安装&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#2-%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87%e4%b8%8e%e5%ae%89%e8%a3%85&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;前置要求&#34;&gt;&#xA;  前置要求&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%89%8d%e7%bd%ae%e8%a6%81%e6%b1%82&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt; &amp;gt;= 18.0（推荐 LTS 版本）&lt;/li&gt;&#xA;&lt;li&gt;包管理器：&lt;strong&gt;npm&lt;/strong&gt;、&lt;strong&gt;yarn&lt;/strong&gt; 或 &lt;strong&gt;pnpm&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;安装-slidev-cli&#34;&gt;&#xA;  安装 Slidev CLI&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%ae%89%e8%a3%85-slidev-cli&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;在已有 Node.js 环境的项目中，直接安装 Slidev 的命令行工具：&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU 自动巡检与自愈：从掉卡到飞书通知的自动化链路</title>
      <link>https://blog.ohtly.com/posts/2026-05-06-gpu-auto-health-check/</link>
      <pubDate>Tue, 05 May 2026 22:30:00 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-06-gpu-auto-health-check/</guid>
      <description>&lt;p&gt;GPU 在虚拟化直通（Passthrough）环境下运行时，偶尔会出现驱动丢失、NVML 报错等问题，导致容器内无法使用 GPU。本文介绍一个轻量级的自动巡检自愈方案，从检测到修复再到飞书通知，全自动闭环。&lt;/p&gt;&#xA;&lt;img src=&#34;https://blog.ohtly.com/images/飞书.png&#34; alt=&#34;飞书告警通知&#34; style=&#34;max-width: none !important; width: auto; height: auto; display: block; margin-left: 0; border: 1px solid #999;&#34;&gt;&#xA;&lt;h2 id=&#34;问题背景&#34;&gt;&#xA;  问题背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在 PVE 虚拟机中通过 PCIe Passthrough 直通 NVIDIA GPU 时，容器内偶尔会出现：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Failed to initialize NVML: Unknown Error&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;重启容器后可短暂恢复，但一段时间后再次失效。这类问题在虚拟化环境中难以彻底根治（涉及 ASPM 电源管理、驱动状态等问题），需要一个主动巡检 + 自动修复的兜底机制。&lt;/p&gt;&#xA;&lt;h2 id=&#34;架构总览&#34;&gt;&#xA;  架构总览&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9e%b6%e6%9e%84%e6%80%bb%e8%a7%88&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;graph LR&#xA;    GC[gpu-checker&lt;br/&gt;每 60s 巡检] --&gt;|docker exec nvidia-smi| OS[GPU 应用容器]&#xA;    GC --&gt;|异常| A[自动修复]&#xA;    A --&gt;|1.告警| AT[alert-transformer]&#xA;    A --&gt;|2.重启| OS&#xA;    A --&gt;|3.重检| B{恢复?}&#xA;    B --&gt;|是| AT&#xA;    B --&gt;|否| C[人工介入]&#xA;    AT --&gt;|hooks| OC[OpenClaw]&#xA;    OC --&gt;|飞书机器人| FS[飞书通知]&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;部署-gpu-checker&#34;&gt;&#xA;  部署 gpu-checker&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%83%a8%e7%bd%b2-gpu-checker&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;巡检容器是一个独立的 Docker 容器，使用 &lt;code&gt;docker:cli&lt;/code&gt; 镜像，通过挂载 docker.sock 来操作宿主机上的其他容器：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 DCGM-Exporter 实现 GPU 智能告警</title>
      <link>https://blog.ohtly.com/posts/2026-05-06-dcgm-exporter-gpu-alert/</link>
      <pubDate>Tue, 05 May 2026 21:53:58 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-06-dcgm-exporter-gpu-alert/</guid>
      <description>&lt;p&gt;GPU 是生产环境中重要的计算资源，温度过高、显存泄漏、硬件故障等问题如果不及时发现，可能影响线上服务。本文记录一套完整的 GPU 监控告警方案，从指标采集到飞书推送的全自动链路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;监控目标&#34;&gt;&#xA;  监控目标&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%9b%91%e6%8e%a7%e7%9b%ae%e6%a0%87&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;维度&lt;/th&gt;&#xA;          &lt;th&gt;指标&lt;/th&gt;&#xA;          &lt;th&gt;告警阈值&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;温度&lt;/td&gt;&#xA;          &lt;td&gt;GPU 核心温度 / 显存温度&lt;/td&gt;&#xA;          &lt;td&gt;&amp;gt; 83°C / &amp;gt; 100°C&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;显存&lt;/td&gt;&#xA;          &lt;td&gt;VRAM 使用率&lt;/td&gt;&#xA;          &lt;td&gt;&amp;gt; 90%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;功耗&lt;/td&gt;&#xA;          &lt;td&gt;GPU 功率&lt;/td&gt;&#xA;          &lt;td&gt;&amp;gt; 150W&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;硬件健康&lt;/td&gt;&#xA;          &lt;td&gt;PCIe 重连、行重映射错误&lt;/td&gt;&#xA;          &lt;td&gt;任何异常&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;可用性&lt;/td&gt;&#xA;          &lt;td&gt;DCGM-Exporter 进程是否存活&lt;/td&gt;&#xA;          &lt;td&gt;宕机 1m&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;架构总览&#34;&gt;&#xA;  架构总览&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9e%b6%e6%9e%84%e6%80%bb%e8%a7%88&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;flowchart LR&#xA;    A[DCGM-Exporter&lt;br/&gt;monkey:9400] --&gt;|scrape| B[Prometheus&lt;br/&gt;robin:9090]&#xA;    B --&gt;|alert rules| C[Alertmanager&lt;br/&gt;robin:9093]&#xA;    C --&gt;|webhook| D[alert-transformer&lt;br/&gt;rivo:9091]&#xA;    D --&gt;|hooks| E[OpenClaw]&#xA;    E --&gt;|飞书机器人| F[飞书]&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;部署-dcgm-exporter&#34;&gt;&#xA;  部署 DCGM-Exporter&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%83%a8%e7%bd%b2-dcgm-exporter&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在 GPU 节点上通过 Docker 部署 DCGM-Exporter。使用 DaoCloud 镜像加速国内拉取：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo 博客配置 Mermaid 图表支持</title>
      <link>https://blog.ohtly.com/posts/hugo-mermaid-config/</link>
      <pubDate>Tue, 05 May 2026 17:06:49 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/hugo-mermaid-config/</guid>
      <description>&lt;h1 id=&#34;hugo-博客配置-mermaid-图表支持&#34;&gt;&#xA;  Hugo 博客配置 Mermaid 图表支持&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#hugo-%e5%8d%9a%e5%ae%a2%e9%85%8d%e7%bd%ae-mermaid-%e5%9b%be%e8%a1%a8%e6%94%af%e6%8c%81&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;本文说明基于 hugo-coder 主题的博客如何集成 Mermaid 图表。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前提条件&#34;&gt;&#xA;  前提条件&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用支持 Mermaid shortcode 的 Hugo 主题（如 hugo-coder）&lt;/li&gt;&#xA;&lt;li&gt;主题的 &lt;code&gt;baseof.html&lt;/code&gt; 中包含以下逻辑：&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ if .HasShortcode &amp;#34;mermaid&amp;#34; }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/npm/mermaid@9.3.0/dist/mermaid.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mermaid&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;initialize&lt;/span&gt;({&lt;span style=&#34;color:#a6e22e&#34;&gt;startOnLoad&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;});&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ end }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;正确写法&#34;&gt;&#xA;  正确写法&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%ad%a3%e7%a1%ae%e5%86%99%e6%b3%95&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Mermaid 图表必须使用 Hugo Shortcode 语法，而非标准 Markdown 代码块：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;类型&lt;/th&gt;&#xA;          &lt;th&gt;写法&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;✅ &lt;strong&gt;Shortcode&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;{{&amp;lt; mermaid &amp;gt;}} ... {{&amp;lt; /mermaid &amp;gt;}}&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;❌ &lt;strong&gt;Markdown 代码块&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;```mermaid ... ```&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;图表类型示例&#34;&gt;&#xA;  图表类型示例&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%9b%be%e8%a1%a8%e7%b1%bb%e5%9e%8b%e7%a4%ba%e4%be%8b&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;流程图&#34;&gt;&#xA;  流程图&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%b5%81%e7%a8%8b%e5%9b%be&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;flowchart TD&#xA;    A[开始] --&gt; B{判断}&#xA;    B --&gt;|条件A| C[处理A]&#xA;    B --&gt;|条件B| D[处理B]&#xA;    C --&gt; E[结束]&#xA;    D --&gt; E&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;时序图&#34;&gt;&#xA;  时序图&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%97%b6%e5%ba%8f%e5%9b%be&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;sequenceDiagram&#xA;    participant 客户端&#xA;    participant 服务器&#xA;    participant 数据库&#xA;&#xA;    客户端-&gt;&gt;服务器: 请求&#xA;    服务器-&gt;&gt;数据库: 查询&#xA;    数据库--&gt;&gt;服务器: 返回结果&#xA;    服务器--&gt;&gt;客户端: 响应&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;甘特图&#34;&gt;&#xA;  甘特图&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%94%98%e7%89%b9%e5%9b%be&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;gantt&#xA;    title 项目计划&#xA;    dateFormat YYYY-MM-DD&#xA;    section 设计&#xA;    设计方案 :done, d1, 2026-05-01, 3d&#xA;    设计评审 :done, d2, after d1, 1d&#xA;    section 开发&#xA;    编码实现 :active, dev1, after d2, 5d&#xA;    单元测试 :dev2, after dev1, 2d&#xA;    section 部署&#xA;    部署上线 :deploy, after dev2, 1d&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;注意事项&#34;&gt;&#xA;  注意事项&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;必须使用 Hugo Shortcode 语法 &lt;code&gt;{{&amp;lt; mermaid &amp;gt;}}&lt;/code&gt;，不要用 &lt;code&gt;```mermaid&lt;/code&gt; Markdown 代码块&lt;/li&gt;&#xA;&lt;li&gt;编写时注意 Shortcode 前后各有一个空行，确保 Hugo 正确解析&lt;/li&gt;&#xA;&lt;li&gt;提交后等待 Cloudflare Pages 自动构建部署（约 1-2 分钟）&lt;/li&gt;&#xA;&lt;li&gt;如需本地预览，运行 &lt;code&gt;hugo server&lt;/code&gt; 后访问 &lt;code&gt;http://localhost:1313&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>智能监控技术方案：OpenClaw &#43; Prometheus &#43; Loki</title>
      <link>https://blog.ohtly.com/posts/2026-05-05-%E6%99%BA%E8%83%BD%E7%9B%91%E6%8E%A7%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88/</link>
      <pubDate>Tue, 05 May 2026 13:49:54 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-05-05-%E6%99%BA%E8%83%BD%E7%9B%91%E6%8E%A7%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88/</guid>
      <description>&lt;h1 id=&#34;智能监控技术方案&#34;&gt;&#xA;  智能监控技术方案&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%99%ba%e8%83%bd%e7%9b%91%e6%8e%a7%e6%8a%80%e6%9c%af%e6%96%b9%e6%a1%88&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;概述&#34;&gt;&#xA;  概述&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%a6%82%e8%bf%b0&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;本文档描述基于开源组件构建的智能监控告警体系，实现从指标采集到飞书通知的完整告警流程。&lt;/p&gt;&#xA;&lt;h3 id=&#34;架构概览&#34;&gt;&#xA;  架构概览&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9e%b6%e6%9e%84%e6%a6%82%e8%a7%88&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;告警处理流程&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;flowchart TD&#xA;    A[&#34;node-exporter&lt;br/&gt;:9100&#34;]&#xA;    B[&#34;Prometheus&lt;br/&gt;:9090&#34;]&#xA;    C[&#34;Alertmanager&lt;br/&gt;:9093&#34;]&#xA;    D[&#34;alert-transformer&lt;br/&gt;:9091&#34;]&#xA;    E[&#34;OpenClaw&lt;br/&gt;:18789&#34;]&#xA;    F[&#34;飞书 Webhook&#34;]&#xA;    G[&#34;告警规则&lt;br/&gt;alerts.yml&#34;]&#xA;&#xA;    A --&gt;|指标采集| B&#xA;    B --&gt;|告警评估| C&#xA;    B -.-&gt;|加载| G&#xA;    C --&gt;|Webhook| D&#xA;    D --&gt;|格式转换| E&#xA;    E --&gt;|飞书通知| F&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;指标采集流程&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;mermaid&#34;&gt;&#xA;flowchart LR&#xA;    subgraph 指标&#xA;        H[&#34;node-exporter&lt;br/&gt;:9100&#34;]&#xA;        I[&#34;Prometheus&lt;br/&gt;:9090&#34;]&#xA;        H --&gt;|&#34;Prometheus 抓取 (15s)&#34;| I&#xA;    end&#xA;    subgraph 日志&#xA;        J[&#34;Docker 日志&#34;]&#xA;        K[&#34;Alloy&lt;br/&gt;:12345&#34;]&#xA;        L[&#34;Loki&lt;br/&gt;:3100&#34;]&#xA;        J --&gt;|采集| K&#xA;        K --&gt;|发送| L&#xA;    end&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;组件职责&#34;&gt;&#xA;  组件职责&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%bb%84%e4%bb%b6%e8%81%8c%e8%b4%a3&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;组件&lt;/th&gt;&#xA;          &lt;th&gt;职责&lt;/th&gt;&#xA;          &lt;th&gt;端口&lt;/th&gt;&#xA;          &lt;th&gt;部署位置&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;node-exporter&lt;/td&gt;&#xA;          &lt;td&gt;系统指标采集 (CPU/内存/磁盘/网络)&lt;/td&gt;&#xA;          &lt;td&gt;9100&lt;/td&gt;&#xA;          &lt;td&gt;每台被监控主机&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Prometheus&lt;/td&gt;&#xA;          &lt;td&gt;指标抓取、存储、告警规则评估&lt;/td&gt;&#xA;          &lt;td&gt;9090&lt;/td&gt;&#xA;          &lt;td&gt;监控服务器&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Alertmanager&lt;/td&gt;&#xA;          &lt;td&gt;告警去重、分组、路由、抑制&lt;/td&gt;&#xA;          &lt;td&gt;9093&lt;/td&gt;&#xA;          &lt;td&gt;监控服务器&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;alert-transformer&lt;/td&gt;&#xA;          &lt;td&gt;告警格式转换为 OpenClaw API&lt;/td&gt;&#xA;          &lt;td&gt;9091&lt;/td&gt;&#xA;          &lt;td&gt;监控服务器&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;OpenClaw&lt;/td&gt;&#xA;          &lt;td&gt;AI 决策、自然语言处理、飞书通知&lt;/td&gt;&#xA;          &lt;td&gt;18789&lt;/td&gt;&#xA;          &lt;td&gt;OpenClaw 服务器&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Loki&lt;/td&gt;&#xA;          &lt;td&gt;日志存储和查询&lt;/td&gt;&#xA;          &lt;td&gt;3100&lt;/td&gt;&#xA;          &lt;td&gt;监控服务器&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Alloy&lt;/td&gt;&#xA;          &lt;td&gt;Docker 日志采集&lt;/td&gt;&#xA;          &lt;td&gt;12345&lt;/td&gt;&#xA;          &lt;td&gt;监控服务器&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;部署配置&#34;&gt;&#xA;  部署配置&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%83%a8%e7%bd%b2%e9%85%8d%e7%bd%ae&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;node-exporter-部署&#34;&gt;&#xA;  node-exporter 部署&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#node-exporter-%e9%83%a8%e7%bd%b2&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;每台被监控主机部署 node-exporter，建议使用 Docker Compose：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elasticsearch IK 中文分词索引环境的部署</title>
      <link>https://blog.ohtly.com/posts/2026-04-16-elasticsearch-ik/</link>
      <pubDate>Thu, 16 Apr 2026 19:58:59 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-04-16-elasticsearch-ik/</guid>
      <description>&lt;h1 id=&#34;elasticsearch-中文分词索引环境的部署&#34;&gt;&#xA;  Elasticsearch 中文分词索引环境的部署&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#elasticsearch-%e4%b8%ad%e6%96%87%e5%88%86%e8%af%8d%e7%b4%a2%e5%bc%95%e7%8e%af%e5%a2%83%e7%9a%84%e9%83%a8%e7%bd%b2&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;&#xA;  背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在 RAG（检索增强生成）和中文搜索场景中，Elasticsearch 默认的标准分词器无法正确处理中文文本，会将每个汉字单独切分，导致搜索效果极差。IK 分词器（analysis-ik）是 Elasticsearch 最流行的中文分词插件，支持两种分词模式：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ik_smart&lt;/code&gt;：最少切分（粗粒度），适合搜索场景&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ik_max_word&lt;/code&gt;：最细粒度切分，适合分析场景&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;本文记录在 Docker Compose 环境下部署带 IK 分词器的 Elasticsearch 单节点服务，并配置安全认证。&lt;/p&gt;&#xA;&lt;h2 id=&#34;版本选择说明&#34;&gt;&#xA;  版本选择说明&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%89%88%e6%9c%ac%e9%80%89%e6%8b%a9%e8%af%b4%e6%98%8e&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;为什么选择 Elasticsearch 8.x 而不是 9.x？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本文部署的是 Elasticsearch 8.17.4，主要原因是当时 IK 分词器尚未支持 Elasticsearch 9.x。&lt;/p&gt;&#xA;&lt;p&gt;根据 &lt;a href=&#34;https://github.com/infinilabs/analysis-ik&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;infinilabs/analysis-ik&lt;/a&gt; 官方发布页面的版本记录：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IK 插件对 ES 8.x 的支持：持续更新到 8.19.x&lt;/li&gt;&#xA;&lt;li&gt;IK 插件对 ES 9.x 的支持：从 2025 年 5 月才陆续发布（9.0.0 于 2025-05-17 发布）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;因此，在 2026 年初进行技术选型时，考虑到 IK 插件的稳定性和生态兼容性，选择了 ES 8.17.4。&lt;/p&gt;</description>
    </item>
    <item>
      <title>由 OpenClaw 驱动的自动化博客生产线</title>
      <link>https://blog.ohtly.com/posts/2026-04-03-%E7%94%B1openclaw%E9%A9%B1%E5%8A%A8%E7%9A%84%E8%87%AA%E5%8A%A8%E5%8D%9A%E5%AE%A2%E7%94%9F%E4%BA%A7%E7%BA%BF/</link>
      <pubDate>Fri, 03 Apr 2026 23:33:33 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-04-03-%E7%94%B1openclaw%E9%A9%B1%E5%8A%A8%E7%9A%84%E8%87%AA%E5%8A%A8%E5%8D%9A%E5%AE%A2%E7%94%9F%E4%BA%A7%E7%BA%BF/</guid>
      <description>&lt;p&gt;笔记存在本地，由OpenClaw协助编写。如果再让它驱动 Hugo+GitHub+Cloudflare Pages，就可以再提炼出可分享可公开的博客日志。&lt;/p&gt;&#xA;&lt;h2 id=&#34;搭建步骤&#34;&gt;&#xA;  搭建步骤&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%90%ad%e5%bb%ba%e6%ad%a5%e9%aa%a4&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;hugo-初始化&#34;&gt;&#xA;  Hugo 初始化&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#hugo-%e5%88%9d%e5%a7%8b%e5%8c%96&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew install hugo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo new site my-blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd my-blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;选用 &lt;a href=&#34;https://github.com/luizdepra/hugo-coder&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;hugo-coder&lt;/a&gt; 主题，支持中文，排版干净。&lt;/p&gt;&#xA;&lt;h3 id=&#34;本地写作流程&#34;&gt;&#xA;  本地写作流程&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9c%ac%e5%9c%b0%e5%86%99%e4%bd%9c%e6%b5%81%e7%a8%8b&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo new content/posts/2026-04-03-my-first-post.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 编辑文件，将 draft = true 改为 false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo server -D  &lt;span style=&#34;color:#75715e&#34;&gt;# 本地预览 http://localhost:1313&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;推送到-github&#34;&gt;&#xA;  推送到 GitHub&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%8e%a8%e9%80%81%e5%88%b0-github&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git remote add origin git@github.com:你的用户名/my-blog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git commit -m &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;first post&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git push&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;cloudflare-pages-接入&#34;&gt;&#xA;  Cloudflare Pages 接入&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#cloudflare-pages-%e6%8e%a5%e5%85%a5&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;登录 Cloudflare Dashboard → Workers &amp;amp; Pages → Create application → Pages&lt;/li&gt;&#xA;&lt;li&gt;Connect to GitHub，选择仓库&lt;/li&gt;&#xA;&lt;li&gt;Build 设置：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Build command: &lt;code&gt;hugo&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Build output目录: &lt;code&gt;public&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;绑定自定义域名（如 blog.ohtly.com）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;自动化发布&#34;&gt;&#xA;  自动化发布&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%87%aa%e5%8a%a8%e5%8c%96%e5%8f%91%e5%b8%83&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;以后只需：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello World - 用 Hugo 建博客</title>
      <link>https://blog.ohtly.com/posts/2026-04-03-hello-world/</link>
      <pubDate>Fri, 03 Apr 2026 19:48:10 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-04-03-hello-world/</guid>
      <description>&lt;h2 id=&#34;hugo-初体验&#34;&gt;&#xA;  Hugo 初体验&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#hugo-%e5%88%9d%e4%bd%93%e9%aa%8c&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gohugo.io/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hugo&lt;/a&gt; 是一个用 Go 语言写的静态网站生成器，速度极快，主题丰富，适合搭建博客、文档、个人站点。&lt;/p&gt;&#xA;&lt;p&gt;只需要一个 &lt;code&gt;hugo.toml&lt;/code&gt; 配置文件 + &lt;code&gt;content/&lt;/code&gt; 目录下的 Markdown 文件，几秒钟就能编译出完整的静态网站。&lt;/p&gt;&#xA;&lt;p&gt;部署流程：&lt;strong&gt;Hugo → GitHub → Cloudflare Pages&lt;/strong&gt;，完全自动化，域名和托管都不依赖任何单一平台，永久可访问。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;hello-worldgo-语言&#34;&gt;&#xA;  Hello World（Go 语言）&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#hello-worldgo-%e8%af%ad%e8%a8%80&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;运行：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go run hello.go&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Hello, World!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;博客搭好了，接下来会陆续把一些可公开的笔记整理发上来。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
