
早上八点我打开Telegram里面躺着一份刚生成好的Reddit摘要r/selfhosted昨天最值得读的六个帖子每个都配了链接、一句话点评还标出了哪个帖子讨论最热烈。这不是什么付费订阅而是我前一天晚上用OpenClaw搭的一个Daily Reddit Digest用例自动跑出来的。这篇文章就是我在复现这个用例过程中记下来的完整笔记——从部署OpenClaw、接上本地小模型到把摘要写进Obsidian、推送到通知工具中间踩过的坑、调过的Prompt、改过的时间参数全都放在里面。如果你正在学OpenClaw或者想给自己的Agent加一个每天早上自动看资讯的实用流程这份笔记可以直接抄作业。我不会只贴配置还会把每个设计决定背后的原因讲清楚毕竟用例能不能长期稳定跑关键不在第一天的惊喜而在后面一个月的细节。1. 拆开 Daily Reddit Digest 这盘菜这个用例到底在做什么先说清楚这个用例的是什么它让你每天定时访问Reddit上指定版块比如r/selfhosted、r/technology、r/sysadmin抓取当天的高热度帖子把标题、链接、评热度、正文摘要整理成结构化数据交给大语言模型筛选和改写产出一份适合快速阅读的每日文摘最后推送到你习惯的地方——邮件、Telegram、企业微信机器人或者存成本地Markdown文件。1.1 切成四块定时触发、页面采集、LLM总结、结果投递我第一次看这个用例的时候以为重点在怎么抓Reddit真正跑起来才发现它其实是标准的数据管线触发层、采集层、加工层、投递层。触发层一个Cron定时器决定每天早上几点开始干活。难点在时区不是随便填个8点就完事。采集层通过浏览器自动化打开Reddit页面滚动、等待、提取帖子卡片。为什么不用普通HTTP请求Reddit这类站点前端逻辑复杂很多内容由JavaScript动态渲染直接用requests库拿到的基本是空壳页面。OpenClaw的浏览器扩展就是干这个的。加工层把采集到的原始帖子列表交给LLM让它按信息密度高、可读性强的编辑标准筛选和总结。这里有个容易被忽略的关键——LLM不应该凭空生成内容它只应该对抓回来的事实做改写和排序这是防止幻觉的基本功。投递层把生成的Digest写到Obsidian笔记、发送通知、归档日志。看你想怎么消费这份摘要这一步配置最灵活。1.2 为什么我建议拿它当OpenClaw的入门练习很多人上手Agent框架会先跑Hello World但Hello World只能证明能通不能证明有用。Daily Reddit Digest这个用例恰好卡在中间它足够小一个早上能跑通又足够完整把OpenClaw最核心的几种能力全覆盖了。而且它的输出质量可以直观验证——摘要好不好你一眼就能看出来不需要什么量化指标。相比之下让Agent去操作API、写代码错了往往要查半天日志才发现是模型问题还是步骤问题。内容摘要类任务反馈链路很短适合作为学习框架的第一站。我原来以为这种用例适合用Python脚本一把梭requests抓页面、OpenAI接口做摘要、cron定时三个文件搞定。但真实用下来脚本方案有几个硬伤页面结构一变提取逻辑就崩摘要逻辑想调整得改代码重跑想加一个新功能点比如顺便抓一下Hacker News等于重写一遍。而OpenClaw的玩法是把流程写成Agent的任务描述采集和总结由框架调度你想让浏览器先滚动两屏再抓取直接在任务里写一句话就行不用动底层代码。1.3 先明确你要的是众包筛选还是深度阅读跑这个用例之前得想明白消费场景。我的需求是每天早上快速扫一眼技术圈在聊什么所以摘要不需要很长但要覆盖足够宽的版块。你的情况如果是在做某个垂直领域盯梢比如只关注r/docker的发布帖那就应该把筛选标准写成只保留版本更新和重大变更而不是泛泛的热点汇总。这个设计差异最后会体现在Prompt里。所以我不建议一上来就抄别人现成的Prompt——先想清楚输出给谁看、看多细、需要什么颗粒度的信息再动手写配置。2. 先把OpenClaw端起来部署、WSL环境、浏览器扩展和模型接入我在装OpenClaw这一步卡了一整个晚上后来发现大部分人搜OpenClaw安装教程踩的都是同一批坑。我把三者装法整理在一起按顺序走基本不会出问题。2.1 三种安装路线先弄清楚你要哪种OpenClaw的部署方式大致有三条路官方安装脚本、Docker、npm全局安装。我实测下来的选择逻辑是这样的想最快体验、不想管依赖用官方脚本安装装完在终端敲openclaw start就能跑起来。要长期稳定跑、还打算放服务器上用Docker Compose环境隔离干净升级也方便。你本身是Node生态重度用户用npm全局安装包体积小扩展开发最直接。这里有个特别常见的误解值得提醒好多人跑OpenClaw卡住之后去Node.js官网重新下载Node——把Node和OpenClaw搞混了。OpenClaw虽然是基于Node写的但它不是一个Node LTS发布包你从Node官网下载的只是JavaScript运行时。正确做法是装好Node 18以上包括npm之后再去执行OpenClaw官方指定的安装命令两者是前后关系不是同一件事。我给Docker路线贴一下大致步骤不同版本具体命令可能有出入以你装的那个版本官方README为准# 拉取仓库 git clone https://github.com/openclaw/openclaw.git cd openclaw # 从模板创建环境变量文件 cp .env.example .env # 编辑.env填入大模型接口信息后面2.4节说细节 docker compose up -d # 查看运行状态 docker compose exec openclaw claw status2.2 无法安全验证sl2环境这个报错到底在说什么我在Windows环境下跑安装脚本时遇到了那段很有名的报错大意是无法安全验证sl2环境请在PowerShell中运行wsl -- status。第一次看到以为是网络问题甚至怀疑是杀毒软件拦截折腾了半天才发现根本不是那回事。原理是这样的OpenClaw为了在Windows上安全地执行Linux沙箱命令会先检查机器上的WSLWindows Subsystem for Linux状态确认Linux子系统可用后才把Agent的脚本任务放进沙箱执行。如果WSL没装好、内核版本太老或者发行版处于未初始化状态脚本就会给出这个报错。正常排障顺序很简单在PowerShell里执行wsl --status如果输出显示默认版本2且内核正常说明WSL本身没问题如果只显示一堆正在安装那就需要先升级驱动和组件。常见的修复命令是wsl --update wsl --install -d Ubuntu wsl --set-default-version 2装完发行版之后再跑一次wsl --status能正常输出版本信息再回头执行OpenClaw安装脚本问题就消失了。这个排障过程给我一个很大的教训遇到Agent框架的报错先分清它是网络问题还是本机环境问题大多数诡异的失败其实都和环境状态有关。2.3 浏览器扩展它不是可有可无的遥控器OpenClaw要真正操作网页需要一个配套的浏览器扩展Chrome、Edge都能装。第一次用的时候我一度觉得这一步多余——现代Agent不是可以直接调浏览器内核吗实际用下来OpenClaw把浏览器扩展设计成AI控制真实浏览器的桥梁扩展负责接收Agent的指令执行打开标签页、滚动、点击、读取DOM这些动作然后把页面内容送回去。这个架构在抓Reddit时特别重要。Reddit这种动态页面帖子列表是异步加载的普通HTTP请求拿不到完整的帖子卡片用无头浏览器又容易被识别为机器人。而通过扩展操纵一个真实浏览器实例就相当于一个正常用户在看页面登录态、Cookie、渲染结果都自然存在。装扩展之后别忘了做配对扩展图标点开会显示一个配对码或链接把它填到OpenClaw的配置里两者才算建立信任关系。我见过有人装完扩展没配对然后日志里全是Browser not connected。2.4 让qwen2.5-3b这种本地小模型也能扛起摘要任务OpenClaw的核心是把LLM当作大脑但大脑不一定非要用云端大模型。我选择先接本地模型一台偶尔开机的台式机装了Ollama拉了qwen2.5-3b这个3B参数量的模型。选它有两个原因一是免费、离线可跑二是Daily Reddit Digest的任务本质是对已有文本做筛选和改写不是复杂的推理题小模型理论上够用。在OpenClaw的环境变量里大致是这样配的还是那句话以你手上的版本schema为准LLM_PROVIDERollama OLLAMA_BASE_URLhttp://localhost:11434 OLLAMA_MODELqwen2.5:3b再说明白一点把3B模型和云端GPT-4比代价很明显——小模型对复杂指令的遵循能力弱输出偶尔脱线。所以后面写Prompt时要特别讲究把任务拆成更小的子步骤、给明确的输出模板、尽量让模型只做填空式改写。这些调优思路在第3章展开。3. 手把手复刻 Daily Reddit Digest 的配置与流程跑通框架只是开始接下来才是核心工作把这个用例从能跑变成像样。我按我的使用场景完整走一遍配置过程每一步都说说我为什么这么设计。3.1 先定义清楚这份Digest的输入、处理、输出分别是什么我的场景很简单每天早上看一眼自托管和技术圈发生的大事不需要每帖都精读。于是我的定义是输入r/selfhosted、r/technology、r/sysadmin三个版块昨天的热门帖每版块取前10条。处理过滤掉纯情绪帖、广告、教程带货帖保留有信息量的帖子按主题分组每个帖子生成不超过30字的一句话导读。输出一份Markdown格式的每日Digest文件同时发送一份摘要到Telegram。注意我刻意把输出格式和长度都做了硬限制。原因是Agent任务最怕边界模糊你让LLM总结一下它会自由发挥你给它一张必须填完的表它才会稳定。这一点在后面Prompt里会体现得更彻底。3.2 用任务清单向外描述而不是写死脚本OpenClaw里工具集和记忆是分开管的可以把日常信息采集定义成一个可复用的Agent然后给这个Agent写一份每天的例行任务清单。我用的这个版本大致是这种结构{ name: daily-reddit-digest, enabled: true, schedule: { cron: 0 8 * * *, timezone: Asia/Shanghai }, task: 执行每日Reddit摘要任务打开指定三个子版块读取热门帖子列表按约定筛选生成Markdown文件并发送摘要通知, model: qwen2.5:3b, preconditions: [ 浏览器扩展已连接, 本地模型服务在线 ], output: [ 保存到 /data/digests/yyyy-mm-dd.md, 推送消息到通知渠道 ] }这里有三个设计点值得说明用schedule而不是手动触发所以昨天的数据怎么表述我让Agent在任务里自然语言指定以当前日期前一天为统计范围模型会自己想办法对齐。为什么timezone要显式写因为服务器默认是UTC时间如果你在Docker里跑不写时区cron表达式按宿主机时间走容易造成8点或“16点”的混乱。preconditions很实用它相当于健康检查浏览器断连了、模型服务挂了就不执行后续流程避免白跑一趟还浪费Token。当然上面是我用的版本大致的形态OpenClaw版本迭代很快字段名可能变。你以自己装好之后的配置示例为准。3.3 写给LLM的提示词让小模型不跑偏的写法这是我调了一整天的地方。第一版Prompt我写得很随意帮忙总结一下这些Reddit帖子结果3B模型生成的摘要又长又空全是我能看到的大白话。后来我把Prompt重写成结构化表单效果直接上一个台阶。现在用的模板大概长这样你是一位Reddit社区编辑。下面是从Reddit抓取的帖子列表每一条包含标题、所属版块、得分、评论数、链接、正文摘要。 要求 1. 剔除评分低于20的帖子剔除正文少于50字、明显只有链接没有内容的帖子。 2. 将剩余帖子按主题分类工具发布、经验教程、问题求助、行业新闻。 3. 每个帖子保留标题、版块、得分、链接外加一句不超过30字的中文导读。 4. 不要让导读变成这篇文章介绍了……这种废话要写这里值得注意的点是什么。 5. 最后用三行总结今天最值得关注的趋势。这样设计基于一个关键认知小模型的指令遵循能力弱但它非常擅长填空。你给它一个带约束的表单它会老老实实填你给它开放性任务它就自由发挥到失控。直接抓数据放在上下文里让模型做事实性压缩不要在总结里引入它自己脑子里的Reddit知识。3.4 盯住输出写回Markdown、归档Obsidian、推上TelegramDigest生成之后怎么投递也值得讲究。我做三个输出第一保存Markdown到本地目录文件名带日期。我用的是/data/digests/2025-06-12.md第二归档到Obsidian。这吸引我的一点是Obsidian支持把本地Vault当作文件夹来读。直接让OpenClaw把生成的Markdown写进Vault目录就能在Obsidian里形成连续日记。我顺手在文件头加了frontmatter--- date: 2025-06-12 tags: [reddit-digest, daily] source: reddit ---这样Obsidian能自动索引按标签筛选也方便。第三通知推送。OpenClaw本身支持通过集成渠道发消息。我偏好Telegram配置一个bot token和chat id就能用。这一层相当于完成信号——我不需要天天去翻文件夹推送到了就知道今天的Digest好了。4. 跑起来之后才发现的三个深坑和一条调优路径配置跑通只是开始。真正用了两个星期我撞上了一批纸面上根本看不出来的问题逐个说。4.1 页面结构一变抓取逻辑就跟着崩Reddit前端改版不会提前打招呼。某天早上我收到的摘要突然只剩两个帖子打开日志一看Agent在页面上找不到预想的帖子卡片元素。原因很典型浏览器扩展是按照当前页面结构去定位内容的。Reddit改版之后帖子标题的CSS类名变了提取规则就失效了。OpenClaw的Agent在任务描述里用的是读取热门帖子列表这种语义化指令但底层还是需要DOM选择器支撑选择器一旦不匹配它就抓了个寂寞。我的解决办法是双保险一是把抓取规则写成不依赖于具体的CSS类名而是通过可访问性树/文本特征去找内容OpenClaw的扩展支持按文本内容定位二是在预处理器里加一步验证抓取数量如果抓到的帖子数低于某个阈值直接判定任务失败并通知我而不是闷头生成一份残缺摘要。现在每天早上就算抓取异常我也能第一时间知道。4.2 摘要越看越像AI写的怎么把编辑感调出来跑了一周之后我发现摘要质量在下降——帖子类型单调化导读语气雷同越来越像AI说的话。后来想明白了一个很微妙的问题LLM每次收到的输入都是昨天的帖子它没有记忆也不知道昨天自己总结过什么。这意味着它每天做的筛选标准完全独立第一篇总结和第十一篇总结之间没有任何连续性。对读者来说就是模板感。我的调法是把历史的Digest文件作为上下文的一部分传给Agent参考一下昨天的摘要今天的主题分布不要和昨天完全一样。同时还加了多样性约束同一个子版块的帖子最多选三篇正文内容高度相似的帖子保留最有信息量的一篇即可。这样摘要就不会变成某版块三连发。4.3 定时任务不按点跑时区、Cron和Docker守护进程前面说过时区实际操作中它是最容易挖坑的地方。我第一周放在Docker里跑宿主机是北京时间容器默认是UTC。配置里写的0 8 * * *按容器时间算实际执行成了北京时间下午四点。后来在配置里显式设置TZAsia/Shanghai才修好。还有一个隐患Cron任务长期跑如果进程被占用或者Docker容器被重启定时器不一定能自动恢复。我加了一个简单的心跳检查每天早上推送的成功通知就是一盏绿灯如果九点之前没收到通知说明昨天夜里哪一环断了。这比半夜爬起来查日志靠谱。4.4 让每天的内容有层次除了爆款还要看趋势最后一条调优经验比较进阶不要把Digest做成每日爆款排行榜。每天只看得分最高的帖子很容易陷入评论区的情绪漩涡忽略了真正值得长期跟踪的领域变化。我现在让Agent每周五额外生成一份周报把本周讨论度同比增长明显的主题挑出来。做法不复杂就是让Agent读取一周的Digest存档按主题词频统计再对比本周和上周Top帖的主题重合度。这样日报看当天周报看趋势信息消费层次一下子就清晰了。5. 从能用到好用我后续一个月运维下来的体会这个用例我已经连续跑了一个多月现在聊聊那些让整个系统不用人管的关键经验。如果你也想长期跑这部分比第一天的部署还重要。5.1 一台云服务器让Digest永久在线我的初始方案是放在自己电脑上但电脑一关定时任务就断了。后来干脆折腾了一遍云服务器部署。当时正好看到阿里云有免费试用活动就研究了一下openclaw配置阿里云服务器免费试用相关的做法实际流程不复杂在控制台开一台2核4G的Linux实例放行Docker需要的端口然后把OpenClaw的Docker Compose配置传上去启动即可。这样部署有几个好处一是24小时在线定时任务稳定二是日志集中排查问题方便三是以后想接其他Agent任务都在同一台机器上管理。值得提醒的是云服务器部署要把安全组规则收敛好不要把管理端口暴露到公网密钥文件妥善保管。我见过有人图省事把SSH密码设成纯数字最后被暴力破解改面的例子。5.2 日志和失败告警Agent不干活时怎么发现Agent框架最大的隐性成本是异常时静默失败。我遇到过好几次模型服务刚好在重启定时任务跑了一半结果什么都没输出也没有报错因为OpenClaw把那次执行标记成了完成。所以我养成了两个习惯每个任务执行完都往日志文件追加一行结果摘要包含抓到的帖子数、生成的摘要字数和投递状态。异常路径写清晰抓取数低于阈值要通知模型超时要通知投递失败也要通知。宁可多几条告警也不能让问题攒三天才发现。这个小习惯让系统真正变得能托付我不用每天都亲自检查。5.3 把Daily Digest扩展成自己的资讯筛选体系Daily Reddit Digest跑顺之后我又加了两个变体一个抓Hacker News的每日Top一个抓本地新闻站点的标题列表。改动的成本比想象中低很多——只需要新建一个Agent任务把输入源和Prompt里的版块名换掉投递逻辑直接复用。现在我早上打开Telegram同时收到Reddit技术摘要、Hacker News导读、本地资讯三条消息各自独立又共享同一套配置体系。这种一套框架、多个用例的扩展方式我觉得才是OpenClaw这类Agent框架最大的价值你不需要为每个信息源写一套独立的脚本而是统一在同一个Agent编排体系里管理。回到开头那句话这个用例我最初只是想解决每天花半小时刷帖的低效习惯最后却把整个内容采集、总结、归档、通知的链路都走了一遍也算搭了一套完全属于自己的资讯处理流水线。如果你也想搭我的建议是先按第3章的配置原样跑通一遍再根据自己的阅读习惯改Prompt和投递方式最后才考虑上服务器做长期运维——顺序反了很容易初期就陷进细节里放弃。