Lantern

Lantern

Lantern Systems, Inc. · コーディング

LanternはPostgresにHNSWのベクトル検索と埋め込み生成を足すオープンソース拡張機能だ。マネージドクラウドも用意され、AIアプリの土台として使える。

Lantern の画面プレビュー

Lantern について

About

Lanternとは

LanternはPostgreSQLの拡張機能として動く。ベクトルは既存のテーブルの中に収まる。ベクトル列を追加し、lantern_hnswインデックスを張れば、あとは普通のSQLで近傍探索が返る。別のストアも、同期ジョブも、専用のクエリ言語も要らない。

狙いは、Postgresから出ずにセマンティック検索、レコメンド、AIアシスタント向けの検索拡張を組みたいチームだ。Postgres 11から16に対応し、pgvectorのvector型をそのまま使う。pgvectorで作ったテーブルなら、型が合っているぶん移行は短く済む。

制約も見ておきたい。開発は小規模なチームで、オープンソース版の最新は2024年11月のv0.5.0、無料のクラウド枠は0.25 vCPUと0.5 GBのRAMしかない。試作や中規模のカタログには向くが、大きなサポート体制を求めるチームには物足りない。

導入の流れ

  1. Lantern Cloudで無料プロジェクトを作るか、Docker、Homebrew、プリコンパイル済みバイナリのいずれかで自前のPostgresに拡張機能を入れる。
  2. 使う予定のデータベースでCREATE EXTENSION lanternを実行する。同じインスタンスでもデータベースごとに個別に必要だ。
  3. テーブルにベクトル列を追加し、浮動小数点の配列として行を入れる。
  4. CREATE INDEX ... USING lantern_hnswでインデックスを作り、コサインやL2二乗などの演算子クラスを選ぶ。
  5. 距離演算子で検索するか、自動埋め込み生成をオンにしてテキスト列からベクトルを埋めさせる。

AIツール情報

Lanternの料金、対応プラットフォーム、性能を簡単に確認できます。

無料プランはい
有料プラン$0 - $704/mo
プラットフォームLantern Cloud (managed Postgres), self-hosted on Postgres 11-16 via Docker, Homebrew, or binaries
開発元Lantern Systems, Inc.
カテゴリコーディング
リリース日Jul 2023
最終更新Dec 2024
サイト訪問数2.2K
サイト世界ランキング6.6M
API提供状況はい

こんな人におすすめ

このツールが最も力を発揮するユーザー、タスク、シーン。

ユーザー

  • すでにPostgresを運用しているバックエンド開発者。ベクトルが使い慣れたデータベースに収まり、新しいサービスを増やさずに済む。SQLを書けることが前提だ。
  • チャットボットの検索部分を作るAIエンジニア。埋め込みを業務テーブルの隣に置けるので、外部のベクトルストアとの同期が消える。
  • データベース管理者がいない小さなチーム。バックアップ、任意時点への復元、更新はクラウド側が持つ。無料枠は0.25 vCPUまでだ。

タスク

  • 商品カタログ、サポート文書、社内wikiのセマンティック検索。文字列の一致ではなく意味で並べたい場面に向く。
  • CLIPの埋め込みを使った画像の類似検索。Lanternはテキスト系モデルと並べて画像モデルも用意している。
  • ユーザーの埋め込みとの距離で項目を並べるレコメンド。業務テーブルとの結合と同じクエリの中で計算できる。
  • 大量レコードの重複排除や近似重複の検出。コサインインデックスと距離のしきい値で絞る。

シーン

  • 既存のRails、Django、Nodeアプリに検索を足す。データストアを増やさずに済む。
  • pgvectorやPineconeから移す。リレーショナルデータとベクトルを1つのデータベースにまとめたいときに向く。
  • RAGの流れを無料枠で試し、有料インスタンスに移るか判断する。

主な機能

Postgresの中に置くHNSWインデックス

Lanternはベクトル列用にlantern_hnswというインデックス型を追加し、ORDER BY ... LIMITのクエリを速くする。中身はコンパクトなHNSW実装のusearchで、L2二乗、コサイン、ハミングの距離に対応する。使う演算子クラスはインデックス作成時に選ぶ。

SQLで書く埋め込み生成

データベースの外に出ずにベクトルを作れる。Lanternには埋め込みモデルを呼び出して結果を列に書き込む補助関数があり、PythonやNodeのサービスがテキストを分割し、APIを叩き、再試行を捌く必要はなくなる。

埋め込みを自動で更新する列

マネージド列がベクトルを最新に保つ。テキスト列とモデルを指定すれば、追加や変更のあった行は非同期タスクとしてバックグラウンドで処理される。コンテンツ用テーブルと検索インデックスの間のつなぎコードは不要だ。

SQLからLLMを呼ぶ

バージョン0.5.0でllm_completionとadd_completion_jobが入り、クエリの中やバックグラウンドジョブとしてLLMにプロンプトを投げられる。用途は狭く、分類や短い要約向けだ。アプリケーション層の代わりにはならない。

サーバーレス索引と並列構築

ベクトル構成で時間がかかるのは索引の作成だ。Lanternは索引グラフをデータベースサーバーの外や別マシンで構築できるので、大きな再構築でも通常のトラフィックが止まらない。クラウドではサーバーレス索引として1 GBあたり0.50ドルから課金される。

索引の自動調整と量子化

M、ef、ef_constructionを手で決めるのは試行錯誤が要る。Lanternにはデータに合わせてパラメータを提案する自動調整ツールがあり、メモリが厳しいときは直積量子化で索引を小さくできる。

メリットとデメリット

メリット

  • ベクトルがPostgresにあるので、結合、絞り込み、トランザクションが他のテーブルと同じように動く。
  • pgvectorのデータ型を受け付けるため、すでに使っているなら移行が短い。
  • 埋め込み生成とマネージド列があるので、取り込み専用のサービスを別に立てなくていい。
  • クラウドの無料枠は停止しない。デモ用プロジェクトを放置してもデータベースは残る。
  • 索引を本体サーバーの外で構築できるので、再構築中も本番が応答する。

デメリット

  • オープンソース版のリリース間隔が長い。v0.5.0は2024年11月、リポジトリへの最終pushは2024年12月で、修正は自前のフォーク頼みになる。
  • ドキュメントはSQLと索引調整の知識を前提にしている。バックエンドエンジニアのいないチームは最初の索引で詰まる。
  • 無料インスタンスは0.25 vCPUと0.5 GB RAMで、デモ以上には足りない。
  • 埋め込みの費用はデータベースの請求に上乗せされる。Lanternのトークン単価を避けるには、OpenAIかCohereの自分のキーを使うしかない。

よくある質問

2つの意味で無料だ。拡張機能はAGPL-3.0のオープンソースで自前運用なら費用はかからない。Lantern Cloudにも無料枠があり、0.25 vCPU、0.5 GB RAM、停止なしで使える。有料インスタンスは月44ドルからで、16 vCPUと60 GB RAMの月704ドルが上限だ。