次の方法で共有


Azure Functions 用の Azure OpenAI アシスタント ポスト入力バインド

重要

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

Azure OpenAI アシスタント ポスト入力バインドを使用すると、アシスタント チャット ボットにプロンプトを送信できます。

Azure OpenAI 拡張機能のセットアップと構成の詳細については、「Azure Functions 用の Azure OpenAI 拡張機能」を参照してください。 Azure OpenAI アシスタントの詳細については、「Azure OpenAI Assistants API」を参照してください。

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

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

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

この例では、ユーザー プロンプトをアシスタント チャット ボットに送信する HTTP POST 関数の作成プロセスを示します。 プロンプトに対する応答は HTTP 応答で返されます。

/// <summary>
/// HTTP POST function that sends user prompts to the assistant chat bot.
/// </summary>
[Function(nameof(PostUserQuery))]
public static IActionResult PostUserQuery(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assistants/{assistantId}")] HttpRequestData req,
    string assistantId,
    [AssistantPostInput("{assistantId}", "{Query.message}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", ChatStorageConnectionSetting = DefaultChatStorageConnectionSetting, CollectionName = DefaultCollectionName)] AssistantState state)
{
    return new OkObjectResult(state.RecentMessages.Any() ? state.RecentMessages[state.RecentMessages.Count - 1].Content : "No response returned.");
}

この例では、ユーザー プロンプトをアシスタント チャット ボットに送信する HTTP POST 関数の作成プロセスを示します。 プロンプトに対する応答は HTTP 応答で返されます。

/*
 * HTTP POST function that sends user prompts to the assistant chat bot.
 */ 
@FunctionName("PostUserResponse")
public HttpResponseMessage postUserResponse(
    @HttpTrigger(
        name = "req",
        methods = {HttpMethod.POST}, 
        authLevel = AuthorizationLevel.ANONYMOUS,
        route = "assistants/{assistantId}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("assistantId") String assistantId,        
    @AssistantPost(name="newMessages", id = "{assistantId}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", userMessage = "{Query.message}", chatStorageConnectionSetting = DEFAULT_CHATSTORAGE, collectionName = DEFAULT_COLLECTION) AssistantState state,
    final ExecutionContext context) {
        
        List<AssistantMessage> recentMessages = state.getRecentMessages();
        String response = recentMessages.isEmpty() ? "No response returned." : recentMessages.get(recentMessages.size() - 1).getContent();
        
        return request.createResponseBuilder(HttpStatus.OK)
            .header("Content-Type", "application/json")
            .body(response)
            .build();
}

この例では、ユーザー プロンプトをアシスタント チャット ボットに送信する HTTP POST 関数の作成プロセスを示します。 プロンプトに対する応答は HTTP 応答で返されます。

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

const assistantPostInput = input.generic({
    type: 'assistantPost',
    id: '{assistantId}',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%',
    userMessage: '{Query.message}',
    chatStorageConnectionSetting: CHAT_STORAGE_CONNECTION_SETTING,
    collectionName: COLLECTION_NAME
})
app.http('PostUserResponse', {
    methods: ['POST'],
    route: 'assistants/{assistantId}',
    authLevel: 'anonymous',
    extraInputs: [assistantPostInput],
    handler: async (_, context) => {
        const chatState = context.extraInputs.get(assistantPostInput)
        const content = chatState.recentMessages[0].content
        return {
            status: 200,
            body: content,
            headers: {
                'Content-Type': 'text/plain'
            }
        };
    }
})
import { HttpRequest, InvocationContext, app, input, output } from "@azure/functions"

const assistantPostInput = input.generic({
    type: 'assistantPost',
    id: '{assistantId}',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%',
    userMessage: '{Query.message}',
    chatStorageConnectionSetting: CHAT_STORAGE_CONNECTION_SETTING,
    collectionName: COLLECTION_NAME
})
app.http('PostUserResponse', {
    methods: ['POST'],
    route: 'assistants/{assistantId}',
    authLevel: 'anonymous',
    extraInputs: [assistantPostInput],
    handler: async (_, context) => {
        const chatState: any = context.extraInputs.get(assistantPostInput)
        const content = chatState.recentMessages[0].content
        return {
            status: 200,
            body: content,
            headers: {
                'Content-Type': 'text/plain'
            }
        };
    }
})

この例では、ユーザー プロンプトをアシスタント チャット ボットに送信する HTTP POST 関数の作成プロセスを示します。 プロンプトに対する応答は HTTP 応答で返されます。

ポスト ユーザー クエリの function.json ファイルを次に示します。

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "assistants/{assistantId}",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "State",
      "type": "assistantPost",
      "direction": "in",
      "dataType": "string",
      "id": "{assistantId}",
      "userMessage": "{Query.message}",
      "chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%",
      "chatStorageConnectionSetting": "AzureWebJobsStorage",
      "collectionName": "ChatState"
    }
  ]
}

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

using namespace System.Net

param($Request, $TriggerMetadata, $State)

$recent_message_content = "No recent messages!"

if ($State.recentMessages.Count -gt 0) {
    $recent_message_content = $State.recentMessages[0].content
}

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

この例では、ユーザー プロンプトをアシスタント チャット ボットに送信する HTTP POST 関数の作成プロセスを示します。 プロンプトに対する応答は HTTP 応答で返されます。

@apis.function_name("PostUserQuery")
@apis.route(route="assistants/{assistantId}", methods=["POST"])
@apis.assistant_post_input(
    arg_name="state",
    id="{assistantId}",
    user_message="{Query.message}",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
    chat_storage_connection_setting=DEFAULT_CHAT_STORAGE_SETTING,
    collection_name=DEFAULT_CHAT_COLLECTION_NAME,
)
def post_user_response(req: func.HttpRequest, state: str) -> func.HttpResponse:
    # Parse the JSON string into a dictionary
    data = json.loads(state)

    # Extract the content of the recentMessage
    recent_message_content = data["recentMessages"][0]["content"]
    return func.HttpResponse(
        recent_message_content, status_code=200, mimetype="text/plain"
    )

属性

PostUserQuery 属性を適用して、これらのパラメーターをサポートするアシスタント ポスト入力バインドを定義します。

パラメーター 内容
身分証明書 更新するアシスタントの ID。
UserMessage 文字列としてエンコードされたチャット完了モデルのユーザー メッセージを取得または設定します。
AIConnectionName オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。
ChatModel オプション。 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。
気温 オプション02の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
TopP オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
MaxTokens オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。
IsReasoningModel オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。

注釈

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

要素 内容
名前 出力バインドの名前。
ID 更新するアシスタントの ID。
userMessage 文字列としてエンコードされたチャット完了モデルのユーザー メッセージを取得または設定します。
aiConnectionName オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。
chatModel 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。
温度 オプション02の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
topP オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
maxTokens オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。
isReasoningModel オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。

デコレーター

プレビュー中に、出力バインドをこれらのパラメーターをサポートする generic_output_binding 型の postUserQuery バインドとして定義します。

パラメーター 内容
arg_name バインド パラメーターを表す変数の名前。
ID 更新するアシスタントの ID。
user_message 文字列としてエンコードされたチャット完了モデルのユーザー メッセージを取得または設定します。
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 を取得または設定します。
温度 オプション02の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (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 ファイルで設定したこれらの構成プロパティをサポートします。

プロパティ 内容
タイプ PostUserQueryである必要があります。
方向 outである必要があります。
名前 出力バインドの名前。
ID 更新するアシスタントの ID。
userMessage 文字列としてエンコードされたチャット完了モデルのユーザー メッセージを取得または設定します。
aiConnectionName オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。
chatModel 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。
温度 オプション02の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
topP オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
maxTokens オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。
isReasoningModel オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。

構成

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

プロパティ 内容
ID 更新するアシスタントの ID。
userMessage 文字列としてエンコードされたチャット完了モデルのユーザー メッセージを取得または設定します。
aiConnectionName オプション。 AI サービス接続設定の構成セクションの名前を取得または設定します。 Azure OpenAI の場合: 指定した場合は、この構成セクションで "Endpoint" と "Key" の値を探します。 指定されていない場合、またはセクションが存在しない場合は、環境変数 (AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEY) にフォールバックします。 ユーザー割り当てマネージド ID 認証の場合、このプロパティは必須です。 OpenAI サービス (Azure 以外) の場合は、OPENAI_API_KEY環境変数を設定します。
chatModel 既定値の gpt-3.5-turbo を使用して、文字列として使用するモデルの ID を取得または設定します。
温度 オプション02の間の文字列として、使用するサンプリング温度を取得または設定します。 値が大きいほど (0.8) 出力がランダムになり、(0.2) などの値が小さいほど出力のフォーカスが高くなり、決定論的になります。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
topP オプション。 温度を使用したサンプリングの代替手段を取得または設定します。これは、核サンプリングと呼ばれ、文字列として設定されます。 このサンプリング方法では、モデルは top_p 確率質量を持つトークンの結果を考慮します。 したがって、 0.1 は、上位 10 個の% 確率質量を含むトークンのみが考慮されていることを意味します。 TemperatureまたはTopPを使用する必要がありますが、両方は使用しないでください。
maxTokens オプション。 既定の 100 を持つ文字列として、完了時に生成するトークンの最大数を取得または設定します。 プロンプトのトークン数と max_tokens の合計は、モデルのコンテキスト長を超えることはできません。 ほとんどのモデルのコンテキスト長は 2,048 トークンです (4096 をサポートする最新のモデルを除く)。
isReasoningModel オプション。 チャット完了モデルが推論モデルであるかどうかを示す値を取得または設定します。 このオプションは試験段階であり、すべてのモデルが予期されるプロパティにパリティを持ち、既定値が false になるまで推論モデルに関連付けられます。

使用方法

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