你的AI Agent还活在几个月前的数据里吗?
大多数AI Agent只能靠训练数据回答问题,无法获取实时信息。如果你想让它帮你查今天的GitHub趋势、Reddit热帖或小红书笔记,通常得调用官方API——但每个平台都要申请、付费、限流,光OAuth就能卡你半天。
这个问题我遇到过太多次了。之前做一个竞品监控Agent,光申请Twitter API就等了两周,结果免费额度只能查500条/月。后来我发现了一个叫Agent-Reach的开源项目,它用纯HTTP解析的方式爬取主流平台内容,零API费用,一个CLI命令就能拿回JSON数据。
注意:这不是让你去做违法爬虫。Agent-Reach只抓取公开可见的信息,相当于把你的浏览器请求变成结构化数据。它用到的技术是Playwright + 自定义解析器,相当于模拟人类浏览网页,然后提取关键字段。

什么场景下你需要这个Skill?
- 实时趋势监控:每天自动抓取Reddit热帖、GitHub trending、Twitter话题。
- 竞品情报分析:搜索指定关键词在小红书、Bilibili上的UGC内容。
- Agent决策输入:让Agent根据最新新闻做出判断,而不是依赖知识库。
- 零成本原型验证:做MVP时不想花时间对接API,先爬数据再说。
触发条件很简单:当Agent需要获取某个平台上的公开信息时,直接调用这个CLI工具即可,不需要任何额外的API key或token。
完整Skill结构(SKILL.md示例)
我将Agent-Reach封装成了一个可复用的AI Skill,目录结构如下:
skills/
├── web_reader/
│ ├── SKILL.md # 技能描述与调用方式
│ ├── agent_reach.py # 封装好的函数
│ ├── config.yaml # 平台与参数配置
│ └── requirements.txt # 依赖
SKILL.md
# 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)
### 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
用户: Reddit上最近关于GPT-5的讨论有哪些?
请根据你的知识回答。
结果:AI会说“根据我截止到2023年的数据,GPT-5尚未发布……” —— 完全没有价值。
好Prompt(利用Web Reader Skill)
你需要使用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会实际去抓取数据,返回类似:
根据Reddit本周的热门讨论,关于GPT-5主要有三个观点:
1. 开源社区期待更高性价比(r/LocalLLaMA 帖子,1680点赞)
2. 担心OpenAI闭源策略(r/MachineLearning,1423点赞)
3. 预测发布时间可能在2025年中(r/singularity,987点赞)
整体情绪偏向期待与担忧并存。
差距明显:好Prompt让AI拥有了实时数据能力,回答切中当下。
为什么这样写有效?
你可能觉得:这不就是封装了一个CLI调用吗?原理很简单,但关键点在于:
- 结构化输出:Agent-Reach 返回JSON,AI可以直接解析,不需要再写网页解析逻辑。
- 确定性输入输出:Skill的接口是标准函数签名,AI可以像调用普通函数一样使用,错误处理也内置了。
- 降低认知负荷:AI不需要知道HTTP请求、User-Agent、反爬机制,只需要关心“搜什么平台、搜什么关键词”。
- 零成本实时:相比官方API动辄几百美元/月,这种方法用公共HTTP资源,只要控制好频率,成本可以忽略。

但我必须说实话:这种方法的缺点也很明显。
- 不稳定:依赖网页结构,一旦平台改版,解析可能失效。Agent-Reach项目维护者需要及时更新解析器。
- 反爬风险:虽然项目用了Playwright模拟浏览器,但频繁访问仍然可能被限制IP。建议设置代理池或使用轮换IP。
- 数据完整性:有些平台(如Twitter)的搜索结果可能不如API全面,比如缺少某些元数据。
所以我的建议是:作为原型验证和低成本探索使用,非常香;但生产级应用,还是应该优先用官方API。 如果官方API太贵或审批太慢,可以用这个Skill作为过渡方案。
复用和组合技巧
1. 多平台聚合监控
你可以将多个平台的搜索组合成一个Skill,例如定义search_all(query),同时调用Twitter、Reddit、GitHub,然后合并结果。
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请求时,先查缓存,再到特定时间间隔后更新。
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个平台。如果你需要读取其他网站(比如知乎、豆瓣),你可以参考它的源码自己编写解析器。原理就是:
- 用Playwright打开URL
- 等待数据加载完成
- 用CSS选择器或XPath提取关键字段
- 返回JSON
你可以把它封装成同一个Skill,只需要在config.yaml中添加新平台的选择器即可。
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才是差异化价值。动手试试吧。