kelindar/search

Go library for embedded vector search and semantic embeddings using llama.cpp

解决的问题

此项目提供一个轻量级、精确的余弦相似度索引,用于管理与搜索中小型向量数据集。它通过提供原生的 Go 实现来进行索引与搜索,消除了对大型外部数据库的需求,并整合了从本地与云端供应商生成嵌入的功能。

运作方式

该库包含一个核心搜索索引,通过对所有向量进行线性扫描,根据余弦相似度找出最相关的结果。为了将数据导入索引,它提供了两个可选的嵌入模块:

  • 本地嵌入 (Local Embeddings):使用 llama.cpp 通过 purego 在 CPU 或 GPU 上本地生成 GGUF 模型的嵌入。
  • 云端嵌入 (Cloud Embeddings):连接至 OpenAI 兼容的 API (包含 OpenRouter) 来生成文本嵌入。

用户也可以从任何自定义来源提供自己的向量,因为核心索引逻辑与嵌入供应商是解耦的。

适用对象

需要实现向量搜索功能但不想承担大型向量数据库开销的 Go 开发者,特别是针对适合线性扫描的中小型数据集。

特色亮点

  • 核心零依赖:主要的搜索包没有原生库需求,也不依赖嵌入模块。
  • 灵活的嵌入选项:支持本地 GGUF 模型与云端 API。
  • 持久化:包含内置方法,可将索引读写至文件。
  • 本地 GPU 支持:本地嵌入可编译并启用 GPU 加速 (例如 Vulkan)。
  • 供应商无关:通过简单的接口,可轻松更换嵌入供应商。

相关

  • 项目
  • 项目
  • 项目
  • 项目