Sdílet prostřednictvím


Vkládání Azure OpenAI ukládá výstupní vazbu pro Azure Functions.

Důležité

Rozšíření Azure OpenAI pro Azure Functions je aktuálně ve verzi Preview.

Výstupní vazba azure OpenAI embeddings umožňuje zapisovat soubory do sémantického úložiště dokumentů, na které lze odkazovat později v sémantickém vyhledávání.

Informace o nastavení a konfiguraci rozšíření Azure OpenAI najdete v tématu Rozšíření Azure OpenAI pro Azure Functions. Další informace o sémantickém řazení ve službě Azure AI Search najdete v tématu Sémantické řazení ve službě Azure AI Search.

Poznámka:

Odkazy a příklady jsou k dispozici pouze pro model Node.js v4.

Poznámka:

Odkazy a příklady jsou k dispozici pouze pro model Pythonu v2.

Poznámka:

I když jsou podporovány oba modely procesu jazyka C#, jsou k dispozici pouze příklady izolovaného modelu pracovního procesu .

Příklad

Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.

[Function("IngestFile")]
public static async Task<EmbeddingsStoreOutputResponse> IngestFile(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
    ArgumentNullException.ThrowIfNull(req);

    using StreamReader reader = new(req.Body);
    string request = await reader.ReadToEndAsync();

    if (string.IsNullOrWhiteSpace(request))
    {
        throw new ArgumentException("Request body is empty.");
    }

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

    if (string.IsNullOrWhiteSpace(requestBody?.Url))
    {
        throw new ArgumentException("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
    }

    if (!Uri.TryCreate(requestBody.Url, UriKind.Absolute, out Uri? uri))
    {
        throw new ArgumentException("Invalid Url format.");
    }

    string filename = Path.GetFileName(uri.AbsolutePath);

    return new EmbeddingsStoreOutputResponse
    {
        HttpResponse = new OkObjectResult(new { status = HttpStatusCode.OK }),
        SearchableDocument = new SearchableDocument(filename)
    };

Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.

import com.microsoft.azure.functions.openai.annotation.search.SearchableDocument;
import com.microsoft.azure.functions.openai.annotation.search.SemanticSearch;

public class FilePrompt {

    @FunctionName("IngestFile")
    public HttpResponseMessage ingestFile(
        @HttpTrigger(
            name = "req", 
            methods = {HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<EmbeddingsRequest> request,
        @EmbeddingsStoreOutput(name="EmbeddingsStoreOutput", input = "{url}", inputType = InputType.Url,
                connectionName = "AISearchEndpoint", collection = "openai-index",
                model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") OutputBinding<EmbeddingsStoreOutputResponse> output,
        final ExecutionContext context) throws URISyntaxException {

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

        URI uri = new URI(request.getBody().getUrl());
        String filename = Paths.get(uri.getPath()).getFileName().toString();

        EmbeddingsStoreOutputResponse embeddingsStoreOutputResponse = new EmbeddingsStoreOutputResponse(new SearchableDocument(filename));

        output.setValue(embeddingsStoreOutputResponse);

        JSONObject response = new JSONObject();
        response.put("status", "success");
        response.put("title", filename);

        return request.createResponseBuilder(HttpStatus.CREATED)
                .header("Content-Type", "application/json")
                .body(response)
                .build();
    }

    public class EmbeddingsStoreOutputResponse {
        private SearchableDocument searchableDocument;

        public EmbeddingsStoreOutputResponse(SearchableDocument searchableDocument) {
            this.searchableDocument = searchableDocument;
        }

Příklady ještě nejsou k dispozici.

Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.

const embeddingsHttpInput = input.generic({
    input: '{rawText}',
    inputType: 'RawText',
    type: 'embeddings',
    model: '%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}
    }
});

interface EmbeddingsFilePath {
    FilePath?: string;
}

const embeddingsFilePathInput = input.generic({
    input: '{filePath}',

Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.

Tady je soubor function.json pro ingestování souborů:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "EmbeddingsStoreOutput",
      "type": "embeddingsStore",
      "direction": "out",
      "input": "{url}",
      "inputType": "Url",
      "connectionName": "AISearchEndpoint",
      "collection": "openai-index",
      "model": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
    }
  ]
}

Další informace o function.json vlastnosti souboru naleznete v části Konfigurace .

using namespace System.Net

param($Request, $TriggerMetadata)

$ErrorActionPreference = 'Stop'

$inputJson = $Request.Body

if (-not $inputJson -or -not $inputJson.Url) {
    throw 'Invalid request body. Make sure that you pass in {\"url\": value } as the request body.'
}

$uri = [URI]$inputJson.Url
$filename = [System.IO.Path]::GetFileName($uri.AbsolutePath)


Push-OutputBinding -Name EmbeddingsStoreOutput -Value @{
    "title" = $filename
}

$response = @{
    "status" = "success"
    "title" = $filename
}

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body = $response
        Headers    = @{
            "Content-Type" = "application/json"
        }
})

Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.

@app.function_name("IngestFile")
@app.route(methods=["POST"])
@app.embeddings_store_output(arg_name="requests", input="{url}", input_type="url", connection_name="AISearchEndpoint", collection="openai-index", model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%")
def ingest_file(req: func.HttpRequest, requests: func.Out[str]) -> func.HttpResponse:
    user_message = req.get_json()
    if not user_message:
        return func.HttpResponse(json.dumps({"message": "No message provided"}), status_code=400, mimetype="application/json")
    file_name_with_extension = os.path.basename(user_message["url"])
    title = os.path.splitext(file_name_with_extension)[0]
    create_request = {
        "title": title
    }
    requests.set(json.dumps(create_request))
    response_json = {
        "status": "success",
        "title": title
    }
    return func.HttpResponse(json.dumps(response_json), status_code=200, mimetype="application/json")

Atributy

Pomocí atributu EmbeddingsStoreOutput definujte výstupní vazbu pro vložení, která podporuje tyto parametry:

Parametr Popis
Vstup Vstupní řetězec, pro který se mají generovat vložené hodnoty.
Model Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití.
MaxChunkLength Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití.
MaxOverlap Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat.
InputType Volitelné. Získá typ vstupu.
ConnectionName Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy.
Kolekce Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy.

Poznámky

Poznámka EmbeddingsStoreOutput umožňuje definovat výstupní vazbu pro vložení, která podporuje tyto parametry:

Element (Prvek) Popis
Jméno Získá nebo nastaví název výstupní vazby.
vstup Vstupní řetězec, pro který se mají generovat vložené hodnoty.
model Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití.
maxChunkLength Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití.
maxOverlap Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat.
inputType Volitelné. Získá typ vstupu.
connectionName Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy.
sbírka Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy.

Dekoratéry

Během verze Preview definujte výstupní vazbu jako generic_output_binding vazbu typu semanticSearch, která podporuje tyto parametry:

Parametr Popis
arg_name Název proměnné, která představuje parametr vazby.
vstup Vstupní řetězec, pro který se mají generovat vložené hodnoty.
model Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití.
maxChunkLength Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití.
max_overlap Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat.
input_type Získá typ vstupu.
connection_name Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy.
sbírka Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy.

Konfigurace

Vazba podporuje tyto vlastnosti konfigurace, které jste nastavili v souboru function.json.

Vlastnost Popis
type Musí být embeddingsStore.
direction Musí být out.
Jméno Název výstupní vazby.
vstup Vstupní řetězec, pro který se mají generovat vložené hodnoty.
model Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití.
maxChunkLength Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití.
maxOverlap Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat.
inputType Volitelné. Získá typ vstupu.
connectionName Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy.
sbírka Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy.

Konfigurace

Vazba podporuje tyto vlastnosti, které jsou definovány v kódu:

Vlastnost Popis
vstup Vstupní řetězec, pro který se mají generovat vložené hodnoty.
model Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití.
maxChunkLength Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití.
maxOverlap Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat.
inputType Volitelné. Získá typ vstupu.
connectionName Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy.
sbírka Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy.

Využití

Kompletní příklady najdete v části Příklad.