你的AI Agent还活在几个月前的数据里吗?

大多数AI Agent只能靠训练数据回答问题,无法获取实时信息。如果你想让它帮你查今天的GitHub趋势、Reddit热帖或小红书笔记,通常得调用官方API——但每个平台都要申请、付费、限流,光OAuth就能卡你半天。

这个问题我遇到过太多次了。之前做一个竞品监控Agent,光申请Twitter API就等了两周,结果免费额度只能查500条/月。后来我发现了一个叫Agent-Reach的开源项目,它用纯HTTP解析的方式爬取主流平台内容,零API费用,一个CLI命令就能拿回JSON数据。

注意:这不是让你去做违法爬虫。Agent-Reach只抓取公开可见的信息,相当于把你的浏览器请求变成结构化数据。它用到的技术是Playwright + 自定义解析器,相当于模拟人类浏览网页,然后提取关键字段。

cmd line terminal showing search results from multiple platforms

什么场景下你需要这个Skill?

  • 实时趋势监控:每天自动抓取Reddit热帖、GitHub trending、Twitter话题。
  • 竞品情报分析:搜索指定关键词在小红书、Bilibili上的UGC内容。
  • Agent决策输入:让Agent根据最新新闻做出判断,而不是依赖知识库。
  • 零成本原型验证:做MVP时不想花时间对接API,先爬数据再说。

触发条件很简单:当Agent需要获取某个平台上的公开信息时,直接调用这个CLI工具即可,不需要任何额外的API key或token。

完整Skill结构(SKILL.md示例)

我将Agent-Reach封装成了一个可复用的AI Skill,目录结构如下:

text
1 2 3 4 5 6
skills/
├── web_reader/
│   ├── SKILL.md          # 技能描述与调用方式
│   ├── agent_reach.py    # 封装好的函数
│   ├── config.yaml       # 平台与参数配置
│   └── requirements.txt  # 依赖

SKILL.md

markdown
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
# Web Reader Skill

## 功能
通过Agent-Reach工具读取各大互联网平台的公开信息,返回结构化JSON。

## 触发方式
当用户要求获取某个平台的搜索结果、趋势或特定内容时,自动调用。

## 调用参数
- platform: 必填,字符串,可选值:twitter, reddit, youtube, github, bilibili, xiaohongshu
- query: 必填,字符串,搜索关键词或URL
- limit: 可选,整数,返回结果条数(默认10,最大50)
- timeframe: 可选,字符串,时间范围(如 "today", "week", "month"),部分平台支持

## 输出格式
返回JSON对象:
{
  "success": bool,
  "platform": string,
  "query": string,
  "results": [
    {
      "title": string,
      "url": string,
      "content": string,  // 摘要或正文
      "author": string,
      "date": string,
      "metrics": {}       // 点赞、评论等
    }
  ],
  "error": string | null
}

## 使用示例
```python
from agent_reach import search_platform

# 搜索GitHub trending
result = search_platform("github", trending="daily", limit=5)
print(result)

# 搜索Twitter上关于“AI agent”的最新推文
result = search_platform("twitter", query="AI agent", limit=20)
text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

### agent_reach.py 核心代码

```python
import subprocess
import json


def search_platform(platform: str, query: str = None, limit: int = 10, **kwargs):
    """
    调用Agent-Reach CLI获取平台数据。
    实际项目中需要先安装 agent-reach 包和 Playwright 浏览器。
    """
    cmd = ["agent-reach", platform]
    if query:
        cmd.extend(["-q", query])
    if limit:
        cmd.extend(["-l", str(limit)])
    for k, v in kwargs.items():
        if v is not None:
            cmd.extend([f"--{k.replace('_', '-')}", str(v)])
    try:
        output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=30)
        return json.loads(output.decode("utf-8"))
    except subprocess.CalledProcessError as e:
        return {"success": False, "error": e.output.decode()}
    except Exception as e:
        return {"success": False, "error": str(e)}

注意:需要预先安装 agent-reach 库(pip install agent-reach)以及Playwright浏览器驱动(playwright install chromium)。

实际案例:让AI助手搜索Reddit并总结

假设你有一个AI助手(比如基于LangChain的Agent),用户问:“Reddit上最近关于GPT-5的讨论有哪些?” 传统做法是让AI调用一个虚构的API,但有了我们的Skill,你可以这样写Prompt:

差Prompt

text
1 2
用户: Reddit上最近关于GPT-5的讨论有哪些?
请根据你的知识回答。

结果:AI会说“根据我截止到2023年的数据,GPT-5尚未发布……” —— 完全没有价值。

好Prompt(利用Web Reader Skill)

text
1 2 3 4 5 6 7 8 9
你需要使用Web Reader Skill搜索Reddit上关于“GPT-5”的最新帖子。

调用规则:
1. 调用 search_platform(platform="reddit", query="GPT-5", limit=10, timeframe="week")
2. 将返回的results列表中的title和content提取出来
3. 按照热度(score)排序,取前5条
4. 用中文总结讨论的主要观点和情绪

如果调用失败,告诉用户无法获取实时数据,并给出可能的原因。

效果:AI会实际去抓取数据,返回类似:

text
1 2 3 4 5 6
根据Reddit本周的热门讨论,关于GPT-5主要有三个观点:
1. 开源社区期待更高性价比(r/LocalLLaMA 帖子,1680点赞)
2. 担心OpenAI闭源策略(r/MachineLearning,1423点赞)
3. 预测发布时间可能在2025年中(r/singularity,987点赞)

整体情绪偏向期待与担忧并存。

差距明显:好Prompt让AI拥有了实时数据能力,回答切中当下。

为什么这样写有效?

你可能觉得:这不就是封装了一个CLI调用吗?原理很简单,但关键点在于:

  1. 结构化输出:Agent-Reach 返回JSON,AI可以直接解析,不需要再写网页解析逻辑。
  2. 确定性输入输出:Skill的接口是标准函数签名,AI可以像调用普通函数一样使用,错误处理也内置了。
  3. 降低认知负荷:AI不需要知道HTTP请求、User-Agent、反爬机制,只需要关心“搜什么平台、搜什么关键词”。
  4. 零成本实时:相比官方API动辄几百美元/月,这种方法用公共HTTP资源,只要控制好频率,成本可以忽略。

flowchart showing User -> Agent -> Skill -> Agent-Reach CLI -> Platform websites -> JSON back to Agent

但我必须说实话:这种方法的缺点也很明显。

  • 不稳定:依赖网页结构,一旦平台改版,解析可能失效。Agent-Reach项目维护者需要及时更新解析器。
  • 反爬风险:虽然项目用了Playwright模拟浏览器,但频繁访问仍然可能被限制IP。建议设置代理池或使用轮换IP。
  • 数据完整性:有些平台(如Twitter)的搜索结果可能不如API全面,比如缺少某些元数据。

所以我的建议是:作为原型验证和低成本探索使用,非常香;但生产级应用,还是应该优先用官方API。 如果官方API太贵或审批太慢,可以用这个Skill作为过渡方案。

复用和组合技巧

1. 多平台聚合监控

你可以将多个平台的搜索组合成一个Skill,例如定义search_all(query),同时调用Twitter、Reddit、GitHub,然后合并结果。

python
1 2 3 4 5 6
def search_aggregated(query: str, platforms: list = ["twitter","reddit","github"]):
    results = {}
    for p in platforms:
        res = search_platform(p, query=query, limit=5)
        results[p] = res.get("results", [])
    return results

将这个函数加入SKILL.md中,AI可以一次获取多平台信息。

2. 定时缓存与增量更新

因为每次调用都是实时请求,如果Agent频繁查询相同关键词,可能会触发反爬。可以加一个简单的本地缓存(例如SQLite),存储最近1小时的结果。当AI请求时,先查缓存,再到特定时间间隔后更新。

python
1 2 3 4 5 6 7 8 9
import time
import sqlite3
CACHE_EXPIRE = 3600  # 1小时

def search_cached(platform, query, limit):
    key = f"{platform}:{query}:{limit}"
    # 检查缓存...
    # 如果缓存有效直接返回
    # 否则调用search_platform并更新缓存

3. 与RAG结合

将抓取的内容存入向量数据库,让Agent可以检索历史数据。例如,每天早上自动抓取Reddit热门帖子,写入ChromaDB,然后Agent回答相关问题时直接检索RAG,既快又避免频爬。

变体扩展:自定义平台

Agent-Reach目前支持8个平台。如果你需要读取其他网站(比如知乎、豆瓣),你可以参考它的源码自己编写解析器。原理就是:

  1. 用Playwright打开URL
  2. 等待数据加载完成
  3. 用CSS选择器或XPath提取关键字段
  4. 返回JSON

你可以把它封装成同一个Skill,只需要在config.yaml中添加新平台的选择器即可。

yaml
1 2 3 4 5 6 7
platforms:
  zhihu:
    search_url: "https://www.zhihu.com/search?q={query}&type=content"
    selectors:
      title: "h2.ContentItem-title a"
      content: "span.RichText"
      author: "a.UserLink-link"

然后在agent_reach.py中增加一个分支。这样你的Skill就无限扩展了。

写在最后

Agent-Reach 的价值不是技术多深,而是把获取互联网实时公开信息这个高频需求,做成了一个零成本的CLI工具。对于AI Skill开发者来说,它是完美的“网络感知”模块——不需要昂贵的API,不需要复杂的OAuth,一行命令就能把互联网变成Agent的数据源。

我把它封装成Skill之后,开发效率提升了至少3倍。以前要花半天对接一个平台的API,现在十分钟写完一个Skill,剩下的时间用来调Prompt和业务逻辑。

你可以直接复制上面的SKILL.md,改一下路径和配置,立刻让你的AI从一个“离线大脑”变成“在线侦察兵”。

记住:效果取决于你如何组合。单平台搜索只是第一步,跨平台聚合 + 缓存 + RAG才是差异化价值。动手试试吧。