Repolode
kelindar

kelindar/search

Go 语言向量搜索库,提供精确余弦相似度检索,并可选接入基于 llama.cpp 的本地 GGUF 嵌入或 OpenAI 兼容的云端嵌入。

Star
561
Fork
24
未关闭 Issue
5
最近提交
2个月前

这是什么?

kelindar/search 是一个 Go 库,用于把向量存入内存索引,并按余弦相似度查找最相近的条目。核心包没有原生依赖,独立完成索引、检索和持久化,适合中小规模、可接受精确全量扫描的数据集。

嵌入服务拆分为独立模块。llama 包通过 purego 调用 llama.cpp,可在本地运行 MiniLM 等 GGUF 模型,默认使用 CPU,也可指定 GPU 层。openai 包使用标准库调用 OpenAI 兼容的嵌入接口,包括 OpenRouter。任何返回 []float32 的函数也能通过一个简单接口为索引提供向量。

由于各部分是独立的 Go 模块,应用只需引入所用的提供方。使用本地嵌入前,需要先在 Linux、macOS 或 Windows 上编译 llama.cpp 封装库。

核心功能

  • 01对内存中的向量做精确余弦相似度检索,结果按相关度排序。
  • 02支持通过文件以及 io.Writer/Reader 持久化索引。
  • 03通过 llama.cpp 运行本地 GGUF 嵌入模型,可选 GPU 层。
  • 04通过 OpenAI 兼容接口(含 OpenRouter)获取云端嵌入,支持批量请求。
  • 05与具体提供方解耦,任何返回向量的函数都能为索引提供数据。

适用场景

  • 为数千到数万条文档的 Go 服务添加语义搜索。
  • 使用 MiniLM 等 GGUF 模型在本地完成全部嵌入计算。
  • 在不修改索引代码的前提下切换 OpenAI 与 OpenRouter 的嵌入模型。
  • 快速验证检索功能,全量扫描的速度已足够满足需求。

快速上手

  1. 1

    克隆仓库及其子模块和 LFS 文件

    git submodule update --init --recursive
  2. 2

    通过 Git LFS 获取模型和向量测试数据

    git lfs pull
  3. 3

    安装核心 search 库

    go get github.com/kelindar/search

使用前须知

  • 搜索为精确匹配并遍历所有向量,因此仅适合中小规模数据集。
  • 本地嵌入需要使用 CMake 和 C/C++ 编译器自行编译原生 llama.cpp 库。
  • 需要 Go 1.27 或更高版本。

收录于专题

标签

常见问题

search 是什么?
Go 语言向量搜索库,提供精确余弦相似度检索,并可选接入基于 llama.cpp 的本地 GGUF 嵌入或 OpenAI 兼容的云端嵌入。 kelindar/search 是一个 Go 库,用于把向量存入内存索引,并按余弦相似度查找最相近的条目。核心包没有原生依赖,独立完成索引、检索和持久化,适合中小规模、可接受精确全量扫描的数据集。
search 可以免费使用吗?用的什么许可证?
search 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
search 还在维护吗?
半年内有更新。search 最近一次提交是在 2026年9月19日。
search 适合用来做什么?
为数千到数万条文档的 Go 服务添加语义搜索。 使用 MiniLM 等 GGUF 模型在本地完成全部嵌入计算。 在不修改索引代码的前提下切换 OpenAI 与 OpenRouter 的嵌入模型。 快速验证检索功能,全量扫描的速度已足够满足需求。
search 怎么安装和运行?
克隆仓库及其子模块和 LFS 文件: git submodule update --init --recursive 通过 Git LFS 获取模型和向量测试数据: git lfs pull 安装核心 search 库: go get github.com/kelindar/search
在哪里获取 search?
源代码和安装说明在 GitHub 上:https://github.com/kelindar/search

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目