在 AI 智能体生态系统中,如何让大语言模型在任意主题上快速获得「专家级」的研究能力?GitHub 近期新上榜的 last30days-skill 给出了一个工程化答案 —— 通过两阶段搜索架构聚合 Reddit、X、YouTube、Hacker News、Polymarket 等八大信号源,并基于质量评分管道与交叉平台收敛检测,输出带有真实引用的一手研究摘要。这一技能不仅支持 Claude Code、Codex 等主流 AI 助手,更提供 Watchlist 与 Briefing 机制实现持续追踪,成为个人知识管理或竞品监控的自动化基础设施。
两阶段搜索架构:广度发现与深度补充
last30days-skill 的核心工程创新在于其两阶段搜索管道的设计。第一阶段为广度发现阶段,使用 OpenAI Responses API 的 web_search 工具对 Reddit 进行定向搜索,同时通过内置的 Twitter GraphQL 客户端(或 xAI API 备选)抓取 X 平台内容。YouTube 搜索依赖 yt-dlp 提取视频元数据与自动生成字幕,Hacker News 通过 Algolia 的公开 API 获取故事与评论,Polymarket 预测市场则调用 Gamma API 拉取实时赔率数据。每条结果都会经过 Reddit 免费 JSON 接口的参与度富化,获取真实的 upvotes 与评论数。
第二阶段为智能补充搜索,其设计动机源于一个关键洞察:初始关键词搜索往往会遗漏目标账号的原创内容。以 X 平台为例,某品牌或创作者的真实帖子可能从未在其文本中提及品牌名称,导致纯关键词检索失效。技能在此阶段会从第一阶段结果中提取关键 @handle 与 subreddit 名称,然后执行定向查询 —— 对 X 执行 from:@handle 的无过滤搜索,对 Reddit 则调用免费 .json 端点在已发现社区中进行精细化检索。第二阶段搜索在 --quick 模式下被跳过,在 --deep 模式下则被扩展为 50–70 条 Reddit 主题与 40–60 条 X 推文的深度覆盖。
多信号质量评分管道
技能并未简单罗列搜索结果,而是为每条内容构建了复合评分公式。文本相关性引擎采用双向子串匹配、同义词扩展(如「hip hop」匹配「rap」,「AI video」匹配「text to video」)与 token 级别重叠评分的多维相似度计算。跨平台收敛检测使用混合相似度算法(字符 trigram Jaccard + token Jaccard)识别同一事件在多个平台的出现,当检测到收敛时在结果中标记 [also on: Reddit, HN] 等提示 —— 这类信号被视为「该话题确实重要」的最强证据。
Polymarket 市场的评分更为精细,采用五因子加权复合模型:文本相关性占 30%,24 小时交易量占 30%,流动性深度占 15%,价格变动速度占 15%,结局竞争力占 10%。更关键的是「结局感知评分」机制 —— 技能不仅匹配市场标题,还会将查询主题与各具体投注选项进行匹配。例如搜索「Arizona Basketball」时,系统会识别出该团队是「NCAA Tournament Winner」市场中的一个投注选项,而非仅依赖标题关键词。
Reddit 内容的评分公式为:0.50 × log1p(score) + 0.35 × log1p(comments) + 0.05 × (ratio×10) + 0.10 × log1p(top_comment_score),其中顶部评论自 v2.9 起被赋予 10% 的权重并在展示时标注 💬 表情与 upvotes 数量。这一调整源于 beta 测试反馈:高质量讨论的核心往往不在主帖而在评论区。
X Handle 解析与智能子社区发现
X 平台的 Handle 解析机制解决了品牌与人物账号的搜索盲区。当用户搜索「Dor Brothers」时,技能首先通过一次 WebSearch 解析其官方账号 @thedorbrothers,随后执行 from:@thedorbrothers 的无主题过滤搜索 —— 这正是捕获其 5600+ 点赞病毒推文(内容为「We made a $300M movie starring @LoganPaul with AI in less than 7 days」,但正文中从未出现「Dor Brothers」字样)的关键步骤。技能在正式使用前会验证账号真实性,排除 parody 或 fan 账号。
Reddit 子社区发现同样经历了从粗放向精细的演进。v2.8 版本前采用纯频率统计,导致「Claude Code skills」被错误映射到通用编程版块而非 r/ClaudeAI、r/ClaudeCode 等专业社区。v2.9 引入的 relevance-weighted scoring 改用公式 frequency × recency × topic-word-match 对候选版块进行排序,并利用 UTILITY_SUBS 块名单过滤 r/tipofmytongue 等噪声社区。测试数据表明,这一改进将「Kanye West」话题的版块发现从 r/AskReddit、r/OutOfTheLoop 精准切换至 r/hiphopheads、r/Kanye、r/NFCWestMemeWar。
技能化部署与持久化机制
技能支持三种主流部署路径:Claude Code 插件(推荐)、Gemini CLI 扩展与 OpenAI Codex CLI 技能。每种路径均复用同一套 Python 引擎与脚本目录,通过 agents/openai.yaml(Codex)或 .claude-plugin/plugin.json(Claude Code)提供宿主特定的发现元数据。安装后通过 /last30days [topic] 或 $last30days 命令调用,支持 --days=N(自定义回溯窗口)、--quick(8–12 条结果,加速模式)与 --deep(50–70 条 Reddit + 40–60 条 X,深度模式)等参数。
v2.1 引入的 Open 变体为持续研究场景提供了基础设施。搭配 Open Claw 等常驻 AI 机器人或 cron 定时任务,用户可将感兴趣的主题加入 Watchlist 并设定研究频率。研究成果默认持久化至 ~/.local/share/last30days/research.db(SQLite 数据库),同时自动保存 Markdown 格式的完整简报至 ~/Documents/Last30Days/ 目录,构建个人研究知识库。命令行提供 last30 watch、last30 run、last30 brief 等子命令管理观察列表与生成摘要。
配置层面支持全局与项目级双重覆盖。全局配置存放于 ~/.config/last30days/.env,项目级配置则置于 .claude/last30days.env,后者优先级更高并可实现多项目间的 API Key 隔离。v2.9.5 新增的 SessionStart 配置检查会在 Claude Code 会话启动时自动验证必需的环境变量,减少运行时错误。
工程参数与落地建议
对于计划将 last30days-skill 集成到个人工作流的开发者,以下关键参数值得关注:默认搜索窗口为 30 天,可通过 --days=7 调整为周度简报;参与度评分中的 log1p 变换有效平滑了超大与微小规模内容之间的数量级差异;Polymarket 的 5 因子评分中交易量与流动性占 45% 权重,表明市场深度是比赔率概率更关键的排序信号;X Handle 解析依赖 WebSearch 调用,建议确保 Agent 的 WebSearch 工具可用。监控层面可通过 python3 scripts/last30days.py --diagnose 检查各数据源的可用性与 API Key 配置状态。
资料来源:GitHub mvanhorn/last30days-skill 项目 README (https://github.com/mvanhorn/last30days-skill)