资讯动态

断更五年后,我养了一只AI“虾”:OpenClaw自托管代理自动化写作实践

发布时间:2026/10/17 7:48:48 来源:尧图企业网站定制
你可能以为我要讲水产养殖其实我讲的是一个在本地小主机上跑了一个月的小机器人。我停更创作内容大概有五年了前阵子突然想明白一件事重新开始写东西靠的不是什么宏大决心而是每天有个东西在固定时间找你、给你递素材、催你动笔。于是就有了这个 OpenClaw “养虾”实验。这里的“虾”不是我养的宠物是我给一个自托管 AI 代理起的外号。我把它搭在书房一台常开的 Linux 小主机上每天定时抓取信息源整理成创作卡片再等我亲手改写成文。如果你也断更很久、手里攒了一堆没写的选题或者对自托管 AI 代理感兴趣这篇文章应该能给你一套直接抄作业的流程顺带避掉我踩过的几个大坑。1. 为什么是“养虾”而不是“训狗”1.1 五年没写东西问题不在“没时间”先聊聊背景。五年前我算是个爱写东西的人技术笔记、产品思考、偶尔的生活观察一个月能写好几篇。后来换了一条忙到没整块时间的赛道停更了一次就停了五年。停更这种事最麻烦的不是手生而是那个“输入—思考—输出”的回路彻底断了。以前我刷到一篇好文会顺手记两笔看到数据异常会琢磨背后的原因现在只会划走划完就忘。我试过逼自己写“周末写一篇”的计划立了无数次全都没撑过第二周。后来复盘才意识到我缺的不是意志力而是系统。写作这件事如果全靠大脑记住“我今天要写”大脑很快就会把这件事归入“不紧急不重要”然后无限期搁置。所以我需要的是一个外部系统它帮我做素材收集、初筛、甚至是把零碎想法先变成半成品我只负责最后那个不能被替代的步骤——用自己的话给出判断和细节。这个想法听起来简单但市面上现成的 AI 写作工具其实都解决不了。它们大多是一个对话框你打开它还得先想好“今天我该让它帮我写什么”。这一步本身就是巨大的心理门槛。我真正想要的是一个没人催我、但每天都会自动出现在我数据库里的东西。1.2 OpenClaw 的定位不是大模型而是大模型的“手脚”在聊配置之前先把主角说清楚。我用的 OpenClaw 是一个开源的 AI 代理框架核心思路是让你在本地定义若干个长期运行的“代理”每个代理有自己的角色设定、可用工具、触发时间和存储位置。代理本身不是大模型它更像是一个“包工头”到点了就去抓网页或读本地文件把得到的内容组装成一次大模型的调用请求等返回结果后再写日志、存文件、触发下一个任务。选它而不是直接用一个云端的写作助手的理由很简单数据留在本地我的素材库、生成的卡片、日志全在我自己硬盘上不经过第三方平台。可编排、可定时它能按 cron 表达式在早晨、中午、晚上自动触发任务这是普通对话框做不到的。过程完全透明每一步都有日志模型生成时到底用了哪些素材、写得怎么样我随时可以打开日志复盘。模型可替换它后端接的是一个兼容常用接口的云模型服务哪天觉得某个模型写得不好改一行配置就能换掉。用一个生活化的类比大模型像是一个厨艺不错但不会自己下楼的厨师OpenClaw 则是我给这位厨师配的厨房系统——有菜篮子、调味架、定时烤箱和上菜窗口。我不用站在旁边喊“今天炒这个”我只需要把菜谱和开门时间交给系统它自己就知道什么时候去买菜、什么时候下锅。1.3 “养虾”的比喻到底怎么落地之所以把代理叫作“虾”是因为我发现养 AI 代理和养水族生物在方法论上高度相似。养虾的人没法天天把虾捞出来教它游泳能做的只有三件事调好水质、按时投饵、观察状态。AI 代理也一样你没法实时干预它的每一次判断你能做的只有缸体运行环境也就是那台常开的小主机、Python 环境和 OpenClaw 本体。水代理的上下文与人格设定水太清它会变得机械水太肥它会输出一堆不靠谱的胡话。氧气泵定时调度器保证它每天在固定时间“浮上来呼吸”持续产出而不是憋一口气猛写两万字然后歇一星期。饵料信息源接入代理每天消化几条 RSS、几篇本地笔记相当于喂食。观察窗日志系统我每天早上打开终端看日志就能知道“虾”昨晚干了什么、有没有状态异常。这个比喻还有一个好处它天然强调了“低干预”。训练狗时你会不断纠正动作养虾时你只能信任系统。把代理当虾养意味着我不指望它一次就能写出能直接发布的文章我只负责持续优化环境然后等它慢慢形成一个稳定的产出节拍。2. 搭建“虾缸”核心组件与关键配置拆解2.1 部署形态本地进程还是容器我选择的是在一台常开的 Linux 小主机上直接跑本地进程用系统的守护进程机制保证崩溃后自动拉起。为什么不放容器里按理说容器更干净、更容易迁移但对我来说这台小主机还要跑其他内网服务OpenClaw 只是其中一个模块直接在守护进程里管理反而省事少一层网络端口映射。如果你是从零开始、希望快速试错容器方式更整洁如果你像我一样希望“看到日志就能摸到文件”本地进程其实更顺手。不过有一点必须注意OpenClaw 这类代理框架一旦跑起来它的任务目录、缓存目录、配置目录最好单独放在一个文件夹下不要跟系统目录混在一起。我给它的家目录是~/shrimp-lab所有素材、卡片、日志、配置文件都收纳在这个目录里后面做备份、迁移、清理都方便。2.2 给“虾”建人格角色配置文件怎么写建完环境后的第一件事不是急着让它干活而是先给它“立人设”。OpenClaw 的核心配置文件是一段 YAML里面有一个persona字段用来定义代理的身份和行为规则。我一开始只是随便填了一句“你是创作助手”结果它生成的卡片味道很冲满屏都是“首先、其次、最后”的排比腔。后来我把人设写成了下面这样agent: name: shrimp-01 persona: | 你是小虾一个住在本地书桌角落的创作助手。 你的日常工作从素材库里挑出三条看起来普通但值得深挖的信息 写成一张650字左右的卡片。 你的语言习惯像朋友聊天不用“首先/其次/最后” 不写正确的废话每个观点至少给一个具体例子。 你不署名不直接发布只把卡片放在指定目录等作者本人来取。这里面每一句都有讲究。第一句“住在本地书桌角落”是在暗示代理保持低姿态不要动不动“作为一个人工智能”“写三张卡片650字”是给任务设了硬边界避免它自由发挥到两千字“不用‘首先/其次/最后’”是针对大模型默认输出套路的直接约束“不写正确的废话”是为了逼它在每一张卡片里放一个可被验证的具体细节。还有一个容易被忽略的字段是temperature也就是模型采样的随机性。我给它设置为 0.65在我用的模型上这是一个“稳定但还有点性格”的位置。如果低于 0.3输出的确工整但每个句子都像同一个模板印出来的如果高于 0.8又会频繁跑题。这个参数没有绝对正确的值跟你选的模型和任务类型强相关建议从 0.5 起步每次调 0.05找到自己的手感。2.3 工具权限只给“虾”最小限度的本领OpenClaw 可以给代理挂很多工具网页抓取、文件读写、定时器、数据检索。我建议遵循最小权限原则——它需要什么就给什么不要因为它“能”做什么就全部开放。我当前允许的工具只有四个工具权限范围用途读取素材目录只读~/shrimp-lab/materials检索需要引用的来源写入卡片目录只写~/shrimp-lab/cards保存生成卡片抓取网页限速每天最多 10 次获取指定信息源的新内容定时调度三个内置任务早中晚各触发一次这里特别要注意的是“写入目录”的范围。一开始我把写权限放开到~/shrimp-lab整个目录结果有一次代理为了“整理素材”直接把原始素材文件给改写了。那一刻我意识到必须像管实习生一样管代理给它一个明确的交付目录写好文件就够了其他目录一律只读。把写权限锁死后再没出过这类问题。2.4 投喂计划定时任务设计与素材源选择定时任务是“养虾”实验里最关键的机制。我设置了三轮早上 8 点抓取几个固定信息源的更新把内容清洗成简短的素材条目存入素材库。中午 12 点从素材库里挑三条结合本地笔记中的个人观察生成一张创作卡片。晚上 10 点跑一次自我总结在日志里输出今天的运行报告包括抓了几篇、生成几张卡、平均耗时。素材源的选择也有讲究。我不只放科技新闻还有一本我常读的旧书摘录、一个记录自己失败项目的本地文件。原因是“创作表达”的核心不是搬运热点而是把外部信息和自己的经历摩擦出新东西。所以素材源里必须有一部分“自己的东西”否则代理生成的内容会非常“新闻稿”没有任何个人痕迹。信息源加入到配置后先跑一次手动任务看抓取质量。如果某个源返回的全是垃圾广告就直接剔除如果某个源连续一周没有产生有用素材也先停用别舍不得。3. 实操现场从零跑通一只“虾”的完整流程3.1 环境准备与初始化命令我习惯把所有实验都放在独立的虚拟环境里避免污染系统的 Python 环境。下面是整个初始化过程的命令记录按顺序执行即可mkdir -p ~/shrimp-lab cd ~/shrimp-lab python3 -m venv .venv source .venv/bin/activate pip install openclaw openclaw init --agent shrimp-01 --home . openclaw doctor其中openclaw doctor这一步很重要它会自动检查网络连通性、模型接口密钥是否有效、目录权限是否正常。我第一次跑doctor时它报了一个“模型接口密钥未配置”我才想起来配置文件里只填了模型名忘了把密钥从环境变量引进去。如果你也遇到类似问题先别急着翻代码优先看配置文件和服务端日志绝大多数问题都出在密钥和网络出口上。3.2 配置文件全览初始化完成后核心配置集中在~/shrimp-lab/openclaw.yaml里。我现在的完整配置大致是这样agent: name: shrimp-01 persona_file: persona.md model: provider: openai_compatible_gateway name: creative-small temperature: 0.65 max_tokens: 1200 storage: material_dir: ~/shrimp-lab/materials card_dir: ~/shrimp-lab/cards log_dir: ~/shrimp-lab/logs sources: - name: tech_rss type: rss url: https://example.com/feed.xml - name: my_notes type: local_markdown path: ~/shrimp-lab/notes/ideas.md schedule: morning_fetch: 0 8 * * * noon_card: 0 12 * * * evening_report: 0 22 * * * limits: daily_llm_calls: 30 url_fetch_per_day: 10配置里有几个关键点想展开说一下。persona_file指向一个单独的 Markdown 文件比直接写在 YAML 里更好维护。后面你想调整人格比如从“冷静的观察者”改成“带点毒舌的老友”只需要改那个人格文件不必动主配置也不会触发代理重启时的额外风险。max_tokens: 1200看起来不大但足够对付 650 字的卡片。设置这个上限有两个作用一是控制单次调用成本二是强制代理学会在限定篇幅内表达而不是习惯性越写越长。limits部分是保护闸。OpenClaw 这类框架最怕的就是代理在异常情况下疯狂调用模型接口我设定了每天最多 30 次调用、最多 10 次网页抓取超出的任务直接跳过并写日志。这个限制一周内就救了我一次后面在常见问题里会细说。3.3 第一次“开缸”手动触发并解读日志配置完成后千万别直接等定时任务先手动跑一轮。我先用一个只读任务验证抓取再跑一次卡片生成任务openclaw run --taskfetch --dry-run openclaw run --taskmake_card第一次跑出卡片时日志长这样[12:00:01] [schedule] job noon_card triggered [12:00:02] [context] read 3 stale notes, pruned 1 [12:00:05] [retrieval] picked 3/12 candidates [12:00:09] [llm] call ok, usage in1410 out912 tokens [12:00:10] [writer] card saved - cards/2025-0521-006.md [12:00:10] [report] done in 9.2s这段日志信息量很大。read 3 stale notes, pruned 1说明代理自动清理了一条过期的旧笔记picked 3/12说明素材库中 12 条候选里只选中了 3 条这个筛选逻辑是人格文件里写死的“优先挑反常识信息”usage in1410 out912 tokens则是每次调用的实际消耗。我会定期统计这些 token 消耗用来估算成本也用来判断素材是否太多、是否撑爆上下文。3.4 参数计算过程上下文预算和成本估算说到 token 消耗这里给一个具体的计算过程方便你自己做预算。我用的模型上下文窗口是 8000 token。每次生成卡片的请求由三部分组成系统提示词和人格文件加起来大约 600 token选中的素材摘要每条约 120 token选 3 条就是 360 token本地个人笔记的相关片段取 200 token。这样输入侧约 1160 token。输出侧是 650 字卡片中文一个字大约对应 1.5 个 token也就是约 975 token。全部加一起一次调用约 2100 token距离 8000 的窗口还有很大余量。这就意味着我暂时不需要担心上下文溢出也说明“每天 30 次调用”的限制是非常宽裕的。成本方面按这个体量算一天三次定时任务加上偶尔手动调试一个月消耗不到二十万 token。按市面上主流的按量计费模型换算也就是一杯咖啡钱以内完全可以承受。重点是控制住异常情况下的调用量而不是心疼正常使用的那点消耗。3.5 “换水”流程周期性调整人格与素材库养虾要定期换水AI 代理也一样。我的“换水”周期是每周日晚上清点本周生成的卡片被采纳的移入成稿库没被采纳的删掉。清理素材库里超过两周的旧条目只保留有长期价值的参考。更新一次人格文件里的“本周兴趣点”比如本周我关注“本地优先软件”就会在人格文件里加一句“最近多留意本地优先的工具和案例”。跑一次openclaw run --taskmake_card做冒烟测试确认配置改动没有引入异常。这个流程看起来简单却是整套实验里回报最高的部分。每次“换水”后的一周卡片质量都会有肉眼可见的回升。如果你的代理输出越来越无聊别急着换大模型先试试清理素材、更新兴趣点大概率能解决。4. 翻车排查与治理养虾一个月踩过的坑4.1 “虾”在自言自语任务重复执行与日志刷屏运行到第三周时我发现日志里每隔几秒就有一条 fetch 记录一天跑了三百多次差一点把限流额度打满。排查后确认是两个守护进程在同时跑同一个代理目录调度器互相不知道对方的存在导致定时任务重叠触发。解决方法是给代理加一个“单实例锁”确保同一时刻只能有一个进程在运行。如果你也会用守护进程托管代理记得检查是不是只拉起了一个实例多实例是最隐蔽的翻车源头。4.2 “虾”开始扯谎模型幻觉污染素材有一次卡片里引用了一篇“来源文章”我点开一看标题确实存在但正文根本没有卡片里说的那个观点。这是典型的模型幻觉——它在抓取结果里看到了标题就顺着标题编了一个看似合理的解读。我的根治办法是改配置强制代理在卡片里保存“来源 ID”字段每个观点必须对应一条真实存在于素材库中的记录。如果生成的内容找不到匹配的来源 ID就判定为无效产出直接丢弃并记录一次幻觉事件。从那以后假引用的情况几乎消失偶尔再出现也能靠日志快速定位。4.3 输出千篇一律人格漂移问题运行到第二周我明显感觉到卡片开始“油掉”句子结构越来越雷同形容词越堆越多。查日志发现代理的上下文里保留了太多旧卡片把性格给稀释了。模型只会顺着上文模仿而上下文里全是它自己写过的旧句子自然就走进了自我重复的循环。我做的调整有两点一是把每次生成前的历史摘要从完整保留改成只保留最后 5 条二是每周“换水”时强制给上下文注入一条全新的“今日兴趣点”打断连续重复的惯性。效果立竿见影。4.4 资源占用与请求费用飙升还有一次某天的请求量冲到日常值的十倍原因是模型服务返回了一串超时错误而代理默认会在失败后立即重试。重试机制本身是好事但没有上限就变成了灾难。我在配置里加了三个保护参数单次任务最多重试 3 次重试采用指数退避第一次等 30 秒第二次等 2 分钟第三次等 5 分钟单日调用数超过 30 次后所有非关键任务直接跳过。加了这套限制后哪怕模型服务抽风一整天我的成本也不会失控。4.5 常见问题速查表症状可能原因快速排查根治办法任务重复执行多个进程并存查看进程列表数一数几个实例启用单实例锁内容引用不存在模型幻觉核对卡片里的来源 ID 是否存在强制校验来源 ID输出越来越套路上下文被旧输出稀释看日志中历史摘要长度缩减历史摘要注入新兴趣点请求量异常升高失败重试无上限查调用计数曲线指数退避 每日配额本地磁盘疯涨日志和卡片堆积查看日志目录大小日志轮转每周归档模型密钥报错环境变量未正确引用本地打印环境变量检查配置里改为引用环境变量5. 从“养虾”回到写作这套系统到底帮了我什么5.1 一张卡片到一篇文章到现在我已经攒了接近三十张卡片其中真正被我扩展成文章的只有五篇比例不算高但胜在稳定。我原以为“有素材”就能写实际操作后才发现“被半加工的素材”才是最好的起点。举个例子某天“虾”生成了一张卡片标题是“为什么我对效率工具越来越警惕”它的核心观点是很多效率工具不是在节省时间而是把你的日程切得更碎。我看了之后觉得有道理但“虾”给的理由太抽象于是我自己补了一个具体的失败案例——我用过一段时间任务打卡软件结果每天花更多时间维护打卡记录而不是做事。我把这个案例替换掉卡片里原有的例子又重新组织了段落顺序大约四十分钟就写完了一篇草稿。以前从零开始写光是想选题就要耗掉一个晚上。5.2 创作节奏重建最明显的变化不是产量而是节奏。现在每天早上打开电脑第一件事不再是“我要写点什么”这种让人焦虑的念头而是看一眼昨晚的卡片。有感觉就顺手改一段没感觉就先搁着。这个动作轻到几乎没有门槛但每天都发生日积月累那根断了五年的“输入—思考—输出”的回路居然真的被接上了。有一点我很确定AI 代理只承担“催熟”的职责最后的署名和发布没有任何一步交给它。卡片写得再好没有经过我的判断和改写它就不会出现在我的博客里。这是底线也是这套流程能继续跑下去的原因。5.3 可扩展的方向实验跑了一个月后面还有几个想尝试的方向让“虾”在每周日晚自动生成一份“本周创作复盘”统计我改了几篇、卡在哪一步最多给代理加一个语音输入通道把平时随手录的碎片想法也并入素材库接一个日历接口让它根据我下周的空闲时间建议写作时段。这些都是下一步的“换水”清单。养虾这件事最有意思的地方在于你永远不知道下一次水质调整会带来什么变化。最后分享一个我没想到的细节某天早上我发现日志显示凌晨 3 点“虾”自己跑了一次素材整理写了一张关于桌面整理的卡片。我坐在书桌前看着那行日志突然有点感动。五年前我停更是因为觉得自己写的东西没人看、写了也不会改变什么。现在一个小机器人用每天三张卡片和深夜的自动整理把我重新拽回了书桌前。如果你也断更很久我建议别等“状态好了再写”直接搭一个像虾缸一样的小系统喂点料每天打开看一眼写作会自己想办法回来。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑