<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://npq.kdns.fr/</id>
  <title type="text">cleeate 的博客</title>
  <subtitle type="text">个人博客。</subtitle>
  <updated>2026-11-07T00:00:00.000Z</updated>
  <author><name>cleeate</name></author>
  <link rel="alternate" href="https://npq.kdns.fr/"/>
  <link rel="self" href="https://npq.kdns.fr/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">cleeate 的博客</generator>
    <entry>
      <id>https://npq.kdns.fr/posts/astropaper-7-deploy/</id>
      <title type="text">新博客上线：AstroPaper 7、分仓库部署与一次滚动修复</title>
      <published>2026-11-07T00:00:00.000Z</published>
      <updated>2026-11-07T00:00:00.000Z</updated>
      <author><name>cleeate</name></author>
      <link rel="alternate" href="https://npq.kdns.fr/posts/astropaper-7-deploy/"/>
      <summary type="text">新博客上线记录：AstroPaper 7、分仓库部署、滚动修复与两次部署踩坑。</summary>
      <content type="html"><![CDATA[<p>新博客上线了，就在 <a href="https://cleeate.github.io/" target="_blank">cleeate.github.io</a>。这篇记录它是怎么搭起来的，以及上线当天修掉的两个问题。</p>
<section><h2>搭了什么<a href="#搭了什么"><span>#</span></a></h2><ul>
<li><strong>AstroPaper 7.1.0 / Astro 7.4.5</strong>，Node 24、pnpm，语言 zh-CN、时区 Asia/Shanghai。</li>
<li><strong>分仓库</strong>：源码在私有仓库 <code>blog-source</code>，构建产物在公开仓库 <code>cleeate.github.io</code>。免费版 GitHub Pages 只能从公开仓库发布，源码私有、产物公开是最干净的做法。旧测试站 <code>blog-astro</code>（AstroPaper v5）的两篇文章迁了过来，旧仓库没动。</li>
<li><strong>部署链</strong>：推一次源码库 <code>main</code>，Action 构建后把 <code>dist/</code> 推到输出库，再由输出库的 Pages 工作流发布。</li>
</ul></section>
<section><h2>构建时修的两个问题<a href="#构建时修的两个问题"><span>#</span></a></h2><ol>
<li><strong>动态 OG 图被关掉了。</strong> satori 生成中文标题的 OG 图时会挂起构建，改用静态 <code>default-og.jpg</code>。</li>
<li><strong>RSS 构建报错 <code>MissingLocale</code>。</strong> <code>astro.config.ts</code> 里把 i18n  locales 设为 zh-CN/en、默认 zh-CN 之后通过。</li>
</ol></section>
<section><h2>滚动位置 bug：两次修复才确认<a href="#滚动位置-bug两次修复才确认"><span>#</span></a></h2><p>上线后发现一个问题：用浏览器前进、后退离开文章页再回来，总是回到文章顶部，而不是之前读到的位置。</p><p>原因是文章页里有一段上游主题带过来的代码，在每次页面切换后无条件执行 <code>window.scrollTo(0, 0)</code>。而 Astro 的 <code>ClientRouter</code> 本来会在前进、后退时恢复滚动位置，这段代码把恢复好的位置又覆盖回了顶部。</p><ul>
<li><strong>第一版修复</strong>：只在前进导航时滚回顶部，后退时不动。部署后实测没起作用。</li>
<li><strong>第二版修复</strong>：把那段监听整个删掉。<code>ClientRouter</code> 本来就负责这两件事：前进滚到顶部，后退恢复位置，不需要主题再补一段。</li>
</ul><p>但第二版实测一开始也显示失败。最后发现问题在测试方法上：站点头部不是吸顶的，滚到一半时 logo 已经滚出屏幕，要点它得先滚回顶部，而这一滚就把保存的位置改成了 0，回来自然是顶部。换成干净的测法——滚到中间后只按浏览器后退、前进，不点链接也不滚动——位置分毫不差，y=1996，两次都一样。</p><p>顺带一个结论：如果你平时是滚回顶部再点导航离开文章，那回来是顶部就是浏览器本身的行为，因为离开那一刻存的就是顶部位置。直接用浏览器前进、后退键，才能回到之前读到的地方。</p></section>
<section><h2>部署链上的一个坑<a href="#部署链上的一个坑"><span>#</span></a></h2><p>输出库的部署用 <code>force_orphan</code> 强制推送，会把整个分支替换掉。第一次推送后，输出库里的 Pages 工作流文件 <code>.github/workflows/pages.yml</code> 被清掉了——部署用的 action 默认排除 <code>.github</code> 目录。这样下次部署就没人触发 Pages 发布，网站会停在旧版本。</p><p>修复办法：源码库里留一份 <code>.github/pages-output.yml</code> 做源头，部署时拷进 <code>dist/.github/workflows/pages.yml</code>，并把 <code>exclude_assets</code> 设为空，让 <code>.github</code> 能一起推过去。</p></section>
<section><h2>收尾<a href="#收尾"><span>#</span></a></h2><p>排查滚动问题时临时加过一个调试框（左下角绿字，实时显示滚动位置和路由方向），确认结论后已经从源码里删掉。这篇就是新博客的第一篇原创文章。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://npq.kdns.fr/posts/hermes-telegram/</id>
      <title type="text">让 Hermes 替你</title>
      <published>2026-11-06T00:00:00.000Z</published>
      <updated>2026-11-06T00:00:00.000Z</updated>
      <author><name>cleeate</name></author>
      <link rel="alternate" href="https://npq.kdns.fr/posts/hermes-telegram/"/>
      <summary type="text">在 Telegram 上运行 Hermes 的配置与验证方法。</summary>
      <content type="html"><![CDATA[<p>Hermes Agent 是一个开源的 AI Agent 框架，它可以在 <strong>终端、桌面应用、Telegram、Discord、微信</strong> 等各种表面上运行。本文只讲你最常用的那一面——<strong>Telegram</strong>。</p>
<p>简单说，你发短信，Hermes 干活，把结果推回来。整个过程不需要任何面板，Terminal、文件、搜索、发邮件、日程——只要是一个 AI Agent 能碰到的，Hermes 都能通过通知接口直接操作。</p>
<p></p><figure><img src="https://img.cdn1.vip/i/6aed7b397bf2e_1793948473.webp" alt="Hermes 接进 Telegram：一条消息怎么变成一次执行" /><figcaption>Hermes 接进 Telegram：一条消息怎么变成一次执行</figcaption></figure><p></p>
<section><h2>前置条件<a href="#前置条件"><span>#</span></a></h2><ol>
<li><strong>一个已经能用的 Hermes 实例</strong>。你可以从 <a href="https://hermes-agent.nousresearch.com/docs/" target="_blank">hermes-agent.nousresearch.com</a> 下载和安装。它不需要特殊的依赖，只要 Python 环境即可。</li>
<li><strong>一个 Telegram 账号</strong>。</li>
<li><strong>一个 Telegram Bot 的 Token</strong>。没有的话，先给 <a href="https://t.me/BotFather" target="_blank">@BotFather</a> 发消息 <code>/newbot</code>，按提示创建即可。</li>
</ol></section>
<section><h2>配置 Telegram 频道<a href="#配置-telegram-频道"><span>#</span></a></h2><p>Hermes 的设定非常灵活，但最核心的步骤是把 Telegram 加到 <code>config.yaml</code> 的 platform 配置里。把下面这一小段配置粘贴到 config.yaml 中对应的区域：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>platforms</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>telegram</span><span>:</span></div></div><div><div><div>3</div></div><div><span>    </span><span>bot_token</span><span>: </span><span>"你的BOT_TOKEN"</span></div></div><div><div><div>4</div></div><div><span>    </span><span>admin</span><span>: </span><span>"你的CHAT_ID"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>从技术上讲，<strong>Chat ID</strong> 是你想接收通知的频道或私聊。</p></section>
<section><h2>验证<a href="#验证"><span>#</span></a></h2><p>配置好之后，直接向你的 Bot 发消息。如果一切正常，Hermes 会把结果通过对话频道返回。</p></section>
<section><h2>总结<a href="#总结"><span>#</span></a></h2><p>Hermes 的价值只有一个：<strong>你想在 Telegram 里实现的控制能力</strong>。它支持 <code>Monday</code>、<code>Friday</code>、<code>crontab</code> 等各种定时任务，剩下的事情只需要通过 Bot 发消息即可。</p><p>配置非常简单，几步之后你就能在 Telegram 里指挥 AI 干活了。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://npq.kdns.fr/posts/vps-dsh/</id>
      <title type="text">在 Debian 12 小 VPS 上从零部署 DSH 并接通 Telegram 机器人</title>
      <published>2026-11-04T00:00:00.000Z</published>
      <updated>2026-11-04T00:00:00.000Z</updated>
      <author><name>cleeate</name></author>
      <link rel="alternate" href="https://npq.kdns.fr/posts/vps-dsh/"/>
      <summary type="text">本文记录一次真实部署的完整过程和踩坑经验。环境：Debian 12、2 核 CPU、约 925MB 内存、39GB 磁盘。</summary>
      <content type="html"><![CDATA[<blockquote><p>本文记录一次真实部署的完整过程和踩坑经验。环境：Debian 12、2 核 CPU、约 925MB 内存、39GB 磁盘。
文中所有密钥、Token、密码、用户 ID、机器人用户名一律用占位符表示，公开发布前请务必替换，并不要把真实 Token 写进文章或代码仓库。</p></blockquote>
<section><h2>避坑总览：先看这五条<a href="#避坑总览先看这五条"><span>#</span></a></h2><ol>
<li><strong>小内存先加 Swap，再装 DSH。</strong> 不加 Swap，npm 安装 DSH 时很容易被 OOM killer 杀掉，表现为安装莫名中断、dsh 命令缺失、服务起不来。</li>
<li><strong>不要装旧的 <code>dsh-telegram</code>。</strong> 新版教程用的是 <code>@xmanrui/dsh-im</code>，两者不要混装。</li>
<li><strong>Token 只走 DSH 设置界面。</strong> 不要把 Bot Token 写进 <code>cordis.patch.yml</code>、<code>settings.yaml</code> 或任何会被提交的文件。</li>
<li><strong>私聊一定要开白名单。</strong> dsh-im 默认对所有私聊开放，不设白名单等于谁都能指挥你的机器人。</li>
<li><strong>模型选错是最高频的报错来源。</strong> 要 Key 的官方模型、要 GitHub 授权的 EAC 模型、免密的 Kilo 免费池，这三类不要混着选。</li>
</ol></section>
<section><h2>一、服务器准备<a href="#一服务器准备"><span>#</span></a></h2><section><h3>1. 改主机名（可选，但建议做）<a href="#1-改主机名可选但建议做"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>hostnamectl</span><span> </span><span>set-hostname</span><span> </span><span>b2</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>并在 <code>/etc/hosts</code> 里加一行：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>127.0.1.1 b2</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2. 检查资源<a href="#2-检查资源"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>free</span><span> </span><span>-m</span><span>        </span><span># 查看内存与已有 Swap</span></div></div><div><div><div>2</div></div><div><span>df</span><span> </span><span>-h</span><span>          </span><span># 确认根分区剩余空间大于 2GB</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果 <code>free -m</code> 里 Swap 全为 0，说明机器没有预置交换，继续下一步。</p></section><section><h3>3. 创建 2GB Swap<a href="#3-创建-2gb-swap"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>fallocate</span><span> </span><span>-l</span><span> </span><span>2G</span><span> </span><span>/swapfile</span></div></div><div><div><div>2</div></div><div><span>chmod</span><span> </span><span>600</span><span> </span><span>/swapfile</span></div></div><div><div><div>3</div></div><div><span>mkswap</span><span> </span><span>/swapfile</span></div></div><div><div><div>4</div></div><div><span>swapon</span><span> </span><span>/swapfile</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>老版本若不支持 <code>fallocate</code>，可用 <code>dd if=/dev/zero of=/swapfile bs=1M count=2048</code> 代替。</p><p>开机自动挂载并调低 swappiness：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>echo</span><span> </span><span>'/swapfile none swap sw 0 0'</span><span> &gt;&gt; </span><span>/etc/fstab</span></div></div><div><div><div>2</div></div><div><span>sysctl</span><span> </span><span>vm.swappiness=</span><span>10</span></div></div><div><div><div>3</div></div><div><span>echo</span><span> </span><span>'vm.swappiness=10'</span><span> &gt;&gt; </span><span>/etc/sysctl.conf</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>swappiness 默认是 60，小内存机器会把数据过早换出、拖慢性能；设为 10 表示只在内存紧张时才动用 Swap。再执行 <code>free -m</code>，Swap 应显示约 2048MB。</p><p>补充说明：如果云厂商给你的是静态公网 IP，但网卡上只显示内网地址，这多半是 NAT 映射，属正常现象，只要出站 IP 和入站 SSH 到的都是同一台机器即可。</p></section><section><h3>4. 装基础工具<a href="#4-装基础工具"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>apt</span><span> </span><span>update</span></div></div><div><div><div>2</div></div><div><span>apt</span><span> </span><span>install</span><span> </span><span>-y</span><span> </span><span>curl</span><span> </span><span>ca-certificates</span><span> </span><span>gnupg</span><span> </span><span>git</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>二、安装 Node 和 DSH<a href="#二安装-node-和-dsh"><span>#</span></a></h2><p>用 NodeSource 装 Node 22：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl</span><span> </span><span>-fsSL</span><span> </span><span>https://deb.nodesource.com/setup_22.x</span><span> | </span><span>bash</span><span> </span><span>-</span></div></div><div><div><div>2</div></div><div><span>apt</span><span> </span><span>install</span><span> </span><span>-y</span><span> </span><span>nodejs</span></div></div><div><div><div>3</div></div><div><span>node</span><span> </span><span>-v</span></div></div><div><div><div>4</div></div><div><span>npm</span><span> </span><span>-v</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>实测版本：Node v22.23.4、npm 10.9.9。</p><p>全局安装 DSH，并补装 pnpm（插件安装需要它，缺了会报 pnpm 未找到）：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>install</span><span> </span><span>-g</span><span> </span><span>@deepseek-ai/dsh</span></div></div><div><div><div>2</div></div><div><span>npm</span><span> </span><span>install</span><span> </span><span>-g</span><span> </span><span>pnpm</span></div></div><div><div><div>3</div></div><div><span>dsh</span><span> </span><span>--version</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>实测 DSH 版本：0.2.1-rc.5。</p><p>长耗时安装建议脱离 SSH 会话运行，例如用 <code>setsid</code> / <code>nohup</code> 后台跑，避免 SSH 断线把安装进程一起带走。SSH 偶尔出现 banner 交换超时，多半是网络抖动，先重试，不要轻易判定服务器挂了。</p></section>
<section><h2>三、安装免费模型插件和 IM 插件<a href="#三安装免费模型插件和-im-插件"><span>#</span></a></h2><section><h3>1. 免费模型插件<a href="#1-免费模型插件"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>dsh</span><span> </span><span>plugin</span><span> </span><span>--profile</span><span> </span><span>web</span><span> </span><span>add</span><span> </span><span>github:Ebony-Vinyl/dsh-our-free-model</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>实测版本：2.8.0。</p><p>注意两点：</p><ul>
<li>不要同时把它写进 <code>cordis.patch.yml</code>，重复注册会出问题。</li>
<li>用下面的命令检查，<code>our-free-model</code> 应该只出现一次：</li>
</ul><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>dsh</span><span> </span><span>--profile</span><span> </span><span>web</span><span> </span><span>--dump-config</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2. IM 插件（Telegram 对接）<a href="#2-im-插件telegram-对接"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>dsh</span><span> </span><span>plugin</span><span> </span><span>--profile</span><span> </span><span>web</span><span> </span><span>add</span><span> </span><span>-w</span><span> </span><span>@xmanrui/dsh-im</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>实测版本：5.9.1。</p><p>最终 bundles 顺序应为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>@deepseek-ai/dsh-base</span></div></div><div><div><div>2</div></div><div><span>@deepseek-ai/dsh-web-app</span></div></div><div><div><div>3</div></div><div><span>dsh-our-free-model</span></div></div><div><div><div>4</div></div><div><span>@xmanrui/dsh-im</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>再次检查 dump-config，确认 <code>our-free-model</code> 和 <code>@xmanrui/dsh-im</code> 都在，且没有旧的 <code>dsh-telegram</code>。</p></section></section>
<section><h2>四、用 systemd 跑 DSH，不要对外暴露 Web UI<a href="#四用-systemd-跑-dsh不要对外暴露-web-ui"><span>#</span></a></h2><p>教程本身只要求前台跑 <code>dsh --profile web</code>，但为了让机器人 survives 重启，建议写一个 systemd 服务。关键点：Web UI 只监听本地，Telegram 走长轮询，不需要开放任何入站端口。</p><p><code>/etc/systemd/system/dsh.service</code> 示例：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[Unit]</span></div></div><div><div><div>2</div></div><div><span>Description</span><span><span>=</span><span>DSH Telegram Agent</span></span></div></div><div><div><div>3</div></div><div><span>After</span><span><span>=</span><span>network-online.target</span></span></div></div><div><div><div>4</div></div><div><span>Wants</span><span><span>=</span><span>network-online.target</span></span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>[Service]</span></div></div><div><div><div>7</div></div><div><span>Type</span><span><span>=</span><span>simple</span></span></div></div><div><div><div>8</div></div><div><span>User</span><span><span>=</span><span>root</span></span></div></div><div><div><div>9</div></div><div><span>WorkingDirectory</span><span><span>=</span><span>/root</span></span></div></div><div><div><div>10</div></div><div><span>Environment</span><span>=</span><span>DSH_HOME</span><span><span>=</span><span>/root/.dsh</span></span></div></div><div><div><div>11</div></div><div><span>Environment</span><span>=</span><span>HOME</span><span><span>=</span><span>/root</span></span></div></div><div><div><div>12</div></div><div><span>ExecStart</span><span><span>=</span><span>/usr/bin/dsh --profile web</span></span></div></div><div><div><div>13</div></div><div><span>Restart</span><span><span>=</span><span>always</span></span></div></div><div><div><div>14</div></div><div><span>RestartSec</span><span><span>=</span><span>10</span></span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>[Install]</span></div></div><div><div><div>17</div></div><div><span>WantedBy</span><span><span>=</span><span>multi-user.target</span></span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>启动并验证：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>daemon-reload</span></div></div><div><div><div>2</div></div><div><span>systemctl</span><span> </span><span>enable</span><span> </span><span>dsh</span></div></div><div><div><div>3</div></div><div><span>systemctl</span><span> </span><span>start</span><span> </span><span>dsh</span></div></div><div><div><div>4</div></div><div><span>systemctl</span><span> </span><span>status</span><span> </span><span>dsh</span><span> </span><span>--no-pager</span></div></div><div><div><div>5</div></div><div><span>ss</span><span> </span><span>-tlnp</span><span> | </span><span>grep</span><span> </span><span>-E</span><span> </span><span>'3080|8326'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常情况下服务是 <code>active</code>，且 3080、8326 只出现在 <code>127.0.0.1</code> 上，不要在防火墙或安全组里放行它们。</p></section>
<section><h2>五、绑定 Telegram 机器人<a href="#五绑定-telegram-机器人"><span>#</span></a></h2><ol>
<li>在 BotFather 创建机器人，拿到 Bot Token，记好但不要发到公开场合。</li>
<li>打开 DSH 的「设置 → IM机器人」，选择 Telegram，粘贴 Token 并保存。</li>
<li><strong>务必开启私聊白名单模式</strong>，填入自己的数字 USER_ID，例如：</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;你的数字 USER_ID&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>只放你一个人。群聊默认是开放模式，如需收紧要另外设置，不要以为开了私聊白名单群聊就自动安全了。</p><p>绑定成功后，机器人应显示已连接、长轮询正常。绑定信息保存在 <code>~/.dsh/integrations/dsh-telegram/</code>，Token 在里面是引用形式，不是明文，但这不等于可以把该目录公开分享。</p></section>
<section><h2>六、模型选择避坑：这是本次部署最关键的一节<a href="#六模型选择避坑这是本次部署最关键的一节"><span>#</span></a></h2><p>dsh-im 的模型列表里混了三类模型，选错就会报错：</p>

<table><thead><tr><th>类型</th><th>表现</th><th>能不能在服务器上用</th></tr></thead><tbody><tr><td>DeepSeek 官方模型，如 <code>deepseek-flash</code></td><td>没有 Key 时报缺少凭据</td><td>没配 Key 就不能用</td></tr><tr><td>EAC 模型，如 <code>opencode/deepseek-v4.1-flash-free</code></td><td>报 401，需要 GitHub 授权并 star 仓库</td><td>服务器上用不了，它是桌面端取向的渠道</td></tr><tr><td>Kilo 免费池，如 <code>kilo-auto/free</code></td><td>免账号、免 Key</td><td>可以，这就是默认该选的</td></tr></tbody></table><p>正确做法：把默认模型写进 <code>~/.dsh/profiles/web/cordis.patch.yml</code> 的 <code>agent-default-model</code>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>- </span><span>id</span><span>: </span><span>agent-default-model</span></div></div><div><div><div>2</div></div><div><span>  </span><span>name</span><span>: </span><span>"@deepseek-ai/dsh-agent-default-model"</span></div></div><div><div><div>3</div></div><div><span>  </span><span>config</span><span>:</span></div></div><div><div><div>4</div></div><div><span>    </span><span>provider</span><span>: </span><span>our-free-model</span></div></div><div><div><div>5</div></div><div><span>    </span><span>model</span><span>: </span><span>kilo-auto/free</span></div></div><div><div><div>6</div></div><div><span>    </span><span>reasoningEffort</span><span>: </span><span>high</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>改完重启服务：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>restart</span><span> </span><span>dsh</span></div></div><div><div><div>2</div></div><div><span>systemctl</span><span> </span><span>is-active</span><span> </span><span>dsh</span></div></div><div><div><div>3</div></div><div><span>dsh</span><span> </span><span>--profile</span><span> </span><span>web</span><span> </span><span>--dump-config</span><span> | </span><span>grep</span><span> </span><span>-A4</span><span> </span><span>agent-default-model</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>重要：改完模型一定要在 Telegram 里先发 <code>/new</code> 开新会话，再发正常消息。</strong> 旧会话还钉在旧模型上，不换会话，报错会继续出现。这一步最容易被忽略。</p></section>
<section><h2>七、验证清单<a href="#七验证清单"><span>#</span></a></h2><p>按顺序全部通过，才算部署完成：</p><ul>
<li> <code>systemctl status dsh</code> 是 <code>active</code></li>
<li> 3080、8326 只监听在 <code>127.0.0.1</code></li>
<li> Telegram 发 <code>/start</code> 有回复</li>
<li> Telegram 发 <code>/status</code> 能看到会话和模型</li>
<li> Telegram 发 <code>/new</code> 后，再发一句正常消息能正常回复</li>
<li> 没有出现“任务结果未确认”“内部未知错误”之类的提交失败提示</li>
</ul></section>
<section><h2>八、常见问题<a href="#八常见问题"><span>#</span></a></h2><p><strong>Q：npm 安装 DSH 装到一半就没了，dsh 命令也不存在？</strong>
A：先看内存和 Swap，十有八九是 OOM killer 杀了 npm。按第一节补 2GB Swap 再重装，不要反复在没 Swap 的机器上硬装。</p><p><strong>Q：插件安装报 pnpm 未找到？</strong>
A：先全局装 pnpm 再装插件。</p><p><strong>Q：/start 失败，提示缺少凭据？</strong>
A：会话默认模型走了 DeepSeek 官方渠道，但你没配 Key。按第六节把默认模型改成 Kilo 免费池，再 <code>/new</code>。</p><p><strong>Q：正常消息报 401，要 GitHub 授权 star 仓库？</strong>
A：你选到了 EAC 模型。换回 <code>kilo-auto/free</code>，再 <code>/new</code>。不要尝试绕过 EAC 的授权闸门。</p><p><strong>Q：改了模型还是报错？</strong>
A：先确认你是不是还在旧会话里。<code>/new</code> 之后再测一次；同时用 <code>journalctl -u dsh --no-pager | tail -n 100</code> 看服务日志，用 Telegram 的 <code>/status</code> 看当前会话到底用的是哪个模型。</p><p><strong>Q：SSH 经常断，b2 是不是挂了？</strong>
A：不一定。先重试连接，再看服务状态。长安装一定要脱离 SSH 会话跑，断线才不会中断安装。</p></section>
<section><h2>九、发布前的安全提醒<a href="#九发布前的安全提醒"><span>#</span></a></h2><ul>
<li>不要把 Bot Token、服务器密码、API Key 写进教程、截图或代码仓库。</li>
<li>数字 USER_ID、白名单、机器人用户名在公开发布时建议用占位符或打码。</li>
<li>Web UI 只监听本地是刻意为之，不要为了图方便把它暴露到公网。</li>
</ul></section>]]></content>
    </entry>
</feed>
