Skapa inbäddningar med Azure AI-tillägget

Slutförd

Om du vill köra en semantisk sökning måste du jämföra frågeinbäddningen med inbäddningarna för de sökta objekten. Tillägget azure_ai för Azure Database for PostgreSQL – Flexibel server integreras med Azure OpenAI för att generera inbäddningsvektorer.

Ett diagram som visar indatatexten

Introduktion till azure_ai och Azure OpenAI

Azure Database for PostgreSQL– flexibelt tillägg för Azure AI tillhandahåller användardefinierade funktioner för att integrera med Azure AI-tjänster, inklusive Azure OpenAI och Azure Cognitive Services.

AZURE OpenAI Embeddings API genererar en inbäddningsvektor för indatatexten. Använd det här API:et för att ange inbäddningar för alla objekt som genomsöks. Tilläggets azure_ai azure_openai schema gör det enkelt att anropa API:et från SQL för att generera inbäddningar, oavsett om du vill initiera objektinbäddningar eller skapa en frågeinbäddning direkt. Dessa inbäddningar kan sedan användas för att utföra vektorlikhetssökning, eller med andra ord semantisk sökning.

azure_ai Använda tillägget med Azure OpenAI

Om du vill anropa AZURE OpenAI Embeddings-API:et från PostgreSQL måste du aktivera och konfigurera azure_ai tillägget, bevilja åtkomst till Azure OpenAI och distribuera en Azure OpenAI-modell. Mer information finns i dokumentationen om Azure OpenAI på Azure Database for PostgreSQL – flexibel server.

När miljön är klar och tillägget är tillåtet kör du den här SQL:en:

/* Enable the extension. */
CREATE EXTENSION azure_ai;

Du måste också konfigurera openAI-tjänstresursens slutpunkt och åtkomstnyckel:

SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');

När azure_ai och Azure OpenAI har konfigurerats är det enkelt att hämta och lagra inbäddningar när en funktion anropas i SQL-frågan. Om du antar en tabell listings med en description kolumn och en listing_vector kolumn kan du generera och lagra inbäddningen för alla listor med följande fråga. Ersätt {your-deployment-name} med distributionsnamnet från Azure OpenAI Studio för den modell som du skapade.

UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;

listing_vector Vektorkolumnen måste ha samma antal dimensioner som språkmodellen producerar.

Om du vill se en dokumentbäddning kör du följande fråga:

SELECT listing_vector FROM listings LIMIT 1;

Resultatet är en vektor med flyttalsnummer. Du kan köra \x först för att göra utdata mer läsbara.

Generera en frågebäddning dynamiskt

När du har inbäddningar för de dokument som du vill söka efter kan du köra en semantisk sökfråga. För att göra det måste du också generera en inbäddning för frågetexten.

Med azure_openai schemat för azure_ai tillägget kan du generera inbäddningar i SQL. Om du till exempel vill hitta de tre främsta listorna vars text mest semantiskt liknar frågan "Hitta platser i ett gångbart område" kör du följande SQL:

SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;

Operatorn <=> beräknar cosininavståndet mellan de två vektorerna, det semantiska likhetsmåttet. Ju närmare vektorerna, desto mer semantiskt lika; det mer ytterligare vektorerna, det mer semantically olikt.

Operatorn ::vector konverterar de genererade inbäddningarna till PostgreSQL-vektormatriser.

Frågan returnerar de tre främsta list-ID:na och beskrivningarna, rangordnade från mindre till mer olika (mer till mindre lika).