文章摘要
作者在周末花费约10美元,租用GPU一夜,构建了一个包含56万多个域名的个人搜索引擎。该引擎仅存储网站元数据,磁盘占用不到1GB,旨在过滤掉商业化和SEO内容,专注于个人作品集、艺术项目等小众网站。
文章总结
好的,这是根据您的要求,对原文进行的中文重述,保留了核心细节,并删减了与主题无关的冗余内容。
标题: 花10美元和一个周末,我建了一个50万域名的个人搜索引擎
核心内容:
作者在凌晨2点因对现有搜索引擎不满而突发奇想,决定为自己打造一个能过滤掉商业和SEO垃圾,专注于个人作品、艺术、小众项目等内容的搜索引擎。他仅用约10美元、一晚的GPU租赁和几个小时的调试,就成功建立了一个包含56万个网站首页的个人搜索索引,整个索引在磁盘上不到1GB。
项目架构与流程:
整个系统由四个进程组成,其中三个在本地PC运行,一个租用的GPU负责核心计算,且不直接访问数据库:
- 抓取器: 获取待处理的域名,尝试HTTPS/HTTP连接,提取标题、正文和出站链接,不执行JavaScript。
- 处理工作器: 对已抓取的页面,跳过空页面、停放页面或机器人挑战页面。否则,调用一个小型本地语言模型(Gemma 4B参数),生成网站名称、摘要、分类和标签。处理完成后,清除原始文本,并根据来源页面类型,将出站链接按优先级加入队列。
- 监管器: 独立于主队列运行。它会抽样检查来自高产域名的页面,并询问模型是否应“阻止、保留或不确定”,从而动态维护一个黑名单。
- API与Web界面: 提供带过滤的搜索、分类隐藏开关和运行仪表盘。
关键挑战与解决方案:
- 内容偏向问题: 初始抓取结果90%以上是公司网站和文档。解决方案不是直接屏蔽,而是调整队列优先级:来自“作品集”、“杂志”、“软件”等分类的页面,其出站链接优先级被大幅提高;而“公司”、“文档”等分类的链接优先级则被降低。
- 模型错误: 模型曾将分类标签误填入摘要字段,或根据空页面的域名关键词(如“furry”)凭空捏造内容。修复方法:对过短的摘要进行重试,并设定规则:优先信任可见文本,其次标题,最后才是域名猜测。对于空或停放页面,直接跳过模型处理。
- 子域名泛滥: Tumblr和Neocities等平台的子域名数量激增,几乎占据整个索引。解决方案是设置上限:允许主域名,但一旦某个根域名产生超过100个子域名,则不再将其新的子域名加入队列。这一规则瞬间删除了超过4.5万个待处理页面。
- GPU租赁问题: 首次租用GPU时,使用的封装库强制启动分布式计算框架,导致CPU争用,GPU利用率低下。改用开源的纯推理服务器后,解决了此问题。最终使用的是一台中端工作站GPU,配有专用CPU核心,稳定吞吐量达到每分钟约600个页面摘要,租赁成本约每小时35美分。
成本估算(基于最佳配置):
- 10k站点:约0.10美元,17分钟
- 100k站点:约1美元,3小时
- 1M站点:约10美元,1.2天
- 10M站点:约100美元,12天
最终成果与数据:
经过四天的运行,索引从最初的65,000个页面增长到560,000个。博客和个人网站的占比从超过50%下降到约12%,索引内容变得更加多元化,涵盖了非营利组织、社区网站、软件项目、杂志、博物馆、播客等。其中,非营利组织类别包含了近27,000个真实机构。约15%的抓取页面被标记为“空”(主要是JavaScript壳或机器人检测页面)。
可扩展性陷阱:
- 分类与标签管理: 让模型自由创建分类和标签,导致产生了671个不同分类和超过12.1万个标签,其中大部分仅使用一次。手动清理无法规模化。建议预先设定固定分类列表或预留清理时间。
- 提示与爬取策略调整: 所有优化都来自观察生产数据并不断微调权重,而非一次性设计。这种“观察-调整-再观察”的循环是项目成功的关键。
结论与建议:
作者认为,在周末花10美元搭建一个只返回你真正想找的内容的搜索引擎是完全可行的。核心建议包括:分离抓取与摘要过程以避免GPU闲置;通过加权队列而非硬性屏蔽来引导爬取方向;对子域名设上限而非封禁整个平台;跳过空页面和停放页面的模型处理;以及构建自动化的异常检测器。
作者已将代码开源,但暂不打算发布自己的数据库。
评论总结
根据评论内容,总结如下:
主要观点与论据:
项目创新性(认可度较高):
- 作者dreamforever强调项目可fork、自定义策略,打造个人搜索引擎,数据占用低(50万域名仅1GB)。
- marginalia_nu认为网站发现领域急需创新,自动标注目录并非愚蠢想法。
技术实现(认可度中等):
- iFire总结算法:读取网站→租用4090运行vllm→让LLM自由生成分类和标签→保存1KB元数据。
- eggbrain指出软件正从云端转向本地,硬盘空间和本地算力是主要限制。
实用性与替代性(存在争议):
- fg137质疑无法替代Google、DuckDuckGo等主流搜索引擎。
- orliesaurus询问如何绕过验证码、IP封禁等反爬机制。
数据规模与索引(认可度中等):
- pimlottc认为50万域名不算多,Lucene即可解决。
- elorant指出实际域名远超4000万。
其他观点:
- dewey认为Kagi Small Web过滤器可产生类似结果。
- pavel_lishin发现索引中包含可疑网站,质疑质量。
- eichin回忆AltaVista仅用4G内存运行,现代版应可在笔记本上运行。
关键引用: - "The point is for you to fork and make your own policy, and thus your own personal search engine!" (dreamforever) - "An auto-labeled website directory isn't that silly of an idea." (marginalia_nu) - "I am never going to replace it with Google, DuckDuckGo, ChatGPT or even Bing." (fg137) - "500k is not much. You can just slap that in a Lucene instance." (pimlottc)