はじめに
ChatGPTで自前のDB(PostgreSQL16)に保管したドキュメントから自然言語でQAをする仕組みを検証するために、前回導入したPostgreSQL16にpgvectorを導入し、ベクトルデータベースとして利用可能な環境を作成します。
特記事項なき場合は作業用の一般ユーザーでコマンド実行します。
pgvector導入
公式のGitHubの導入手順に従い、導入していきます。
https://github.com/pgvector/pgvector
cd /usr/local/src
git clone --branch v0.5.1 https://github.com/pgvector/pgvector.git
cd pgvector
export PATH=${PATH}:/usr/local/pgsql161/bin
make
sudo su
export PATH=${PATH}:/usr/local/pgsql161/bin
make install
※前回導入したPostgreSQLのバイナリディレクトリにパスを通す必要があります。
以上で導入は完了です。
pgvector初期設定
ベクトルデータベース用PostgreSQLユーザーの作成
postgresql管理ユーザーで実行
createuser -P -e vecdbuser
Enter password for new role:
Enter it again:
Password:
SELECT pg_catalog.set_config('search_path', '', false);
CREATE ROLE vecdbuser PASSWORD 'xxx####' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS;
ベクトルデータ用DBとテーブルの作成
まずはCreateDBを行います。この時点では特に特殊な設定はありません。
createdb -e -E UTF8 -O vecdbuser gptretdb -T template0
次に作成したDBにpgvector拡張を作成します。
前手順で作成したPostgreSQLユーザーではCREATE EXTENSIONできませんので、PostgreSQL管理ユーザーで操作を行います。
psql -d gptretdb
psql (16.1)
Type "help" for help.
gptretdb=# CREATE EXTENSION vector;
CREATE EXTENSION
gptretdb=# \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
vector | 0.5.1 | public | vector data type and ivfflat and hnsw access methods
(2 rows)
vectorという拡張が作成されていることを確認します。
下記のSQLを実行し、ベクトルデータ用のカラムを持つテーブルを作成します。
動作確認
簡単なデータも登録し、テストを行います。
gptretdb=# CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
CREATE TABLE
gptretdb=# INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
INSERT 0 2
gptretdb=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
id | embedding
----+-----------
1 | [1,2,3]
2 | [4,5,6]
(2 rows)
gptretdb=# \q
embedding列にデータが登録されていることが確認出来たら動作確認完了です。