VectorAdminを試す
ベクトルデータベース管理の課題
LLM+RAGで一般的に使用されるベクトルデータベースだが、この運用管理には以下の課題がある。
- ベクトル化したデータからは、ベクトル化前の元のテキストはもうわからない。しかし、ベクトルデータベースの多くは、ベクトル化したデータのストア(とセマンティック検索)の機能しか有していない。
- ベクトル化は(よくあるのは)OpenAI Embedding APIを使って生成し、ベクトルストア化は各ベクトルデータベースのライブラリを使う。プロセスが別々になってしまう。
つまり、ベクトル化前のテキストとベクトルは別の場所で管理する必要があり、更新の場合にはこれを同期する必要が出てくる。
VectorAdminを使うとこの課題を改善できるかもしれない。ということで試してみる。
インストール
Dockerで行う。
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だと以下のワークアラウンドが必要になる。
ただ、このワークアラウンドを行っても接続ができず、そもそも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の環境に依存しているのかもしれない。
ちょっと触ってみた感じだと、自分が想像していた運用フローとは合わないのかなー、感。。。
動画を見直してみて、どういう思想で作ってあるのかを見たほうが良さそう。