パート 1 では、pgvector を使用して PostgreSQL をセットアップしました。ここで、ベクトル検索が実際にどのように機能するかを見てみましょう。
埋め込みは、コンテンツを数値でスマートにまとめたものに似ています。 2 つの埋め込み間の距離は、それらの類似性のレベルを示します。距離が小さい場合はベクトルが非常に類似していることを示し、距離が大きい場合はベクトルの関連性が低いことを示します。
? Book A: Web Development (Distance: 0.2) ⬅️ Very Similar! ? Book B: JavaScript 101 (Distance: 0.3) ⬅️ Similar! ? Book C: Cooking Recipes (Distance: 0.9) ❌ Not Similar
それでは、データベースにデータを入力してみましょう。以下を使用します:
pgvector-setup/ # From Part 1 ├── compose.yml ├── postgres/ │ └── schema.sql ├── .env # New: for API keys └── scripts/ # New: for data loading ├── requirements.txt ├── Dockerfile └── load_data.py
外部 API からデータをロードするスクリプトから始めましょう。完全なスクリプトはここにあります。
OPENAI_API_KEY=your_openai_api_key
services: # ... existing db service from Part 1 data_loader: build: context: ./scripts environment: - DATABASE_URL=postgresql://postgres:password@db:5432/example_db - OPENAI_API_KEY=${OPENAI_API_KEY} depends_on: - db
docker compose up data_loader
10 冊のプログラミング書籍とそのメタデータが表示されるはずです。
データベースに接続します:
docker exec -it pgvector-db psql -U postgres -d example_db
埋め込みが実際にどのようなものかを見てみましょう:
-- View first 5 dimensions of an embedding SELECT name, (embedding::text::float[])[1:5] as first_5_dimensions FROM items LIMIT 1;
簡単な類似性検索を試してください:
-- Find 3 books similar to any book about Web SELECT name, metadata FROM items ORDER BY embedding <-> ( SELECT embedding FROM items WHERE metadata->>'title' LIKE '%Web%' LIMIT 1 ) LIMIT 3;
ベクトル検索クエリで使用される演算子を詳しく見てみましょう:
JSON フィールドからテキスト値を抽出します。
例:
-- If metadata = {"title": "ABC"}, it returns "ABC" SELECT metadata->>'title' FROM items;
2 つのベクトル間の類似性を測定します。
例:
-- Find similar books SELECT name, embedding <-> query_embedding as distance FROM items ORDER BY distance LIMIT 3;
次に行うことは次のとおりです。
パート 3:「Vector Search API の構築」もお楽しみに! ?
お気軽に以下にコメントを書き込んでください。 ?
以上がベクトル検索入門 (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。