/last30days 深度实战:当 AI 搜索「人」而不是「编辑」——跨平台信号聚合引擎的完全指南(2026)
作者按:2026 年,搜索的本质正在发生范式转移。Google 聚合的是编辑过的内容,而 /last30days 聚合的是真实人类的注意力、投票和真金白银的下注。这不是另一个搜索引擎,而是一个由 AI Agent 驱动的「人类信号聚合器」。
目录
- 为什么传统搜索在 AI 时代失效了?
- /last30days 是什么?——「搜索人」的哲学
- 架构深度解析:多平台信号聚合引擎
- 信号来源全景:从 Reddit 到 Polymarket
- 核心技术:智能路由与 Agentic 搜索
- 实战安装:30 秒完成全平台配置
- 生产级用例:销售前调研、会议准备、工具选型
- v3 架构升级:可分享 HTML 简报与智能搜索
- 深度对比:/last30days vs Perplexity vs Google vs ChatGPT
- 代码实战:从零集成到你的 AI Agent 工作流
- 性能优化:如何自定义信号权重与过滤规则
- 安全与隐私:本地运行 vs 云端 API
- Roadmap 与未来:AI 搜索的下一个前沿
- 总结:你应该什么时候用 /last30days?
1. 为什么传统搜索在 AI 时代失效了?
1.1 编辑 vs 人——信号源的代际鸿沟
当你 Google 一个人名、一家公司、一个技术工具时,你得到的是什么?
- LinkedIn 简历(可能过时 3 年)
- 官网 PR 稿(精心修饰过的叙事)
- 科技媒体转载(二手甚至三手信息)
这些信息有一个共同特点:它们都是「编辑过的」内容。有人写了它,有人审核了它,有人发布了它。在信息流动速度以「天」为单位的时代,这种延迟尚可接受。但在 2026 年,AI 领域每天都在发生范式转移——今天的热点时明天可能已经被颠覆。
真实信号在哪里?
- Reddit 一个 1500 upvote 的评论,比一篇 SEO 优化的博客文章更接近真相
- X 上一个领域专家的长线程,往往比新闻稿早 48 小时泄露关键信息
- Polymarket 上 96% 置信度的下注,背后是真金白银的集体智慧
- YouTube 一个 45 分钟深度访谈的转录,藏着 Google 搜索结果前 3 页都找不到的细节
问题是:没有哪个单一 AI 能同时访问所有这些平台。
- Google 搜索不碰 Reddit 评论区
- ChatGPT 有 Reddit 合作,但看不到 X 或 TikTok
- Gemini 能看 YouTube,但 Reddit 是盲区
- Claude 默认情况下哪个平台都无法原生访问
每个平台都是一座围墙花园,各自有独立的 API、独立的鉴权、独立的速率限制。
1.2 传统搜索的三大致命伤
① SEO 污染严重
2026 年的搜索结果,前 3 页往往被 SEO 农场、联盟营销网站、内容聚合平台占据。真实的人类讨论被挤出第一屏。
② 时效性问题
Google 的索引周期通常以「天」或「周」为单位。当一个重大技术发布发生时,你搜到的是发布会通稿,而不是社区的真实反应。
③ 无法感知「热度」
一篇 2024 年写的「最佳 AI 编程工具」排行榜,在 2026 年 6 月仍然可能排在前面——因为 SEO 做得好。但它完全无法反映当前社区的真实讨论热点。
1.3 信号类型学:什么才是「真实的人类信号」?
/last30days 的核心洞察是:不同类型的信号,权重不同,可信度不同,适用场景也不同。
| 信号类型 | 代表平台 | 核心价值 | 局限性 |
|---|---|---|---|
| Upvote 信号 | Reddit, Hacker News | 社区集体判断,抗操纵性较强 | 存在「回音室效应」 |
| Like/Engagement 信号 | X, TikTok, Instagram | 实时热点,专家渠道 | 算法推荐可能造成偏差 |
| 资金背书信号 | Polymarket, Kalshi | 真金白银,置信度最高 | 仅适用于可预测事件 |
| 代码活跃度信号 | GitHub | 客观指标,不易伪造 | 需要技术背景才能解读 |
| 长内容深度信号 | YouTube 转录, 播客 | 信息密度高,上下文完整 | 处理成本高,需要转录 |
2. /last30days 是什么?——「搜索人」的哲学
2.1 项目背景
/last30days 是由 Peter Steinberger(@steipete)开发的一个 AI Agent Skill,其设计哲学可以用一句话概括:
Google 聚合编辑,/last30days 搜索人。
这个项目在 2026 年 3 月发布后,迅速在 AI Agent 社区走红,GitHub Star 数突破 12,924(截至 6 月仍在快速增长)。它不仅是一个搜索工具,更是一个关于「如何在 AI 时代获取真实信号」的方法论实践。
2.2 核心工作流
用户输入: /last30days <topic> [options]
↓
┌───────────────────────────────┐
│ 智能路由层(v3 新特性) │
│ 自动识别搜索目标类型 │
│ - 人名 → X + Reddit + GH │
│ - 公司 → Polymarket + HN │
│ - 技术工具 → GitHub + HN │
└───────────────────────────────┘
↓
┌───────────────────────────────┐
│ 并行多平台搜索(Agent 池) │
│ Reddit │ X │ YouTube │ HN │
│ Polymarket │ GitHub │ TikTok│
│ ... (可扩展插件架构) │
└───────────────────────────────┘
↓
┌───────────────────────────────┐
│ 信号评分与排序 │
│ - upvote 数(Reddit/HN) │
│ - like/retweet(X) │
│ - 资金量(Polymarket) │
│ - Star/PR 活跃度(GitHub) │
└───────────────────────────────┘
↓
┌───────────────────────────────┐
│ AI Agent 综合法官 │
│ 聚合所有信号 → 生成简报 │
│ - 关键发现 │
│ - 争议点 │
│ - 置信度 │
└───────────────────────────────┘
↓
输出: Markdown / HTML
2.3 「零配置」设计哲学
/last30days 最优雅的设计决策之一:Reddit、Hacker News、Polymarket、GitHub 开箱即用,无需 API Key。
这意味着你可以直接运行:
/last30days OpenClaw
立刻获得关于 OpenClaw 的跨平台信号聚合结果——不需要申请任何 API Key,不需要配置 OAuth,不需要信用卡。
其他平台(X、YouTube、TikTok 等)则通过内置的设置向导,可以在 30 秒内完成配置。
3. 架构深度解析:多平台信号聚合引擎
3.1 整体架构(v3 Pipeline)
/last30days 的架构可以分为 5 层:
┌─────────────────────────────────────────────────┐
│ Layer 5: 输出层 │
│ Markdown 综合 | HTML 简报 | JSON 结构化数据 │
└─────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────┐
│ Layer 4: 综合法官层 │
│ AI Agent 聚合所有平台信号 → 生成统一简报 │
│ 支持自定义 Judge Prompt │
└─────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────┐
│ Layer 3: 信号评分层 │
│ 跨平台归一化评分 │
│ - Reddit: upvote_ratio × num_comments │
│ - X: like_count × influence_score │
│ - Polymarket: volume × (YES% - 50%)² │
└─────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────┐
│ Layer 2: Agent 执行层 │
│ 并行调用各平台 Adapter │
│ 每个平台 = 一个独立的 Agent Skill │
│ 支持超时、重试、降级 │
└─────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────┐
│ Layer 1: 智能路由层(v3 新增) │
│ 输入话题 → 自动推断应该搜索哪些平台 │
│ 例如: "Peter Steinberger" │
│ → 自动添加 @steipete + r/openclaw + ... │
└─────────────────────────────────────────────────┘
3.2 智能路由层(Intelligent Search)—— v3 杀手级特性
v3 最大的架构升级是智能路由层。在传统设计中,用户输入一个话题,系统会「盲目地」在所有平台上搜索这个话题。但 v3 做了一个关键优化:
在搜索开始之前,先搞清楚「应该去哪里搜」。
3.2.1 路由决策树
def route_query(topic: str) -> List[Platform]:
"""
智能路由:根据话题类型,自动选择最优平台组合
"""
topic_lower = topic.lower()
# 人名检测(包含 @username 或已知人物)
if is_person_name(topic) or topic.startswith('@'):
return [
Platform.X, # 最新动态
Platform.Reddit, # 社区讨论
Platform.GitHub, # 代码贡献
Platform.YouTube, # 访谈/演讲
]
# 技术工具/框架
if is_tech_tool(topic):
return [
Platform.GitHub, # Star 趋势、PR 活跃度
Platform.HackerNews, # 技术讨论
Platform.Reddit, # r/MachineLearning 等
Platform.YouTube, # 教程/评测
]
# 公司/产品
if is_company_or_product(topic):
return [
Platform.X, # 官方公告 + 社区反应
Platform.HackerNews, # HN 讨论
Platform.Polymarket, # 收购/IPO 预测
Platform.Reddit, # 用户反馈
]
# 新闻事件/政治
if is_news_event(topic):
return [
Platform.Polymarket, # 预测市场
Platform.X, # 实时反应
Platform.Reddit, # 深度讨论
Platform.YouTube, # 新闻分析
]
# 默认:全平台搜索
return Platform.all()
3.2.2 实战案例:搜索 "OpenClaw"
当你输入 /last30days OpenClaw,v3 的路由层会:
- 识别为「技术工具」
- 自动解析实体:
- GitHub 仓库:
openclaw/openclaw(351K stars) - Reddit 社区:
r/openclaw,r/ClaudeCode - 关键人物:
@steipete(Peter Steinberger) - YouTube 频道:相关技术评测频道
- GitHub 仓库:
- 生成平台专属查询:
- X:
OpenClaw OR @steipete OR "Peter Steinberger" claude code - Reddit:
r/openclaw OR r/ClaudeCode: "OpenClaw" - GitHub:
repo:openclaw/openclaw OR stars:>10000 - HN:
OpenClaw OR "AI agent" OR "personal AI assistant"
- X:
这种「先理解,再搜索」的模式,比简单的关键词搜索效率高 3-5 倍。
3.3 Agent 执行层:并行化与容错
/last30days 使用 Python asyncio 实现真正的并行搜索。每个平台 Adapter 都是一个独立的 async 函数:
import asyncio
from typing import List, Dict, Any
async def search_all_platforms(
topic: str,
platforms: List[Platform],
max_concurrent: int = 5
) -> Dict[Platform, List[Signal]]:
"""
并行搜索所有平台,带超时和容错
"""
semaphore = asyncio.Semaphore(max_concurrent)
async def search_with_semaphore(platform: Platform):
async with semaphore:
try:
# 每个平台有独立的超时设置
return await asyncio.wait_for(
platform_adapter.search(topic),
timeout=platform.timeout
)
except asyncio.TimeoutError:
logger.warning(f"{platform.name} 搜索超时,跳过")
return []
except Exception as e:
logger.error(f"{platform.name} 搜索失败: {e}")
return [] # 优雅降级:单个平台失败不影响整体
tasks = [search_with_semaphore(p) for p in platforms]
results = await asyncio.gather(*tasks)
return dict(zip(platforms, results))
关键设计决策:
- 独立超时:每个平台有不同的合理超时时间(Reddit: 5s, X: 10s, YouTube: 15s)
- 优雅降级:单个平台 API 限流或失败,不影响其他平台结果
- 信号归一化:所有平台返回统一格式的
Signal对象,便于后续评分
3.4 信号评分层:跨平台归一化
这是 /last30days 最核心的算法创新。不同平台的「热度指标」完全不同,如何把它们放在同一个坐标系下比较?
3.4.1 归一化评分公式
@dataclass
class Signal:
platform: Platform
content: str
url: str
author: str
# 平台原生指标
upvote_count: int = 0
comment_count: int = 0
view_count: int = 0
like_count: int = 0
volume_usd: float = 0.0 # Polymarket 专用
# 归一化后的综合分数 (0-100)
normalized_score: float = 0.0
# 引用/来源标记
citations: List[str] = field(default_factory=list)
def compute_normalized_score(signal: Signal) -> float:
"""
跨平台归一化评分
核心思路: 使用对数缩放 + 平台权重调整
"""
if signal.platform == Platform.Reddit:
# Reddit: upvote 是核心指标,评论数反映讨论深度
raw = signal.upvote_count * log10(max(signal.comment_count, 1))
return min(100, log10(raw) * 20)
elif signal.platform == Platform.HackerNews:
# HN: points + comments,但权重更高(技术社区质量更高)
raw = signal.upvote_count * 1.5 + signal.comment_count * 3
return min(100, log10(raw) * 18)
elif signal.platform == Platform.X:
# X: like + retweet + 作者影响力
influence = get_user_influence(signal.author)
raw = (signal.like_count + signal.retweet_count * 2) * influence
return min(100, log10(raw) * 15)
elif signal.platform == Platform.Polymarket:
# Polymarket: 资金量是硬指标
# 同时考虑置信度(YES% 离 50% 越远,信号越强)
confidence = abs(signal.yes_probability - 0.5) * 2 # 0-1
raw = signal.volume_usd * confidence
return min(100, log10(raw) * 25)
elif signal.platform == Platform.GitHub:
# GitHub: star 增速 + PR/Issue 活跃度
velocity = compute_star_velocity(signal.repo)
activity = signal.recent_prs + signal.recent_issues
raw = velocity * 1000 + activity * 10
return min(100, log10(raw) * 12)
else:
return 50 # 未知平台:中性分数
3.4.2 为什么用对数缩放?
因为各平台的指标跨度极大:
- Reddit 一个热门帖子可能有 50,000 upvotes
- X 一条爆款推文可能有 500,000 likes
- Polymarket 一个市场可能有 $2,000,000 交易量
如果直接用原始数值,Polymarket 的信号会完全压倒其他平台。对数缩放(log10(raw) * factor)可以把所有信号压缩到同一个数量级,同时保留「热门内容」的相对排序。
3.5 综合法官层:AI Agent 作为「总编辑」
当所有平台的信号都收集完毕后,/last30days 会调用一个 AI Agent(默认使用 Claude 或 GPT-4)作为「综合法官」,负责:
- 去重:不同平台可能讨论同一件事,需要合并
- 冲突解决:如果 Reddit 说 X,但 HN 说 Y,法官需要标注争议
- 上下文补充:将零散的信号拼成一个连贯的叙事
- 置信度标注:对每条关键发现标注「高/中/低」置信度
综合法官的 Prompt 工程
## Role: 跨平台信号综合法官
你是一个中立的综合法官。你的任务是基于以下来自多个平台的信号,
生成一个客观、全面、有深度的简报。
## 输入信号
{% for platform, signals in all_signals.items() %}
### {{ platform.name }}
{% for signal in signals %}
- [分数: {{ signal.normalized_score }}] {{ signal.content[:200] }}
来源: {{ signal.url }}
作者: {{ signal.author }}
{% endfor %}
{% endfor %}
## 输出要求
1. **关键发现**(按重要性排序)
- 每条发现必须引用至少 2 个独立来源
- 标注置信度(高/中/低)
2. **争议点**(如有)
- 不同平台的观点冲突
- 社区内部的分歧
3. **被忽略的信号**(如有)
- 某些平台可能有独特视角,但被其他平台淹没
4. **元分析**
- 整体信号一致性如何?
- 是否存在「回音室效应」?
- 资金信号(Polymarket)与舆论信号是否一致?
## 格式要求
- 使用 Markdown
- 每个关键发现后附引用列表
- 总字数控制在 500-1500 字
4. 信号来源全景:从 Reddit 到 Polymarket
4.1 Reddit:社区的「真实声音」
为什么 Reddit 信号价值极高?
- Upvote 机制:高质量评论会自然浮到顶部
- 长文文化:Reddit 允许(甚至鼓励)长篇深度分析
- 匿名性:用户更可能说真话(不需要维护「个人品牌」)
- 公开 JSON API:无需 API Key 即可读取(这是 /last30days 能「零配置」使用 Reddit 的技术基础)
/last30days 如何搜索 Reddit?
import requests
from typing import List
def search_reddit(query: str, subreddits: List[str] = None) -> List[Signal]:
"""
使用 Reddit 公开 JSON API 搜索
关键点: Reddit 的 ?q= 参数支持在其 JSON 端点直接搜索
"""
if subreddits is None:
# 智能路由层会在这里传入自动识别的 subreddit 列表
subreddits = detect_relevant_subreddits(query)
signals = []
for subreddit in subreddits:
url = f"https://www.reddit.com/r/{subreddit}/search.json"
params = {
"q": query,
"sort": "relevance", # 也支持 "hot", "top", "new"
"t": "month", # 时间范围: hour, day, week, month, year, all
"limit": 25,
"raw_json": 1, # 返回原始 JSON(不需要 OAuth)
}
response = requests.get(url, params=params, headers={
"User-Agent": "last30days-skill/3.0 (by /u/steipete)"
})
if response.status_code == 200:
data = response.json()
for post in data["data"]["children"]:
signals.append(parse_reddit_post(post))
return signals
def parse_reddit_post(post_data: dict) -> Signal:
"""解析 Reddit 帖子为统一 Signal 格式"""
post = post_data["data"]
return Signal(
platform=Platform.Reddit,
content=post["selftext"] or post["title"],
url=f"https://reddit.com{post['permalink']}",
author=post["author"],
upvote_count=post["ups"],
comment_count=post["num_comments"],
created_at=datetime.fromtimestamp(post["created_utc"]),
)
实战技巧:
- 使用
sort: "top"+t: "week"可以获取「本周最热门」的讨论 - 某些技术话题在
r/MachineLearning和r/LocalLLaMA的讨论质量远高于通用技术论坛
4.2 X (Twitter):实时热点的「第一现场」
为什么 X 信号不可或缺?
- 实时性:重大新闻往往先在 X 上爆出
- 专家渠道:AI 领域的核心人物(Andrej Karpathy, Sam Altman, Yann LeCun 等)都在 X 上活跃
- 长线程文化:很多技术深度分析以「长线程」形式出现在 X 上
/last30days 如何接入 X?
X 的 API 需要申请(且收费),所以 /last30days 提供了两种模式:
模式 1:使用 X API(需要配置)
import tweepy
def search_x_with_api(query: str, bearer_token: str) -> List[Signal]:
"""使用 Tweepy 调用 X API v2"""
client = tweepy.Client(bearer_token=bearer_token)
# 搜索最近 7 天的推文
tweets = client.search_recent_tweets(
query=query,
max_results=100,
tweet_fields=["public_metrics", "author_id", "created_at"],
expansions=["author_id"]
)
# 获取作者信息(用于计算 influence score)
authors = {u.id: u for u in tweets.includes["users"]}
signals = []
for tweet in tweets.data:
author = authors[tweet.author_id]
metrics = tweet.public_metrics
signals.append(Signal(
platform=Platform.X,
content=tweet.text,
url=f"https://x.com/{author.username}/status/{tweet.id}",
author=author.username,
like_count=metrics["like_count"],
retweet_count=metrics["retweet_count"],
reply_count=metrics["reply_count"],
))
return signals
模式 2:使用浏览器会话(无需 API Key)
/last30days 支持通过「导入浏览器 Cookie」的方式访问 X,绕开 API 限制:
# 首次配置:从默认浏览器导入 Cookie
/last30days --setup x
# 之后就可以直接搜索 X 了
/last30days OpenClaw
这种方式的原理是:/last30days 会读取你浏览器中已登录 X 的 Cookie,然后使用这些 Cookie 发起搜索请求。这意味着你用你的 X 账号配额来搜索。
4.3 YouTube:深度内容的「转录金矿」
为什么 YouTube 是重要的信号源?
很多人忽视了 YouTube 作为「文本信号源」的价值。事实上:
- 一个 45 分钟的 AI 技术访谈,转录后约等于 8000-10000 个英文单词
- 这些转录文本中,往往包含技术细节、路线图爆料、团队内部信息——这些在官方文档和新闻稿中找不到
/last30days 如何处理 YouTube?
核心流程:
- 搜索 YouTube 视频(使用 YouTube Data API 或免 API 的
yt-dlp) - 下载自动生成字幕(YouTube 大多数英文视频都有自动生成字幕)
- 用 LLM 提取关键句子(从 10000 词中找出最有价值的 5-10 句话)
- 纳入综合评分
import yt_dlp
import whisper # 备用:如果视频没有自动字幕,用 Whisper 转录
def process_youtube_query(query: str) -> List[Signal]:
"""
搜索 YouTube 视频并提取转录文本
"""
# 1. 搜索视频
ydl_opts = {
"quiet": True,
"no_warnings": True,
"extract_flat": True, # 只获取视频列表,不下载
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
result = ydl.extract_info(f"ytsearch20:{query}", download=False)
videos = result["entries"]
signals = []
for video in videos[:10]: # 只处理前 10 个最相关视频
# 2. 尝试获取自动字幕
transcript = get_youtube_transcript(video["id"])
if transcript:
# 3. 用 LLM 提取关键句子
key_quotes = extract_key_quotes(transcript, query)
signals.append(Signal(
platform=Platform.YouTube,
content=key_quotes, # 只保留最相关的 5-10 句话
url=f"https://youtube.com/watch?v={video['id']}",
author=video["channel"],
view_count=video["view_count"],
like_count=video.get("like_count", 0),
))
return signals
def extract_key_quotes(transcript: str, topic: str) -> str:
"""
使用 LLM 从完整转录中提取与话题相关的关键引用
这是 /last30days 的「压缩」策略:
不把 10000 词的全文扔给综合法官,
而是先提取 5-10 句最核心的引用。
"""
prompt = f"""
以下是一段 YouTube 视频的转录文本(约 {len(transcript)} 字符)。
请提取与「{topic}」直接相关的关键引用(最多 10 句)。
要求:
- 保留原话,不要改写
- 如果某句话包含技术细节、数据、预测,优先保留
- 格式: > "引用的原文" (时间戳: MM:SS)
转录文本:
{transcript[:10000]} # 截断,避免超 token 限制
"""
# 调用 LLM(默认使用技能配置的 model)
response = llm_complete(prompt)
return response
4.4 Polymarket:真金白银的「预测信号」
为什么 Polymarket 信号是「最高置信度」?
Polymarket 是一个去中心化预测市场。用户可以用真金白银下注某个事件是否会发生。
核心逻辑:如果你真的相信某件事会发生,你会用钱投票。
一个 Polymarket 市场的价格(例如「YES: 87%」)可以被解读为:
在考虑了所有公开信息后,市场参与者认为这件事发生的概率是 87%
这种信号的独特价值:
- 高置信度:错误的预测 = 直接的金钱损失
- 前瞻性:Polymarket 的价格往往领先新闻 24-48 小时
- 抗操纵性:虽然大户可以短期影响价格,但长期会趋向真实概率
/last30days 如何集成 Polymarket?
import requests
def search_polymarket(query: str) -> List[Signal]:
"""
搜索 Polymarket 上与 query 相关的市场
"""
# Polymarket 的公开 API(无需 Key)
url = "https://gamma-api.polymarket.com/markets"
params = {
"closed": "false",
"limit": 100,
}
response = requests.get(url, params=params)
markets = response.json()
# 过滤与 query 相关的市场
relevant_markets = []
for market in markets:
title = market["question"]
description = market.get("description", "")
if query.lower() in title.lower() or \
query.lower() in description.lower():
relevant_markets.append(market)
# 转换为 Signal 格式
signals = []
for market in relevant_markets:
# 获取当前市场价格
outcomes = market["outcomes"]
yes_outcome = next(o for o in outcomes if o["outcome"] == "YES")
yes_price = yes_outcome["price"] # 0-1
# 计算总交易量
volume = market.get("volume", 0)
signals.append(Signal(
platform=Platform.Polymarket,
content=f"市场: {market['question']}\n"
f"YES 概率: {yes_price*100:.1f}%\n"
f"总交易量: ${volume:,.0f}",
url=f"https://polymarket.com/market/{market['slug']}",
yes_probability=yes_price,
volume_usd=volume,
))
return signals
实战案例:
/last30days Kanye West
Polymarket 信号:
- "Will Kanye tweet again?" → YES: 86%, 交易量 $66K
- "Will Donda 2 be released in 2026?" → YES: 73%, 交易量 $42K
这些信号比任何「娱乐新闻」都更接近真实预测。
4.5 其他平台速览
| 平台 | 信号类型 | /last30days 集成方式 |
|---|---|---|
| Hacker News | 技术讨论、开发者共识 | 公开 API(https://hacker-news.firebaseio.com/v0/),零配置 |
| GitHub | 代码活跃度、Star 趋势 | 公开 API(未认证: 60次/小时,认证后: 5000次/小时) |
| TikTok | 创作者观点、文化信号 | 需要配置(Cookie 导入或 API Key) |
| 影响者观点 | 需要配置 | |
| Threads | 文本讨论(X 替代品) | 需要配置 |
| Digg | AI 精选热点(~1000 高信号账号) | 安装 digg-pp-cli 即可启用,无需 Key |
| Perplexity | Grounded 搜索结果 | 可作为「额外信号源」叠加,非替代 |
5. 核心技术:智能路由与 Agentic 搜索
5.1 v3 的 Intelligent Search 详解
v3 的杀手级特性是智能路由。在用户按下回车后、搜索开始之前,/last30days 会先做一次「查询理解」:
class IntelligentRouter:
"""
智能路由器:理解查询意图,选择最优平台组合
"""
def __init__(self):
# 加载预训练的 NER 模型(用于识别人名、公司名、技术术语)
self.ner_model = load_ner_model()
# 加载平台-话题关联知识库
self.platform_associations = load_platform_associations()
def route(self, query: str) -> RoutingDecision:
"""
核心路由逻辑
返回:
RoutingDecision: 包含以下字段
- platforms: 应该搜索的平台列表
- platform_queries: 每个平台的定制化查询字符串
- confidence: 路由决策的置信度
- reasoning: 为什么选择这些平台(用于调试)
"""
# 第 1 步: NER —— 识别查询中的实体
entities = self.ner_model.extract(query)
# 第 2 步: 实体类型判断
person_names = [e for e in entities if e.type == "PERSON"]
org_names = [e for e in entities if e.type == "ORG"]
tech_terms = [e for e in entities if e.type == "TECH"]
# 第 3 步: 根据实体类型选择平台
if person_names:
return self._route_person_query(person_names[0].text, query)
elif org_names:
return self._route_org_query(org_names[0].text, query)
elif tech_terms:
return self._route_tech_query(tech_terms[0].text, query)
else:
# 无法识别实体 → 全文搜索模式
return self._route_generic_query(query)
def _route_person_query(self, person_name: str, original_query: str) -> RoutingDecision:
"""
人名查询的路由逻辑
例如: "/last30days Peter Steinberger"
"""
# 尝试在已知人物库中查找
known_person = self.platform_associations.get_person(person_name)
if known_person:
# 已知人物:使用预设的平台-账号关联
platforms = []
queries = {}
if known_person.has_x_account:
platforms.append(Platform.X)
queries[Platform.X] = f"from:{known_person.x_username} OR @{known_person.x_username}"
if known_person.has_github:
platforms.append(Platform.GitHub)
queries[Platform.GitHub] = f"user:{known_person.github_username}"
if known_person.has_reddit_presence:
platforms.append(Platform.Reddit)
queries[Platform.Reddit] = f"author:{known_person.reddit_username}"
# 始终添加: HN, YouTube(可能包含访谈)
platforms.extend([Platform.HackerNews, Platform.YouTube])
queries[Platform.HackerNews] = person_name
queries[Platform.YouTube] = person_name
else:
# 未知人物:使用通用搜索
platforms = Platform.default_for_person()
queries = {p: person_name for p in platforms}
return RoutingDecision(
platforms=platforms,
platform_queries=queries,
confidence=0.9 if known_person else 0.5,
reasoning=f"识别出人名: {person_name}, "
f"已知人物: {known_person is not None}, "
f"选择平台: {[p.name for p in platforms]}"
)
5.2 Agentic Tree Search:开放式探索
/last30days 的另一个核心技术是Agentic Tree Search(受到 AI-Scientist-v2 的启发)。
当搜索一个开放性话题时(例如「AI 编程工具的未来」),简单的「关键词搜索」远远不够。你需要:
- 先搜索 → 获得初步结果
- 分析结果 → 发现新的子话题
- 再搜索 → 深入子话题
- 迭代 → 直到覆盖所有重要角度
这就是 Agentic Tree Search:
async def agentic_tree_search(
root_query: str,
max_depth: int = 3,
branching_factor: int = 3
) -> SearchTree:
"""
Agentic Tree Search: 迭代式深度探索
类比: 像一个有好奇心的研究员,
看到一篇有趣论文 → 追踪其参考文献 → 再追踪那些参考文献的参考文献
"""
root_node = SearchTreeNode(query=root_query)
queue = [(root_node, 0)] # (node, depth)
while queue:
current_node, depth = queue.pop(0)
if depth >= max_depth:
continue
# 1. 在当前节点执行搜索
signals = await search_all_platforms(current_node.query, Platform.all())
# 2. 让 AI Agent 分析搜索结果,提出「下一步探索方向」
follow_up_questions = await propose_follow_ups(
query=current_node.query,
signals=signals,
num_questions=branching_factor
)
# 3. 为每个「下一步方向」创建一个子节点
for question in follow_up_questions:
child_node = SearchTreeNode(
query=question,
parent=current_node,
depth=depth + 1
)
current_node.children.append(child_node)
queue.append((child_node, depth + 1))
return root_node.to_tree()
async def propose_follow_ups(
query: str,
signals: Dict[Platform, List[Signal]],
num_questions: int = 3
) -> List[str]:
"""
让 AI Agent 分析当前搜索结果,提出值得深入探索的子问题
"""
prompt = f"""
关于「{query}」,我们已经收集了来自以下平台的信号:
{{ 信号摘要 }}
基于这些信号,请提出 {num_questions} 个最值得进一步探索的子问题。
要求:
- 子问题应该是具体的、可搜索的
- 优先选择那些「当前信号不足」但有高信息量的方向
- 避免重复已有的搜索
输出格式:
1. <子问题 1>
2. <子问题 2>
...
"""
response = await llm_complete(prompt)
return parse_questions(response)
实战案例:
初始查询: /last30days AI 编程工具
Tree Search 展开:
├── AI 编程工具
│ ├── Cursor vs Windsurf vs Claude Code 深度对比
│ │ ├── Cursor 的上下文理解原理
│ │ ├── Windsurf Cascade 架构解析
│ │ └── Claude Code 的 Agent 模式实现
│ ├── AI 编程工具的 Token 成本分析
│ │ ├── 各工具的 Token 消耗对比
│ │ └── 如何优化 Token 使用
│ └── 2026 年 AI 编程工具格局预测
│ ├── OpenClaw 生态的影响
│ └── 本地模型 vs 云端 API 的博弈
这种「迭代式探索」让 /last30days 能够生成有深度、有层次的简报,而不是简单的「信息堆砌」。
6. 实战安装:30 秒完成全平台配置
6.1 Claude Code 安装(推荐)
# 方式 1: 通过 Marketplace 安装(自动更新)
/plugin marketplace add mvanhorn/last30days-skill
/plugin install last30days
# 方式 2: 通过 npx 安装(适用于所有 AI Agent)
npx skills add mvanhorn/last30days-skill -g
6.2 首次运行与配置向导
安装完成后,直接运行一次:
/last30days test
零配置平台(立即可用):
- ✅ Reddit(公开 JSON API)
- ✅ Hacker News(公开 Firebase API)
- ✅ Polymarket(公开 Gamma API)
- ✅ GitHub(未认证 60次/小时)
需要配置的平台(运行向导后可用):
# 启动交互式配置向导
/last30days --setup
# 向导会引导你配置:
# 1. X (Twitter) → 选择: API Key 或 浏览器 Cookie 导入
# 2. YouTube → 输入: YouTube Data API Key(免费配额 10,000 次/天)
# 3. TikTok → 浏览器 Cookie 导入
# 4. Instagram → 浏览器 Cookie 导入
# 5. Digg → 安装 digg-pp-cli(用于 AI 精选热点)
配置向导的「30 秒承诺」:
- Reddit/HN/Polymarket/GitHub 开箱即用(0 秒)
- X: 如果选择「浏览器 Cookie 导入」→ 5 秒
- YouTube: 如果已有 API Key → 10 秒;否则需要去 Google Cloud Console 创建(约 3 分钟)
- TikTok/Instagram: Cookie 导入 → 各 5 秒
6.3 配置文件结构
/last30days 的配置存储在:
~/.last30days/
├── config.json # 主配置文件
├── credentials/ # API Keys 和 Tokens(加密存储)
│ ├── x_token.enc
│ ├── youtube_api_key.enc
│ └── github_token.enc
├── cache/ # 搜索结果缓存(避免重复调用 API)
└── output/ # 生成的简报存放目录
└── {topic}-brief.html
config.json 示例:
{
"version": "3.0",
"platforms": {
"reddit": {
"enabled": true,
"subreddits_whitelist": ["python", "MachineLearning", "LocalLLaMA"],
"min_upvotes": 10
},
"x": {
"enabled": true,
"auth_method": "cookie_import",
"max_results": 100
},
"youtube": {
"enabled": true,
"api_key_env_var": "YOUTUBE_API_KEY",
"transcript_languages": ["en", "zh"]
},
"polymarket": {
"enabled": true,
"min_volume_usd": 1000
}
},
"output": {
"default_format": "markdown",
"emit_html": true,
"html_theme": "dark"
},
"cache": {
"enabled": true,
"ttl_seconds": 3600
}
}
7. 生产级用例:销售前调研、会议准备、工具选型
7.1 用例 1:销售前调研(B2B)
场景:你明天要和一家 AI 创业公司的 CTO 开会。你需要快速了解:
- 这家公司最近 30 天的真实动态(新产品发布?融资?人员变动?)
- CTO 的个人观点和技术偏好(从他的 X 线程、Reddit 评论、访谈转录中提取)
- 社区对这家公司的真实评价(Reddit 有没有吐槽?HN 有没有技术讨论?)
/last30days 工作流:
# 第 1 步: 搜索公司
/last30days Listen Labs --emit=html
# 输出: ~/Documents/Last30Days/listen-labs-brief.html
# 包含:
# - 最近 30 天的 GitHub 活跃度(PR 合并率、发布频率)
# - X 上的公告和社区反应
# - 如果有融资新闻,Polymarket 可能有相关市场
# 第 2 步: 搜索 CTO 个人
/last30days "@cto_username" --emit=html
# 输出: 包含 CTO 最近 30 天的公开活动
# - X 线程: 他最近在关注什么技术?
# - 访谈/播客: 他最近说了什么有争议的话?
# - GitHub: 他最近在写什么代码?
真实案例(来自 /last30days 的 README):
搜索 "Peter Steinberger"(OpenClaw 作者)的输出摘要:
- 加入 OpenAI Codex 团队
- 正在与 Anthropic 的「第三方 Agent 封禁」政策斗争
- GitHub: 最近 30 天合并 23 个 PR,合并率 85%
- 正在开发 "LobsterOS"(跨设备 Agent 控制系统)
- r/ClaudeCode: 「自从 OpenClaw 发布,大家都知道如果用非 API 方式运行,迟早会被封号」(227 upvotes)
这些信息,你无法从 LinkedIn 或官网获得。
7.2 用例 2:会议准备(了解一个人)
场景:你明天要和一位业界大佬一对一面谈。你想在 5 分钟内建立起「我了解你」的信任感。
传统方式:
- Google 搜索 → 得到 2023 年的旧 LinkedIn
- 看公司官网 → 得到 PR 稿
/last30days 方式:
/last30days "Dr. Jane Smith" --depth=comprehensive
输出简报结构:
最近 30 天活动摘要(按时间倒序)
- 6 月 24 日: 在 r/MachineLearning 回复了一个关于 MoE 架构的帖子(142 upvotes)
- 6 月 22 日: 在 YouTube 接受 "AI Insight" 频道访谈,提到「...」
- 6 月 20 日: 在 X 上批评了某篇论文的方法论(237 likes, 42 retweets)
技术观点提炼
- 对 MoE 架构: 持保留意见,认为「细粒度 MoE 的通信开销被低估了」
- 对 Post-Training: 认为「当前 RLHF 范式会在 2027 年被替代」
争议点(如果有的话)
- r/ML 上有人质疑她 2025 年论文的实验设计 → 她亲自下场回复了(长文,获 89 upvotes)
面谈时能够自然提到的「破冰话题」:
「Jane,我看了你前几天在 r/MachineLearning 关于 MoE 的回复,你提到的通信开销问题,我们在生产中也遇到了。你觉得细粒度 MoE 在 2026 年还有救吗?」
7.3 用例 3:工具选型(技术决策者)
场景:你的团队需要选一个 AI 编程助手。Cursor?Windsurf?Claude Code?Trae?
传统方式:
- 看官方文档( biased )
- 看「AI 工具横评」文章(往往过时 6-12 个月)
/last30days 方式:
/last30days "Cursor IDE" vs "Windsurf" vs "Claude Code" --comparison
输出简报包含:
- 各工具最近 30 天的 GitHub Star 增速(实时数据,非 stale 博客)
- 社区讨论热度对比(Reddit 和 HN 的提及次数、情绪分析)
- 关键争议点
- Cursor: 被吐槽「上下文窗口不够大」
- Windsurf: 被批评「Cascade 有时会产生幻觉」
- Claude Code: 被封号的风险(如果使用非官方 API)
- 真实用户案例(从 Reddit 和 HN 提取)
- Polymarket 信号(如果有的话):「Cursor 会在 2026 年被 Windsurf 超越吗?」→ 市场价格隐含的预测
决策辅助:简报最后会给出一个「综合评分卡」,但考虑到你的具体场景(例如:「大型 TypeScript 单体仓库」vs 「Python 数据科学脚本」),评分权重会动态调整。
8. v3 架构升级:可分享 HTML 简报与智能搜索
8.1 可分享 HTML 简报
v3 引入了一个非常实用的功能:一键生成自包含 HTML 简报。
为什么需要 HTML 简报?
在团队协作中,你往往需要将搜索结果分享给同事。但:
- Markdown 需要渲染(不是所有人都有 Markdown 预览工具)
- 纯文本 丢失了格式和链接
- 截图 不可搜索、不可复制
HTML 简报解决了这些问题:
# 生成 HTML 简报
/last30days OpenClaw --emit=html
# 输出: ~/Documents/Last30Days/openclaw-brief.html
#
# 特性:
# - 自包含(所有 CSS 内联,无需网络)
# - 暗色主题(默认),也支持亮色
# - 打印友好(@media print 优化)
# - 离线可用(无论何时打开,内容都在)
HTML 简报的结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OpenClaw - Last30Days Brief</title>
<style>
/* 内联 CSS —— 自包含,无需外部依赖 */
:root {
--bg-primary: #0d1117;
--bg-secondary: #161b22;
--text-primary: #e6edf3;
--text-secondary: #8b949e;
--accent: #58a6ff;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, JetBrains Mono, monospace;
background: var(--bg-primary);
color: var(--text-primary);
max-width: 900px;
margin: 0 auto;
padding: 2rem;
line-height: 1.6;
}
.badge {
display: inline-block;
background: var(--accent);
color: white;
padding: 0.25rem 0.75rem;
border-radius: 1rem;
font-size: 0.875rem;
margin-bottom: 1rem;
}
.citation {
background: var(--bg-secondary);
border-left: 3px solid var(--accent);
padding: 1rem;
margin: 1rem 0;
font-size: 0.9rem;
}
.signal-source {
color: var(--text-secondary);
font-size: 0.8rem;
margin-top: 0.5rem;
}
@media print {
body { background: white; color: black; }
.badge { background: black; color: white; }
}
</style>
</head>
<body>
<div class="badge">Last30Days Brief</div>
<h1>OpenClaw: 跨平台信号聚合简报</h1>
<p class="meta">生成时间: 2026-06-26 07:40 CST | 信号来源: 6 个平台 | 综合法官: Claude 3.5 Sonnet</p>
<h2>关键发现</h2>
<div class="citation">
<p><strong>发现 1</strong>: OpenClaw 的 GitHub Star 增速在过去 30 天达到 351K(+12% MoM),主要增长来自第 3 周(Anthropic 封号事件引发讨论)。</p>
<p>置信度: <strong>高</strong></p>
<div class="signal-source">
来源:
<a href="https://github.com/openclaw/openclaw">GitHub API (2026-06-26)</a> |
<a href="https://news.ycombinator.com/item?id=123456">Hacker News #123456 (825 points, 899 comments)</a>
</div>
</div>
<div class="citation">
<p><strong>发现 2</strong>: r/ClaudeCode 社区对 Anthropic 封禁第三方 Agent 的政策反应激烈。高赞评论(569 upvotes)称「OpenClaw 用户被当成了 collateral damage」。</p>
<p>置信度: <strong>高</strong></p>
<div class="signal-source">
来源:
<a href="https://reddit.com/r/ClaudeCode/comments/...">r/ClaudeCode (569 upvotes, 142 comments)</a>
</div>
</div>
<!-- 更多发现... -->
<h2>引擎日志</h2>
<p>✅ 所有 Agent 已返回!搜索树: 3 层, 9 个节点, 27 个信号</p>
<hr>
<p class="colophon">由 /last30days v3 生成 | 话题: OpenClaw | <a href="https://github.com/mvanhorn/last30days-skill">项目主页</a></p>
</body>
</html>
8.2 智能搜索的「上下文学习」
v3 的另一个重要升级是:/last30days 会「记住」你的搜索偏好。
# 第 1 次搜索
/last30days "Rust 异步运行时" --save-prefs
# 系统会询问:
# 「你更关心性能对比还是生态成熟度?」
# 你的回答会被保存到 ~/.last30days/preferences.json
# 第 2 次搜索类似话题
/last30days "Go vs Rust 并发模型"
# 系统会自动应用之前的偏好:
# - 更强调性能数据
# - 优先展示基准测试相关信号
# - 降低「生态成熟度」类信号的权重
这种「上下文学习」让 /last30days 不仅是一个搜索工具,更是一个会成长的搜索助手。
9. 深度对比:/last30days vs Perplexity vs Google vs ChatGPT
| 维度 | /last30days | Perplexity | ChatGPT (with browsing) | |
|---|---|---|---|---|
| 信号来源 | 人(Reddit upvotes, X likes, Polymarket 资金) | 编辑(网页、论文、新闻) | 编辑(SEO 优化的网页) | 编辑(Bing 搜索结果) |
| 实时性 | 极高(X 实时,Reddit 热榜) | 高(截至最近 24 小时) | 中(索引延迟数小时到数天) | 中(取决于浏览插件的实现) |
| 跨平台聚合 | ✅ 原生支持(12+ 平台) | ❌ 仅网页 | ❌ 仅网页(不包括 Reddit 评论、X 帖子等) | ❌ 仅网页 |
| 资金信号 | ✅ Polymarket 集成 | ❌ | ❌ | ❌ |
| 社区情绪分析 | ✅ 内置(upvote/downvote 分析) | ❌ | ❌ | ❌ |
| 引用透明度 | ✅ 每个结论至少 2 个独立来源 | ✅ 有引用,但有时不准确 | ✅ 有链接,但排名可被操纵 | ✅ 有引用 |
| 适用场景 | 了解「真实人类在想什么」 | 快速获取事实性答案 | 广泛信息检索 | 对话式探索 |
| 学习曲线 | 低(零配置可用) | 极低(像用 Google) | 极低 | 低 |
| 成本 | 免费(如果自己有 API Key);托管版本可能需要付费 | 免费版有限制;Pro $20/月 | 免费 | Free tier 有额度限制 |
9.1 什么时候用 /last30days?
✅ 适合用 /last30days 的场景:
你需要做决策,而决策需要「人类集体智慧」
- 例如: 选技术栈、选工具、判断是否加入某家公司
你想了解「真实口碑」,而不是 PR 稿
- 例如: 某框架是否真的好用?Reddit 上的真实用户怎么说?
你在追热点,需要最实时的信号
- 例如: 某个 AI 模型刚发布,社区反应如何?
你在做尽职调查(投资、并购、招聘)
- 例如: 这家公司的技术实力是否匹配它的 PR?
❌ 不适合用 /last30days 的场景:
你需要权威、可引用的学术论文
- → 用 Google Scholar 或 Perplexity
你在查事实(某语言的发明时间是?)
- → 用 Google 或 ChatGPT
话题过于小众,跨平台信号量不足
- → 用 Google Scholar 或专业论坛
10. 代码实战:从零集成到你的 AI Agent 工作流
10.1 作为 Claude Code Skill 使用
/last30days 最根本的设计是作为一个 Agent Skill。这意味着它可以无缝集成到任何支持 MCP (Model Context Protocol) 或 Agent Skills 规范的 AI Agent。
10.1.1 在 Claude Code 中调用
# 方式 1: slash 命令
/last30days "TypeScript 7.0 Go 重写"
# 方式 2: 自然语言触发(需要在 CLAUDE.md 中声明)
# 在 CLAUDE.md 中添加:
#
# ## 研究工具
# 当用户需要了解某个话题的最新动态时,使用 /last30days skill。
# 例如: "帮我研究一下 Rust 在 2026 年的生态" → 调用 /last30days
# 方式 3: 作为工具被 Agent 自动调用
# 如果配置了 tool_search,Claude Code 会在需要时自动调用 /last30days
10.1.2 Skill 的文件结构
skills/last30days/
├── SKILL.md # Skill 定义(Agent 读取此文件了解如何使用这个 Skill)
├── CONFIGURATION.md # 配置指南
├── CONCEPTS.md # 核心概念解释
├── scripts/
│ ├── search.py # 核心搜索逻辑
│ ├── judge.py # 综合法官
│ └── emit_html.py # HTML 简报生成器
└── tests/
└── test_search.py
SKILL.md 示例(这是 Agent 实际读取的「使用说明书」):
# /last30days Skill
## 触发条件
当用户提出以下类型的请求时,调用此 Skill:
- "帮我研究一下 <topic>"
- "最近 <topic> 有什么动态?"
- "我想了解 <person> 最近在做什么"
- "对比一下 <A> 和 <B>"
- "社区对 <topic> 的真实评价是什么?"
## 命令格式
/last30days [options]
### Options
- `--emit=html|markdown|json` (default: markdown): 输出格式
- `--depth=quick|standard|comprehensive` (default: standard): 搜索深度
- `--platforms=reddit,x,github` (default: all): 限定平台
- `--save-prefs`: 保存搜索偏好(用于上下文学习)
- `--setup`: 启动配置向导
## 输出规范
1. 综合简报必须包含:
- 至少 3 个「关键发现」
- 每个发现必须有至少 2 个独立来源引用
- 标注置信度(高/中/低)
2. 如果有争议点,必须单独列出
3. 如果某个平台搜索失败,在简报末尾标注「部分信号缺失」
10.2 作为 Python 库使用
/last30days 也可以作为独立 Python 库使用(不依赖 AI Agent):
from last30days import Last30DaysClient
# 初始化客户端
client = Last30DaysClient(
config_path="~/.last30days/config.json"
)
# 同步搜索
result = client.search("OpenClaw", platforms=["reddit", "x", "github"])
# 查看综合简报
print(result.synthesis)
# 查看原始信号
for platform, signals in result.raw_signals.items():
print(f"\n=== {platform.name} ===")
for signal in signals[:5]: # 每个平台展示前 5 个信号
print(f"- [{signal.normalized_score:.1f}] {signal.content[:100]}...")
# 导出为 HTML
result.export_html("openclaw-brief.html", theme="dark")
10.3 集成到 GitHub Actions(自动化简报)
你可以设置一个 GitHub Actions 工作流,每周自动运行 /last30days 并推送简报到你的知识库:
# .github/workflows/weekly-brief.yml
name: Weekly Tech Trends Brief
on:
schedule:
- cron: '0 9 * * 1' # 每周一 9:00 UTC
workflow_dispatch:
jobs:
generate-brief:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Install last30days
run: |
pip install last30days-skill
- name: Run last30days
env:
X_BEARER_TOKEN: ${{ secrets.X_BEARER_TOKEN }}
YOUTUBE_API_KEY: ${{ secrets.YOUTUBE_API_KEY }}
run: |
last30days "AI Agent frameworks 2026" --emit=html --output=brief.html
- name: Commit and push brief
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git add brief.html
git commit -m "Weekly AI Agent trends brief"
git push
11. 性能优化:如何自定义信号权重与过滤规则
11.1 信号权重自定义
/last30days 允许你通过配置文件或命令行参数调整各平台的权重:
# 方式 1: 命令行临时调整
/last30days "AI 编程工具" --weight:reddit=2.0 --weight:x=0.5
# 解释: Reddit 信号权重 ×2,X 信号权重 ÷2
# 适用场景: 你觉得 X 上噪音太多,Reddit 质量更高
# 方式 2: 修改配置文件(持久化)
# 编辑 ~/.last30days/config.json:
{
"platform_weights": {
"reddit": 1.5, # 默认 1.0
"hackernews": 2.0, # HN 技术讨论质量高,提权
"x": 0.8, # X 噪音较多,降权
"polymarket": 3.0, # 资金信号置信度高,大幅提高权重
"github": 1.2,
"youtube": 1.0
}
}
11.2 过滤规则
{
"filters": {
"reddit": {
"min_upvotes": 50, // 只保留 upvotes > 50 的帖子
"exclude_subreddits": ["memes", "funny"],
"min_comment_score": 10 // 评论区的单条评论也需要有足够 upvotes
},
"x": {
"min_like_count": 100,
"verified_authors_only": false, // 是否只看认证账号
"exclude_retweets": true
},
"polymarket": {
"min_volume_usd": 5000, // 只保留交易量 > $5000 的市场
"min_confidence": 0.7 // 只保留 YES/NO 概率 > 70% 或 < 30% 的市场
}
}
}
11.3 缓存策略
/last30days 默认启用缓存(TTL = 1 小时),避免对同一个话题重复调用 API。
# 强制刷新(忽略缓存)
/last30days "OpenClaw" --no-cache
# 清除缓存
/last30days --clear-cache
# 调整缓存 TTL
# 在 config.json 中:
{
"cache": {
"enabled": true,
"ttl_seconds": 7200, // 改为 2 小时
"max_size_mb": 500 // 缓存最大占用 500MB
}
}
12. 安全与隐私:本地运行 vs 云端 API
12.1 数据存储方式
/last30days 支持两种模式:
模式 A:纯本地模式(推荐)
- 所有 API 调用都从你的本地机器发出
- 搜索结果缓存存储在
~/.last30days/cache/ - 综合法官步骤:如果你配置了自己的 LLM API(例如本地 OAI模型),则完全离线
模式 B:使用托管综合法官
- 如果你没有配置本地 LLM,/last30days 会调用默认的云端 LLM(需要网络连接)
- 注意:你的搜索查询和信号会被发送到云端 LLM
12.2 隐私建议
- 敏感话题:如果你在搜索敏感话题(例如竞争对手分析),建议使用本地 LLM
- API Key 安全:所有 API Key 都存储在
~/.last30days/credentials/,并使用简单加密(不是军工级,但足够防止意外泄露) - X Cookie 导入:如果你使用「浏览器 Cookie 导入」方式接入 X,/last30days 会读取你的 X session Cookie。这意味着 /last30days 可以以你的身份发帖。建议:
- 为 /last30days 创建一个专用的 X 账号(只读权限)
- 或者使用 X API Key(更安全,权限可控)
13. Roadmap 与未来:AI 搜索的下一个前沿
13.1 v4 预计特性(根据 GitHub Issues 和 Discussions)
多语言支持
- 目前 /last30days 主要处理英文信号
- v4 计划加入对非英文平台的支持(小红书、微博、2ch 等)
信号质量评估模型
- 目前正在用「upvotes/likes」作为代理指标
- v4 计划训练一个专门的「信号质量模型」,直接预测「这条信号是否包含高信息量」
持久化知识库
- 目前每次搜索都是独立的
- v4 计划加入「知识库模式」:将历次搜索结果持久化到向量数据库,支持跨时间的趋势分析
协作式信号
- 允许团队成员「标注」某些信号为「特别重要」或「已验证」
- 这些标注会提升该信号在未来搜索中的权重
13.2 更广阔的愿景:AI 搜索协议
/last30days 的作者是 Peter Steinberger,他同时也是 OpenClaw 的核心贡献者。在多个公开场合,他提到一个更广阔的愿景:
「未来的搜索不应该是一个中心化平台(Google),而应该是一个协议——任何人都可以实现一个搜索 Provider,任何 AI Agent 都可以调用这些 Provider,然后用户自己的 Agent 负责综合所有信号。
/last30days 是这个概念的一个原型实现。」
这个愿景如果实现,将彻底改变搜索市场的格局。
14. 总结:你应该什么时候用 /last30days?
14.1 核心要点回顾
- /last30days 不是传统搜索引擎——它搜索的是「人的注意力、投票和金钱」,而不是「编辑过的内容」
- 零配置可用——Reddit、HN、Polymarket、GitHub 开箱即用
- 智能路由——v3 的杀手级特性,自动识别应该搜索哪些平台
- 综合法官——用 AI Agent 聚合所有信号,生成有深度、有引用的简报
- HTML 简报——一键生成可分享的自包含 HTML 文件
14.2 决策树:我应该用 /last30days 吗?
你的需求是...
│
├── 快速获取事实性答案(某语言的发明时间?)
│ └── ❌ 用 Google 或 ChatGPT
│
├── 了解某个话题的最新动态(AI Agent 框架最近有什么新进展?)
│ └── ✅ 用 /last30days
│
├── 做技术选型(Cursor vs Windsurf?)
│ └── ✅ 用 /last30days(重点看社区真实评价)
│
├── 做尽职调查(这家公司值不值得加入?)
│ └── ✅ 用 /last30days(重点看 Polymarket + GitHub 活跃度)
│
└── 追热点(某 AI 模型刚发布,社区反应如何?)
└── ✅ 用 /last30days(X + Reddit 实时信号)
14.3 最后的思考
2026 年,我们正站搜索范式转移的拐点上。
Google 用了 25 年建立的「编辑式搜索」帝国,正在被 AI Agent 驱动的「人性化搜索」侵蚀。这不是说 Google 会消失——而是说,「搜索」这个概念本身正在分裂为两个平行世界:
- 世界 A:你需要一个事实性答案(「法国的首都是哪里?」)→ Google/Perplexity/ChatGPT
- 世界 B:你需要理解「人类在想什么」(「OpenClaw 是否值得投入时间学习?」)→ /last30days
/last30days 的价值,就在于它占据了「世界 B」这个生态位——而且目前几乎没有竞争对手。
如果你正在做技术决策、投资判断、或者简单地想「理解这个世界正在发生什么」,/last30days 应该是你工具箱里的标配。
附录:快速参考卡
# 安装
npx skills add mvanhorn/last30days-skill -g
# 基础搜索
/last30days <topic>
# 生成 HTML 简报
/last30days <topic> --emit=html
# 对比搜索
/last30days "A" vs "B" --comparison
# 深度搜索(3 层 Tree Search)
/last30days <topic> --depth=comprehensive
# 限定平台
/last30days <topic> --platforms=reddit,github,polymarket
# 配置向导
/last30days --setup
项目地址:https://github.com/mvanhorn/last30days-skill
License:MIT
当前版本:v3.0(截至 2026 年 6 月)
Star 数:12,924+
维护者:Peter Steinberger (@steipete)
适用 AI Agent:Claude Code, Codex, Cursor, Copilot, Gemini CLI, OpenClaw(50+ Agent Skills hosts)
本文撰写于 2026 年 6 月 26 日,基于 /last30days v3 的公开文档和源码分析。项目在快速迭代中,具体特性以最新版本为准。