Выходная привязка azure OpenAI для Функции Azure

Внимание

Расширение Azure OpenAI для Функции Azure в настоящее время находится в предварительной версии.

Выходная привязка хранилища Azure OpenAI позволяет записывать файлы в хранилище семантических документов, на которое можно ссылаться позже в семантическом поиске.

Сведения о настройке и настройке расширения Azure OpenAI см. в Функции Azure расширения Azure OpenAI. Дополнительные сведения о семантике ранжирования в службе "Поиск ИИ Azure" см. в статье "Семантический ранжирование" в службе "Поиск ИИ Azure".

Примечание.

Ссылки и примеры предоставляются только для модели Node.js версии 4.

Примечание.

Ссылки и примеры предоставляются только для модели Python версии 2.

Примечание.

Хотя поддерживаются обе модели процессов C#, предоставляются только примеры изолированных рабочих моделей .

Пример

В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному 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)
    };

В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.

import com.microsoft.azure.functions.openai.annotation.search.SemanticSearch;
import com.sun.jndi.toolkit.url.Uri;

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 MalformedURLException {

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

Примеры пока недоступны.

В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному 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}',

В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.

Ниже приведен файл function.json для приема файлов:

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

Дополнительные сведения о свойствах файла function.json см. в разделе "Конфигурация ".

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

В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному 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")

Атрибуты

EmbeddingsStoreOutput Примените атрибут, чтобы определить выходную привязку хранилища внедрения, которая поддерживает следующие параметры:

Параметр Описание
Входные данные Входная строка, для которой создается внедрение.
Модель Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002. Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование".
MaxChunkLength Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование".
MaxOverlap Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками.
InputType Необязательно. Возвращает тип входных данных.
ConnectionName Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок.
Коллекция Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок.

Заметки

Заметка EmbeddingsStoreOutput позволяет определить выходную привязку хранилища внедрения, которая поддерживает следующие параметры:

Элемент Description
name Возвращает или задает имя выходной привязки.
input Входная строка, для которой создается внедрение.
model Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002. Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование".
maxChunkLength Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование".
maxOverlap Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками.
inputType Необязательно. Возвращает тип входных данных.
connectionName Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок.
collection Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок.

Декораторы

Во время предварительной версии определите выходную привязку как привязку generic_output_binding типа semanticSearch, которая поддерживает следующие параметры:

Параметр Описание
arg_name Имя переменной, представляющей параметр привязки.
input Входная строка, для которой создается внедрение.
model Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002. Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование".
maxChunkLength Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование".
max_overlap Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками.
input_type Возвращает тип входных данных.
connection_name Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок.
collection Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок.

Настройка

Привязка поддерживает эти свойства конфигурации, заданные в файле function.json.

Свойство Описание
type Этот параметр должен содержать значение embeddingsStore.
direction Этот параметр должен содержать значение out.
name Имя выходной привязки.
input Входная строка, для которой создается внедрение.
model Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002. Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование".
maxChunkLength Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование".
maxOverlap Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками.
inputType Необязательно. Возвращает тип входных данных.
connectionName Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок.
collection Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок.

Настройка

Привязка поддерживает эти свойства, определенные в коде:

Свойство Description
input Входная строка, для которой создается внедрение.
model Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002. Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование".
maxChunkLength Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование".
maxOverlap Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками.
inputType Необязательно. Возвращает тип входных данных.
connectionName Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок.
collection Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок.

Использование

Подробные примеры см. в разделе Примеры.