Dans la première partie, nous avons configuré PostgreSQL avec pgvector. Voyons maintenant comment fonctionne réellement la recherche vectorielle.
Une intégration est comme un résumé intelligent du contenu en chiffres. La distance entre deux plongements indique leur niveau de similarité. Une petite distance suggère que les vecteurs sont assez similaires, et une grande distance indique qu'ils sont moins liés.
? 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
Maintenant, remplissons notre base de données avec quelques données. Nous utiliserons :
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
Commençons par un script pour charger des données à partir d'API externes. Le script complet est ici.
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
Vous devriez voir 10 livres de programmation avec leurs métadonnées.
Connectez-vous à votre base de données :
docker exec -it pgvector-db psql -U postgres -d example_db
Voyons à quoi ressemblent réellement les intégrations :
-- View first 5 dimensions of an embedding SELECT name, (embedding::text::float[])[1:5] as first_5_dimensions FROM items LIMIT 1;
Essayez une simple recherche de similarité :
-- 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;
Décomposons les opérateurs utilisés dans les requêtes de recherche vectorielle :
Extrait la valeur texte d'un champ JSON.
Exemple :
-- If metadata = {"title": "ABC"}, it returns "ABC" SELECT metadata->>'title' FROM items;
Mesure la similarité entre deux vecteurs.
Exemple :
-- Find similar books SELECT name, embedding <-> query_embedding as distance FROM items ORDER BY distance LIMIT 3;
Ensuite, nous allons :
Restez à l'écoute pour la partie 3 : « Créer une API de recherche de vecteurs » ! ?
N'hésitez pas à laisser un commentaire ci-dessous ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!