Azure OpenAI-Einbettungseingabebindung für Azure Functions

Wichtig

Die Azure OpenAI-Erweiterung für Azure Functions befindet sich derzeit in der Vorschau.

Mit der Azure OpenAI-Einbettungseingabebindung können Sie Einbettungen für Eingaben generieren. Die Bindung kann Einbettungen aus Dateien oder unformatierten Texteingaben generieren.

Informationen zu Einrichtungs- und Konfigurationsdetails der Azure OpenAI-Erweiterung finden Sie unter Azure OpenAI-Erweiterungen für Azure Functions. Weitere Informationen zu Einbettungen in Azure OpenAI-Dienst finden Sie unter Grundlegendes zu Einbettungen in Azure OpenAI Service.

Hinweis

Referenzen und Beispiele werden nur für das Node.js v4-Modell bereitgestellt.

Hinweis

Referenzen und Beispiele werden nur für das Python v2-Modell bereitgestellt.

Hinweis

Während beide C#-Prozessmodelle unterstützt werden, werden nur Isolierte Arbeitsmodellbeispiele bereitgestellt.

Beispiel

Go-Support ist derzeit nicht für diese Bindung verfügbar.

In diesem Beispiel wird gezeigt, wie Einbettungen für eine unformatierte Textzeichenfolge generiert werden.

internal class EmbeddingsRequest
{
    [JsonPropertyName("rawText")]
    public string? RawText { get; set; }

    [JsonPropertyName("filePath")]
    public string? FilePath { get; set; }

    [JsonPropertyName("url")]
    public string? Url { get; set; }
}

/// <summary>
/// Example showing how to use the <see cref="EmbeddingsAttribute"/> input binding to generate embeddings 
/// for a raw text string.
/// </summary>
[Function(nameof(GenerateEmbeddings_Http_RequestAsync))]
public async Task GenerateEmbeddings_Http_RequestAsync(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings")] HttpRequestData req,
    [EmbeddingsInput("{rawText}", InputType.RawText, EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", AIConnectionName = "AzureOpenAI")] EmbeddingsContext embeddings)
{
    using StreamReader reader = new(req.Body);
    string request = await reader.ReadToEndAsync();

    EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);

    this.logger.LogInformation(
        "Received {count} embedding(s) for input text containing {length} characters.",
        embeddings.Count,
        requestBody?.RawText?.Length);

    // TODO: Store the embeddings into a database or other storage.
}

In diesem Beispiel wird gezeigt, wie Einbettungen abgerufen werden, die in einer angegebenen Datei gespeichert sind, auf die für die Funktion zugegriffen werden kann.

[Function(nameof(GetEmbeddings_Http_FilePath))]
public async Task GetEmbeddings_Http_FilePath(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings-from-file")] HttpRequestData req,
    [EmbeddingsInput("{filePath}", InputType.FilePath, MaxChunkLength = 512, EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", AIConnectionName = "AzureOpenAI")] EmbeddingsContext embeddings)
{
    using StreamReader reader = new(req.Body);
    string request = await reader.ReadToEndAsync();

    EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
    this.logger.LogInformation(
        "Received {count} embedding(s) for input file '{path}'.",
        embeddings.Count,
        requestBody?.FilePath);

    // TODO: Store the embeddings into a database or other storage.
}

In diesem Beispiel wird gezeigt, wie Einbettungen für eine unformatierte Textzeichenfolge generiert werden.

@FunctionName("GenerateEmbeddingsHttpRequest")
public HttpResponseMessage generateEmbeddingsHttpRequest(
        @HttpTrigger(
            name = "req", 
            methods = {HttpMethod.POST},
            authLevel = AuthorizationLevel.FUNCTION,
            route = "embeddings")
        HttpRequestMessage<EmbeddingsRequest> request,
        @EmbeddingsInput(name = "Embeddings", input = "{RawText}", inputType = InputType.RawText, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", aiConnectionName = "AzureOpenAI") String embeddingsContext,
        final ExecutionContext context) {

    if (request.getBody() == null) 
    {
        throw new IllegalArgumentException(
                "Invalid request body. Make sure that you pass in {\"rawText\": value } as the request body.");
    }

    JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);

    context.getLogger().info(String.format("Received %d embedding(s) for input text containing %s characters.",
            embeddingsContextJsonObject.get("count"),
            request.getBody().getRawText().length()));

    // TODO: Store the embeddings into a database or other storage.
    return request.createResponseBuilder(HttpStatus.ACCEPTED)
            .header("Content-Type", "application/json")
            .build();
}

In diesem Beispiel wird gezeigt, wie Einbettungen abgerufen werden, die in einer angegebenen Datei gespeichert sind, auf die für die Funktion zugegriffen werden kann.

@FunctionName("GenerateEmbeddingsHttpFilePath")
public HttpResponseMessage generateEmbeddingsHttpFilePath(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.FUNCTION,
        route = "embeddings-from-file")
    HttpRequestMessage<EmbeddingsRequest> request,
    @EmbeddingsInput(name = "Embeddings", input = "{FilePath}", inputType = InputType.FilePath, maxChunkLength = 512, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", aiConnectionName = "AzureOpenAI") String embeddingsContext,
    final ExecutionContext context) {

    if (request.getBody() == null) 
    {
        throw new IllegalArgumentException(
                "Invalid request body. Make sure that you pass in {\"filePath\": value } as the request body.");
    }

    JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);

    context.getLogger().info(String.format("Received %d embedding(s) for input file %s.",
            embeddingsContextJsonObject.get("count"),
            request.getBody().getFilePath()));

    // TODO: Store the embeddings into a database or other storage.
    return request.createResponseBuilder(HttpStatus.ACCEPTED)
            .header("Content-Type", "application/json")
            .build();
}

In diesem Beispiel wird gezeigt, wie Einbettungen für eine unformatierte Textzeichenfolge generiert werden.

const embeddingsHttpInput = input.generic({
    input: '{rawText}',
    inputType: 'RawText',
    type: 'embeddings',
    embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%',
    aiConnectionName: 'AzureOpenAI',
})

app.http('generateEmbeddings', {
    methods: ['POST'],
    route: 'embeddings',
    authLevel: 'function',
    extraInputs: [embeddingsHttpInput],
    handler: async (request, context) => {
        let requestBody = await request.json();
        let response = context.extraInputs.get(embeddingsHttpInput);

        context.log(
            `Received ${response.count} embedding(s) for input text containing ${requestBody.rawText?.length ?? 0} characters.`
        );
        
        // TODO: Store the embeddings into a database or other storage.

        return {status: 202}
    }
});
interface EmbeddingsHttpRequest {
    rawText?: string;
}

const embeddingsHttpInput = input.generic({
    input: '{rawText}',
    inputType: 'RawText',
    type: 'embeddings',
    embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%',
    aiConnectionName: 'AzureOpenAI',
})

app.http('generateEmbeddings', {
    methods: ['POST'],
    route: 'embeddings',
    authLevel: 'function',
    extraInputs: [embeddingsHttpInput],
    handler: async (request, context) => {
        let requestBody: EmbeddingsHttpRequest = await request.json();
        let response: any = context.extraInputs.get(embeddingsHttpInput);

        context.log(
            `Received ${response.count} embedding(s) for input text containing ${requestBody.rawText?.length ?? 0} characters.`
        );
        
        // TODO: Store the embeddings into a database or other storage.

        return {status: 202}
    }
});

In diesem Beispiel wird gezeigt, wie Einbettungen für eine unformatierte Textzeichenfolge generiert werden.


const embeddingsFilePathInput = input.generic({
    input: '{filePath}',
    inputType: 'FilePath',
    type: 'embeddings',
    maxChunkLength: 512,
    embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%',
    aiConnectionName: 'AzureOpenAI',
})

app.http('getEmbeddingsFilePath', {
    methods: ['POST'],
    route: 'embeddings-from-file',
    authLevel: 'function',
    extraInputs: [embeddingsFilePathInput],
    handler: async (request, context) => {
        let requestBody = await request.json();
        let response = context.extraInputs.get(embeddingsFilePathInput);

        context.log(
            `Received ${response.count} embedding(s) for input file ${requestBody.filePath}.`
        );
        
        // TODO: Store the embeddings into a database or other storage.

        return {status: 202}
    }
});

interface EmbeddingsFilePath {
    filePath?: string;
}

const embeddingsFilePathInput = input.generic({
    input: '{filePath}',
    inputType: 'FilePath',
    type: 'embeddings',
    maxChunkLength: 512,
    embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%',
    aiConnectionName: 'AzureOpenAI',
})

app.http('getEmbeddingsFilePath', {
    methods: ['POST'],
    route: 'embeddings-from-file',
    authLevel: 'function',
    extraInputs: [embeddingsFilePathInput],
    handler: async (request, context) => {
        let requestBody: EmbeddingsFilePath = await request.json();
        let response: any = context.extraInputs.get(embeddingsFilePathInput);

        context.log(
            `Received ${response.count} embedding(s) for input file ${requestBody.filePath}.`
        );
        
        // TODO: Store the embeddings into a database or other storage.

        return {status: 202}
    }
});

In diesem Beispiel wird gezeigt, wie Einbettungen für eine unformatierte Textzeichenfolge generiert werden.

Dies ist die function.json Datei zum Generieren der Einbettungen:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "embeddings",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "Embeddings",
      "type": "embeddings",
      "direction": "in",
      "inputType": "RawText",
      "input": "{rawText}",
      "embeddingsModel": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
      "aiConnectionName": "AzureOpenAI"
    }
  ]
}

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration.

using namespace System.Net

param($Request, $TriggerMetadata, $Embeddings)

$input = $Request.Body.RawText

Write-Host "Received $($Embeddings.Count) embedding(s) for input text containing $($input.Length) characters."

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::Accepted
})

In diesem Beispiel wird gezeigt, wie Einbettungen für eine unformatierte Textzeichenfolge generiert werden.

@app.function_name("GenerateEmbeddingsHttpRequest")
@app.route(route="embeddings", methods=["POST"])
@app.embeddings_input(
    arg_name="embeddings",
    input="{rawText}",
    input_type="rawText",
    embeddings_model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
    ai_connection_name="AzureOpenAI",
)
def generate_embeddings_http_request(
    req: func.HttpRequest, embeddings: str
) -> func.HttpResponse:
    user_message = req.get_json()
    embeddings_json = json.loads(embeddings)
    embeddings_request = {"raw_text": user_message.get("rawText")}
    logging.info(
        f'Received {embeddings_json.get("count")} embedding(s) for input text '
        f'containing {len(embeddings_request.get("raw_text"))} characters.'
    )
    # TODO: Store the embeddings into a database or other storage.
    return func.HttpResponse(status_code=200)

Attribute

Wenden Sie das EmbeddingsInput-Attribut an, um eine Einbettungseingabebindung zu definieren, die diese Parameter unterstützt:

Parameter Beschreibung
Eingabe Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen.
AIConnectionName Optional. Dient zum Abrufen oder Festlegen des Namens des Konfigurationsabschnitts für AI-Dienstkonnektivitätseinstellungen. Für Azure OpenAI: Wenn angegeben, suchen Sie in diesem Konfigurationsabschnitt nach "Endpunkt" und "Key". Wenn sie nicht angegeben ist oder der Abschnitt nicht vorhanden ist, kehren Sie auf Umgebungsvariablen zurück: AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_KEY. Für die vom Benutzer zugewiesene verwaltete Identitätsauthentifizierung ist diese Eigenschaft erforderlich. Legen Sie für openAI-Dienst (nicht azure) die OPENAI_API_KEY Umgebungsvariable fest.
EmbeddingsModel Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch.
MaxChunkLength Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch.
MaxOverlap Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest.
InputType Optional. Ruft den Typ der Eingabe ab.

Anmerkungen

Mit der EmbeddingsInput-Anmerkung können Sie eine Einbettungseingabebindung definieren, die diese Parameter unterstützt:

Element Beschreibung
Name Ruft den Namen der Eingabebindung ab oder legt ihn fest.
Eingabe Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen.
aiConnectionName Optional. Dient zum Abrufen oder Festlegen des Namens des Konfigurationsabschnitts für AI-Dienstkonnektivitätseinstellungen. Für Azure OpenAI: Wenn angegeben, suchen Sie in diesem Konfigurationsabschnitt nach "Endpunkt" und "Key". Wenn sie nicht angegeben ist oder der Abschnitt nicht vorhanden ist, kehren Sie auf Umgebungsvariablen zurück: AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_KEY. Für die vom Benutzer zugewiesene verwaltete Identitätsauthentifizierung ist diese Eigenschaft erforderlich. Legen Sie für openAI-Dienst (nicht azure) die OPENAI_API_KEY Umgebungsvariable fest.
embeddingsModel Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch.
maxChunkLength Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch.
maxOverlap Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest.
inputType Optional. Ruft den Typ der Eingabe ab.

Decorator-Elemente

Definieren Sie während der Vorschau die Eingabebindung als generic_input_binding-Bindung vom Typ „embeddings“, die diese Parameter unterstützt: embeddings-Decorator unterstützt die folgenden Parameter:

Parameter Beschreibung
arg_name Der Name der Variablen, die den Bindungsparameter darstellt.
Eingabe Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen.
ai_connection_name Optional. Dient zum Abrufen oder Festlegen des Namens des Konfigurationsabschnitts für AI-Dienstkonnektivitätseinstellungen. Für Azure OpenAI: Wenn angegeben, suchen Sie in diesem Konfigurationsabschnitt nach "Endpunkt" und "Key". Wenn sie nicht angegeben ist oder der Abschnitt nicht vorhanden ist, kehren Sie auf Umgebungsvariablen zurück: AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_KEY. Für die vom Benutzer zugewiesene verwaltete Identitätsauthentifizierung ist diese Eigenschaft erforderlich. Legen Sie für openAI-Dienst (nicht azure) die OPENAI_API_KEY Umgebungsvariable fest.
embeddings_model Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch.
maxChunkLength Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch.
max_overlap Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest.
input_type Ruft den Typ der Eingabe ab.

Konfiguration

Die Bindung unterstützt diese Konfigurationseigenschaften, die Sie in der Datei „function.json“ festlegen.

Eigenschaft Beschreibung
Typ Muss EmbeddingsInputlauten.
Richtung Muss inlauten.
Name Der Name der Eingabebindung.
Eingabe Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen.
aiConnectionName Optional. Dient zum Abrufen oder Festlegen des Namens des Konfigurationsabschnitts für AI-Dienstkonnektivitätseinstellungen. Für Azure OpenAI: Wenn angegeben, suchen Sie in diesem Konfigurationsabschnitt nach "Endpunkt" und "Key". Wenn sie nicht angegeben ist oder der Abschnitt nicht vorhanden ist, kehren Sie auf Umgebungsvariablen zurück: AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_KEY. Für die vom Benutzer zugewiesene verwaltete Identitätsauthentifizierung ist diese Eigenschaft erforderlich. Legen Sie für openAI-Dienst (nicht azure) die OPENAI_API_KEY Umgebungsvariable fest.
embeddingsModel Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch.
maxChunkLength Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch.
maxOverlap Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest.
inputType Optional. Ruft den Typ der Eingabe ab.

Konfiguration

Die Bindung unterstützt diese Eigenschaften, die in Ihrem Code definiert sind:

Eigenschaft Beschreibung
Eingabe Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen.
aiConnectionName Optional. Dient zum Abrufen oder Festlegen des Namens des Konfigurationsabschnitts für AI-Dienstkonnektivitätseinstellungen. Für Azure OpenAI: Wenn angegeben, suchen Sie in diesem Konfigurationsabschnitt nach "Endpunkt" und "Key". Wenn sie nicht angegeben ist oder der Abschnitt nicht vorhanden ist, kehren Sie auf Umgebungsvariablen zurück: AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_KEY. Für die vom Benutzer zugewiesene verwaltete Identitätsauthentifizierung ist diese Eigenschaft erforderlich. Legen Sie für openAI-Dienst (nicht azure) die OPENAI_API_KEY Umgebungsvariable fest.
embeddingsModel Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch.
maxChunkLength Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch.
maxOverlap Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest.
inputType Optional. Ruft den Typ der Eingabe ab.

Vollständige Beispiele finden Sie im Abschnitt Beispiele.

Verbrauch

Das Ändern der Standardeinbettungen „model“ ändert die Art und Weise, wie Einbettungen in der Vektordatenbank gespeichert werden. Das Ändern des Standardmodells kann dazu führen, dass die Nachschlagevorgänge fehlschlagen, wenn sie nicht mit den restlichen Daten übereinstimmen, die zuvor in die Vektordatenbank aufgenommen wurden. Das Standardmodell für Einbettungen ist text-embedding-ada-002.

Berücksichtigen Sie bei der Berechnung der maximalen Zeichenlänge für Eingabeblöcke, dass die maximal zulässigen Eingabetoken für Einbettungsmodelle der zweiten Generation wie text-embedding-ada-002 wie 8191 aussehen. Ein einzelnes Token ist ungefähr vier Zeichen lang (in Englisch), was in etwa 32.000 Zeichen (Englisch) der Eingabe entspricht, die in einen einzelnen Block passen können.

Verbindungen

Um die Azure OpenAI-Bindungserweiterung zu verwenden, muss man eine Verbindung zu einer OpenAI-Modelldefinition angeben. Stellen Sie die OpenAI-Modellverbindung in Ihren Bindings mit einem dieser Ansätze ein:

  • Verwenden Sie die AIConnectionName Binding-Eigenschaft (bevorzugt für Azure OpenAI).
  • Setze AZURE_OPENAI_ENDPOINT und AZURE_OPENAI_KEY in den App-Einstellungen (für Azure OpenAI).
  • Setze nur Open_API_Key in den App-Einstellungen (für https://api.openai.com).

Die Art und Weise, wie Sie die Verbindung einstellen, hängt sowohl von der Modell-API als auch von der Authentifizierungsmethode ab, wie in der folgenden Tabelle angegeben:

Authentifizierungs-/Modell-API Azure OpenAI OpenAI (https://api.openai.com)
Managed Identity-Verbindung AIConnectionName Nicht unterstützt
Key Vault-Referenz AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
App-Konfigurationsreferenz AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
Gemeinsames Geheimnis AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key

Nutzen Sie verwaltete Identitätsbasierte Verbindungen und die Immobilie AIConnectionName .

Wenn Sie verwenden AIConnectionName, hängt der Wert dieser Eigenschaftseinstellung vom Verbindungstyp ab:

  • Managed Identity-Verbindung: Die AIConnectionName Eigenschaft wird <CONNECTION_NAME_PREFIX> von einer Gruppe von Settings geteilt, die zusammen eine identitätsbasierte Verbindung zu Azure OpenAI definieren. Weitere Informationen finden Sie unter Identitätsverbindungen definieren.
  • Key Vault-Referenz: Die AIConnectionName Property-Einstellung liefert eine Azure Key Vault-Referenz auf den Standort, an dem der API-Schlüssel zentral verwaltet wird. Weitere Informationen finden Sie unter Define Key Vault connections.
  • App Configuration Reference: Die AIConnectionName Eigenschaftseinstellung liefert eine Azure App Configuration-Referenz, die einen API-Schlüssel oder eine Key Vault-Referenz zurückgibt. Weitere Informationen finden Sie unter Azure App Configuration im Artikel über Verbindungen.
  • API-Schlüssel: Die AIConnectionName Eigenschaftseinstellung wird direkt auf App-Einstellungen umgesetzt, die den Endpunkt und den Schlüssel enthalten. Da gemeinsame Schlüssel kompromittiert werden können, sollten Sie wenn möglich verwaltete Identitätsverbindungen verwenden. Weitere Informationen finden Sie unter Zusammenhänge definieren.

Um mehr über Bindungsverbindungen zu erfahren, siehe Verbindungen verwalten in Azure Functions.

Die OpenAI-Bindungen enthalten eine AIConnectionName Eigenschaft, mit der Sie die <ConnectionNamePrefix> für die Gruppe von App-Einstellungen festlegen können, die die Verbindung zu Azure OpenAI definieren:

Einstellungsname Beschreibung
<CONNECTION_NAME_PREFIX>__endpoint Setzt das URI-Endpunkt des Azure OpenAI-Dienstes. Diese Einstellung ist immer erforderlich.
<CONNECTION_NAME_PREFIX>__clientId Legt die bestimmte vom Benutzer zugewiesene Identität fest, die beim Abrufen eines Zugriffstokens verwendet werden soll. Erfordert, dass <CONNECTION_NAME_PREFIX>__credential auf managedidentity festgelegt wird. Die Eigenschaft akzeptiert eine Client-ID, die einer vom Benutzer zugewiesenen Identität entspricht, die der Anwendung zugeordnet ist. Es ist nicht möglich, sowohl eine Ressourcen-ID als auch eine Client-ID anzugeben. Wenn Sie diese Eigenschaft nicht spezifizieren, wird die systemzugewiesene Identität verwendet. Diese Eigenschaft wird in Szenarien für die lokale Entwicklung anders verwendet, in denen credential nicht festgelegt werden darf.
<CONNECTION_NAME_PREFIX>__credential Definiert, wie ein access-Token für die Verbindung abgerufen wird. Verwenden Sie managedidentity für die Authentifizierung der verwalteten Identität. Dieser Wert ist nur gültig, wenn eine verwaltete Identität in der Hostingumgebung verfügbar ist.
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId Wenn credential auf gesetzt ist managedidentity, setzen Sie diese Eigenschaft so, dass sie die Ressourcen-Identifikator angibt, die beim Erlangen eines Tokens verwendet werden soll. Die Eigenschaft akzeptiert einen Ressourcenbezeichner, der der Ressourcen-ID der benutzerdefinierten verwalteten Identität entspricht. Es ist nicht möglich, sowohl eine Ressourcen-ID als auch eine Client-ID anzugeben. Wenn Sie keines von beiden angeben, wird die systemzugewiesene Identität verwendet. Diese Eigenschaft wird in Szenarien für die lokale Entwicklung anders verwendet, in denen credential nicht festgelegt werden darf.
<CONNECTION_NAME_PREFIX>__key Setzt den gemeinsamen geheimen Schlüssel, der für den Zugriff auf den Endpunkt des Azure OpenAI-Dienstes erforderlich ist, mittels schlüsselbasierter Authentifizierung. Als Sicherheitsbest-Practice sollten Sie immer Microsoft Entra ID mit verwalteten Identitäten zur Authentifizierung verwenden.

Betrachten Sie diese Managed Identity Connection-Einstellungen, wenn Sie die Eigenschaft AIConnectionName auf myAzureOpenAIsetzen:

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

Zur Laufzeit interpretiert der Host diese Einstellungen als eine einzige myAzureOpenAI Einstellung:

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

Wenn Sie verwaltete Identitäten verwenden, fügen Sie Ihre Identität unbedingt der Cognitive Services OpenAI User Rolle hinzu.

Beim lokalen Ausführen fügen Sie diese Einstellungen der local.settings.json Projektdatei hinzu. Weitere Informationen finden Sie unter "Lokale Entwicklung mit identitätsbasierten Verbindungen".

Weitere Informationen finden Sie unter Verwenden von Anwendungseinstellungen.