Azure Functions 用の Azure OpenAI テキスト入力候補の入力バインド

重要

Azure Functions 用の Azure OpenAI 拡張機能は現在、プレビュー段階です。

Azure OpenAI のテキスト入力候補の入力バインドを使用すると、結果のテキスト入力候補 API をコード実行に取り込むことができます。 バインドを定義すると、パラメーター付きの事前定義済みプロンプトの使用もプロンプト全体のパススルーもできます。

Azure OpenAI 拡張機能のセットアップと構成の詳細については、Azure Functions 用の Azure OpenAI 拡張機能に関する記事を参照してください。 Azure OpenAI 入力候補の詳細については、「テキストを生成または操作する方法について説明する」を参照してください。

Note

リファレンスと例は、Node.js v4 モデルに対してのみ提供されています。

Note

リファレンスと例は、Python v2 モデルに対してのみ提供されます。

Note

両方の C# プロセス モデルがサポートされていますが、 isolated worker モデル 例のみが提供されます。

この例では、テンプレート パターンを示します。ここでは、HTTP トリガー関数は name パラメータを受け取り、それをテキスト プロンプトに埋め込みます。その後、拡張機能によって Azure OpenAI 入力候補 API に送信されます。 プロンプトに対する応答は HTTP 応答で返されます。

[Function(nameof(WhoIs))]
public static IActionResult WhoIs(
    [HttpTrigger(AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequestData req,
    [TextCompletionInput("Who is {name}?", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
{
    return new OkObjectResult(response.Content);
}

/// <summary>

この例では、入力としてプロンプトを受け取り、それを直接入力候補 API に送信して、その応答を出力として返します。

        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
        [TextCompletionInput("{Prompt}", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response,
        ILogger log)
    {
        string text = response.Content;
        return new OkObjectResult(text);
    }
}

この例では、テンプレート パターンを示します。ここでは、HTTP トリガー関数は name パラメータを受け取り、それをテキスト プロンプトに埋め込みます。その後、拡張機能によって Azure OpenAI 入力候補 API に送信されます。 プロンプトに対する応答は HTTP 応答で返されます。

@FunctionName("WhoIs")
public HttpResponseMessage whoIs(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.GET},
        authLevel = AuthorizationLevel.ANONYMOUS, 
        route = "whois/{name}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("name") String name,
    @TextCompletion(prompt = "Who is {name}?", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") TextCompletionResponse response,
    final ExecutionContext context) {
    return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response.getContent())
        .build();
}

この例では、入力としてプロンプトを受け取り、それを直接入力候補 API に送信して、その応答を出力として返します。

@FunctionName("GenericCompletion")
public HttpResponseMessage genericCompletion(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request,
    @TextCompletion(prompt = "{prompt}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") TextCompletionResponse response,
    final ExecutionContext context) {
    return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response.getContent())
        .build();
}

この例では、テンプレート パターンを示します。ここでは、HTTP トリガー関数は name パラメータを受け取り、それをテキスト プロンプトに埋め込みます。その後、拡張機能によって Azure OpenAI 入力候補 API に送信されます。 プロンプトに対する応答は HTTP 応答で返されます。

const { app, input } = require("@azure/functions");

// This OpenAI completion input requires a {name} binding value.
const openAICompletionInput = input.generic({
    prompt: 'Who is {name}?',
    maxTokens: '100',
    type: 'textCompletion',
    model: '%CHAT_MODEL_DEPLOYMENT_NAME%'
})

app.http('whois', {
    methods: ['GET'],
    route: 'whois/{name}',
    authLevel: 'function',
    extraInputs: [openAICompletionInput],
    handler: async (_request, context) => {
        var response = context.extraInputs.get(openAICompletionInput)
        return { body: response.content.trim() }
    }
});

この例では、テンプレート パターンを示します。ここでは、HTTP トリガー関数は name パラメータを受け取り、それをテキスト プロンプトに埋め込みます。その後、拡張機能によって Azure OpenAI 入力候補 API に送信されます。 プロンプトに対する応答は HTTP 応答で返されます。

import { app, input } from "@azure/functions";

// This OpenAI completion input requires a {name} binding value.
const openAICompletionInput = input.generic({
    prompt: 'Who is {name}?',
    maxTokens: '100',
    type: 'textCompletion',
    model: '%CHAT_MODEL_DEPLOYMENT_NAME%'
})

app.http('whois', {
    methods: ['GET'],
    route: 'whois/{name}',
    authLevel: 'function',
    extraInputs: [openAICompletionInput],
    handler: async (_request, context) => {
        var response: any = context.extraInputs.get(openAICompletionInput)
        return { body: response.content.trim() }
    }
});

この例では、テンプレート パターンを示します。ここでは、HTTP トリガー関数は name パラメータを受け取り、それをテキスト プロンプトに埋め込みます。その後、拡張機能によって Azure OpenAI 入力候補 API に送信されます。 プロンプトに対する応答は HTTP 応答で返されます。

TextCompletionResponsefunction.json ファイルを次に示します。

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "whois/{name}",
      "methods": [
        "get"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "textCompletion",
      "direction": "in",
      "name": "TextCompletionResponse",
      "prompt": "Who is {name}?",
      "maxTokens": "100",
      "model": "%CHAT_MODEL_DEPLOYMENT_NAME%"
    }
  ]
}

function.json ファイルのプロパティについて詳しくは、「構成」セクションをご覧ください。

このコードは、単純に入力候補 API からのテキストを応答として返します。

using namespace System.Net

param($Request, $TriggerMetadata, $TextCompletionResponse)

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

この例では、テンプレート パターンを示します。ここでは、HTTP トリガー関数は name パラメータを受け取り、それをテキスト プロンプトに埋め込みます。その後、拡張機能によって Azure OpenAI 入力候補 API に送信されます。 プロンプトに対する応答は HTTP 応答で返されます。

@app.route(route="whois/{name}", methods=["GET"])
@app.text_completion_input(arg_name="response", prompt="Who is {name}?", max_tokens="100", model = "%CHAT_MODEL_DEPLOYMENT_NAME%")
def whois(req: func.HttpRequest, response: str) -> func.HttpResponse:
    response_json = json.loads(response)
    return func.HttpResponse(response_json["content"], status_code=200)

この例では、入力としてプロンプトを受け取り、それを直接入力候補 API に送信して、その応答を出力として返します。

@app.route(route="genericcompletion", methods=["POST"])
@app.text_completion_input(arg_name="response", prompt="{Prompt}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%")
def genericcompletion(req: func.HttpRequest, response: str) -> func.HttpResponse:
    response_json = json.loads(response)
    return func.HttpResponse(response_json["content"], status_code=200)

属性

テキスト入力候補の入力バインドを定義するために適用する属性は、C# のプロセス モードによって異なります。

分離ワーカー モデルで、TextCompletionInput を適用してテキスト入力候補の入力バインドを定義します。

属性は次のパラメーターをサポートします。

パラメーター 説明
プロンプト 文字列としてエンコードされた、入力候補を生成するプロンプトを取得または設定します。
モデル 文字列として使用するモデルの ID を取得または設定します (既定値は gpt-3.5-turbo)。
気温 省略可。 使用するサンプリング温度を 02 の間の文字列で取得または設定します。 大きい値 (0.8) にすると、出力はよりランダムになり、(0.2 のような) 小さい値にすると、出力はより集中的および決定論的になります。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
TopP 省略可。 核サンプリングと呼ばれる、温度によるサンプリングの代替案を文字列として取得または設定します。 このサンプリング法では、モデルは top_p の確率質量を持つトークンの結果を考慮します。 したがって、0.1 は、上位 10% の確率質量を含むトークンのみが考慮されることを意味します。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
MaxTokens 省略可。 入力候補で生成するトークンの最大数を、既定の 100 の文字列で取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。

注釈

TextCompletion 注釈を使用すると、これらのパラメーターをサポートするテキスト入力候補の入力バインドを定義できます。

要素 説明
name 入力バインドの名前を取得または設定します。
prompt 文字列としてエンコードされた、入力候補を生成するプロンプトを取得または設定します。
model 文字列として使用するモデルの ID を取得または設定します (既定値は gpt-3.5-turbo)。
temperature 省略可。 使用するサンプリング温度を 02 の間の文字列で取得または設定します。 大きい値 (0.8) にすると、出力はよりランダムになり、(0.2 のような) 小さい値にすると、出力はより集中的および決定論的になります。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
topP 省略可。 核サンプリングと呼ばれる、温度によるサンプリングの代替案を文字列として取得または設定します。 このサンプリング法では、モデルは top_p の確率質量を持つトークンの結果を考慮します。 したがって、0.1 は、上位 10% の確率質量を含むトークンのみが考慮されることを意味します。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
maxTokens 省略可。 入力候補で生成するトークンの最大数を、既定の 100 の文字列で取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。

デコレーター

プレビュー中に、入力バインドを次のパラメーターをサポートする textCompletion 型の generic_input_binding バインドとして定義します。

パラメーター 説明
arg_name バインド パラメーターを表す変数の名前。
prompt 文字列としてエンコードされた、入力候補を生成するプロンプトを取得または設定します。
model 文字列として使用するモデルの ID を取得または設定します (既定値は gpt-3.5-turbo)。
temperature 省略可。 使用するサンプリング温度を 02 の間の文字列で取得または設定します。 大きい値 (0.8) にすると、出力はよりランダムになり、(0.2 のような) 小さい値にすると、出力はより集中的および決定論的になります。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
top_p 省略可。 核サンプリングと呼ばれる、温度によるサンプリングの代替案を文字列として取得または設定します。 このサンプリング法では、モデルは top_p の確率質量を持つトークンの結果を考慮します。 したがって、0.1 は、上位 10% の確率質量を含むトークンのみが考慮されることを意味します。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
max_tokens 省略可。 入力候補で生成するトークンの最大数を、既定の 100 の文字列で取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。

構成

このバインドでは、function.json ファイルで設定したこれらの構成プロパティをサポートします。

プロパティ 説明
type textCompletionである必要があります。
direction inである必要があります。
name 入力バインドの名前。
prompt 文字列としてエンコードされた、入力候補を生成するプロンプトを取得または設定します。
model 文字列として使用するモデルの ID を取得または設定します (既定値は gpt-3.5-turbo)。
temperature 省略可。 使用するサンプリング温度を 02 の間の文字列で取得または設定します。 大きい値 (0.8) にすると、出力はよりランダムになり、(0.2 のような) 小さい値にすると、出力はより集中的および決定論的になります。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
topP 省略可。 核サンプリングと呼ばれる、温度によるサンプリングの代替案を文字列として取得または設定します。 このサンプリング法では、モデルは top_p の確率質量を持つトークンの結果を考慮します。 したがって、0.1 は、上位 10% の確率質量を含むトークンのみが考慮されることを意味します。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
maxTokens 省略可。 入力候補で生成するトークンの最大数を、既定の 100 の文字列で取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。

構成

このバインドでは、コードで定義されている、これらのプロパティをサポートします。

プロパティ 説明
prompt 文字列としてエンコードされた、入力候補を生成するプロンプトを取得または設定します。
model 文字列として使用するモデルの ID を取得または設定します (既定値は gpt-3.5-turbo)。
temperature 省略可。 使用するサンプリング温度を 02 の間の文字列で取得または設定します。 大きい値 (0.8) にすると、出力はよりランダムになり、(0.2 のような) 小さい値にすると、出力はより集中的および決定論的になります。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
topP 省略可。 核サンプリングと呼ばれる、温度によるサンプリングの代替案を文字列として取得または設定します。 このサンプリング法では、モデルは top_p の確率質量を持つトークンの結果を考慮します。 したがって、0.1 は、上位 10% の確率質量を含むトークンのみが考慮されることを意味します。 TemperatureTopP のどちらかを使用し、両方を使用するべきではありません。
maxTokens 省略可。 入力候補で生成するトークンの最大数を、既定の 100 の文字列で取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。

使用方法

完全な例については、セクションの例を参照してください。