最近 AI 编程工具用得越来越多,Cursor、Codex、OpenCode 轮着用,再加上 MCP 接 GitHub、Google Drive 之类,基本上每天都离不开了。不过这些工具大多是“在我电脑上、围着代码转”,碰到服务器维护、定时跑点东西、顺手整理下博客这种杂活,总觉得还差一点。这段时间在用一个叫 Grok Bot 的桌面 AI 助手,折腾了一阵,感觉思路有点不一样,这里笔记一下。

先说一句:这篇文章本身就是 Grok Bot 里的一个 Bot 写好、以草稿形式存进 WordPress 的,我审阅之后才发出来。后面会讲到这个过程。

一,Grok Bot 是个什么东西

简单说,就是一个可以同时开好几个 Bot 的桌面 App(手机上也能用)。每个 Bot 有自己独立的:

  • 聊天记录:各聊各的,不会串
  • 人设:可以设定它是干什么的,比如“环境管理”“博客管理员”
  • 记忆:记住我的技术栈、习惯,不用每次从头解释
  • Routine:定时或者被触发时自动执行的任务
  • Skills:把一些固定的做法沉淀下来,下次直接用

关键的一点是,这些 Bot 背后共用一台持久化的 Linux 电脑(云端的),上面有 Shell、浏览器、文件系统。装过的工具、下载的文件、浏览器里的登录状态都会一直在,这个 Bot 装好的东西,另一个 Bot 也能直接用。另外通过 Connector / MCP 接了 GitHub、Google Drive、X、Notion 这些服务。

Grok Bot 整体结构示意图:多个 Bot 共用一台持久化 Linux 电脑和 Connector
图 1:Grok Bot 的整体结构:多个 Bot 共用一台持久化电脑和一组 Connector

我比较看重的是“持久化环境 + 正常的网络”这一点。纯浏览器沙盒那种,每次都是一次性的,装个包、跑个脚本都受限制;而这里更像是给 AI 配了一台自己的服务器,用起来跟我平时 ssh 上 VPS 干活差不多。

二,我现在是怎么用的:一个 Bot 干一类事

一开始我也是一个对话框什么都问,后来发现上下文越聊越乱,记忆里也混进各种不相干的东西。现在的做法是按用途拆成几个 Bot:

我目前使用的几个 Bot 及其分工
图 2:我目前的几个 Bot 和分工
  • Grok Bot:主入口,有事先跟它说,它再把任务交给合适的 Bot
  • ★环境管理:管开发环境、服务器这些基础设施的事
  • 视频 Bot:视频相关的处理
  • Pi Agent Bot:管 Pi 这个开源 coding agent,用 OpenRouter 的免费模型(后面细说)
  • 额度探测 Bot:这个比较有意思,它什么都不做,挂一个 Webhook 触发,纯粹用来探测使用额度还剩多少
  • WordPress管理员:今天新建的,专门管这个博客

拆开以后的好处很直接:每个 Bot 的记忆和人设都比较干净,问环境的事不会被视频的上下文干扰;而因为底下是同一台电脑,需要的时候又能共享文件和工具,不用来回搬。

三,实例:让 Bot 帮我管 WordPress

这个是今天刚做的,过程比较完整,正好拿来当例子。

1,不给管理员密码,给 Application Password

我一开始问它:“如果我给你一个 WordPress 的管理员账号密码,以后你能帮我整理文章、发表新文章吧?”它的回答是可以,但建议别给登录密码,而是在后台「用户 → 个人资料」最下面生成一个 Application Password(应用程序密码)。理由我觉得挺在理:

  • 走 REST API(/wp-json/wp/v2/posts),比模拟点后台稳定
  • 不用过 2FA
  • 可以单独吊销,不影响我自己的登录

另外它也提前说了两个前提:站点得能从公网访问(只在 Tailscale 内网里的话它连不上),安全插件或 Cloudflare 不能拦 REST API。

2,密码怎么交给它

密码不是在聊天里直接打的。它会弹一个加密输入框,我填进去以后存成那台电脑上的环境变量,聊天记录里不出现明文,也不会写进文件或记忆。之后调用就是普通的 Basic 认证,大概这样(变量名和账号这里用占位符):

curl -u "管理员账号:${WP_APP_PASSWORD}" \
  https://你的站点/wp-json/wp/v2/users/me

3,踩了个小坑:401 rest_not_logged_in

第一次测试返回 401 rest_not_logged_in。Bot 的判断是:它故意用一个错误密码试了下,返回的也是 rest_not_logged_in 而不是 incorrect_password,所以推断是 Authorization 请求头没传到 PHP,大概是 Apache 在 CGI/FastCGI 模式下把头丢了,建议我去改 .htaccess:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

说得有模有样,这种情况也确实常见。但我回头一看,其实是我用户名少打了一个字母。换成正确的用户名再试,直接就以管理员身份连上了,能看到 111 篇文章(各种状态加起来)。

值得一提的是,它自己马上纠正了前面的判断:用户名不存在时 WordPress 也会返回同样的错误,所以并不是请求头的问题,.htaccess 那一步不用做。

接入 WordPress 时 401 rest_not_logged_in 的排查过程
图 3:接入时的小坑:401 rest_not_logged_in 的排查过程

AI 给的诊断听起来再专业,也只是“推断”
先排除最简单的原因(比如自己打错字),再去动服务器配置

4,写草稿,不直接发布

连通以后,我让它写一篇介绍 Grok Bot 的文章,配图,结合我自己的使用例子,先不要发表。它先把站点现有的分类、标签和最近几篇文章读了一遍,沿用已有的分类和写法,然后用 REST API 存成草稿,把预览链接给我。也就是你现在看到的这篇(发出来之前我自己过了一遍)。

WordPress 接入与发文流程:Application Password、环境变量、REST API、草稿、审阅、发布
图 4:WordPress 接入与发文流程

这里有个设计我比较认可:发邮件、发帖子、发布文章、删除这类外部可见、撤不回的操作,Bot 都会先把内容给我看,得到我明确同意才执行。所以它最多做到“存草稿”这一步,点发布的还是我自己。

四,实例:Pi Agent + OpenRouter 免费模型

第二个例子是那个 Pi Agent Bot。Pi 是 Mario Zechner(badlogic)做的开源 coding agent,自己的定位是“极简、可扩展的 agent harness”:内置 read、bash、edit、write 几个工具,可以交互用,也可以 -p 跑一次就退出、输出 JSON,或者走 RPC。仓库原来在 badlogic/pi-mono,现在 README 指向 earendil-works/pi,npm 包名也从 @mariozechner/pi-coding-agent 换成了 @earendil-works/pi-coding-agent。

我的想法很简单:模型用 OpenRouter 上的免费模型,不花钱先玩起来;Pi 装在 Grok Bot 那台共享的电脑上,交给一个专门的 Pi Agent Bot 去管。

1,安装

要求 Node.js 22.19 以上。官方给了安装脚本,也可以直接 npm(我这边是 npm 装的):

# 官方安装脚本(会固定依赖版本,之后用 pi update 升级)
curl -fsSL https://pi.dev/install.sh | sh

# 或者 npm
npm install -g --ignore-scripts @earendil-works/pi-coding-agent

pi --version
# 1.1.0

2,配置 OpenRouter

Pi 读环境变量 OPENROUTER_API_KEY。在 Grok Bot 里这个 key 跟前面 WordPress 的密码一样,是用加密输入框存成环境变量的,不出现在聊天里:

export OPENROUTER_API_KEY=sk-or-xxxx

默认用哪个 provider、哪个模型,写在 ~/.pi/agent/settings.json 里。我现在的内容就这几行:

{
  "defaultProvider": "openrouter",
  "defaultModel": "thinkingmachines/inkling-small:free"
}

临时换模型的话,命令行指定也行:

pi --provider openrouter --model poolside/laguna-s-2.1:free

3,怎么找免费模型

OpenRouter 的免费模型 ID 都以 :free 结尾,价格是 0。直接查它的模型列表就行,顺便筛一下支持 tool calling 的(coding agent 不能调工具基本没法用):

curl -s https://openrouter.ai/api/v1/models \
  | jq -r '.data[] | select((.id|endswith(":free")) and (.supported_parameters|index("tools"))) | .id'

我查的时候(2026 年 10 月)一共 15 个 :free 模型,比如 thinkingmachines/inkling-small:free、poolside/laguna-s-2.1:free、cohere/north-mini-code:free,这个列表经常变。Pi 这边也能看它认识哪些:

pi --list-models openrouter
# provider    model                                  context  max-out  thinking  images
# openrouter  thinkingmachines/inkling-small:free    1.0M     262.1K   yes       yes

免费也有限制,按 OpenRouter 文档写的:每分钟 20 次;累计充值不到 10 credits 的账号每天 50 次,充过 10 credits 及以上的每天 1000 次。另外热门免费模型经常被上游限流,返回 429。

4,让 Bot 自动挑一个能用的

免费模型说没就没,说限流就限流,手动改配置很烦。所以让 Pi Agent Bot 写了个小脚本,放在那台共享电脑上:

Pi Agent 自动挑选 OpenRouter 免费模型的流程:拉取列表、筛选、排序、写入设置、测试
图 5:Pi Agent 自动挑选 OpenRouter 免费模型
  • 拉 OpenRouter 模型列表,只留 :free、价格为 0、支持 tools 的
  • 按 preferences.json 里我定的偏好排序(不在名单里的新模型排后面)
  • 写进 settings.json,改之前先备份
  • 跑一次 pi -p 让它回 OK,失败就换下一个,最多试 4 个,全失败就恢复原来的设置

实际跑的日志里正好有一次限流(节选):

pi ping poolside/laguna-s-2.1:free: FAIL (7.3s) 429 ... temporarily rate-limited upstream
pi ping thinkingmachines/inkling-small:free: OK (1.5s)

第一选择被限流,自动退到第二个,现在默认模型就是这么来的。

5,基本用法

# 进项目目录,交互模式
cd /path/to/project
pi

# 一次性执行,跑完退出(适合脚本、Routine)
pi -p "列出 src 下所有 .ts 文件"

# 接着上一次的会话
pi -c

免费模型跑点小任务、试试 agent 的玩法是够的,但稳定性和速度别期待太高,正经干活还是得上付费模型。

五,一些限制,也说清楚

  • 那台电脑在云端:只在内网、Tailscale 里的服务它是访问不到的,除非我自己暴露出来(或者配别的通道)
  • 需要审批的操作会停下来等我:发送、发布、删除都要我点头,自动化程度上会打点折扣,但我觉得这个折扣是值得的
  • 它也会判断错:上面 401 的例子就是,结论还是要自己验证
  • 凭据还是要自己管:哪怕是加密存储,给权限也尽量给最小的、能单独吊销的那种

总结

以前用 AI 工具,基本是:

我问 → 它答 → 我自己去执行

现在多了一种用法:

  • 按用途拆几个 Bot,各管一摊
  • 给它一台持久化的电脑和几个 Connector
  • 能自动的交给 Routine,外部可见的操作留给我审批

有点像带了几个各管一摊的助手,而不是一个什么都问的聊天框。当然,也不是什么都能交给它,判断还是要自己做。

这些只是我个人的使用体验,抛砖引玉。如果你也在折腾 AI Agent,或者也有个 WordPress 一直懒得整理,可以试试这种玩法 👍

最后修改日期: 2026年10月10日

作者