
1. 为什么我要用 OpenClaw 抓 36Kr 做每日 AI 早报每天手动刷 36Kr 快讯、筛选 AI 相关条目、再整理成一段能看的早报这件事我坚持了不到一周就放弃了。不是内容不好而是重复动作太碎打开网页、滚动、判断哪条算 AI、复制标题、归类、排版。单次五分钟一个月就是两个多小时而且状态差的时候还会漏掉重要条目。OpenClaw 的 browser 能力正好切中这个场景。它不是简单地把网页正文丢给模型总结而是能真正接管一个受管浏览器打开指定 URL、等待页面稳定、读取可交互快照、按你的规则提取条目。再配合一个轻量 skill 做清洗和排版整条链路就能从“看网页”变成“交结果”。这篇适合三类人一是刚接触 OpenClaw、想找一个真实可复现案例的二是已经在用大模型但还没把浏览器自动化跑通的三是想给自己或团队做一份每日 AI 早报、又不想搭一整套工程系统的。我试过把方案压到最轻不建 Python 项目、不接数据库、不做复杂调度全部在 OpenClaw 内完成需要代码的地方只封装成一个 skill。核心检索词先摆出来OpenClaw 是什么、能做什么、适合谁。它是一个支持 browser 受管配置和 skill 扩展的 Agent 运行环境能打开网页、读取快照、执行多步任务适合想把浏览器操作自动化、又希望快速看到结果的人。下面从环境准备一路写到手动触发验证。2. TaoToken 前置统一 Key 与 API 通道接入OpenClaw 在跑浏览器任务时背后仍然要调用大模型来完成“判断哪条是 AI 热点”“按四类整理”“输出日报格式”这些语义工作。如果每个 skill 各自配一套 Key后面排障会非常痛苦。我的做法是统一走 TaoToken 的 API 通道一个 Key 覆盖模型对话和后续可能的 coding 场景。TaoToken 的定位是统一的大模型 API 接入层官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意 API 地址后面不加 UTM 参数直接用它作为 base_url 即可。你需要先拿到 Key。进入控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。创建后复制那串 sk- 开头的字符串只显示一次先存到本地环境变量里。export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你后面要长期跑编码类或 Agent 类任务可以了解 Coding Plan入口是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。模型对话的调试入口在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。ClaudeCodeAnthropic 相关配置参考 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-code-anthropicutm_campaignrewrite 。注意Key 不要写进 skill 配置文件后提交到公开仓库。用环境变量注入skill 里只读变量。3. 可复制配置OpenClaw browser 与 skill 骨架3.1 先确认浏览器链路写 skill 之前第一件事永远是确认浏览器能不能跑。执行openclaw browser status如果显示未启动就起一个受管浏览器指定独立 profileopenclaw browser start --browser-profile openclaw不要一上来就用你日常的浏览器 profile也不要先折腾复杂配置。受管 profile 的好处是排障轻出问题直接重启这个 profile 就行。3.2 手动验证 36Kr 快讯页浏览器起来后先手动打开一次确认页面能读openclaw browser --browser-profile openclaw open https://m.36kr.com/newsflashes等页面内容稳定后看可交互快照openclaw browser --browser-profile openclaw snapshot --interactive这一步真正要确认的不是“页面打开了”而是 OpenClaw 能不能读到有效内容。如果快照里已经能看到快讯标题和摘要后面就好走。3.3 skill 配置骨架下面是一个可复制的 skill 骨架放在 OpenClaw 的 skills 目录下文件名用daily_ai_brief.yaml。它做三件事声明 browser 依赖、定义提取规则、调用模型做归类和排版。name: daily_ai_brief description: 打开 36Kr 快讯页提取 AI 相关条目并生成每日早报 version: 1.0.0 browser: profile: openclaw url: https://m.36kr.com/newsflashes wait_until: networkidle snapshot: interactive extract: max_items: 12 min_items: 8 ignore_keywords: - 登录 - 广告 - 下载 App - 评论 - 分享 categories: - AI - 科技公司 - 芯片算力 - 其他 model: provider: taotoken base_url: ${TAOTOKEN_BASE_URL} api_key: ${TAOTOKEN_API_KEY} prompt: | 你是科技早报编辑。基于下面的页面文本完成 1. 提取 8 到 12 条最值得关注的科技热点 2. 忽略登录、广告、下载 App、评论、分享等无关内容 3. 按 AI、科技公司、芯片算力、其他 四类整理 4. 输出一份简短日报包含今日判断、热点列表、建议关注 页面文本 {{snapshot_text}} output: format: markdown title: 今日科技热点日报这里的关键是prompt里把任务边界写死抓多少条、过滤什么、怎么归类、输出什么结构。不要写“帮我看看今天有什么热点”这种泛提示泛提示会让结果每次都不一样。3.4 接入片段说明model段里的base_url和api_key都从环境变量读这样 skill 文件本身可以安全地放进版本管理。如果你用的是 OpenClaw 的全局模型配置也可以把这段抽到全局 config 里skill 只引用 provider 名。两种方式都行我倾向后者改一处全局生效。4. 验证请求手动触发一次抓取与早报输出配置写完后先手动触发一次不要急着加定时任务。openclaw skill run daily_ai_brief --browser-profile openclaw执行后你会看到几个阶段browser 打开页面、等待 networkidle、抓取 interactive 快照、把快照文本传给模型、模型返回日报。如果一切正常终端会输出类似下面的结果# 今日科技热点日报 ## 今日判断 今天的热点主要集中在 AI、科技公司动态和芯片算力三个方向。 ## 热点列表 1. AI Agent 相关产品热度继续提升 2. 大模型商业化落地讨论增多 3. 芯片与算力仍然是产业关注重点 4. 科技公司融资、并购和组织调整消息密集 ## 建议关注 - 做 AI 应用的优先看 AI 类热点 - 做基础设施的重点看芯片和算力 - 做产品和运营的重点看行业趋势与公司动作如果输出结构对但条目偏少先把min_items调到 8 再跑一次如果条目里混进了广告或登录提示把对应关键词补进ignore_keywords。这一步就是调参不用改代码。验证通过后再加定时任务。在 OpenClaw 的计划任务里加一条每天早 8 点执行daily_ai_brief输出到 Web UI 对话框。如果想推到飞书等即时通信工具在已配置好的工具对话里创建这个任务即可。5. 本篇常见错排查5.1 browser status 显示未启动最常见的原因是 profile 名写错。openclaw browser start --browser-profile openclaw里的 profile 名要和后续命令里的完全一致。如果之前起过别的 profile先openclaw browser stop --browser-profile 旧名再起新的。5.2 snapshot 抓不到内容页面可能还没稳定。把wait_until从networkidle改成显式等待或者在 skill 里加一个wait_for_selector等快讯列表的容器出现再抓。另外确认你打开的是m.36kr.com/newsflashes而不是首页快讯页信息密度更高、噪音更少。5.3 模型返回 401 或鉴权失败先检查环境变量有没有真正注入到 OpenClaw 的运行环境里。echo $TAOTOKEN_API_KEY能打印出来不代表 skill 进程能读到尤其是用 systemd 或容器跑的时候。把变量写进对应的 env 文件或者用 OpenClaw 的 secrets 机制注入。base_url 确认是https://taotoken.net/api不要多加路径。5.4 输出格式每次都不一样prompt 里的结构约束不够硬。把“包含今日判断、热点列表、建议关注”改成明确的 Markdown 模板并在 prompt 末尾加一句“严格按上述三级标题输出不要增删章节”。模型对格式的服从度会明显提升。5.5 定时任务没触发先确认计划任务里的 skill 名和实际注册名一致再确认执行时间用的是本地时区。如果任务执行了但没看到输出检查输出目标是不是当前 Web UI 会话换个会话或推到飞书再试。6. 把这条链路用起来跑通一次之后这条链路的扩展方向很自然把url换成多个站点就是多平台热点监控把prompt改成选题角度就是内容生产流水线把输出推到飞书就是团队早报。但第一步永远是先让最小闭环稳定跑起来。如果你在接入阶段卡在 Key 或 base_url 上直接看接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite Key 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 创建。想先验证模型返回是否正常用模型对话入口 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 发一条测试消息。长期跑编码或 Agent 任务的话Coding Plan 在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。最后留一个我踩过的坑skill 里的max_items不要设太大。12 条是快讯页一屏能覆盖的量设到 30 条模型会开始编造或重复。宁可少而准也不要多而乱。