零API费抓取全网数据:Agent-Reach技能模板

今天不造轮子,只拆轮子。

你手头有个Agent,想让它看看Twitter上最近大家在聊什么LangChain的新版本,或者查查GitHub上某个项目的star趋势。常规思路:去申请每个平台的API Key,配权限,调限流,然后还得写一堆错误处理。

Agent-Reach这个项目改变了这个思路——一个CLI命令,零API费,覆盖Twitter、Reddit、YouTube、GitHub、Bilibili、小红书。但它只是一个工具,怎么变成Agent真正能调用的技能?这篇文章我把它拆成可复用的Skill模块,你读完可以直接套进自己的Agent工作流。

Agent Reach CLI command line interface

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路径即可。

markdown
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 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):

json
1 2 3 4 5 6 7 8 9 10 11 12 13
{
  "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

  1. 根据输入参数构造reach命令:reach <action> <platform> "<query>" --count <count>
  2. 执行命令,捕获stdout
  3. 解析输出文本,转为结构化JSON
  4. 若命令执行失败或返回空,返回error状态及错误信息

Error Handling

  • 返回非零退出码:记录stderr,返回"Tool execution error"
  • 结果为空:返回"No results found"
  • 平台不支持:返回"Unsupported platform"
    ```

SKILL.md structure diagram

4. 实际案例演示:搜索Twitter最新LangChain帖子

假设Agent收到用户指令:「帮我看看Twitter上最近关于LangChain v0.3的讨论」。

差Prompt vs 好Prompt

差Prompt(直接丢给Agent)

text
1
使用reach工具搜索Twitter上的LangChain。

问题:没有指定返回格式、数量、如何处理错误。Agent可能返回一堆原始文本,或者卡在缺少参数的报错上。

好Prompt(明确输入输出)

text
1 2 3 4 5 6 7 8 9 10 11
请使用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返回类似:

text
1 2
[1] LangChain v0.3 is here! ... https://twitter.com/langchain/status/... @langchain 2025-03-01
[2] ...

Skill解析后输出JSON:

json
1 2 3 4 5 6 7 8 9 10 11 12 13
{
  "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动态选择。比如:

text
1 2
Triggers:
- 用户指令中包含 [platform] [action] [query]

这样同一个Skill可以覆盖多个平台,减少冗余。

技巧2:结合总结Skill形成Pipeline

典型场景:抓取 -> 总结 -> 输出。
在Agent工作流中,先调用Agent-Reach Skill获取原始数据,然后将得到的JSON直接传给「文本总结Skill」,用GPT总结每条内容的核心观点。最后返回给用户。

示例组合Prompt:

text
1 2 3 4 5 6
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里增加一段伪代码:

text
1 2 3
- 检查缓存数据库(如本地SQLite)中是否存在未过期的结果
- 若存在,直接返回缓存JSON
- 否则执行reach命令,并写入缓存

这样能极大降低延迟和工具出错概率。

技巧4:处理登录限制(个人看法)

原项目在小红书、Twitter等平台可能需要cookie。我建议在Skill的Dependencies中提醒用户手动配置cookie文件,并在steps中增加读取~/.reach/cookies.json的逻辑。这是零API费的代价,需要一些人工维护。如果追求稳定,还是建议配合RSS或官方API。

总结的一句话

Agent-Reach解决的是「快速获取公开数据」的需求,将其封装为Skill后,你得到一个无需API Key的通用数据采集器。它不完美,但足够让原型跑起来。

Agent Reach data pipeline with skills

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