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 个独特挑战:
- 初步过滤:消除明显的重复。
- 成对相似度计算:使用 OpenAI 的
text-embedding-3-large
模型将每日行动转换为向量,利用 FAISS 计算相似度。 - LLM-based 匹配:对于中等置信度(相似度分数介于 0.625 到 0.7 之间)的挑战对,提示 Google 的 Gemini 2.0 Flash 模型精确判断是否为重复项。
- 聚类:使用贪婪算法近似关联聚类,将相似挑战分组,并从每个集群中选择一个代表性挑战。
效果:最终去重 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 生成了很多东西,而是它展示了一个完整闭环的内容构建流程:
- 从开放网络抓取原始素材,并通过 LLM 进行智能过滤。
- 借助嵌入模型进行语义聚类和去重,结合 LLM 进行精确匹配。
- 用 LLM 验证结构完整性并生成缺失部分。
- 构建双通道检索系统,高效匹配用户需求。
- 实际运行系统,获得高命中率反馈。
它把 LLM 当作工具链的一环,而不是万能引擎。这才是 AI 系统真正的设计范式。
📖 如果你在做与内容生成、教育计划、健康挑战、AI 工具产品相关的项目,可以借鉴这个思路: https://arxiv.org/abs/2505.02851
我也可以为你量身设计 prompt 流程或落地逻辑,欢迎交流~