在第 1 部分中,我們使用 pgvector 設定 PostgreSQL。現在,讓我們看看向量搜尋實際上是如何運作的。
嵌入就像數位內容的智慧摘要。兩個嵌入之間的距離顯示它們的相似程度。距離小表示向量非常相似,距離大表示它們相關性較低。
? 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;
測量兩個向量之間的相似性。
範例:
-- Find similar books SELECT name, embedding <-> query_embedding as distance FROM items ORDER BY distance LIMIT 3;
接下來,我們將:
敬請關注第 3 部分:「建立向量搜尋 API」! ?
歡迎在下面留言! ?
以上是向量搜尋入門(第 2 部分)的詳細內容。更多資訊請關注PHP中文網其他相關文章!