Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Génération de vecteurs (rds_embedding)

Dernière mise à jour :Aug 08, 2026

Pour construire des pipelines de recherche sémantique ou de génération augmentée par récupération (RAG), la génération d'embeddings de texte nécessite généralement un service externe à votre base de données. L'extension rds_embedding vous permet d'appeler un modèle d'embedding externe directement depuis ApsaraDB RDS for PostgreSQL, de stocker les vecteurs résultants avec vos données et d'exécuter des requêtes de similarité cosinus, le tout au sein de la base de données.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance RDS exécutant PostgreSQL 14 ou une version ultérieure

  • Pour PostgreSQL 17 : version mineure du moteur 20241030 ou ultérieure. Pour mettre à niveau, consultez la rubrique Mise à niveau de la version mineure du moteur

  • Une clé API Alibaba Cloud Model Studio. Pour en obtenir une, consultez la rubrique Obtenir votre clé API

  • Une passerelle NAT configurée pour le réseau privé virtuel (VPC) dans lequel votre instance RDS s'exécute. Les instances RDS PostgreSQL ne peuvent pas atteindre Internet par défaut ; une passerelle NAT est donc nécessaire pour appeler des modèles d'embedding externes.

    Étapes de configuration de la passerelle NAT

    Étape 1 : Créer une passerelle NAT Internet

    1. Connectez-vous à la console NAT Gateway.

    2. Sur la page Internet NAT Gateway, cliquez sur Create Internet NAT Gateway.

    3. Si c'est la première fois que vous créez une passerelle NAT Internet, cliquez sur Create Service-Linked Role dans la section Create Service-Linked Role.

    4. Sur la page d'achat, configurez les paramètres suivants et cliquez sur Buy Now.

      Remarque

      Pour obtenir la liste complète des paramètres, consultez la rubrique Utiliser la fonctionnalité SNAT d'une passerelle NAT Internet pour accéder à Internet.

      Paramètre Description
      Region Sélectionnez la même région que votre instance RDS.
      VPC Sélectionnez le même VPC que votre instance RDS. Vous trouverez le VPC sur la page Database Connection de la console ApsaraDB RDS.
      Associate vSwitch Sélectionnez le même vSwitch que votre instance RDS. Vous trouverez le vSwitch sur la page Database Connection de la console ApsaraDB RDS.
      Access Mode Sélectionnez Configure Later.
    5. Sur la page Confirm, vérifiez les détails, cochez la case des Conditions d'utilisation, puis cliquez sur Confirm. La passerelle apparaît sur la page Internet NAT Gateway.

      Create NAT gateway

    Étape 2 : Associer une adresse IP élastique (EIP) à la passerelle

    1. Sur la page Internet NAT Gateway, cliquez sur l'ID de la passerelle pour ouvrir l'onglet Basic Information.

    2. Dans l'onglet Associated Elastic IP Address, cliquez sur Bind Elastic IP Address.

    3. Dans la boîte de dialogue Associate EIP, sélectionnez Purchase and Associate EIP.

      Bind EIP

    4. Cliquez sur OK. L'EIP apparaît dans l'onglet Associated Elastic IP Address.

      Bound EIP

    Étape 3 : Créer une entrée SNAT

    1. Sur la page Internet NAT Gateway, cliquez sur l'ID de la passerelle pour ouvrir l'onglet Basic Information.

    2. Dans l'onglet SNAT Management, cliquez sur Create SNAT Entry.

    3. Sur la page Create SNAT Entry, configurez les paramètres suivants et cliquez sur OK. L'entrée SNAT apparaît dans la section SNAT Entry List.

      Paramètre Description
      SNAT Entry Sélectionnez Specify vSwitch afin que seules les instances associées au vSwitch sélectionné puissent accéder à Internet.
      Select vSwitch Sélectionnez le vSwitch de votre instance RDS.
      Select EIP Sélectionnez une ou plusieurs EIP pour accéder à Internet. Dans cet exemple, une seule EIP est sélectionnée dans la liste déroulante.

      SNAT entry

Remarque

Outre le modèle text-embedding-v3 utilisé dans cette rubrique, vous pouvez enregistrer d'autres modèles d'embedding à l'aide de rds_embedding.add_model(). Pour plus de détails, consultez la section rds_embedding.add_model().

Activer l'extension

Exécutez les commandes suivantes avec un compte privilégié. Activez d'abord vector : elle fournit le type de données vectorielles et les opérations dont dépend rds_embedding.

CREATE EXTENSION vector;
CREATE EXTENSION rds_embedding;

Pour désactiver les extensions :

DROP EXTENSION rds_embedding;
DROP EXTENSION vector;

Générer et interroger des embeddings

L'exemple suivant utilise le modèle text-embedding-v3 d'Alibaba Cloud Model Studio pour générer des vecteurs de 1 024 dimensions et exécuter une requête de similarité cosinus. Pour plus d'informations sur le modèle, consultez la rubrique Présentation du modèle.

Étape 1 : Créer une table

Créez une table avec une colonne text pour votre contenu et une colonne vector(1024) pour les embeddings.

CREATE TABLE test(info text, vec vector(1024) NOT NULL);

Étape 2 : Enregistrer le modèle d'embedding

Enregistrez text-embedding-v3 en fournissant son URL d'endpoint, le modèle d'en-tête d'autorisation, le modèle de corps de requête et le chemin JSON permettant d'extraire l'embedding de la réponse.

SELECT rds_embedding.add_model(
    'text-embedding-v3',
    'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding',
    'Authorization: Bearer sk-****',
    '{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}',
    '->''output''->''embeddings''->0->>''embedding'''
);

Remplacez sk-**** par votre clé API.

Étape 3 : Insérer du texte et des embeddings

Insérez chaque ligne en appelant rds_embedding.get_embedding_by_model() en ligne. La fonction appelle l'API du modèle et renvoie le vecteur d'embedding pour le texte donné.

INSERT INTO test SELECT 'Windy high sky, apes cry sadly',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Windy high sky, apes cry sadly')::real[];

INSERT INTO test SELECT 'Clear islet, white sand, birds fly back',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Clear islet, white sand, birds fly back')::real[];

INSERT INTO test SELECT 'Boundless falling leaves rustle down',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Boundless falling leaves rustle down')::real[];

INSERT INTO test SELECT 'Endless Yangtze River rolls on',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Endless Yangtze River rolls on')::real[];

Remplacez sk-**** par votre clé API.

Étape 4 : Interroger par similarité vectorielle

Utilisez l'opérateur <=> (distance cosinus) pour classer les lignes par similarité sémantique avec une chaîne de requête. Une distance de 0 signifie que les vecteurs sont identiques ; des valeurs plus faibles indiquent une plus grande similarité.

SELECT
    info,
    vec <=> rds_embedding.get_embedding_by_model(
        'text-embedding-v3',
        'sk-****',
        'Endless Yangtze River rolls on'
    )::real[]::vector AS distance
FROM
    test
ORDER BY
    vec <=> rds_embedding.get_embedding_by_model(
        'text-embedding-v3',
        'sk-****',
        'Endless Yangtze River rolls on'
    )::real[]::vector;

Remplacez sk-**** par votre clé API.

Sortie attendue :

info                                     |      distance
-----------------------------------------+--------------------
 Endless Yangtze River rolls on          |                  0
 Boundless falling leaves rustle down    | 0.42740682200152647
 Clear islet, white sand, birds fly back | 0.5161883811726116
 Windy high sky, apes cry sadly          | 0.5247695147991147
(4 rows)

La requête renvoie « Endless Yangtze River rolls on » en premier (distance 0, correspondance exacte), suivi de « Boundless falling leaves rustle down » comme voisin sémantique le plus proche.

Références

Récupérer des embeddings en utilisant directement l'API du modèle

Pour vérifier l'endpoint du modèle ou résoudre les problèmes liés à la génération d'embeddings, envoyez une requête POST directement à l'aide de curl.

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v3",
    "input": {
        "texts": [
            "Windy high sky, apes cry sadly",
            "Clear islet, white sand, birds fly back",
            "Boundless falling leaves rustle down",
            "Endless Yangtze River rolls on"
        ]
    },
    "parameters": {
        "text_type": "query"
    }
}'
ParamètreValeur d'exempleDescription
locationhttps://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

L'URL de l'endpoint du modèle d'embedding de texte.
En-tête AuthorizationAuthorization: Bearer sk-****Format : Authorization: Bearer <API-KEY>. Pour obtenir une clé API, consultez la rubrique Obtenir votre clé API.
En-tête Content-Typeapplication/jsonValeur fixe.
modeltext-embedding-v3Le nom du modèle à appeler.
input.textsTableau de chaînesLe contenu textuel à intégrer (embed).
parameters.text_typequeryParamètres de requête supplémentaires. Ceux-ci varient selon le modèle. Consultez la documentation du modèle d'embedding de texte pour obtenir la liste complète.

Fonctions fournies par l'extension rds_embedding

Exécutez la commande psql suivante pour répertorier tous les objets de l'extension :

\dx+ rds_embedding
             Objects in extension "rds_embedding"
                      Object description
---------------------------------------------------------------
 function rds_embedding.add_model(text,text,text,text,text)
 function rds_embedding.del_model(text)
 function rds_embedding.get_embedding_by_model(text,text,text)
 function rds_embedding.get_response_by_model(text,text,text)
 function rds_embedding.show_models()
 function rds_embedding.update_model(text,text,text,text,text)
 schema rds_embedding
 table rds_embedding.models
(8 rows)

rds_embedding.add_model()

Ajoute un modèle d'embedding à la table rds_embedding.models.

rds_embedding.add_model(mname text, murl text, mauth_header_template text, mbody_template text, membedding_path text)
Paramètre Type Exemple Description
mname text text-embedding-v3 Le nom du modèle. Utilisé pour identifier le modèle lors de l'appel d'autres fonctions.
murl text https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding L'endpoint HTTP du modèle. Consultez la documentation du modèle d'embedding de texte pour connaître l'URL.
mauth_header_template text Authorization: Bearer sk-**** L'en-tête d'autorisation pour la requête POST. Format : Authorization: Bearer <API-KEY>.
mbody_template text {"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}} Le corps de la requête POST. Utilisez %s comme espace réservé pour le texte d'entrée ; il sera remplacé par le texte réel au moment de l'appel. Consultez la documentation du modèle d'embedding de texte pour connaître la structure du corps pour différents modèles.
membedding_path text ->''output''->''embeddings''->0->>''embedding'' Le chemin JSON pour extraire l'embedding de la réponse. Le chemin d'exemple traverse : l'objet output → le tableau embeddings → le premier élément (0) → la valeur de chaîne embedding. Assurez-vous que ce chemin correspond à la structure réelle de la réponse de votre modèle.
Important

Vérifiez que membedding_path correspond à la structure JSON renvoyée par votre modèle avant de l'utiliser. Un chemin incorrect entraîne des échecs d'extraction ou des erreurs. Pour connaître la structure de réponse attendue, consultez les exemples de réponse dans la documentation du modèle d'embedding de texte.

rds_embedding.get_embedding_by_model()

Renvoie le vecteur d'embedding pour le texte spécifié en appelant le modèle enregistré.

rds_embedding.get_embedding_by_model(mname text, api-key text, texts text)
Paramètre Type Exemple Description
mname text text-embedding-v3 Le nom du modèle, tel qu'enregistré avec add_model().
api-key text sk-**** La clé API pour le modèle. Pour en obtenir une, consultez la rubrique Obtenir votre clé API.
texts text Windy high sky, apes cry sadly Le texte d'entrée à intégrer (embed).

rds_embedding.del_model()

Supprime un modèle de la table rds_embedding.models.

rds_embedding.del_model(mname text)
Paramètre Type Exemple Description
mname text text-embedding-v3 Le nom du modèle à supprimer.

rds_embedding.update_model()

Met à jour un modèle existant dans la table rds_embedding.models. Accepte les mêmes paramètres que rds_embedding.add_model().

rds_embedding.show_models()

Répertorie tous les modèles actuellement enregistrés dans la table rds_embedding.models.

Remarque

rds_embedding.get_response_by_model() n'est pas encore disponible.