Open3

VectorAdminを試す

kun432kun432

https://github.com/Mintplex-Labs/vector-admin

https://vectoradmin.com/

ベクトルデータベース管理の課題

LLM+RAGで一般的に使用されるベクトルデータベースだが、この運用管理には以下の課題がある。

  • ベクトル化したデータからは、ベクトル化前の元のテキストはもうわからない。しかし、ベクトルデータベースの多くは、ベクトル化したデータのストア(とセマンティック検索)の機能しか有していない。
  • ベクトル化は(よくあるのは)OpenAI Embedding APIを使って生成し、ベクトルストア化は各ベクトルデータベースのライブラリを使う。プロセスが別々になってしまう。

つまり、ベクトル化前のテキストとベクトルは別の場所で管理する必要があり、更新の場合にはこれを同期する必要が出てくる。

VectorAdminを使うとこの課題を改善できるかもしれない。ということで試してみる。

https://www.youtube.com/watch?v=cW8Eohz6pzs&t=754s

kun432kun432

インストール

Dockerで行う。

https://github.com/Mintplex-Labs/vector-admin/blob/master/docker/DOCKER.md

Linux上ではうまく行かなかったので、Macで。詳しくは後述。

レポジトリクローン

$ git clone https://github.com/Mintplex-Labs/vector-admin && cd vector-admin

で、ちょっとここは自分の環境でのひねりなんだけど、ローカルMacでは可能な限りNode.js環境は作りたくない。なので、VSCodeでこのクローンしたディレクトリを開いて、devcontainerで開く。ローカルにNode環境があるならば不要。

ちなみにdevcontainerの設定は以下。

{
	"name": "Ubuntu",
	"image": "mcr.microsoft.com/devcontainers/base:jammy",
	"features": {
		"ghcr.io/devcontainers/features/node:1": {}
	}
}

devcontainer上でNode回りのセットアップ諸々を実行。

$ yarn dev:setup

devcontainerはこれで終了。ほんとこのためだけにdevcontainerを用意した感じ。あとはホストのMac上で。

Dockerディレクトリに移動。

$ cd docker

まず、.envを作成

$ cp .env.example .env

JWT_SECRET、SYS_PASSWORD、INNGEST_SIGNING_KEYあたりを適宜変更。

SERVER_PORT=3001
# STORAGE_DIR="./backend/storage"

JWT_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
SYS_EMAIL="root@example.com"
SYS_PASSWORD="XXXXXXXXXXXXXXXX"

INNGEST_EVENT_KEY="background_workers"
INNGEST_SIGNING_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
INNGEST_LANDING_PAGE="true"
DATABASE_CONNECTION_STRING="postgresql://vectoradmin:password@host.docker.internal:5433/vdbms"

コンテナをビルドして起動。

$ docker compose up -d --build postgres
$ docker compose up -d --build vector-admin

コンテナ起動後に http://localhost:3001にアクセスするとログイン画面が表示されるので、.env二設定してあるSYS_EMAIL、SYS_PASSWORDでログイン。

初回は管理者アカウントの作成が求められるので、メアド・パスワードを入力して作成する。

次に組織名を設定。

ログイン画面からアカウント作成を有効にするか、その際にドメインを限定するかを聞かれる。これを有効にしない場合は、管理者がアカウントを作成することになる。今回はスキップ。

管理画面にログインできた。

余談: Linuxの場合

最初はLinux上でセットアップしてみたのだが、以下の点でうまく行かなかった。

  • VectorAdminのコンテナをビルドする際に、内部でPostgresコンテナに接続して、データベースの初期設定が行われる
  • このとき、VectorAdminコンテナからPostgresへの接続がなぜかうまくいかない。

VectorAdminコンテナからPostgresコンテナへの接続は .env の以下の設定が使用される。

DATABASE_CONNECTION_STRING="postgresql://vectoradmin:password@host.docker.internal:5433/vdbms"

host.docker.internalはDocker Desktop for Win/Macでのみ有効な設定らしく、Linuxだと以下のワークアラウンドが必要になる。

https://qiita.com/skobaken/items/03a8b9d0e443745862ac

ただ、このワークアラウンドを行っても接続ができず、そもそもhost.docker.internal経由で接続する必要もないだろう、ということで直接postgresコンテナを指定する形に変えてみたけども、それでもダメだった。Dockerfileをいじって、データベースの初期設定前で止めるようにしてみると、ちゃんとpostgresコンテナに接続できる(host.dockerinternalでもpostgresコンテナ直指定の両方で試した)ので、なぜ接続できないのかわからない。。。

RUN cd ./backend && DATABASE_CONNECTION_STRING=$DATABASE_CONNECTION_STRING npx prisma generate --schema=./prisma/schema.prisma
RUN cd ./backend && DATABASE_CONNECTION_STRING=$DATABASE_CONNECTION_STRING npx prisma migrate deploy --schema=./prisma/schema.prisma

この部分でどうもコケる様子。PrismaというのはNode.jsのORMらしいのだが・・・。Macではうまくいくのでなにか自分のLinux Dockerの環境に依存しているのかもしれない。

kun432kun432

ちょっと触ってみた感じだと、自分が想像していた運用フローとは合わないのかなー、感。。。

動画を見直してみて、どういう思想で作ってあるのかを見たほうが良さそう。