文章摘要
作者开发了一个名为Hachi的自托管搜索引擎,旨在帮助用户跨设备搜索个人数据(目前仅支持图片,未来计划支持视频、文本和音频)。该系统利用机器学习模型提取语义信息,通过单一界面查询分布式存储的个人数据,包括本地硬盘和云端资源。
文章总结
Hachi:一个(图像)搜索引擎的开发历程与思考
项目概述
Hachi是一个完全自托管的搜索引擎项目,旨在帮助用户以端到端的方式跨设备搜索个人数据。当前版本专注于图像搜索,未来计划扩展至视频、文本和音频等模态。项目基于分布式数据存储和机器学习模型提取语义信息的设计理念,试图通过单一接口整合分散在本地硬盘、远程服务器或云端的数据资源。
核心动机
搜索体验的局限性
传统搜索引擎无法适应人类记忆的碎片化特征,用户往往被迫接受单向信息流且缺乏反馈机制。Hachi尝试通过以下方式改进:- 允许用户通过多属性递归细化查询
- 即使查询不完整也提供最优建议
- 直面拼写错误等非完美信息的处理挑战
隐私与自主权
针对商业搜索引擎的隐私侵犯行为(如谷歌的搜索细化限制),项目强调自托管和去中心化设计,未来目标包括通过智能手机集群处理分布式查询。
技术架构
元数据索引引擎
- 使用Nim语言编写的轻量级列式数据库
- 支持按需生成辅助索引加速查询
- 当前数据类型包括字符串、整型、浮点等基础类型
人脸识别模块
- 采用RetinaFace模型一次性预测人脸框和关键点
- 通过静态标准(清晰度、面部朝向)和HOG特征过滤无效样本
- 聚类算法面临数据分布未知和顺序敏感等挑战
- 实测延迟25ms,在自拍、遮挡等场景表现良好
向量索引设计
- 分片存储向量嵌入以控制内存占用
- 基于BLAS库优化点积运算速度
- 权衡量化压缩与精度保留,倾向产品量化方案
多语言协作
- Python处理后端API与业务逻辑
- Nim/C加速性能关键模块
- 通过Nimpy实现跨语言调用
开发哲学
极简主义
严格控制依赖项(仅需numpy等3个Python库),避免陷入复杂构建系统的泥潭。实验性创新
融合传统确定性属性与ML语义特征,探索非文本模态的搜索可能性。可扩展性
代码设计强调可修改性,例如:- 允许直接内存共享避免Python-Nim边界拷贝
- 前端从Svelte回归原生HTML/JS以获得更透明控制
现状与挑战
- 当前能力:已测试50万张图片索引,理论支持千万级数据
- 性能瓶颈:ViT B/32模型作为临时方案,待替换更优模型
- 跨平台支持:已在Win10/11和Fedora验证,macOS需适配ARM架构
- 待解决问题:动态模式变更、字符串查询优化、SIMD指令应用等
深层思考
技术债务与取舍
作者坦言ML框架存在API不稳定问题,反映出个人项目在追赶快速演进的技术领域时的现实困境。AI伦理批判
尖锐批评科技公司未经授权使用开源内容训练商业模型的行为,认为这正在破坏互联网开放共享的根基。小型化模型的价值
主张关注能解决实际问题的轻量级模型(如用DL控制空调),而非盲目追求大参数规模。
致谢与未来
项目得到Samagata基金会和FossUnited的资助,后续计划扩展对Google Drive等远程存储的支持,同时寻求可持续发展模式以保持核心功能的纯粹性。
(注:原文中关于具体代码示例、工具链细节及哲学发散部分已酌情精简,保留技术框架的关键逻辑和核心观点。)
评论总结
总结评论内容:
- 技术可行性认可
- 有评论认为可以用小型模型实现本地图像搜索:"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)
- 现有系统不足
- 主流操作系统搜索功能不佳:"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)
- 搜索功能改进建议
- 强调持久性存储的重要性:"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)
- 技术路线争议
- 对本地ML方案提出质疑:"innovation in embeddings is too fast to keep up with locally" (thefourthchime)
- 指出示例中的缺陷:"one result is a clear hallucination" (thefourthchime)
- 应用场景探讨
- 询问能否开发类似same.energy的应用:"Could this be used to make something like same.energy?" (love2read)
- 项目已进行大规模测试:"tested it on around 180gb of Pexels dataset" (warangal)