AI从海量网页中生成3500条30天挑战计划,拆解内容生产和搜索关键细节

2025年6月25日

假设你想养成一个习惯,比如每天早起、读书、冥想,你会怎么做?

网上搜索一圈,十有八九会碰到零散、不成体系的「30天挑战」。

要么结构混乱,要么是抄来抄去的重复内容。

真正能拿来就用的挑战,少之又少。

最近,一个叫 30DayGen 的项目解决了这个问题,它用大语言模型,构建了一个结构化、语义去重、可检索的高质量挑战内容库。

关键是,它完全自动化完成,仅用两周时间就收集和整理出 3531 个独特、完整的挑战计划。

这不是一个小工具,而是一整套 LLM 驱动的内容生产+搜索系统,值得所有做内容平台、教育应用、健康产品的人关注。

💡 目标:帮用户把模糊目标,变成每天能做的事

这个项目的核心理念是:不是让大模型帮你制定一个完美目标,而是拆解目标为每天可以执行的步骤,建立持续反馈的机制。

30天挑战被定义为一个行动计划,用于用户在一个月内每天进行生活改变。它包含两个核心组成部分:愿望(wish)和每日行动(daily action)。愿望设定了用户希望实现的目标(例如,“减少压力”),而每日行动则建议了用户应如何执行以朝着目标迈进(例如,“每天冥想5分钟”)。

整个系统由两个关键组件构成:

30DayGen:负责从互联网上获取和生成结构化的挑战内容,并填充挑战数据库(ChallengeDB)。 30DayMe:一个面向用户的习惯养成应用,调用挑战库,实现匹配推荐和进度追踪。它通过跟踪用户进度来帮助他们保持动力和责任感。用户反馈包括“这个应用程序确实帮助我更加自觉和有意识地控制自己的行为”,“能够一目了然地看到我的完成率令人难以置信地激励”。该应用可在 https://30day.me 访问,拥有个人用户和学校用户。

实现流程详解:如何用 LLM 构建内容系统?

30DayGen 系统架构分为两部分:离线系统负责生成挑战内容语料库并填充 ChallengeDB;运行时搜索系统接收用户愿望并搜索 ChallengeDB 以推荐挑战。

① 数据收集:高噪声网页中提取有用挑战

项目起手式是抓取超过 15,000 篇网页。通过 GPT-4o 建议的 25 个搜索查询,系统收集了 14,746 个独特的网页。

为了过滤掉不相关的网页,系统首先移除了社交媒体和电商网站等。随后,它使用 Google 的 Gemini 2.0 Flash 模型进行上下文学习,为每个网页生成一个“可能性评分”,最终筛选出 953 个有潜力的文章,过滤精度达到 94%。

在内容提取阶段,系统使用 Puppeteer 抓取 HTML,并再次调用 Gemini 2.0 Flash 提取文本内容,形成挑战标题、描述、愿望和每日行动。

📌 特点:

  • 输入是非结构化网页,输出是结构化 JSON:包含标题、30 条行动项、标签、数据源。
  • 保留冗余,后续靠语义去重处理。

② LLM 支持的语义去重:干掉成千上万的重复说法

这些挑战内容很多都换汤不换药。简单的关键词比对无法处理语义接近但形式不同的内容。项目使用以下方案,将 11,792 个挑战减少到 3,531 个独特挑战:

  1. 初步过滤:消除明显的重复。
  2. 成对相似度计算:使用 OpenAI 的 text-embedding-3-large 模型将每日行动转换为向量,利用 FAISS 计算相似度。
  3. LLM-based 匹配:对于中等置信度(相似度分数介于 0.625 到 0.7 之间)的挑战对,提示 Google 的 Gemini 2.0 Flash 模型精确判断是否为重复项。
  4. 聚类:使用贪婪算法近似关联聚类,将相似挑战分组,并从每个集群中选择一个代表性挑战。

效果:最终去重 F1-Score 达到 0.890。

③ LLM 验证器:结构与主题的质检官

这是一个关键步骤,验证挑战是否结构清晰、目标明确、有用可行。

系统使用 Google 的 Gemini 2.0 Flash 模型进行验证,判断挑战是否包含完整的 30 天任务、每条行动是否明确可执行,以及挑战是否围绕具体目标。验证器还能识别并过滤掉因数据不足或意图矛盾导致的不相关建议。

④ 大模型内容生成器:补全不完整、提升表达质量

对于只有灵感而非完整结构的挑战内容,系统进一步调用 GPT-4,基于片段或主题生成一组 30 条行动任务,确保风格统一、语言具体、节奏自然。

这一阶段确保所有挑战内容「可读、可用、可执行」。

⑤ 混合检索系统:让用户输入一句话,就能匹配到计划

用户输入目标后,系统会推荐几套完整的挑战计划。

这背后使用了两种检索机制:

  • BM25:关键词匹配。
  • 向量检索:利用 OpenAI 的 text-embedding-3-large 模型对用户输入进行编码,通过余弦相似度进行语义相似度搜索。
  • 融合排序策略:利用 bge-reranker-v2-m3 模型(通过 Pinecone API)对检索到的挑战进行重新排序,提升相关性。

效果:命中率 Hit@3 达到 85%,用户通常能在前 3 个推荐中找到感兴趣的挑战。

核心成果与性能

30DayGen 系统从超过 1.5 万个网页中筛选并生成了 3,531 个独特的 30 天挑战计划。整个构建过程,包括数据收集、索引和搜索,仅用了 不到两周时间。

在搜索性能方面,系统表现出色:

  • Hit@3 达到 84.8%,意味着对于约 85% 的查询,系统能在前 3 个结果中提供相关且有用的挑战。
  • 对于通用问题,Hit@3 高达 98.3%;对于相当具体的问题,Hit@3 为 90.0%;即使是超具体问题,Hit@3 也能达到 64.4%。
  • LLM 过滤显著提升了整体搜索性能。

在内容去重方面,去重 F1-Score 达到 0.890,表明系统在识别和消除重复挑战方面的卓越能力。

总结

这个项目之所以令人兴奋,不是因为它用 LLM 生成了很多东西,而是它展示了一个完整闭环的内容构建流程:

  1. 从开放网络抓取原始素材,并通过 LLM 进行智能过滤。
  2. 借助嵌入模型进行语义聚类和去重,结合 LLM 进行精确匹配。
  3. 用 LLM 验证结构完整性并生成缺失部分。
  4. 构建双通道检索系统,高效匹配用户需求。
  5. 实际运行系统,获得高命中率反馈。

它把 LLM 当作工具链的一环,而不是万能引擎。这才是 AI 系统真正的设计范式。

📖 如果你在做与内容生成、教育计划、健康挑战、AI 工具产品相关的项目,可以借鉴这个思路: https://arxiv.org/abs/2505.02851

我也可以为你量身设计 prompt 流程或落地逻辑,欢迎交流~