In Teil 1 richten wir PostgreSQL mit pgvector ein. Sehen wir uns nun an, wie die Vektorsuche tatsächlich funktioniert.
Eine Einbettung ist wie eine intelligente Zusammenfassung von Inhalten in Zahlen. Der Abstand zwischen zwei Einbettungen gibt den Grad ihrer Ähnlichkeit an. Ein kleiner Abstand deutet darauf hin, dass die Vektoren ziemlich ähnlich sind, und ein großer Abstand deutet darauf hin, dass sie weniger verwandt sind.
? 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
Jetzt füllen wir unsere Datenbank mit einigen Daten. Wir verwenden:
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
Beginnen wir mit einem Skript zum Laden von Daten von externen APIs. Das vollständige Skript finden Sie hier.
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
Sie sollten 10 Programmierbücher mit ihren Metadaten sehen.
Verbinden Sie sich mit Ihrer Datenbank:
docker exec -it pgvector-db psql -U postgres -d example_db
Sehen wir uns an, wie Einbettungen tatsächlich aussehen:
-- View first 5 dimensions of an embedding SELECT name, (embedding::text::float[])[1:5] as first_5_dimensions FROM items LIMIT 1;
Versuchen Sie es mit einer einfachen Ähnlichkeitssuche:
-- 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;
Lassen Sie uns die in Vektorsuchabfragen verwendeten Operatoren aufschlüsseln:
Extrahiert Textwerte aus einem JSON-Feld.
Beispiel:
-- If metadata = {"title": "ABC"}, it returns "ABC" SELECT metadata->>'title' FROM items;
Misst die Ähnlichkeit zwischen zwei Vektoren.
Beispiel:
-- Find similar books SELECT name, embedding <-> query_embedding as distance FROM items ORDER BY distance LIMIT 3;
Als nächstes werden wir:
Bleiben Sie gespannt auf Teil 3: „Aufbau einer Vektorsuch-API“! ?
Schreiben Sie gerne unten einen Kommentar! ?
Das obige ist der detaillierte Inhalt vonErste Schritte mit der Vektorsuche (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!