Megosztás a következőn keresztül:


Azure OpenAI-beágyazások bemeneti kötése az Azure Functionshez

Fontos

Az Azure Functions Azure OpenAI bővítménye jelenleg előzetes verzióban érhető el.

Az Azure OpenAI-beágyazások bemeneti kötése lehetővé teszi, hogy beágyazásokat hozzon létre a bemenetekhez. A kötés beágyazásokat hozhat létre fájlokból vagy nyers szöveges bemenetekből.

Az Azure OpenAI-bővítmény beállítási és konfigurációs részleteiről további információt az Azure Functions Azure OpenAI-bővítményeivel kapcsolatban talál. Az Azure OpenAI Szolgáltatásba történő beágyazásokról további információt az Azure OpenAI szolgáltatásban történő beágyazások ismertetése című témakörben talál.

Feljegyzés

A referenciák és példák csak a Node.js v4-modellhez vannak megadva.

Feljegyzés

A hivatkozások és példák csak a Python v2-modellhez vannak megadva.

Feljegyzés

Bár mindkét C#-folyamatmodell támogatott, csak izolált feldolgozómodell-példák állnak rendelkezésre.

Példa

Ez a példa bemutatja, hogyan hozhat létre beágyazásokat egy nyers szöveges sztringhez.

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%")] 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.
}

Ez a példa bemutatja, hogyan kérhetők le a függvény számára elérhető, megadott fájlban tárolt beágyazások.

[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%")] 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.
}

Ez a példa bemutatja, hogyan hozhat létre beágyazásokat egy nyers szöveges sztringhez.

@FunctionName("GenerateEmbeddingsHttpRequest")
public HttpResponseMessage generateEmbeddingsHttpRequest(
        @HttpTrigger(
            name = "req", 
            methods = {HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS,
            route = "embeddings")
        HttpRequestMessage<EmbeddingsRequest> request,
        @EmbeddingsInput(name = "Embeddings", input = "{RawText}", inputType = InputType.RawText, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") 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();
}

Ez a példa bemutatja, hogyan kérhetők le a függvény számára elérhető, megadott fájlban tárolt beágyazások.

@FunctionName("GenerateEmbeddingsHttpFilePath")
public HttpResponseMessage generateEmbeddingsHttpFilePath(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.ANONYMOUS,
        route = "embeddings-from-file")
    HttpRequestMessage<EmbeddingsRequest> request,
    @EmbeddingsInput(name = "Embeddings", input = "{FilePath}", inputType = InputType.FilePath, maxChunkLength = 512, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") 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();
}

Ez a példa bemutatja, hogyan hozhat létre beágyazásokat egy nyers szöveges sztringhez.

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

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} 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%'
})

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} characters.`
        );
        
        // TODO: Store the embeddings into a database or other storage.

        return {status: 202}
    }
});

Ez a példa bemutatja, hogyan hozhat létre beágyazásokat egy nyers szöveges sztringhez.

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

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%'
})

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}
    }
});

Ez a példa bemutatja, hogyan hozhat létre beágyazásokat egy nyers szöveges sztringhez.

A beágyazások létrehozásához a következő function.json fájl található:

{
  "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%"
    }
  ]
}

A function.json fájltulajdonságokról a Konfiguráció szakaszban talál további információt.

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
})

Ez a példa bemutatja, hogyan hozhat létre beágyazásokat egy nyers szöveges sztringhez.

@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%",
)
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)

Attribútumok

Alkalmazza az EmbeddingsInput attribútumot a beágyazások bemeneti kötésének meghatározására, amely az alábbi paramétereket támogatja:

Paraméter Leírás
Input (Bemenet) A bemeneti sztring, amelyhez beágyazást szeretne létrehozni.
AIConnectionName Választható. Lekéri vagy beállítja az AI szolgáltatás csatlakozási beállításaihoz tartozó konfigurációs szakasz nevét. Azure OpenAI esetén: Ha meg van adva, ebben a konfigurációs szakaszban keresse meg a "Végpont" és a "Kulcs" értéket. Ha nincs megadva, vagy a szakasz nem létezik, visszavált a környezeti változókra: AZURE_OPENAI_ENDPOINT és AZURE_OPENAI_KEY. A felhasználó által hozzárendelt felügyelt identitás hitelesítéséhez ez a tulajdonság szükséges. OpenAI szolgáltatás (nem Azure) esetén állítsa be a OPENAI_API_KEY környezeti változót.
EmbeddingsModel Választható. A használni kívánt modell azonosítója, amely alapértelmezés szerint a következő.text-embedding-ada-002 Meglévő adatbázis modelljét nem szabad módosítani. További információ: Használat.
MaxChunkLength Választható. A bemenet darabolásához használt karakterek maximális száma. További információ: Használat.
MaxOverlap Választható. Lekéri vagy beállítja a karakterek maximális számát, hogy átfedésben legyenek az adattömbök között.
InputType Választható. Lekéri a bemenet típusát.

Jegyzetek

A EmbeddingsInput széljegyzet lehetővé teszi a beágyazások bemeneti kötésének definiálását, amely az alábbi paramétereket támogatja:

Elem Leírás
név Lekéri vagy beállítja a bemeneti kötés nevét.
Bemenet A bemeneti sztring, amelyhez beágyazást szeretne létrehozni.
aiConnectionName Választható. Lekéri vagy beállítja az AI szolgáltatás csatlakozási beállításaihoz tartozó konfigurációs szakasz nevét. Azure OpenAI esetén: Ha meg van adva, ebben a konfigurációs szakaszban keresse meg a "Végpont" és a "Kulcs" értéket. Ha nincs megadva, vagy a szakasz nem létezik, visszavált a környezeti változókra: AZURE_OPENAI_ENDPOINT és AZURE_OPENAI_KEY. A felhasználó által hozzárendelt felügyelt identitás hitelesítéséhez ez a tulajdonság szükséges. OpenAI szolgáltatás (nem Azure) esetén állítsa be a OPENAI_API_KEY környezeti változót.
embeddingsModel Választható. A használni kívánt modell azonosítója, amely alapértelmezés szerint a következő.text-embedding-ada-002 Meglévő adatbázis modelljét nem szabad módosítani. További információ: Használat.
maxChunkLength Választható. A bemenet darabolásához használt karakterek maximális száma. További információ: Használat.
maxOverlap Választható. Lekéri vagy beállítja a karakterek maximális számát, hogy átfedésben legyenek az adattömbök között.
inputType Választható. Lekéri a bemenet típusát.

Dekorátorok

Az előzetes verzióban adja meg a bemeneti kötést generic_input_binding a következő paramétereket támogató típusú embeddingskötésként: embeddings a dekoratőr a következő paramétereket támogatja:

Paraméter Leírás
arg_name A kötési paramétert képviselő változó neve.
Bemenet A bemeneti sztring, amelyhez beágyazást szeretne létrehozni.
ai_connection_name Választható. Lekéri vagy beállítja az AI szolgáltatás csatlakozási beállításaihoz tartozó konfigurációs szakasz nevét. Azure OpenAI esetén: Ha meg van adva, ebben a konfigurációs szakaszban keresse meg a "Végpont" és a "Kulcs" értéket. Ha nincs megadva, vagy a szakasz nem létezik, visszavált a környezeti változókra: AZURE_OPENAI_ENDPOINT és AZURE_OPENAI_KEY. A felhasználó által hozzárendelt felügyelt identitás hitelesítéséhez ez a tulajdonság szükséges. OpenAI szolgáltatás (nem Azure) esetén állítsa be a OPENAI_API_KEY környezeti változót.
embeddings_model Választható. A használni kívánt modell azonosítója, amely alapértelmezés szerint a következő.text-embedding-ada-002 Meglévő adatbázis modelljét nem szabad módosítani. További információ: Használat.
maxChunkLength Választható. A bemenet darabolásához használt karakterek maximális száma. További információ: Használat.
max_overlap Választható. Lekéri vagy beállítja a karakterek maximális számát, hogy átfedésben legyenek az adattömbök között.
input_type Lekéri a bemenet típusát.

Konfiguráció

A kötés támogatja a function.json fájlban beállított konfigurációs tulajdonságokat.

Tulajdonság Leírás
típus Kell lennie EmbeddingsInput.
irány Kell lennie in.
név A bemeneti kötés neve.
Bemenet A bemeneti sztring, amelyhez beágyazást szeretne létrehozni.
aiConnectionName Választható. Lekéri vagy beállítja az AI szolgáltatás csatlakozási beállításaihoz tartozó konfigurációs szakasz nevét. Azure OpenAI esetén: Ha meg van adva, ebben a konfigurációs szakaszban keresse meg a "Végpont" és a "Kulcs" értéket. Ha nincs megadva, vagy a szakasz nem létezik, visszavált a környezeti változókra: AZURE_OPENAI_ENDPOINT és AZURE_OPENAI_KEY. A felhasználó által hozzárendelt felügyelt identitás hitelesítéséhez ez a tulajdonság szükséges. OpenAI szolgáltatás (nem Azure) esetén állítsa be a OPENAI_API_KEY környezeti változót.
embeddingsModel Választható. A használni kívánt modell azonosítója, amely alapértelmezés szerint a következő.text-embedding-ada-002 Meglévő adatbázis modelljét nem szabad módosítani. További információ: Használat.
maxChunkLength Választható. A bemenet darabolásához használt karakterek maximális száma. További információ: Használat.
maxOverlap Választható. Lekéri vagy beállítja a karakterek maximális számát, hogy átfedésben legyenek az adattömbök között.
inputType Választható. Lekéri a bemenet típusát.

Konfiguráció

A kötés támogatja ezeket a tulajdonságokat, amelyek a kódban vannak definiálva:

Tulajdonság Leírás
Bemenet A bemeneti sztring, amelyhez beágyazást szeretne létrehozni.
aiConnectionName Választható. Lekéri vagy beállítja az AI szolgáltatás csatlakozási beállításaihoz tartozó konfigurációs szakasz nevét. Azure OpenAI esetén: Ha meg van adva, ebben a konfigurációs szakaszban keresse meg a "Végpont" és a "Kulcs" értéket. Ha nincs megadva, vagy a szakasz nem létezik, visszavált a környezeti változókra: AZURE_OPENAI_ENDPOINT és AZURE_OPENAI_KEY. A felhasználó által hozzárendelt felügyelt identitás hitelesítéséhez ez a tulajdonság szükséges. OpenAI szolgáltatás (nem Azure) esetén állítsa be a OPENAI_API_KEY környezeti változót.
embeddingsModel Választható. A használni kívánt modell azonosítója, amely alapértelmezés szerint a következő.text-embedding-ada-002 Meglévő adatbázis modelljét nem szabad módosítani. További információ: Használat.
maxChunkLength Választható. A bemenet darabolásához használt karakterek maximális száma. További információ: Használat.
maxOverlap Választható. Lekéri vagy beállítja a karakterek maximális számát, hogy átfedésben legyenek az adattömbök között.
inputType Választható. Lekéri a bemenet típusát.

A teljes példákért tekintse meg a Példa szakaszt .

Használat

Az alapértelmezett beágyazások model módosítása megváltoztatja a beágyazások vektoradatbázisban való tárolásának módját. Az alapértelmezett modell módosítása esetén a keresések hibásan viselkedhetnek, ha nem egyeznek a vektoradatbázisba korábban betöltött többi adatéval. A beágyazások alapértelmezett modellje a text-embedding-ada-002következő: .

A bemeneti adattömbök maximális karakterhosszának kiszámításakor vegye figyelembe, hogy a második generációs bemeneti beágyazási modellekhez engedélyezett maximális bemeneti jogkivonatok például text-embedding-ada-002 a 8191. Egyetlen token körülbelül négy karakter hosszúságú (angol nyelven), amely körülbelül 32 000 (angol) karakternyi bemeneti karaktert jelent, amely egyetlen adattömbbe illeszthető.