Vectoriseur d’API web personnalisée

Note

Recherche Azure AI est disponible via le portail Azure, les API REST et les SDK Azure. Il sous-tend également Foundry IQ, la couche de connaissances managée qui transforme le contenu d’entreprise en bases de connaissances réutilisables et prenant en charge les autorisations pour les agents dans le portail Microsoft Foundry.

Le vectoriseur d’API web personnalisé vous permet de configurer des requêtes de recherche pour appeler un point de terminaison d’API web qui génère des incorporations au moment de la requête. La structure de charge utile JSON requise pour le point de terminaison est décrite plus loin dans cet article. Vos données sont traitées dans la géographie où votre modèle est déployé.

Bien que les vectoriseurs soient utilisés au moment de la requête, vous les spécifiez dans les définitions d’index et les référencez sur les champs vectoriels via un profil vectoriel. Pour plus d’informations, consultez Configurer un vectoriseur dans un index de recherche.

Le vectoriseur d’API web personnalisé est appelé WebApiVectorizer dans l’API REST. Utilisez la dernière version stable de Indexes - Créer (API REST) ou un package sdk Azure qui fournit la fonctionnalité.

Paramètres du vectoriseur

Les paramètres sont sensibles à la casse.

Nom du paramètre Descriptif
uri URI de l’API web à laquelle la charge utile JSON est envoyée. Seul le schéma d’URI https est autorisé. Lorsque vous récupérez l’index avec GET, le service renvoie la valeur du paramètre de requête ?code= sous la forme ?code=<redacted> afin d’éviter l’exposition des clés de fonction. Pour mettre à jour le vectoriseur sans modifier l’URI stocké, définissez uri sur <unchanged>.
httpMethod Méthode utilisée pour envoyer la charge utile. Les méthodes autorisées sont PUT ou POST.
httpHeaders Collection de paires clé-valeur dans laquelle les clés sont des noms d’en-tête et des valeurs sont envoyées à votre API web. Les en-têtes suivants sont interdits : Accept, Accept-CharsetAccept-EncodingContent-LengthContent-TypeCookie, Host, TE, Upgradeet .Via GET retourne la valeur <redacted> sentinelle pour chaque valeur d’en-tête. Pour connaître les exigences de mise à jour, consultez Mettre à jour les valeurs d’en-tête après GET.
authResourceId (Facultatif) Chaîne qui, si elle est définie, indique que ce vectoriseur utilise une identité managée pour la connexion à la fonction ou à l’application hébergeant le code. Cette propriété accepte un identifiant d'application (client) ou une inscription d'application dans Microsoft Entra ID dans l’un des formats suivants : api://<appId>, <appId>/.default, api://<appId>/.default. Cette valeur étend le jeton d’authentification récupéré par le pipeline de requête et envoyé avec la demande d’API web personnalisée à la fonction ou à l’application. La définition de cette propriété nécessite que votre search service soit configurée pour l’identité managée et que votre application de fonction Azure est configurée pour la connexion Microsoft Entra.
authIdentity (Facultatif) Identité managée par l’utilisateur utilisée par l’search service pour se connecter à la fonction ou à l’application hébergeant le code. Vous pouvez utiliser une identité gérée par le système ou gérée par l’utilisateur. Pour utiliser une identité managée par le système, laissez authIdentity vide.
timeout (Facultatif) Le délai d’expiration pour le client HTTP effectuant l’appel d’API. Elle doit être mise en forme sous forme de valeur XSD dayTimeDuration (sous-ensemble restreint d’une valeur de durée ISO 8601 ). Par exemple, PT60S cela signifie 60 secondes. S’il n’est pas défini, la valeur par défaut est de 30 secondes. Le délai d’expiration peut être compris entre 1 et 230 secondes.

Types de requêtes vectorielles pris en charge

Le vectoriseur d’API web personnalisée prend en charge les requêtes vectorielles text, imageUrl et imageBinary.

Exemple de définition

"vectorizers": [
    {
        "name": "my-custom-web-api-vectorizer",
        "kind": "customWebApi",
        "customWebApiParameters": {
            "uri": "https://contoso.embeddings.com",
            "httpMethod": "POST",
            "httpHeaders": {
                "api-key": "<your-header-value>"
            },
            "timeout": "PT60S",
            "authResourceId": null,
            "authIdentity": null
        }
    }
]

Mettre à jour les valeurs d’en-tête après GET

Lorsque vous récupérez une définition d’index, le service retourne la sentinelle <redacted> pour chaque httpHeaders valeur dans un vectoriseur d’API web personnalisé. Par exemple:

{
    "name": "my-custom-web-api-vectorizer",
    "kind": "customWebApi",
    "customWebApiParameters": {
        "uri": "https://contoso.embeddings.com",
        "httpMethod": "POST",
        "httpHeaders": {
            "api-key": "<redacted>"
        },
        "timeout": "PT60S",
        "authResourceId": null,
        "authIdentity": null
    }
}

Pour réutiliser la valeur stockée api-key , mettez à jour le même vectoriseur existant avec le même name vectoriseur et kindlaissez-le uri inchangé, puis soumettez à nouveau la sentinelle pour le nom d’en-tête correspondant :

{
    "name": "my-custom-web-api-vectorizer",
    "kind": "customWebApi",
    "customWebApiParameters": {
        "uri": "https://contoso.embeddings.com",
        "httpMethod": "POST",
        "httpHeaders": {
            "api-key": "<redacted>"
        },
        "timeout": "PT60S",
        "authResourceId": null,
        "authIdentity": null
    }
}

Avec un changement, urivous pouvez combiner <redacted> des valeurs d’en-tête conservées avec des valeurs de remplacement réelles pour d’autres en-têtes existants. Fournissez une valeur réelle pour chaque en-tête ajouté ou renommé, car la sentinelle s’applique uniquement à un en-tête existant portant le même nom sur le même vectoriseur.

Si vous modifiez le uri, fournissez des valeurs réelles pour chaque httpHeaders entrée dans la même mise à jour. Le service ne réutilise pas les valeurs stockées pour un autre uri:

{
    "name": "my-custom-web-api-vectorizer",
    "kind": "customWebApi",
    "customWebApiParameters": {
        "uri": "https://new.contoso.embeddings.com",
        "httpMethod": "POST",
        "httpHeaders": {
            "api-key": "<new-header-value>"
        },
        "timeout": "PT60S",
        "authResourceId": null,
        "authIdentity": null
    }
}

Si les informations d’identification ne sont pas disponibles et que vous devez modifier, urifaire pivoter ou régénérer les informations d’identification sur le point de terminaison externe. Envoyez ensuite les nouvelles uri valeurs et les valeurs d’en-tête ensemble.

La <redacted> valeur est une sentinelle de service, et non des informations d’identification. Il ne peut pas créer de vectoriseur ni récupérer ou réutiliser une valeur d’en-tête stockée pour un autre vectoriseur.

Structure de charge utile JSON

La structure de charge utile JSON requise pour un point de terminaison utilisé avec le vectoriseur d’API web personnalisée est identique à la structure utilisée par la compétence API web personnalisée. Pour plus d’informations, consultez la documentation relative aux compétences.

Gardez à l’esprit les considérations suivantes lors de l’implémentation d’un point de terminaison d’API web pour le vectoriseur d’API web personnalisé :

  • Le vectoriseur envoie un seul enregistrement à la fois dans le tableau values lors de l’envoi d’une requête au point de terminaison.

  • Le vectoriseur transmet les données à vectoriser dans une clé spécifique dans l’objet JSON data dans la charge utile de la requête. Cette clé est text, imageUrl ou imageBinary, selon le type de requête vectorielle demandée.

  • Le vectoriseur s’attend à ce que l’incorporation obtenue se trouve sous la clé vector dans l’objet JSON data dans la charge utile de réponse.

  • Le vectoriseur ignore les erreurs ou avertissements retournés par le point de terminaison. Ces erreurs et avertissements ne sont pas disponibles pour le débogage au moment de la requête.

  • Si une requête vectorielle imageBinary a été demandée, la charge utile de la requête envoyée au point de terminaison est la suivante :

    {
        "values": [
            {
                "recordId": "0",
                "data":
                {
                    "imageBinary": {
                        "data": "<base 64 encoded image binary data>"
                    }
                }
            }
        ]
    }
    

Voir aussi