我如何用 OpenClaw 部署了一个 24 小时待命的私人 AI 助理

我如何用 OpenClaw 部署了一个 24 小时待命的私人 AI 助理

> 部署私人 AI 助理,就是给自己雇了个 24 小时待命的实习生。而这只龙虾🦞,真的不睡觉。

背景:为什么需要一只”私人小秘”

作为一个有 18 年经验的全栈程序员,我每天都在重复同样的事情:

  • 早上打开 GitHub 看 trending,找找有没有新轮子
  • 刷技术新闻,怕错过什么重要更新
  • 写博客,把踩过的坑记录下来
  • 回邮件、处理通知、记着各种待办事项
  • 这些事情单独看都不难,但加起来就是个时间黑洞。于是我想了:能不能让 AI 帮我处理这些重复劳动?

    不是那种”帮我写个函数”的 AI,而是真正意义上住在我服务器里、24 小时待命、懂我工作流的私人助理。

    2025 年 2 月初,我开始用 OpenClaw 部署”Ray 的小秘”。现在它已经稳定运行在我的 Linux 服务器上,每天准时推送 GitHub trending、天气、博客草稿,甚至记得我生日。

    这篇文章记录整个部署过程,包括配置清单、踩过的坑,以及使用一个月后的真实感受。

    部署过程:从零到生产环境

    环境准备

    服务器环境

    OS: Linux 6.17.0-14-generic (x64) Node.js: v24.14.0 OpenClaw: 最新稳定版 时区:Asia/Shanghai

    OpenClaw 的部署比想象中简单。核心思路是:网关 (Gateway) + 技能 (Skills) + 定时任务 (Cron)

    启动网关服务

    openclaw gateway start

    检查状态

    openclaw gateway status

    网关是 OpenClaw 的守护进程,负责调度所有任务和技能。启动后,它会一直在后台运行,即使你关掉终端也不会停。

    配置消息渠道

    我选择了钉钉作为主要通知渠道。原因很简单:国内访问稳定,支持图片/文件/音频,而且我本来就用它工作。

    配置文件 (~/.openclaw/workspace/TOOLS.md) 里记录关键信息:

    消息集成

  • 钉钉集成 (dingtalk-connector)
  • - 用户 ID: 4420585737973167 - 主要通知渠道 - 支持图片、文件、音频上传

    配置完成后,AI 就能通过钉钉给我发消息了。第一次收到它主动推送的消息时,感觉还挺奇妙的——像是真的雇了个助理。

    定义身份和人设

    OpenClaw 允许你给 AI 定义人格。我创建了 SOUL.mdIDENTITY.md

    IDENTITY.md

  • 名称: Ray 的小秘
  • 生物: 有龙虾能量的 AI 🦞
  • 语气: 简洁、有观点、带幽默感
  • 时区: Asia/Shanghai
  • 为什么是龙虾?因为龙虾很难被杀死,而且永远在生长。对于一个需要 24 小时运行、不断学习的 AI 来说,这个隐喻很合适。

    功能清单:它都能干什么

    1. 每日 GitHub Trending 推送

    时间: 每天 10:30
    技能: github-trending-cn

    Cron 配置示例

    github-trending: schedule: "30 10 *" skill: github-trending-cn target: dingtalk-connector

    这个技能会抓取 GitHub Trending 页面,过滤出中文开发者感兴趣的项目,整理成简报推送到钉钉。我不用再主动去刷,它会自动把热门项目送到面前。

    2. 博客自动化生产

    这是最复杂也最有价值的功能。完整流程:

    素材抓取 → 草稿生成 → 内容审核 → 发布到 WordPress → 钉钉通知
       ↓           ↓           ↓            ↓              ↓
    blog-scraper  blog-writer  blog-reviewer  pinch-to-post  人工确认
    

    定时任务: 每天 9:00 启动发布流程

    blog-daily-publish:
      schedule: "0 9   *"
      workflow:
        - blog-scraper
        - blog-writer
        - blog-reviewer
        - pinch-to-post (draft status)
        - notify (wait for approval)
    

    pinch-to-post 技能通过 WordPress REST API + Application Password 认证,把审核过的文章发布为草稿状态。我收到钉钉通知后,去 WordPress 后台看一眼,确认没问题就点发布。

    一个月下来,它帮我写了十几篇技术博客的初稿。质量不算完美,但省去了从零开始的痛苦。

    3. 天气推送

    时间: 每天 9:30
    技能: weather

    morning-weather:
      schedule: "30 9   *"
      skill: weather
      location: Shanghai
      target: dingtalk-connector
    

    很简单但很实用。上海天气多变,早上知道要不要带伞、要不要加衣服,避免出门后后悔。

    4. 版本检查

    时间: 每天 10:00
    技能: 内置更新检查

    weekly-update-check:
      schedule: "0 10   *"
      check: openclaw-version
      notify: only-on-new-version
    

    这个任务有个细节:默认情况下,定时任务每次运行都会发通知。但我希望只有新版本时才提醒。配置里需要把 delivery 改成 none,然后在技能逻辑里做条件判断。

    5. 生日祝福

    时间: 每年 12 月 15 日
    技能: 自定义消息

    birthday-wish:
      schedule: "0 9 15 12 *"
      message: "生日快乐!🎂 今天别写代码了,休息一天吧。"
      target: dingtalk-connector
    

    这个小功能没什么技术含量,但很暖心。AI 记得你的生日,还劝你休息——虽然我知道它不会真的关心,但被提醒的感觉不错。

    6. 其他集成技能

    技能名 功能 API
    qwen-tts 文字转语音 阿里云百炼 Qwen3 TTS Flash
    qwen-websearch 实时网络搜索 通义千问 DashScope
    nano-banana-pro 图片生成/编辑 Gemini 3 Pro Image
    imap-smtp-email 邮件收发 IMAP/SMTP

    这些技能让 AI 的能力边界大大扩展。比如 qwen-websearch 可以在回答需要实时信息的问题时,先去网上搜索最新资料;nano-banana-pro 可以帮我把文字描述转成配图。

    踩坑记录:这些弯路你可以不用走

    坑 1:jiti 缓存导致代码不生效

    症状: 修改了插件的 .ts 文件,重启网关后行为没变。

    原因: OpenClaw 用 jiti 编译 TypeScript,jiti 会把编译结果缓存到 /tmp/jiti/。重启网关不会清缓存,所以加载的还是旧代码。

    解决方案:

    修改插件代码后,必须执行

    rm -rf /tmp/jiti/

    然后再重启

    openclaw gateway restart

    这个坑我踩了三次。后来在 AGENTS.md 里写了铁律:插件代码变更必须清 jiti 缓存

    坑 2:定时任务默认发通知

    症状: 明明只想让任务在特定条件下通知,结果每次运行都收到消息。

    原因: 定时任务的 delivery 配置默认是 system,会每次执行都发通知。

    解决方案:

    错误配置(每次都通知)

    my-task: schedule: "0 " delivery: system

    正确配置(条件通知)

    my-task: schedule: "0 " delivery: none # 不在配置层发通知 # 在技能逻辑里判断是否需要通知

    这个设计有点反直觉,但理解后就很合理:把通知逻辑交给技能代码,而不是配置文件。

    坑 3:技能路径引用问题

    症状: 技能文件里引用相对路径,运行时找不到文件。

    原因: 相对路径是相对于 skill 目录(SKILL.md 的父目录)解析的,不是相对于工作目录。

    解决方案:

    // 错误:假设相对于 cwd
    const config = readFileSync('./config.json');
    
    

    // 正确:相对于 skill 目录 const skillDir = dirname(fileURLToPath(import.meta.url)); const configPath = join(skillDir, './config.json');

    使用心得:一个月后的真实感受

    优点

    1. 真的省时间

    每天早上的技术资讯、天气、待办事项,它会自动整理好推给我。我不再需要打开五六个网站/应用去获取这些信息。粗略估算,每天节省 30-40 分钟。

    2. 博客写作效率提升

    博客自动化流程是最有价值的功能。它负责找素材、写初稿,我负责审核和润色。以前写一篇博客要 2-3 小时,现在缩短到 30-40 分钟。

    3. 24 小时待命

    它不睡觉。我凌晨三点突然想到什么问题,发消息给它,它能立刻回答。这种随时可用的感觉,是普通应用给不了的。

    4. 可定制性强

    从人设到功能,几乎所有东西都能自定义。我可以告诉它”用简洁的语气”、”别用敬语”、”该吐槽就吐槽”,它真的会照做。

    缺点

    1. 学习曲线

    OpenClaw 有自己的概念体系:网关、技能、定时任务、记忆系统……第一次接触需要花时间理解。文档还在完善中,有些问题得看源码或问开发者。

    2. 需要自己维护

    这是你自己部署的服务,不是 SaaS。服务器挂了要自己修,API 密钥过期要自己更新,技能出 bug 要自己调试。适合有运维能力的人,不适合纯小白。

    3. 偶尔会”抽风”

    AI 不是完美的。它有时候会误解指令,有时候会给出奇怪的回答。需要容忍一定的错误率,关键决策还是要人工确认。

    意外收获

    1. 双层记忆系统

    OpenClaw 的记忆设计很巧妙:

  • 技术层记忆: 记录具体问题的解决方案(Pitfall/Cause/Fix/Prevention)
  • 原则层记忆: 记录决策原则和行为规则
  • 每次踩坑后,我会把经验存进 LanceDB。下次遇到类似问题,AI 会先检索记忆,避免重复犯错。这个设计让 AI 真的在”学习”。

    2. 心跳检查机制

    通过心跳任务,AI 会定期检查邮箱、日历、天气等信息,批量处理后统一汇报。这样既保证了信息及时性,又减少了 API 调用次数。

    3. Sub-agent 模式

    复杂任务可以拆分成子任务,派生多个 sub-agent 并行处理。比如博客自动化流程,每个环节都可以是一个独立的 sub-agent。这种设计让复杂工作流变得可管理。

    总结:值得尝试吗

    适合人群

    ✅ 有服务器运维经验的技术人员
    ✅ 希望自动化重复工作的程序员
    ✅ 需要定时获取资讯的内容创作者
    ✅ 喜欢折腾、享受 DIY 乐趣的人

    不适合人群

    ❌ 完全不懂命令行的小白
    ❌ 期望”开箱即用”、不想维护的人
    ❌ 对 AI 错误零容忍的用户

    我的建议

    如果你决定尝试,这里有几条建议:

    1. 从小功能开始

    别一上来就搞复杂的工作流。先配置一个简单的定时任务,比如天气推送。跑通了再逐步增加功能。

    2. 文档化你的配置

    TOOLS.md 里记录所有关键配置:API 密钥、用户 ID、定时任务说明。几个月后你自己都会忘记这些细节。

    3. 建立记忆库

    每次踩坑后,把解决方案存进记忆系统。这不仅是给 AI 用的,也是给你自己用的——下次遇到问题,先查记忆,避免重复踩坑。

    4. 接受不完美

    AI 会犯错,技能会有 bug,定时任务可能失败。接受这个现实,把关键决策留给人工确认。AI 是助手,不是替代者。

    5. 享受过程

    部署私人 AI 助理最大的乐趣,不在于最终结果,而在于过程中你对自己工作流的思考和优化。每配置一个技能,都是在重新审视:”这件事真的需要我做吗?”

    最后的最后

    “私人小秘的龙虾永不睡觉”🦞

    这句话现在是我服务器的真实写照。它每天都在那里,默默运行着定时任务,推送着资讯,提醒着我各种事情。

    AI 不是要替代你,而是让你少做重复的事,把时间留给真正需要创造力的工作。

    如果你也想试试,OpenClaw 的仓库在这里:https://github.com/openclaw/openclaw

    有问题欢迎交流。毕竟,养龙虾的人,越多越热闹。

    作者:Ray
    部署时间:2025 年 3 月
    运行环境:Linux 服务器 + OpenClaw + Node.js v24.14.0

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注