零API费抓取全网数据:Agent-Reach技能模板
今天不造轮子,只拆轮子。
你手头有个Agent,想让它看看Twitter上最近大家在聊什么LangChain的新版本,或者查查GitHub上某个项目的star趋势。常规思路:去申请每个平台的API Key,配权限,调限流,然后还得写一堆错误处理。
Agent-Reach这个项目改变了这个思路——一个CLI命令,零API费,覆盖Twitter、Reddit、YouTube、GitHub、Bilibili、小红书。但它只是一个工具,怎么变成Agent真正能调用的技能?这篇文章我把它拆成可复用的Skill模块,你读完可以直接套进自己的Agent工作流。

1. 这个Skill解决什么具体问题
问题:多数AI Agent需要从社交或技术平台获取实时数据,但官方API有三大痛点——注册门槛高(尤其Twitter、小红书)、免费额度少、绑定信用卡让个人开发者劝退。
Agent-Reach做了什么:它用模拟浏览器或解析公开页面的方式抓取数据,不需要API Key。原理类似一个轻量级的scraper,但包装成了统一的CLI接口。比如 reach search twitter "LangChain" 就直接返回文本结果。
我这个Skill封装要解决什么:原始工具输出是纯文本,Agent没法结构化理解。通过SKILL.md定义输入输出格式、错误处理、触发条件,让Agent可以「知道自己能干什么、怎么调用、期望得到什么格式的回复」。
2. 触发条件和适用场景
触发条件
Agent在执行任务时,如果发现用户指令涉及:
- 查询某平台的最新内容(关键词搜索)
- 获取某个用户/仓库/视频的详细信息
- 对比不同平台的话题热度
就可以触发这个Skill。
适用场景举例
- 舆情监控:每天自动抓取Twitter上关于"OpenAI"的帖子,生成摘要
- 竞品分析:从Reddit、GitHub获取对手产品的最新讨论
- 内容运营:爬取小红书热门笔记,分析爆款标题规律
- 技术追踪:监控GitHub Trending,获取新项目简介
注意:由于依赖网页解析,对反爬严格的平台(如小红书)稳定性一般。我建议把这个Skill定位为「快速数据获取」,生产环境加上重试和缓存机制。
3. 完整Skill结构(SKILL.md示例)
下面是完整的SKILL.md模板。你可以直接复制到Agent的skills目录下,调整command路径即可。
# Skill: Agent-Reach Data Fetcher
## Description
通过命令行工具`reach`抓取Twitter、Reddit、YouTube、GitHub、Bilibili、小红书的数据,无需API Key。适用于获取实时搜索、用户信息、趋势等。
## Triggers
- 用户要求查询某个平台的内容
- Agent自身需要外部数据辅助决策(如对比趋势)
## Input
```yaml
platform: string # 平台名称: twitter | reddit | youtube | github | bilibili | xiaohongshu
action: string # 操作: search | info | trending
query: string # 搜索关键词或标识符(URL或用户名)
count: integer # 返回结果数量(默认5)
Output
返回结构化的JSON对象(由CLI输出解析后转为JSON):
{
"status": "success" | "error",
"platform": "twitter",
"results": [
{
"title": "标题",
"content": "文本摘要",
"url": "原始链接",
"author": "作者名",
"timestamp": "发布时间的ISO格式"
}
]
}
Dependencies
- Python 3.8+
- 安装
reach命令行工具(pip install agent-reach) - Playwright(用于部分平台渲染):
playwright install chromium
Steps
- 根据输入参数构造reach命令:
reach <action> <platform> "<query>" --count <count> - 执行命令,捕获stdout
- 解析输出文本,转为结构化JSON
- 若命令执行失败或返回空,返回error状态及错误信息
Error Handling
- 返回非零退出码:记录stderr,返回"Tool execution error"
- 结果为空:返回"No results found"
- 平台不支持:返回"Unsupported platform"
```

4. 实际案例演示:搜索Twitter最新LangChain帖子
假设Agent收到用户指令:「帮我看看Twitter上最近关于LangChain v0.3的讨论」。
差Prompt vs 好Prompt
差Prompt(直接丢给Agent):
使用reach工具搜索Twitter上的LangChain。
问题:没有指定返回格式、数量、如何处理错误。Agent可能返回一堆原始文本,或者卡在缺少参数的报错上。
好Prompt(明确输入输出):
请使用Agent-Reach Skill执行以下操作:
- 平台:twitter
- 动作:search
- 查询:"LangChain v0.3"
- 返回数量:5
要求:
1. 只返回结构化JSON,不要额外解释。
2. 如果结果为空,返回 {"status":"empty"}。
3. 每条结果包含title、content(前200字)、url、author、timestamp。
4. 如果工具报错,返回 {"status":"error", "detail": "具体错误"}。
背后原理
- 明确的输出格式让Agent可以稳定解析,不需要猜测
- 错误状态码让Agent能主动重试或告知用户,而不是卡住
- 限定了数量,避免CLI返回过多数据导致Agent上下文溢出
执行效果
假设CLI返回类似:
[1] LangChain v0.3 is here! ... https://twitter.com/langchain/status/... @langchain 2025-03-01
[2] ...
Skill解析后输出JSON:
{
"status": "success",
"platform": "twitter",
"results": [
{
"title": "LangChain v0.3 is here!",
"content": "探索新版本的新特性,包括...",
"url": "https://twitter.com/langchain/status/123",
"author": "LangChain",
"timestamp": "2025-03-01T12:00:00Z"
}
]
}
Agent接下来就可以根据这个JSON进行总结、对比或存入记忆。
5. 复用和组合技巧
技巧1:参数化触发条件
不要写死平台,而是在SKILL的trigger中定义变量,让Agent动态选择。比如:
Triggers:
- 用户指令中包含 [platform] [action] [query]
这样同一个Skill可以覆盖多个平台,减少冗余。
技巧2:结合总结Skill形成Pipeline
典型场景:抓取 -> 总结 -> 输出。
在Agent工作流中,先调用Agent-Reach Skill获取原始数据,然后将得到的JSON直接传给「文本总结Skill」,用GPT总结每条内容的核心观点。最后返回给用户。
示例组合Prompt:
1. 使用Agent-Reach搜索Reddit上关于"Next.js 15"的最新5个帖子,输出JSON。
2. 将上一步的results数组传给总结Skill,要求每条总结不超过50字。
3. 返回格式:
- 标题
- 总结(50字内)
- 链接
技巧3:缓存机制避免重复调用
因为CLI执行需要时间(尤其涉及浏览器渲染),可在Skill层加入简单缓存:对相同(platform, action, query)在1小时内不重复执行。实现方式是在SKILL.md的steps里增加一段伪代码:
- 检查缓存数据库(如本地SQLite)中是否存在未过期的结果
- 若存在,直接返回缓存JSON
- 否则执行reach命令,并写入缓存
这样能极大降低延迟和工具出错概率。
技巧4:处理登录限制(个人看法)
原项目在小红书、Twitter等平台可能需要cookie。我建议在Skill的Dependencies中提醒用户手动配置cookie文件,并在steps中增加读取~/.reach/cookies.json的逻辑。这是零API费的代价,需要一些人工维护。如果追求稳定,还是建议配合RSS或官方API。
总结的一句话
Agent-Reach解决的是「快速获取公开数据」的需求,将其封装为Skill后,你得到一个无需API Key的通用数据采集器。它不完美,但足够让原型跑起来。

如果你正在做一个多平台监控的Agent,不妨试试这个模板。从复制上面的SKILL.md开始,5分钟内就能对接上你的工作流。