Liaison d’entrée de recherche sémantique Azure OpenAI pour Azure Functions

Important

L’extension Azure OpenAI pour Azure Functions est actuellement en préversion.

La liaison d’entrée de recherche sémantique Azure OpenAI vous permet d’utiliser la recherche sémantique sur vos incorporations.

Pour plus d’informations sur l’installation et la configuration de l’extension Azure OpenAI, consultez Extensions Azure OpenAI pour Azure Functions. Pour en savoir plus sur le classement sémantique dans Recherche IA Azure, veuillez consulter la rubrique Classement par ordre de priorité sémantique dans Recherche Azure AI.

Remarque

Les références et les exemples sont fournis uniquement pour le modèle Node.js v4.

Remarque

Les références et exemples sont fournis uniquement pour le modèle Python v2.

Remarque

Bien que les deux modèles de processus C# soient pris en charge, seuls les exemples de modèles worker isolés sont fournis.

Exemple :

Le support Go n’est pas disponible pour ce liaison pour le moment.

Cet exemple montre comment effectuer une recherche sémantique sur un fichier.

[Function("PromptFile")]
public static IActionResult PromptFile(
    [HttpTrigger(AuthorizationLevel.Function, "post")] SemanticSearchRequest unused,
    [SemanticSearchInput("AISearchEndpoint", "openai-index", Query = "{prompt}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", AIConnectionName = "AzureOpenAI")] SemanticSearchContext result)
{
    return new ContentResult { Content = result.Response, ContentType = "text/plain" };
}

Cet exemple montre comment effectuer une recherche sémantique sur un fichier.

@FunctionName("PromptFile")
public HttpResponseMessage promptFile(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.FUNCTION)
        HttpRequestMessage<SemanticSearchRequest> request,
    @SemanticSearch(name = "search", searchConnectionName = "AISearchEndpoint", collection = "openai-index", query = "{prompt}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", isReasoningModel = false, aiConnectionName = "AzureOpenAI" ) String semanticSearchContext,
    final ExecutionContext context) {
        String response = new JSONObject(semanticSearchContext).getString("Response");
        return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response)
        .build();        
}
public class SemanticSearchRequest {
    public String prompt;
    public String getPrompt() {
        return prompt;
    }
    public void setPrompt(String prompt) {
        this.prompt = prompt;
    }        
}

Cet exemple montre comment effectuer une recherche sémantique sur un fichier.

const semanticSearchInput = input.generic({
    type: "semanticSearch",
    searchConnectionName: "AISearchEndpoint",
    collection: "openai-index",
    query: "{prompt}",
    chatModel: "%CHAT_MODEL_DEPLOYMENT_NAME%",
    embeddingsModel: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
    aiConnectionName: 'AzureOpenAI',
});

app.http('PromptFile', {
    methods: ['POST'],
    authLevel: 'function',
    extraInputs: [semanticSearchInput],
    handler: async (_request, context) => {
        var responseBody = context.extraInputs.get(semanticSearchInput)

        return { status: 200, body: responseBody.Response.trim() }
    }
});
const semanticSearchInput = input.generic({
    type: "semanticSearch",
    searchConnectionName: "AISearchEndpoint",
    collection: "openai-index",
    query: "{prompt}",
    chatModel: "%CHAT_MODEL_DEPLOYMENT_NAME%",
    aiConnectionName: 'AzureOpenAI',
    embeddingsModel: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
});

app.http('PromptFile', {
    methods: ['POST'],
    authLevel: 'function',
    extraInputs: [semanticSearchInput],
    handler: async (_request, context) => {
        var responseBody: any = context.extraInputs.get(semanticSearchInput)

        return { status: 200, body: responseBody.Response.trim() }
    }
});

Cet exemple montre comment effectuer une recherche sémantique sur un fichier.

Voici le fichier function.json pour inviter un fichier :

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "SemanticSearchInput",
      "type": "semanticSearch",
      "direction": "in",
      "searchConnectionName": "AISearchEndpoint",
      "collection": "openai-index",
      "query": "{prompt}",
      "chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%",
      "embeddingsModel": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
      "aiConnectionName": "AzureOpenAI"
    }
  ]
}

Pour plus d’informations sur les propriétés du fichier function.json, consultez la section Configuration.

using namespace System.Net

param($Request, $TriggerMetadata, $SemanticSearchInput)

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body       = $SemanticSearchInput.Response
    })

Cet exemple montre comment effectuer une recherche sémantique sur un fichier.

@app.function_name("PromptFile")
@app.route(methods=["POST"])
@app.semantic_search_input(
    arg_name="result",
    search_connection_name="AISearchEndpoint",
    collection="openai-index",
    query="{prompt}",
    embeddings_model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
    ai_connection_name="AzureOpenAI",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
)
def prompt_file(req: func.HttpRequest, result: str) -> func.HttpResponse:
    result_json = json.loads(result)
    response_json = {
        "content": result_json.get("Response"),
        "content_type": "text/plain",
    }
    return func.HttpResponse(
        json.dumps(response_json), status_code=200, mimetype="application/json"
    )

Attributs

Appliquez l’attribut SemanticSearchInput pour définir une liaison d’entrée de recherche sémantique, qui prend en charge ces paramètres :

Paramètre Descriptif
SearchConnectionName Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison.
Collection Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison.
Requête Texte de requête sémantique à utiliser pour la recherche. Cette propriété prend en charge les expressions de liaison.
EmbeddingsModel Facultatif. ID du modèle à utiliser pour les incorporations. La valeur par défaut est text-embedding-3-small. Cette propriété prend en charge les expressions de liaison.
ChatModel Facultatif. Obtient ou définit le nom du modèle de langage volumineux à appeler pour les réponses de conversation. La valeur par défaut est gpt-3.5-turbo. Cette propriété prend en charge les expressions de liaison.
AIConnectionName Facultatif. Obtient ou définit le nom de la section de configuration pour les paramètres de connectivité du service IA. Pour Azure OpenAI : s’il est spécifié, recherche les valeurs « Point de terminaison » et « Clé » dans cette section de configuration. S’il n’existe pas ou si la section n’existe pas, revient aux variables d’environnement : AZURE_OPENAI_ENDPOINT et AZURE_OPENAI_KEY. Pour l’authentification d’identité managée affectée par l’utilisateur, cette propriété est requise. Pour le service OpenAI (non-Azure), définissez la variable d’environnement OPENAI_API_KEY.
SystemPrompt Facultatif. Obtient ou définit l’invite système à utiliser pour inviter le modèle de langage volumineux. L’invite système est ajoutée avec des connaissances extraites à la suite du Query. L’invite combinée est envoyée à l’API OpenAI Chat. Cette propriété prend en charge les expressions de liaison.
MaxKnowledgeCount Facultatif. Obtient ou définit le nombre d’éléments de connaissances à injecter dans le SystemPrompt.
IsReasoningModel Facultatif. Obtient ou définit une valeur indiquant si le modèle d’achèvement de conversation est un modèle de raisonnement. Cette option est expérimentale et associée au modèle de raisonnement jusqu’à ce que tous les modèles aient une parité dans les propriétés attendues, avec une valeur par défaut de false.

Commentaires

L’annotation SemanticSearchInput vous permet de définir une liaison d’entrée de recherche sémantique, qui prend en charge ces paramètres :

Élément Descriptif
nom Obtient ou définit le nom de la liaison d’entrée.
searchConnectionName Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison.
collection Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison.
requête Texte de requête sémantique à utiliser pour la recherche. Cette propriété prend en charge les expressions de liaison.
embeddingsModel Facultatif. ID du modèle à utiliser pour les incorporations. La valeur par défaut est text-embedding-3-small. Cette propriété prend en charge les expressions de liaison.
chatModel Facultatif. Obtient ou définit le nom du modèle de langage volumineux à appeler pour les réponses de conversation. La valeur par défaut est gpt-3.5-turbo. Cette propriété prend en charge les expressions de liaison.
aiConnectionName Facultatif. Obtient ou définit le nom de la section de configuration pour les paramètres de connectivité du service IA. Pour Azure OpenAI : s’il est spécifié, recherche les valeurs « Point de terminaison » et « Clé » dans cette section de configuration. S’il n’existe pas ou si la section n’existe pas, revient aux variables d’environnement : AZURE_OPENAI_ENDPOINT et AZURE_OPENAI_KEY. Pour l’authentification d’identité managée affectée par l’utilisateur, cette propriété est requise. Pour le service OpenAI (non-Azure), définissez la variable d’environnement OPENAI_API_KEY.
systemPrompt Facultatif. Obtient ou définit l’invite système à utiliser pour inviter le modèle de langage volumineux. L’invite système est ajoutée avec des connaissances extraites à la suite du Query. L’invite combinée est envoyée à l’API OpenAI Chat. Cette propriété prend en charge les expressions de liaison.
maxKnowledgeCount Facultatif. Obtient ou définit le nombre d’éléments de connaissances à injecter dans le SystemPrompt.
isReasoningModel Facultatif. Obtient ou définit une valeur indiquant si le modèle d’achèvement de conversation est un modèle de raisonnement. Cette option est expérimentale et associée au modèle de raisonnement jusqu’à ce que tous les modèles aient une parité dans les propriétés attendues, avec une valeur par défaut de false.

Décorateurs

Pendant la préversion, définissez la liaison d’entrée en tant que liaison generic_input_binding de type semanticSearch, qui prend en charge ces paramètres :

Paramètre Descriptif
arg_name Le nom de la variable qui représente le paramètre de liaison.
search_connection_name Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison.
collection Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison.
requête Texte de requête sémantique à utiliser pour la recherche. Cette propriété prend en charge les expressions de liaison.
embeddings_model Facultatif. ID du modèle à utiliser pour les incorporations. La valeur par défaut est text-embedding-3-small. Cette propriété prend en charge les expressions de liaison.
chat_model Facultatif. Obtient ou définit le nom du modèle de langage volumineux à appeler pour les réponses de conversation. La valeur par défaut est gpt-3.5-turbo. Cette propriété prend en charge les expressions de liaison.
ai_connection_name Facultatif. Obtient ou définit le nom de la section de configuration pour les paramètres de connectivité du service IA. Pour Azure OpenAI : s’il est spécifié, recherche les valeurs « Point de terminaison » et « Clé » dans cette section de configuration. S’il n’existe pas ou si la section n’existe pas, revient aux variables d’environnement : AZURE_OPENAI_ENDPOINT et AZURE_OPENAI_KEY. Pour l’authentification d’identité managée affectée par l’utilisateur, cette propriété est requise. Pour le service OpenAI (non-Azure), définissez la variable d’environnement OPENAI_API_KEY.
system_prompt Facultatif. Obtient ou définit l’invite système à utiliser pour inviter le modèle de langage volumineux. L’invite système est ajoutée avec des connaissances extraites à la suite du Query. L’invite combinée est envoyée à l’API OpenAI Chat. Cette propriété prend en charge les expressions de liaison.
max_knowledge_count Facultatif. Obtient ou définit le nombre d’éléments de connaissances à injecter dans le SystemPrompt.
is_reasoning _model Facultatif. Obtient ou définit une valeur indiquant si le modèle d’achèvement de conversation est un modèle de raisonnement. Cette option est expérimentale et associée au modèle de raisonnement jusqu’à ce que tous les modèles aient une parité dans les propriétés attendues, avec une valeur par défaut de false.

Paramétrage

La liaison prend en charge ces propriétés de configuration que vous définissez dans le fichier function.json.

Propriété Descriptif
type Doit être semanticSearch.
direction Doit être in.
nom Le nom de la liaison d’entrée.
searchConnectionName Obtient ou définit le nom d’un paramètre d’application ou d’une variable d’environnement qui contient une valeur de chaîne de connexion. Cette propriété prend en charge les expressions de liaison.
collection Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison.
requête Texte de requête sémantique à utiliser pour la recherche. Cette propriété prend en charge les expressions de liaison.
embeddingsModel Facultatif. ID du modèle à utiliser pour les incorporations. La valeur par défaut est text-embedding-3-small. Cette propriété prend en charge les expressions de liaison.
chatModel Facultatif. Obtient ou définit le nom du modèle de langage volumineux à appeler pour les réponses de conversation. La valeur par défaut est gpt-3.5-turbo. Cette propriété prend en charge les expressions de liaison.
aiConnectionName Facultatif. Obtient ou définit le nom de la section de configuration pour les paramètres de connectivité du service IA. Pour Azure OpenAI : s’il est spécifié, recherche les valeurs « Point de terminaison » et « Clé » dans cette section de configuration. S’il n’existe pas ou si la section n’existe pas, revient aux variables d’environnement : AZURE_OPENAI_ENDPOINT et AZURE_OPENAI_KEY. Pour l’authentification d’identité managée affectée par l’utilisateur, cette propriété est requise. Pour le service OpenAI (non-Azure), définissez la variable d’environnement OPENAI_API_KEY.
systemPrompt Facultatif. Obtient ou définit l’invite système à utiliser pour inviter le modèle de langage volumineux. L’invite système est ajoutée avec des connaissances extraites à la suite du Query. L’invite combinée est envoyée à l’API OpenAI Chat. Cette propriété prend en charge les expressions de liaison.
maxKnowledgeCount Facultatif. Obtient ou définit le nombre d’éléments de connaissances à injecter dans le SystemPrompt.
isReasoningModel Facultatif. Obtient ou définit une valeur indiquant si le modèle d’achèvement de conversation est un modèle de raisonnement. Cette option est expérimentale et associée au modèle de raisonnement jusqu’à ce que tous les modèles aient une parité dans les propriétés attendues, avec une valeur par défaut de false.

Paramétrage

La liaison prend en charge ces propriétés, qui sont définies dans votre code :

Propriété Descriptif
searchConnectionName Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison.
collection Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison.
requête Texte de requête sémantique à utiliser pour la recherche. Cette propriété prend en charge les expressions de liaison.
embeddingsModel Facultatif. ID du modèle à utiliser pour les incorporations. La valeur par défaut est text-embedding-3-small. Cette propriété prend en charge les expressions de liaison.
chatModel Facultatif. Obtient ou définit le nom du modèle de langage volumineux à appeler pour les réponses de conversation. La valeur par défaut est gpt-3.5-turbo. Cette propriété prend en charge les expressions de liaison.
aiConnectionName Facultatif. Obtient ou définit le nom de la section de configuration pour les paramètres de connectivité du service IA. Pour Azure OpenAI : s’il est spécifié, recherche les valeurs « Point de terminaison » et « Clé » dans cette section de configuration. S’il n’existe pas ou si la section n’existe pas, revient aux variables d’environnement : AZURE_OPENAI_ENDPOINT et AZURE_OPENAI_KEY. Pour l’authentification d’identité managée affectée par l’utilisateur, cette propriété est requise. Pour le service OpenAI (non-Azure), définissez la variable d’environnement OPENAI_API_KEY.
systemPrompt Facultatif. Obtient ou définit l’invite système à utiliser pour inviter le modèle de langage volumineux. L’invite système est ajoutée avec des connaissances extraites à la suite du Query. L’invite combinée est envoyée à l’API OpenAI Chat. Cette propriété prend en charge les expressions de liaison.
maxKnowledgeCount Facultatif. Obtient ou définit le nombre d’éléments de connaissances à injecter dans le SystemPrompt.
isReasoningModel Facultatif. Obtient ou définit une valeur indiquant si le modèle d’achèvement de conversation est un modèle de raisonnement. Cette option est expérimentale et associée au modèle de raisonnement jusqu’à ce que tous les modèles aient une parité dans les propriétés attendues, avec une valeur par défaut de false.

Utilisation

Pour obtenir des exemples complets, consultez la section Exemple.

Connections

Pour utiliser l’extension de liaison Azure OpenAI, vous devez spécifier une connexion à une définition de modèle OpenAI. Configurez la connexion du modèle OpenAI dans vos liaisons en utilisant l’une de ces approches :

  • Utilisez la AIConnectionName propriété de liaison (préférée pour Azure OpenAI).
  • Définissez AZURE_OPENAI_ENDPOINT et AZURE_OPENAI_KEY dans les paramètres de l’application (pour Azure OpenAI).
  • Réglez uniquement Open_API_Key dans les paramètres de l’application (pour https://api.openai.com).

La façon dont vous définissez la connexion dépend à la fois de l’API du modèle et de la méthode d’authentification, comme indiqué par le tableau suivant :

API d’authentification/modèle Azure OpenAI OpenAI (https://api.openai.com)
Connexion d’identité gérée AIConnectionName Non pris en charge
Référence Key Vault AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
Référence de configuration de l’application AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
Secret partagé AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key

Utilisez des connexions basées sur l’identité et la AIConnectionName propriété.

Lorsque vous utilisez AIConnectionName, la valeur de ce réglage de propriété dépend du type de connexion :

  • Connexion d’identité gérée : Cette AIConnectionName propriété est <CONNECTION_NAME_PREFIX> partagée par un groupe de paramètres qui définissent ensemble une connexion basée sur l’identité avec Azure OpenAI. Pour plus d’informations, voir Définir les connexions identités.
  • Référence Key Vault : Le AIConnectionName paramètre de propriété renvoie une référence Azure Key Vault à l’emplacement où la clé API est centralisée. Pour plus d’informations, voir Définir les connexions Key Vault.
  • Référence App Configuration : Le AIConnectionName paramètre de propriété renvoie une référence Azure App Configuration qui renvoie une clé API ou une référence Key Vault. Pour plus d’informations, consultez Azure App Configuration dans l’article sur les connexions.
  • Clé API : Le AIConnectionName paramètre de propriété se résout aux paramètres de l’application contenant directement le point de terminaison et la clé. Comme les clés partagées peuvent être compromises, utilisez des connexions d’identité gérées lorsque cela est possible. Pour plus d’informations, voir Définir les connexions.

Pour en savoir plus sur les connexions de liaisons, voir Gérer les connexions dans Azure Functions.

Les liaisons OpenAI incluent une AIConnectionName propriété que vous pouvez utiliser pour spécifier le <ConnectionNamePrefix> groupe de paramètres d’application qui définissent la connexion à Azure OpenAI :

Nom de la configuration Descriptif
<CONNECTION_NAME_PREFIX>__endpoint Définit le point de terminaison URI du service Azure OpenAI. Ce paramètre est toujours requis.
<CONNECTION_NAME_PREFIX>__clientId Définit l’identité affectée par l’utilisateur spécifique à utiliser lors de l’obtention d’un jeton d’accès. Exige que <CONNECTION_NAME_PREFIX>__credential soit défini sur managedidentity. La propriété accepte un ID client correspondant à une identité attribuée par l’utilisateur affectée à l’application. Il incorrect de spécifier à la fois un ID de la ressource et un ID client. Si vous ne spécifiez pas cette propriété, l’identité attribuée par le système est utilisée. Cette propriété est utilisée différemment dans des scénarios de développement local lorsque credential ne doit pas être défini.
<CONNECTION_NAME_PREFIX>__credential Définit la façon dont un jeton access est obtenu pour la connexion. Utiliser managedidentity pour l’authentification d’identité managée. Cette valeur n’est valide que lorsqu’une identité managée est disponible dans l’environnement d’hébergement.
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId Lorsque credential est défini à managedidentity, définissez cette propriété pour spécifier l’identifiant de ressource à utiliser lors de l’obtention d’un jeton. La propriété accepte un identifiant de ressource correspondant à l’ID de la ressource de l’identité managée définie par l’utilisateur. Il n’est pas correct de spécifier à la fois un ID de la ressource et un ID client. Si vous ne spécifiez ni l’un ni l’autre, l’identité attribuée par le système est utilisée. Cette propriété est utilisée différemment dans des scénarios de développement local lorsque credential ne doit pas être défini.
<CONNECTION_NAME_PREFIX>__key Définit la clé secrète partagée nécessaire pour accéder au point de terminaison du service OpenAI Azure en utilisant une authentification basée sur une clé. En guise de bonne pratique en matière de sécurité, utilisez toujours Microsoft Entra ID avec des identités gérées pour l’authentification.

Considérez ces paramètres de connexion d’identité gérée lorsque vous définissez la AIConnectionName propriété à myAzureOpenAI:

  • myAzureOpenAI__endpoint=https://contoso.openai.azure.com/
  • myAzureOpenAI__credential=managedidentity
  • myAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222

À l’exécution, l’hôte interprète ces paramètres comme un seul myAzureOpenAI paramètre :

"myAzureOpenAI":
{
    "endpoint": "https://contoso.openai.azure.com/",
    "credential": "managedidentity",
    "clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}

Lorsque vous utilisez des identités gérées, assurez-vous d’ajouter votre identité au rôle d’utilisateur OpenAI des services cognitifs .

Lors de l’exécution locale, ajoutez ces paramètres au fichierlocal.settings.json projet. Pour plus d’informations, consultez Développement local avec des connexions basées sur des identités.

Pour plus d’informations, consultez Utiliser des paramètres d’application.