<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LLM on Colinx Blog</title><link>/tags/llm/</link><description>Recent content in LLM on Colinx Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 04 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="/tags/llm/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenClaw 虽好，搭配沙箱才安心 - 使用 Lume 构建 mac 虚拟环境</title><link>/posts/openclaw%E8%99%BD%E5%A5%BD-%E6%90%AD%E9%85%8D%E6%B2%99%E7%AE%B1%E6%89%8D%E5%AE%89%E5%BF%83-%E4%BD%BF%E7%94%A8lume%E6%9E%84%E5%BB%BAmac%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>/posts/openclaw%E8%99%BD%E5%A5%BD-%E6%90%AD%E9%85%8D%E6%B2%99%E7%AE%B1%E6%89%8D%E5%AE%89%E5%BF%83-%E4%BD%BF%E7%94%A8lume%E6%9E%84%E5%BB%BAmac%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/</guid><description>
&lt;p>&lt;img src="https://openclaw.ai/og-image.png" alt="open-claw-img|700x368">&lt;/p>
&lt;p>近日 OpenClaw(原 Clawdbot, 曾用名 Moltbot) 爆火，独立自主操控电脑完成各种任务，一个挺 fancy 的 agent 应用。结合 moltbook 网站的新闻，在各种媒体的鼓吹下故事画风变得愈发科幻，巴不得明天就统治全人类。&lt;/p>
&lt;p>爆火没两天，就爆出不少安全新闻，要么是 agent 自作主张直接电脑删空，要么是大量小白用户把实例暴露在公网，别有用心的人可以直接通过 openclaw 的黑洞控制整个电脑。OpenClaw 这种应用最吸引人、最方便的地方在于 ta 可以成为「代理」, 去执行任何「你可以做」的事。你能做，ta 就能做。不过前提便是宽松的权限管理，超级多的权限。&lt;/p>
&lt;p>下面介绍一个 基于 lume 的 Mac OS 虚拟机方案，将其作为沙箱环境节点供 openclaw 调用。&lt;/p>
&lt;h2 id="openclaw-gateway-安装">
OpenClaw Gateway 安装
&lt;a href="#openclaw-gateway-%e5%ae%89%e8%a3%85" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>由于 gateway 节点负责与各个 channel 即 bot 通信，最好有公网 ip, 这里我在 linux 云服务器上进行部署。&lt;/p>
&lt;p>官方默认给的安装命令很简单，&lt;code>npm install -g openclaw&lt;/code> 就可以了。但是为了安全起见我还是偏好使用 docker 容器。官方对 docker 容器的支持并不是很好，文档也有点混乱，实际测下来从代码库自行构建镜像比较好&lt;/p>
&lt;p>首先是克隆仓库。注意默认的 main 分支可能不是很稳定，最好切换到某个 tag 或者 github actions 全部通过的 commit 再构建。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># 示例: 切换到指定tag&lt;/span>
git pull --rebase
git fetch --tags
git checkout v2026.1.29
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后准备构建。很多教程包括官方文档是让用户直接在克隆后的 git 仓库里，修改 compose 和 env 文件。但是这样的话后续不方便更新，因为工作区有修改，每次都要 stash 再 pull 还要解决冲突的问题，太麻烦了。建议的方式是在代码库上级目录创建 compose 和 env, 这样下次要更新的话，直接到 repo 里面 git pull 再重新构建镜像就可以了。&lt;/p>
&lt;p>目录结构如下：&lt;/p>
&lt;pre tabindex="0">&lt;code>.
├── .env
├── docker-compose.yml
└── **openclaw-repo**
&lt;/code>&lt;/pre>&lt;p>compose 文件设置好构建的目录即可。示例如下&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">services&lt;/span>:
  &lt;span style="color:#f92672">openclaw-gateway&lt;/span>:
    &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_IMAGE:-openclaw:local}&lt;/span>
    &lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">openclaw-gateway&lt;/span>
    &lt;span style="color:#f92672">build&lt;/span>: &lt;span style="color:#ae81ff">./openclaw-repo&lt;/span>
    &lt;span style="color:#f92672">environment&lt;/span>:
      &lt;span style="color:#ae81ff">xxx:xxx&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>准备好目录和 docker compose 之后，即可开始构建&lt;/p>
&lt;p>完整 docker compose&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">services&lt;/span>:
  &lt;span style="color:#f92672">openclaw-gateway&lt;/span>:
    &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_IMAGE:-openclaw:local}&lt;/span>
    &lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">openclaw-gateway&lt;/span>
    &lt;span style="color:#f92672">build&lt;/span>: &lt;span style="color:#ae81ff">./openclaw-repo&lt;/span>
    &lt;span style="color:#f92672">environment&lt;/span>:
      &lt;span style="color:#f92672">HOME&lt;/span>: &lt;span style="color:#ae81ff">/home/node&lt;/span>
      &lt;span style="color:#f92672">TERM&lt;/span>: &lt;span style="color:#ae81ff">xterm-256color&lt;/span>
      &lt;span style="color:#f92672">OPENCLAW_GATEWAY_BIND&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_GATEWAY_BIND}&lt;/span>
      &lt;span style="color:#f92672">OPENCLAW_GATEWAY_PORT&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_GATEWAY_PORT}&lt;/span>
      &lt;span style="color:#f92672">XDG_CONFIG_HOME&lt;/span>: &lt;span style="color:#ae81ff">${XDG_CONFIG_HOME}&lt;/span>
      &lt;span style="color:#f92672">PATH&lt;/span>: &lt;span style="color:#ae81ff">/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&lt;/span>
    &lt;span style="color:#f92672">volumes&lt;/span>:
      - &lt;span style="color:#ae81ff">${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw&lt;/span>
      - &lt;span style="color:#ae81ff">${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace&lt;/span>
    &lt;span style="color:#f92672">ports&lt;/span>:
      - &lt;span style="color:#e6db74">&amp;#34;${OPENCLAW_GATEWAY_PORT}:${OPENCLAW_GATEWAY_PORT}&amp;#34;&lt;/span>
      &lt;span style="color:#75715e"># - &amp;#34;${OPENCLAW_BRIDGE_PORT:-18790}:18790&amp;#34;&lt;/span>
    &lt;span style="color:#f92672">init&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
    &lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">unless-stopped&lt;/span>
    &lt;span style="color:#f92672">command&lt;/span>:
      [
        &lt;span style="color:#e6db74">&amp;#34;node&amp;#34;&lt;/span>,
        &lt;span style="color:#e6db74">&amp;#34;dist/index.mjs&amp;#34;&lt;/span>,
        &lt;span style="color:#e6db74">&amp;#34;gateway&amp;#34;&lt;/span>,
        &lt;span style="color:#e6db74">&amp;#34;--bind&amp;#34;&lt;/span>,
        &lt;span style="color:#e6db74">&amp;#34;${OPENCLAW_GATEWAY_BIND:-lan}&amp;#34;&lt;/span>,
        &lt;span style="color:#e6db74">&amp;#34;--port&amp;#34;&lt;/span>,
        &lt;span style="color:#e6db74">&amp;#34;${OPENCLAW_GATEWAY_PORT}&amp;#34;&lt;/span>,
      ]
     
  &lt;span style="color:#f92672">openclaw-cli&lt;/span>:
    &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_IMAGE:-openclaw:local}&lt;/span>
    &lt;span style="color:#f92672">environment&lt;/span>:
      &lt;span style="color:#f92672">HOME&lt;/span>: &lt;span style="color:#ae81ff">/home/node&lt;/span>
      &lt;span style="color:#f92672">TERM&lt;/span>: &lt;span style="color:#ae81ff">xterm-256color&lt;/span>
      &lt;span style="color:#f92672">BROWSER&lt;/span>: &lt;span style="color:#ae81ff">echo&lt;/span>
      &lt;span style="color:#f92672">OPENCLAW_GATEWAY_BIND&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_GATEWAY_BIND}&lt;/span>
      &lt;span style="color:#f92672">OPENCLAW_GATEWAY_PORT&lt;/span>: &lt;span style="color:#ae81ff">${OPENCLAW_GATEWAY_PORT}&lt;/span>
      &lt;span style="color:#f92672">XDG_CONFIG_HOME&lt;/span>: &lt;span style="color:#ae81ff">${XDG_CONFIG_HOME}&lt;/span>
      &lt;span style="color:#f92672">PATH&lt;/span>: &lt;span style="color:#ae81ff">/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&lt;/span>
    &lt;span style="color:#f92672">volumes&lt;/span>:
      - &lt;span style="color:#ae81ff">${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw&lt;/span>
      - &lt;span style="color:#ae81ff">${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace&lt;/span>
    &lt;span style="color:#f92672">stdin_open&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
    &lt;span style="color:#f92672">tty&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
    &lt;span style="color:#f92672">init&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
    &lt;span style="color:#f92672">entrypoint&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;node&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;dist/index.mjs&amp;#34;&lt;/span>]
    &lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">none&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>env 示例&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-ini" data-lang="ini">&lt;span style="color:#a6e22e">OPENCLAW_IMAGE&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">openclaw:latest&lt;/span>
&lt;span style="color:#a6e22e">OPENCLAW_GATEWAY_TOKEN&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">change-me&lt;/span>
&lt;span style="color:#a6e22e">OPENCLAW_GATEWAY_BIND&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">lan&lt;/span>
&lt;span style="color:#a6e22e">OPENCLAW_GATEWAY_PORT&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">8089&lt;/span>
&lt;span style="color:#a6e22e">OPENCLAW_CONFIG_DIR&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">/data/openclaw&lt;/span>
&lt;span style="color:#a6e22e">OPENCLAW_WORKSPACE_DIR&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">/data/openclaw/workspace&lt;/span>
&lt;span style="color:#a6e22e">XDG_CONFIG_HOME&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">/home/node/.openclaw&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">
&lt;span style="color:#75715e"># 镜像中的应用默认以uid 1000账户运行, 手动设置data数据目录的权限避免出现预期外的问题&lt;/span>
sudo chown -R 1000:1000 /data/openclaw
&lt;span style="color:#75715e"># 构建镜像&lt;/span>
sudo docker compose build
&lt;span style="color:#75715e"># 第一次使用, 初始化相关配置&lt;/span>
docker compose run --rm openclaw-cli onboard
&lt;span style="color:#75715e"># 之后启动gateway&lt;/span>
docker compose up -d openclaw-gateway
&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果使用 tg channel ,创建完 bot 后需要配对才可以使用。&lt;/p>
&lt;pre tabindex="0">&lt;code>docker compose run --rm openclaw-cli pairing approve telegram &amp;lt;code&amp;gt;
&lt;/code>&lt;/pre>&lt;p>日常配置可以直接使用这个 cli 镜像后面加上需要的参数。或者直接到 Gateway 镜像中执行 &lt;code>node dist/index.mjs xxx&lt;/code> 代替 官方文档里 &lt;code>openclaw xxx&lt;/code> . (官方 Dockerfile 里面对 cli 工具名字的处理有问题，先曲线救国)&lt;/p>
&lt;pre tabindex="0">&lt;code>docker compose run --rm openclaw-cli xxx
&lt;/code>&lt;/pre>&lt;h2 id="macos-vm-via-lume">
MacOS VM via Lume
&lt;a href="#macos-vm-via-lume" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>接下来配置 mac os 的虚拟机。使用 lume 工具&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">brew install lume
brew services start lume
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后可以快捷安装 macos vm. 一般情况下，默认安装当前系统大版本下最新的小版本。你可以通过以下方式查询&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># 查询`latest`参数对应默认的系统镜像和版本, 可以看到显示的url指向的系统版本为15.6.1&lt;/span>
~ » lume ipsw                                                                         
&lt;span style="color:#f92672">[&lt;/span>2026-01-31T12:23:12Z&lt;span style="color:#f92672">]&lt;/span> INFO: Fetching latest supported IPSW URL
&lt;span style="color:#f92672">[&lt;/span>2026-01-31T12:23:13Z&lt;span style="color:#f92672">]&lt;/span> INFO: Found latest IPSW URL url&lt;span style="color:#f92672">=&lt;/span>https://updates.cdn-apple.com/2025SummerFCS/fullrestores/093-10809/CFD6DD38-DAF0-40DA-854F-31AAD1294C6F/UniversalMac_15.6.1_24G90_Restore.ipsw
https://updates.cdn-apple.com/2025SummerFCS/fullrestores/093-10809/CFD6DD38-DAF0-40DA-854F-31AAD1294C6F/UniversalMac_15.6.1_24G90_Restore.ipsw
&lt;span style="color:#75715e"># 查询当前系统版本为15.2&lt;/span>
~ » sw_vers                                                                           
ProductName: macOS
ProductVersion: 15.2
BuildVersion: 24C101
&lt;/code>&lt;/pre>&lt;/div>&lt;p>也可以从这里获取指定版本的系统镜像下载地址，手动下载。https://ipsw.me/. 一般 mac os 的镜像大小在 15-20GB&lt;/p>
&lt;p>创建 vm&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># 默认安装最新的版本&lt;/span>
lume create openclaw --os macos --ipsw latest
&lt;span style="color:#75715e"># 如果失败报错&amp;#34;Installation requires a software update.&amp;#34; 可以下载不高于当前系统运行的版本手动创建&lt;/span>
lume create openclaw --os macos --cpu &lt;span style="color:#ae81ff">2&lt;/span> --memory 8GB --disk-size 100GB --ipsw ./&amp;lt;YOUR-DOWNLOAD-IPSW-FILE&amp;gt;
&lt;span style="color:#75715e"># 启动vm&lt;/span>
lume run openclaw
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后会输出一个 vnc 地址，可以用 mac 自带的「屏幕共享」app 进行查看。菜单「连接」- 「新建」
&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20260205000147405.png" alt="">&lt;/p>
&lt;p>完成系统安装的几个必要步骤，然后到设置里把远程控制打开，后面 SSH 要用到。系统更新建议关掉。&lt;/p>
&lt;p>![[image-23.png]]&lt;/p>
&lt;p>![[image-24.png]]&lt;/p>
&lt;p>在 mac vm 上安装 openclaw&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># 基础环境配置&lt;/span>
&lt;span style="color:#75715e">## brew 安装 (加速版本, 使用中科大镜像源)&lt;/span>
export HOMEBREW_BREW_GIT_REMOTE&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;https://mirrors.ustc.edu.cn/brew.git&amp;#34;&lt;/span>
export HOMEBREW_CORE_GIT_REMOTE&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;https://mirrors.ustc.edu.cn/homebrew-core.git&amp;#34;&lt;/span>
export HOMEBREW_BOTTLE_DOMAIN&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;https://mirrors.ustc.edu.cn/homebrew-bottles&amp;#34;&lt;/span>
export HOMEBREW_API_DOMAIN&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;https://mirrors.ustc.edu.cn/homebrew-bottles/api&amp;#34;&lt;/span>
/bin/bash -c &lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#66d9ef">$(&lt;/span>curl -fsSL https://mirrors.ustc.edu.cn/misc/brew-install.sh&lt;span style="color:#66d9ef">)&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>
&lt;span style="color:#75715e">## brew 镜像配置&lt;/span>
echo &lt;span style="color:#e6db74">&amp;#39;export HOMEBREW_BOTTLE_DOMAIN=&amp;#34;https://mirrors.ustc.edu.cn/homebrew-bottles&amp;#34;&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zshrc
echo &lt;span style="color:#e6db74">&amp;#39;export HOMEBREW_API_DOMAIN=&amp;#34;https://mirrors.ustc.edu.cn/homebrew-bottles/api&amp;#34;&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zshrc
echo &lt;span style="color:#e6db74">&amp;#39;export HOMEBREW_CORE_GIT_REMOTE=&amp;#34;https://mirrors.ustc.edu.cn/homebrew-core.git&amp;#34;&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zshrc
echo &lt;span style="color:#e6db74">&amp;#39;export HOMEBREW_BREW_GIT_REMOTE=&amp;#34;https://mirrors.ustc.edu.cn/brew.git&amp;#34;&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zshrc
source ~/.zshrc
&lt;span style="color:#75715e">## 安装基础环境&lt;/span>
brew install node
brew install pnpm
pnpm setup
source ~/.zshrc
echo &lt;span style="color:#e6db74">&amp;#34;registry=https://npmreg.proxy.ustclug.org/&amp;#34;&lt;/span> &amp;gt;&amp;gt; ~/.npmrc
pnpm install -g openclaw@latest
openclaw onboard --install-daemon
&lt;/code>&lt;/pre>&lt;/div>&lt;p>client 端配置好 gateway 地址和 token .第一次连接显示需要配对。在服务端执行&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">
openclaw devices list
openclaw devices apprve &amp;lt;复制的request id&amp;gt;
&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20260205000019565.png" alt="image-25">&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#75715e"># 作为node注册&lt;/span>
openclaw node install --host &amp;lt;gateway-host&amp;gt; --port &lt;span style="color:#ae81ff">18789&lt;/span> --display-name &lt;span style="color:#e6db74">&amp;#34;Mac mini&amp;#34;&lt;/span>
&lt;span style="color:#75715e"># 然后在服务端approve&lt;/span>
&lt;span style="color:#75715e"># 查看状态&lt;/span>
openclaw node status
&lt;span style="color:#75715e"># 启动节点&lt;/span>
openclaw node start
&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后就可以让 openclaw 调用这个节点啦&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20260204235959805.png" alt="">&lt;/p>
&lt;p>THE END&lt;/p></description></item><item><title>Search-as-a-RSS! 把任何搜索查询转换为 RSS! FeedCraft 新功能速递</title><link>/posts/search-as-a-rss-%E6%8A%8A%E4%BB%BB%E4%BD%95%E6%90%9C%E7%B4%A2%E6%9F%A5%E8%AF%A2%E8%BD%AC%E6%8D%A2%E4%B8%BArss-feedcraft-%E6%96%B0%E5%8A%9F%E8%83%BD%E9%80%9F%E9%80%92/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>/posts/search-as-a-rss-%E6%8A%8A%E4%BB%BB%E4%BD%95%E6%90%9C%E7%B4%A2%E6%9F%A5%E8%AF%A2%E8%BD%AC%E6%8D%A2%E4%B8%BArss-feedcraft-%E6%96%B0%E5%8A%9F%E8%83%BD%E9%80%9F%E9%80%92/</guid><description>
&lt;h2 id="前言">
前言
&lt;a href="#%e5%89%8d%e8%a8%80" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>作为 RSS 5 年忠实用户，我非常享受 RSS 主动管理信息源给我带来的掌控感。但是传统 RSS 订阅方式只能基于站点或者频道，更多时候我其实是想关注某一个特定领域信息，比如 AI 领域世界模型有什么新的新闻，或者是想订阅一个特定的信息，比如我关注的 xxx 歌手有没有新的巡演规划。&lt;/p>
&lt;p>这些需求通过传统 RSS 方式难以实现，你只能定向的订阅某个新闻站点，然后过滤一下关键词。使用方式局限性很大。其实最理想的方式是直接把搜索引擎的结果拿来作为信息源。问题主要是噪声太多：&lt;/p>
&lt;ul>
&lt;li>搜索查询一般是按照关键词来的，不够灵活&lt;/li>
&lt;li>垃圾内容农场泛滥&lt;/li>
&lt;li>高质量的信息很多时候是多种语言的网页，直接阅读会很困难&lt;/li>
&lt;/ul>
&lt;p>好在我们有了 AI, 很多问题有了新的解决方法。在 FeedCraft 新版本中，我新增了一个 Search-as-a-RSS 的功能，用户只需要使用自然语言指定好要搜索什么，接下来就可以自动根据搜索结果生成一个 RSS 了。&lt;/p>
&lt;p>接下来简要介绍一下流程：&lt;/p>
&lt;h2 id="feedcraft-如何通过搜索结果创建-rss">
FeedCraft 如何通过搜索结果创建 RSS
&lt;a href="#feedcraft-%e5%a6%82%e4%bd%95%e9%80%9a%e8%bf%87%e6%90%9c%e7%b4%a2%e7%bb%93%e6%9e%9c%e5%88%9b%e5%bb%ba-rss" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>FeedCraft 本身是一个一站式处理 RSS 的工具，这里的搜索需要依赖第三方服务。首发支持的搜索服务是 LiteLLM Proxy(一个 AI 服务的代理转发平台，开源可自部署，可以方便对接各种第三方搜索服务比如 Exa, Tavily, Plexirity, Perplexity, Brave 等等)&lt;/p>
&lt;p>以 Tavily 为例，这个平台提供了每月 1000credits 的额度，可以执行上百次搜索，轻度使用绰绰有余了。前往官网注册个账号，生成一个 api key 即可。&lt;/p>
&lt;blockquote>
&lt;p>&lt;a href="https://www.tavily.com/">Tavily&lt;/a> 是一个专为人工智能代理（AI Agents）设计的搜索引擎，旨在优化 AI 在执行任务时的信息检索过程。它不同于传统的面向人类用户的搜索引擎（如 Google 或 Bing），而是专门为 AI 系统“理解”和“查找”所需信息而构建，强调高效、准确和上下文相关的搜索结果。&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059928.png" alt="image-14">&lt;/p>
&lt;p>接下来到 LiteLLM 的后台，Tool - Search Tool 里面增加一个 search tool. 这里 search tool name 可以自定义，先记下来待会在 feed craft 的设置页面需要填入。&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059929.png" alt="image-15">
在 LiteLLM 后台生成一个 API KEY, Key Name 可以随便写主要是备注。这个生成的 api key 可以用于请求 LLM, 也可以调用刚才配置的搜索工具。确认生成后，复制 api key.&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059930.png" alt="image-16">&lt;/p>
&lt;p>在 FeedCraft 后台，设置里面配置搜索服务，这里 API URL 是你的 LiteLLM 服务加上&lt;code>/search&lt;/code> 后缀。
例如你的 LiteLLM 服务部署在 &lt;code>https://my-litellm.example.com&lt;/code>, 那么这里就填写 &lt;code>https://my-litellm.example.com/search&lt;/code> . 工具填写刚才在 LiteLLM 后台接入 Tavily 的时候填写的 search tool name&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059931.png" alt="image-17">&lt;/p>
&lt;p>之后在「搜索转 RSS」页面，输入你想查询的东西即可。你可以直接用自然语言描述，比如「SpaceX 的最新新闻」. 之后点击下一步即可预览搜索结果。&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059932.png" alt="image-18">&lt;/p>
&lt;p>你可以按需调整搜索语句。确认没问题一直下一步，可以保存为自定义的配方 (Custom Recipe) , 就可以生成一个唯一的 RSS 链接，在你喜欢的任意 RSS 阅读器里面查看啦&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059934.png" alt="image-19">&lt;/p>
&lt;p>更进一步，你可以使用 FeedCraft 的各种 Craft 来做进一步的处理。比如获取全文，添加总结、翻译文章、以及调用 AI 使用自然语言对文章进行筛选等等&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/202512220059935.png" alt="image-21">&lt;/p>
&lt;p>总体功能就是这样啦，欢迎试用 FeedCraft 和 Star 🌟! Have fun!&lt;/p>
&lt;p>&lt;a href="https://github.com/Colin-XKL/FeedCraft">https://github.com/Colin-XKL/FeedCraft&lt;/a>&lt;/p></description></item><item><title>LLM Agent is All You Need - 让 AI 指导我完成 MVP 产品 - 「Colin's Weekend Project」</title><link>/posts/llm-agent-is-all-you-need-%E5%BD%93%E6%88%91%E7%94%A8%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%8A%A9%E6%89%8B%E6%9D%A5%E6%8C%87%E5%AF%BC%E6%88%91%E5%AE%8C%E6%88%90mvp%E4%BA%A7%E5%93%81-colins-weekend-project/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate><guid>/posts/llm-agent-is-all-you-need-%E5%BD%93%E6%88%91%E7%94%A8%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%8A%A9%E6%89%8B%E6%9D%A5%E6%8C%87%E5%AF%BC%E6%88%91%E5%AE%8C%E6%88%90mvp%E4%BA%A7%E5%93%81-colins-weekend-project/</guid><description>
&lt;blockquote>
&lt;p>&lt;strong>「Colin&amp;rsquo;s Weekend Project」&lt;/strong>
我个人喜欢挑一个周末在一个很短很专注的时间内，捣鼓点小玩意。这个栏目用来记录我的这些 idea、作品、创作过程以及吐槽&lt;/p>
&lt;/blockquote>
&lt;p>今天来挑战一下，在大模型的指导下，完成一个最小可行产品 (MVP)&lt;/p>
&lt;h2 id="idea">
idea
&lt;a href="#idea" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>如果单纯是开发一个完整的 web 程序 or 移动端程序，其实没啥意思。我之前已经搞过很多，更别提日常在公司里面就是在开发各种功能。今天我打算以一个非专业人士的视角，探究一下：&lt;/p>
&lt;ul>
&lt;li>当下各种 AI 助手已经百花齐放，飞入寻常百姓家。但是当下的 AI 在真实世界的任务中，究竟能做到什么地步&lt;/li>
&lt;li>如果作为一名非专业人士，究竟能不能借助这些 AI 工具做出一个可用的产品&lt;/li>
&lt;li>如果真正要做一个面向 C 端的产品，把流程 Run 起来持续下去，需要考虑哪些因素&lt;/li>
&lt;/ul>
&lt;h2 id="如果一切都从-llm-开始">
如果一切都从 LLM 开始&amp;hellip;
&lt;a href="#%e5%a6%82%e6%9e%9c%e4%b8%80%e5%88%87%e9%83%bd%e4%bb%8e-llm-%e5%bc%80%e5%a7%8b" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>我需要代入一个非专业开发人员的视角，来进行这次的项目。首先项目启动的第一个问题：在没有任何产品经理的知识，不懂得产品开发流程的小白的情况下，我需要如何开始？&lt;/p>
&lt;p>在没有 LLM 以前，或许我需要先各种查阅资料学习，或者各种摇人让懂行的朋友进行指导。但是现在，一切都不一样了：随便一个 LLM 都可以帮我快速入门&lt;/p>
&lt;p>一开始，我是打算接住 LLM 让我快速了解产品相关的知识。但是突然觉得，既然都用 AI 了，为什么还在遵循原有的路径，一步步自己学习、理解然后教 AI 做事呢？换个思路，我只要提供需求，AI 来拆解任务。&lt;/p>
&lt;p>于是
&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249632.png" alt="image|476x415">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249633.png" alt="image-1|700x472">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249634.png" alt="image-2|700x472">&lt;/p>
&lt;p>利用 AI 生成一套提示词，来指导我如果分析我的需求、拆解任务&lt;/p>
&lt;p>不得不说，对于这些跨领域的知识，能有一个不厌其烦的 AI 助手来循序渐进地跟你交流、帮你分析，效果非常好。人类可能还真不好干这个活。&lt;/p>
&lt;h2 id="ai-教我做产品">
「AI 教我做产品」
&lt;a href="#ai-%e6%95%99%e6%88%91%e5%81%9a%e4%ba%a7%e5%93%81" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>经过跟这个「MVP 导师」的 LLM Agent 反复沟通，确定了产品的主要构想和核心事项。以下是摘录的一部分&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-markdown" data-lang="markdown">&lt;span style="color:#75715e">#### MVP 概要（3 句话）
&lt;/span>&lt;span style="color:#75715e">&lt;/span>
&lt;span style="color:#66d9ef">-&lt;/span> **为谁**：20‑30 岁、周末感到无聊且有意愿尝试新事物的年轻人。
&lt;span style="color:#66d9ef">-&lt;/span> **解决什么痛点**：不清楚该尝试哪些活动、如何快速入门、活动是否适合自己、以及能获得什么收益。
&lt;span style="color:#66d9ef">-&lt;/span> **提供的核心功能**：活动列表页面 → 点击感兴趣的活动 → 展示入门门槛与材料推荐（入门材料按钮）并埋点上报。
&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-markdown" data-lang="markdown">&lt;span style="color:#75715e">## MVP 核心功能：
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">1.&lt;/span> &lt;span style="font-weight:bold">**活动列表**&lt;/span>：集中展示多种可入门活动（绘画、球类、手工等）。
&lt;span style="color:#66d9ef">2.&lt;/span> &lt;span style="font-weight:bold">**入门详情**&lt;/span>：点击任意活动 → 展示入门门槛、必备材料、推荐教程链接。
&lt;span style="color:#66d9ef">3.&lt;/span> &lt;span style="font-weight:bold">**埋点追踪**&lt;/span>：记录“点击 → ≥1 min 外部阅读 → 回站”行为，用于验证假设。
&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里印象深刻的是，MVP 导师让我先确保用户痛点一定要是真实的，在初期没有论证的情况下，MVP 的意义就在于基于一个假设 (假设用户的痛点是 xxx), 我们要围绕这个痛点先开发出 1-2 个核心功能，然后通过用户数据分析，来验证我们关于用户痛点的假设是否成立。如果不成立说明是伪需求，也就没有继续投入的必要了。&lt;/p>
&lt;p>这一点还是让我挺惊喜的，因为大部分人有个 idea 想做 xx 产品，大部分都是脑门一热，想要有 xxx 功能但是其实根本的需求并不是这个。花了很多精力搞出来的功能其实是伪需求。而 AI 导师专业水准还是挺在线的，能够在一开始就识别这个风险&lt;/p>
&lt;h2 id="vibe-coding">
Vibe Coding
&lt;a href="#vibe-coding" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>接下来就是要进入开发的部分了。我选择的 AI 代码工具是字节的 Trae 海外版，不用验证手机号而且可以使用 Google Gemini、OpenAI GPT-4o、Anthropic Claude 4 等高级模型。&lt;/p>
&lt;p>首先让 AI 根据产品需求文档、拆解任务文档，确定了技术方案。不过这里我为了效率简化了下&amp;amp;注入了一些自己的私房调料，最终使用的方案为：&lt;/p>
&lt;ul>
&lt;li>astro + vue3 + tailwind css 来构建 web 站点&lt;/li>
&lt;li>directus cms 作为后端，省去编写后端和对接数据库的麻烦&lt;/li>
&lt;li>vercel 快速部署&lt;/li>
&lt;/ul>
&lt;p>这部分没啥好说的，简单列几个吐槽的点吧：&lt;/p>
&lt;ul>
&lt;li>astro 配置 tailwindcss, 换了一圈大模型没一个正确的。应该是跟近期大版本更新有关系。最后还是我手动跟着 astro 官方的文档搞定的&lt;/li>
&lt;li>trae 高级模型试用额度很低，没写几个功能就超限了开始排队，动不动前面几百号人基本没法用&lt;/li>
&lt;li>现阶段 AI IDE 基本都是基于 vs code 改的。所以 vscode 的缺点也都一并继承了过来，很多语言的插件需要额外手动安装、各种变量跳转用不了、各种奇怪的波浪线报错又没法快速修正&lt;/li>
&lt;/ul>
&lt;p>最后简要看下最终的成果吧&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249635.png" alt="image-3">&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249636.png" alt="image-4">&lt;/p>
&lt;p>后台数据：
&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249637.png" alt="image-5">&lt;/p>
&lt;h2 id="埋点上报与用户行为分析">
埋点上报与用户行为分析
&lt;a href="#%e5%9f%8b%e7%82%b9%e4%b8%8a%e6%8a%a5%e4%b8%8e%e7%94%a8%e6%88%b7%e8%a1%8c%e4%b8%ba%e5%88%86%e6%9e%90" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>之前做的都是玩具项目和公司内部平台，没怎么接触过 C 端用户行为分析。这块确实还是个挺陌生的领域。不过好在我们有万能的 AI. 在经过埋点需求分析、技术方案对比、任务拆解之后，最后采用了 Umami 平台来进行上报，并简单配置了下指标用于计算用户停留，辅助验证我们关于用户痛点的假设&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249639.png" alt="image-6|0x0">&lt;/p>
&lt;p>跟 MVP 导师沟通的时候，确定了验证假设的方式为：衡量用户是否点击「查看详情」按钮&lt;/p>
&lt;ul>
&lt;li>用户点击并在外部阅读 ≥ 1  分钟后回站&lt;/li>
&lt;li>成功阈值：≥ 25 % 的访问者完成“点击 → ≥ 1 min 回站&lt;/li>
&lt;/ul>
&lt;p>为了方便统计，借助 umaimi 的统计功能快速实现，我只需要统计有多少比例的用户至少点击了一次「了解详情」. 具体到代码实现上，就是在「点击详情」按钮添加一个上报，上报内容包括用户的 session id, 后面在 umaimi 统计一段时间内，按钮点击事件里面，有多少独立的 session id 处以总的 uv 就可以。&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249640.png" alt="image-7">&lt;/p>
&lt;h2 id="投放">
投放
&lt;a href="#%e6%8a%95%e6%94%be" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>众所周知，天朝桌面端 web 用户已经约等于 0 了，技术博客都很少人看，更别提这种泛娱乐向的内容。MVP 导师提供的方案，也是路线正确，但是 web 端用户数据反馈验证的路子基本没用。不过这个 web 页面我也不指望能成为流量主力，最多算个 wiki.&lt;/p>
&lt;p>要想真的有人看，收获真实用户反馈，还是需要到各种新媒体平台去投放的。然后再收集数据进行分析，不过这个工作量就是另外一回事了。运营起来还是需要挺多时间精力的。&lt;/p>
&lt;p>尝试做了几个图投放到小红书，放几个示例图&lt;/p>
&lt;p>&lt;img src="https://blog-1301127393.file.myqcloud.com/BlogImgs/202509172249641.png" alt="image-8">&lt;/p>
&lt;p>用的搞定设计的模版调整了下，插图是用 Gemini, 效果还可以，能很好地遵循用户指令，不过美学方面跟 MidJourney 那些还是差了一截，毕竟人家专攻的方向。提示词里面限制好风格的话出图效果还是可以的，这里后续如果有必要的话，其实也可以 AI 批量生产插图。&lt;/p>
&lt;p>不过小红书账号冷启动，反响平平。这里后续有时间再研究吧&lt;/p>
&lt;h2 id="the-end">
The End
&lt;a href="#the-end" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2></description></item></channel></rss>