Von Bedeutung
現在、Azure Functions 用の Azure OpenAI 拡張機能はプレビュー段階です。
Azure OpenAI テキスト補完入力バインドを使用すると、結果テキスト入力候補 API をコード実行に取り込みます。 パラメーターで両方の定義済みプロンプトを使用するか、プロンプト全体を渡すバインディングを定義できます。
Azure OpenAI 拡張機能のセットアップと構成の詳細については、「Azure Functions 用の Azure OpenAI 拡張機能」を参照してください。 Azure OpenAI の入力候補の詳細については、「 テキストを生成または操作する方法」を参照してください。
注
リファレンスと例は、Node.js v4 モデルに対してのみ提供されています。
注
リファレンスと例は、Python v2 モデルに対してのみ提供されます。
注
両方の C# プロセス モデルがサポートされていますが、 isolated worker モデル 例のみが提供されます。
例
このバインドに関しては現在、Goのサポートは利用できません。
この例では、テンプレート パターン を 示します。このパターンでは、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}?", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", AIConnectionName = "AzureOpenAI")] TextCompletionResponse response)
{
return new OkObjectResult(response.Content);
}
この例では、プロンプトを入力として受け取り、入力候補 API に直接送信し、応答を出力として返します。
[Function(nameof(GenericCompletion))]
public static IActionResult GenericCompletion(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
[TextCompletionInput("{Prompt}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", AIConnectionName = "AzureOpenAI")] 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.FUNCTION,
route = "whois/{name}")
HttpRequestMessage<Optional<String>> request,
@BindingName("name") String name,
@TextCompletion(prompt = "Who is {name}?", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false, aiConnectionName = "AzureOpenAI") 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.FUNCTION)
HttpRequestMessage<Optional<String>> request,
@TextCompletion(prompt = "{prompt}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false, aiConnectionName = "AzureOpenAI") 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',
chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%',
aiConnectionName: 'AzureOpenAI'
})
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',
chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%',
aiConnectionName: 'AzureOpenAI'
})
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 応答で返されます。
の TextCompletionResponse ファイルを次に示します。
{
"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",
"chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%",
"aiConnectionName": "AzureOpenAI"
}
]
}
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",
chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
ai_connection_name="AzureOpenAI",
)
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}",
chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
ai_connection_name="AzureOpenAI",
)
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を適用してテキスト補完入力バインドを定義します。
この属性は、次のパラメーターをサポートしています。
| パラメーター | 説明 |
|---|---|
| プロンプト | 文字列としてエンコードされた入力候補を生成するプロンプトを取得または設定します。 |
| AIConnectionName | オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。 |
| ChatModel |
オプション。 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。 |
| 気温 |
オプション。
0と2の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| TopP |
オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| MaxTokens |
オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。 |
| IsReasoningModel |
オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。 |
注釈
TextCompletion注釈を使用すると、次のパラメーターをサポートするテキスト補完入力バインドを定義できます。
| 要素 | 説明 |
|---|---|
| 名前 | 入力バインドの名前を取得または設定します。 |
| プロンプト | 文字列としてエンコードされた入力候補を生成するプロンプトを取得または設定します。 |
| aiConnectionName | オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。 |
| chatModel | 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。 |
| 温度 |
オプション。
0と2の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| topP |
オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| maxTokens |
オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。 |
| isReasoningModel |
オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。 |
デコレータ
プレビュー中に、入力バインドを次のパラメーターをサポートする generic_input_binding 型の textCompletion バインドとして定義します。
| パラメーター | 説明 |
|---|---|
| arg_name | バインド パラメーターを表す変数の名前。 |
| プロンプト | 文字列としてエンコードされた入力候補を生成するプロンプトを取得または設定します。 |
| ai_connection_name | オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。 |
| chat_model | 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。 |
| 温度 |
オプション。
0と2の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| top_p |
オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| max_tokens |
オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。 |
| is_reasoning _model |
オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。 |
コンフィギュレーション
このバインドでは、function.json ファイルで設定したこれらの構成プロパティをサポートします。
| プロパティ | 説明 |
|---|---|
| タイプ |
textCompletionである必要があります。 |
| 方向 |
inである必要があります。 |
| 名前 | 入力バインドの名前。 |
| プロンプト | 文字列としてエンコードされた入力候補を生成するプロンプトを取得または設定します。 |
| aiConnectionName | オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。 |
| chatModel | 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。 |
| 温度 |
オプション。
0と2の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| topP |
オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| maxTokens |
オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。 |
| isReasoningModel |
オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。 |
コンフィギュレーション
このバインドでは、コードで定義されている、これらのプロパティをサポートします。
| プロパティ | 説明 |
|---|---|
| プロンプト | 文字列としてエンコードされた入力候補を生成するプロンプトを取得または設定します。 |
| aiConnectionName | オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。 |
| chatModel | 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。 |
| 温度 |
オプション。
0と2の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| topP |
オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。
TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。 |
| maxTokens |
オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。 |
| isReasoningModel |
オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。 |
使用方法
完全な例については、セクションの例を参照してください。
接続
Azure OpenAIのバインディング拡張を使うには、OpenAIモデル定義への接続を指定する必要があります。 以下のいずれかの方法を使って、バインディング内でOpenAIモデル接続を設定します。
-
AIConnectionNamebindingプロパティ(OpenAI Azure推奨)を使いましょう。 - OpenAI Azureのアプリ設定で
AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEYを設定してください。 - アプリの設定で
Open_API_Keyだけに設定してください(https://api.openai.com用)。
接続の設定方法は、モデルAPIと認証方法の両方に依存し、以下の表に示されています:
| 認証/モデルAPI | Azure OpenAI | OpenAI(https://api.openai.com) |
|---|---|---|
| マネージド・アイデンティティ接続 | AIConnectionName |
サポートしていません |
| Key Vault 参照 | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| アプリ設定リファレンス | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| 共有シークレット | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
管理型アイデンティティベースの接続と AIConnectionName プロパティを活用してください。
AIConnectionNameを使う場合、このプロパティ設定の値は接続の種類によって異なります。
-
マネージド・アイデンティティ接続:
AIConnectionNameプロパティ<CONNECTION_NAME_PREFIX>は、複数の設定群が共有するものであり、これらが共同でOpenAIへのアイデンティティベースの接続を定義しますAzure。 詳細については、「 同一性接続の定義」を参照してください。 -
Key Vault参照:
AIConnectionNameプロパティ設定は、APIキーが中央管理されている場所へのAzure Key Vault参照を返します。 詳細については、「Key Vault connectionsの定義」をご覧ください。 -
App Configuration reference:
AIConnectionNameプロパティ設定はAPIキーまたはKey Vault参照を返すAzure App Configuration参照を返します。 詳細については、接続記事のAzure App Configurationをご覧ください。 -
APIキー:
AIConnectionNameプロパティ設定はエンドポイントとキーを含むアプリ設定に解決されます。 共有鍵は漏洩する可能性があるため、可能な限り管理型ID接続を使用してください。 詳細については、「 接続の定義」を参照してください。
バインディング接続について詳しく知りたい方は、「Azure Functionsの接続管理」をご覧ください。
OpenAIのバインディングには、OpenAIとの接続を定義するアプリ設定群のAIConnectionNameを指定するための<ConnectionNamePrefix>プロパティAzure含まれています。
AIConnectionNameプロパティをmyAzureOpenAIに設定する際は、以下の管理されたID接続設定を考慮してください。
myAzureOpenAI__endpoint=https://contoso.openai.azure.com/myAzureOpenAI__credential=managedidentitymyAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222
実行時には、ホストはこれらの設定を単一の myAzureOpenAI 設定として解釈します。
"myAzureOpenAI":
{
"endpoint": "https://contoso.openai.azure.com/",
"credential": "managedidentity",
"clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
マネージドIDを使う場合は、必ず Cognitive Services OpenAIユーザー ロールに自分のIDを追加してください。
ローカルで動作する場合は、これらの設定を local.settings.json プロジェクトファイルに追加してください。 詳細については、「 ID ベースの接続を使用したローカル開発」を参照してください。
詳細については、アプリケーション設定の操作に関する記事を参照してください。