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)。
- 供应商无关:通过简单的接口,可轻松更换嵌入供应商。
相关
- 项目
- 项目
- 项目
- 项目