Hacker News 中文摘要

RSS订阅

《Hachi:图像搜索引擎》 -- Hachi: An Image Search Engine

文章摘要

作者开发了一个名为Hachi的自托管搜索引擎,旨在帮助用户跨设备搜索个人数据(目前仅支持图片,未来计划支持视频、文本和音频)。该系统利用机器学习模型提取语义信息,通过单一界面查询分布式存储的个人数据,包括本地硬盘和云端资源。

文章总结

Hachi:一个(图像)搜索引擎的开发历程与思考

项目概述

Hachi是一个完全自托管的搜索引擎项目,旨在帮助用户以端到端的方式跨设备搜索个人数据。当前版本专注于图像搜索,未来计划扩展至视频、文本和音频等模态。项目基于分布式数据存储和机器学习模型提取语义信息的设计理念,试图通过单一接口整合分散在本地硬盘、远程服务器或云端的数据资源。

核心动机

  1. 搜索体验的局限性
    传统搜索引擎无法适应人类记忆的碎片化特征,用户往往被迫接受单向信息流且缺乏反馈机制。Hachi尝试通过以下方式改进:

    • 允许用户通过多属性递归细化查询
    • 即使查询不完整也提供最优建议
    • 直面拼写错误等非完美信息的处理挑战
  2. 隐私与自主权
    针对商业搜索引擎的隐私侵犯行为(如谷歌的搜索细化限制),项目强调自托管和去中心化设计,未来目标包括通过智能手机集群处理分布式查询。

技术架构

  1. 元数据索引引擎

    • 使用Nim语言编写的轻量级列式数据库
    • 支持按需生成辅助索引加速查询
    • 当前数据类型包括字符串、整型、浮点等基础类型
  2. 人脸识别模块

    • 采用RetinaFace模型一次性预测人脸框和关键点
    • 通过静态标准(清晰度、面部朝向)和HOG特征过滤无效样本
    • 聚类算法面临数据分布未知和顺序敏感等挑战
    • 实测延迟25ms,在自拍、遮挡等场景表现良好
  3. 向量索引设计

    • 分片存储向量嵌入以控制内存占用
    • 基于BLAS库优化点积运算速度
    • 权衡量化压缩与精度保留,倾向产品量化方案
  4. 多语言协作

    • Python处理后端API与业务逻辑
    • Nim/C加速性能关键模块
    • 通过Nimpy实现跨语言调用

开发哲学

  1. 极简主义
    严格控制依赖项(仅需numpy等3个Python库),避免陷入复杂构建系统的泥潭。

  2. 实验性创新
    融合传统确定性属性与ML语义特征,探索非文本模态的搜索可能性。

  3. 可扩展性
    代码设计强调可修改性,例如:

    • 允许直接内存共享避免Python-Nim边界拷贝
    • 前端从Svelte回归原生HTML/JS以获得更透明控制

现状与挑战

  • 当前能力:已测试50万张图片索引,理论支持千万级数据
  • 性能瓶颈:ViT B/32模型作为临时方案,待替换更优模型
  • 跨平台支持:已在Win10/11和Fedora验证,macOS需适配ARM架构
  • 待解决问题:动态模式变更、字符串查询优化、SIMD指令应用等

深层思考

  1. 技术债务与取舍
    作者坦言ML框架存在API不稳定问题,反映出个人项目在追赶快速演进的技术领域时的现实困境。

  2. AI伦理批判
    尖锐批评科技公司未经授权使用开源内容训练商业模型的行为,认为这正在破坏互联网开放共享的根基。

  3. 小型化模型的价值
    主张关注能解决实际问题的轻量级模型(如用DL控制空调),而非盲目追求大参数规模。

致谢与未来

项目得到Samagata基金会和FossUnited的资助,后续计划扩展对Google Drive等远程存储的支持,同时寻求可持续发展模式以保持核心功能的纯粹性。

(注:原文中关于具体代码示例、工具链细节及哲学发散部分已酌情精简,保留技术框架的关键逻辑和核心观点。)

评论总结

总结评论内容:

  1. 技术可行性认可
  • 有评论认为可以用小型模型实现本地图像搜索:"You can hack together an image search with a 500k VLM and a tiny embedding model" (spacecadet)
  • 作者介绍项目技术细节:"a lot of code is written from scratch including a meta-indexing engine and minimal vector database" (warangal)
  1. 现有系统不足
  • 主流操作系统搜索功能不佳:"You'd think that Windows and MacOS would do this well, but they really don't" (pbronez)
  • 用户反映现有搜索体验差:"finding or rediscovering images has been a painful process" (underlipton)
  1. 搜索功能改进建议
  • 强调持久性存储的重要性:"there needs to be some amount of durability baked into...retrieving desired objects" (underlipton)
  • 偏好多属性标记:"I'd rather photos get tagged with as many attributes as possible" (underlipton)
  1. 技术路线争议
  • 对本地ML方案提出质疑:"innovation in embeddings is too fast to keep up with locally" (thefourthchime)
  • 指出示例中的缺陷:"one result is a clear hallucination" (thefourthchime)
  1. 应用场景探讨
  • 询问能否开发类似same.energy的应用:"Could this be used to make something like same.energy?" (love2read)
  • 项目已进行大规模测试:"tested it on around 180gb of Pexels dataset" (warangal)