Repolode
kelindar

kelindar/search

完全なコサイン類似度ベクトル検索を提供するGoライブラリ。llama.cppによるローカルGGUF埋め込みと、OpenAI互換API経由のクラウド埋め込みにも対応。

スター
561
フォーク
24
未解決の Issue
5
最終コミット
2 か月前

これは何?

kelindar/searchは、ベクトルをインメモリインデックスに格納し、コサイン類似度で最も近いエントリを検索するGoライブラリです。コアパッケージにはネイティブ依存関係がなく、インデックス作成、検索、永続化を単独で処理するため、厳密な全件スキャンで問題ない小〜中規模のデータセットに適しています。

埋め込みプロバイダーは独立したモジュールとして提供されています。llamaパッケージはpuregoを使ってllama.cpp経由でMiniLMなどのローカルGGUFモデルを実行し、デフォルトではCPUを使用しますが、GPUレイヤーも任意で利用できます。openaiパッケージは標準ライブラリのみを使い、OpenRouterを含むOpenAI互換の埋め込みエンドポイントを呼び出します。[]float32を返す関数であれば、小さなインターフェースを介してインデックスにデータを渡せます。

このプロジェクトは独立したGoモジュールに分かれているため、アプリケーションは使用するプロバイダーだけを取り込めます。ローカル埋め込みを使うには、事前にLinux、macOS、またはWindows向けのllama.cppラッパーライブラリをビルドする必要があります。

主な機能

  • 01インメモリベクトルを対象にコサイン類似度で厳密に検索し、関連度順に結果を返します。
  • 02ファイルおよびio.Writer/Reader関数を使ってインデックスを永続化できます。
  • 03llama.cpp経由でローカルのGGUF埋め込みを利用でき、GPUレイヤーも任意で使用できます。
  • 04OpenRouterを含むOpenAI互換API経由のクラウド埋め込みに対応し、バッチリクエストも利用できます。
  • 05プロバイダーに依存しない設計で、ベクトルを返す関数ならどれでもインデックスにデータを渡せます。

ユースケース

  • 数千〜数万件程度のドキュメントを扱うGoサービスに、セマンティック検索を追加する。
  • MiniLMなどのGGUFモデルを使って、埋め込み処理を完全にローカルで実行する。
  • インデックスのコードを変更せずに、OpenAIとOpenRouterの埋め込みモデルを切り替える。
  • 全件スキャンで十分な速度が得られる検索機能を試作する。

クイックスタート

  1. 1

    サブモジュールとLFSファイルを含めてリポジトリをクローンする

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

    Git LFS経由でモデルとベクトルのフィクスチャを取得する

    git lfs pull
  3. 3

    コア検索ライブラリをインストールする

    go get github.com/kelindar/search

使う前に知っておきたいこと

  • 検索は完全一致で、すべてのベクトルをスキャンするため、小規模から中規模のデータセットにのみ適しています。
  • ローカル埋め込みを使用するには、CMakeとC/C++コンパイラでネイティブのllama.cppライブラリをビルドする必要があります。
  • Go 1.27以降が必要です。

収録されている特集

トピック

よくある質問

search とは?
完全なコサイン類似度ベクトル検索を提供するGoライブラリ。llama.cppによるローカルGGUF埋め込みと、OpenAI互換API経由のクラウド埋め込みにも対応。 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 コア検索ライブラリをインストールする: go get github.com/kelindar/search
search はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/kelindar/search

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト