Azure Functions 用の Azure OpenAI アシスタント トリガー

重要

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

Azure OpenAI アシスタント トリガーを使用すると、アシスタントに対して行われたカスタム チャット ボットまたはスキル要求に基づいてコードを実行できます。

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

Note

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

Note

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

Note

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

この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。

[Function(nameof(AddTodo))]
public Task AddTodo([AssistantSkillTrigger("Create a new todo task")] string taskDescription)
{
    if (string.IsNullOrEmpty(taskDescription))
    {
        throw new ArgumentException("Task description cannot be empty");
    }

    this.logger.LogInformation("Adding todo: {task}", taskDescription);

    string todoId = Guid.NewGuid().ToString()[..6];
    return this.todoManager.AddTodoAsync(new TodoItem(todoId, taskDescription));
}

この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。

@FunctionName("AddTodo")
public void addTodo(
    @AssistantSkillTrigger(
            name = "assistantSkillCreateTodo",
            functionDescription = "Create a new todo task"
    ) String taskDescription,
    final ExecutionContext context) {

    if (taskDescription == null || taskDescription.isEmpty()) {
        throw new IllegalArgumentException("Task description cannot be empty");
    }
    context.getLogger().info("Adding todo: " + taskDescription);

    String todoId = UUID.randomUUID().toString().substring(0, 6);
    TodoItem todoItem = new TodoItem(todoId, taskDescription);
    todoManager.addTodo(todoItem);
}

利用できる例はまだありません。

この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。


app.generic('AddTodo', {
    trigger: trigger.generic({
        type: 'assistantSkillTrigger',
        functionDescription: 'Create a new todo task'
    }),
    handler: async (taskDescription: string, context: InvocationContext) => {
        if (!taskDescription) {
            throw new Error('Task description cannot be empty')
        }

        context.log(`Adding todo: ${taskDescription}`)

        const todoId = randomUUID().substring(0, 6)
        return todoManager.AddTodo(new TodoItem(todoId, taskDescription))
    }

この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。

Add Todo の function.json ファイルを次に示します。

{
  "bindings": [
    {
      "name": "TaskDescription",
      "type": "assistantSkillTrigger",
      "dataType": "string",
      "direction": "in",
      "functionDescription": "Create a new todo task"
    }
  ]
}

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

using namespace System.Net

param($TaskDescription, $TriggerMetadata)
$ErrorActionPreference = "Stop"

if (-not $TaskDescription) {
    throw "Task description cannot be empty"
}

Write-Information "Adding todo: $TaskDescription"
$todoID = [Guid]::NewGuid().ToString().Substring(0, 5)
Add-Todo $todoId $TaskDescription

この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。

@skills.function_name("AddTodo")
@skills.assistant_skill_trigger(arg_name="taskDescription", function_description="Create a new todo task")
def add_todo(taskDescription: str) -> None:
    if not taskDescription:
        raise ValueError("Task description cannot be empty")

    logging.info(f"Adding todo: {taskDescription}")

    todo_id = str(uuid.uuid4())[0:6]
    todo_manager.add_todo(TodoItem(id=todo_id, task=taskDescription))
    return

属性

AssistantSkillTrigger 属性を適用して、次のパラメーターをサポートするアシスタント トリガーを定義します。

パラメーター 説明
FunctionDescription モデルに提供されるアシスタント関数の説明を取得します。
FunctionName 省略可。 アシスタントによって呼び出される関数の名前を取得または設定します。
ParameterDescriptionJson 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。
モデル 省略可。 使用する OpenAI チャット モデル デプロイを gpt-3.5-turbo の規定値で取得または設定します。

注釈

AssistantSkillTrigger 注釈を使用すると、次のパラメーターをサポートするアシスタント トリガーを定義できます。

要素 説明
name 入力バインドの名前を取得または設定します。
functionDescription モデルに提供されるアシスタント関数の説明を取得します。
functionName 省略可。 アシスタントによって呼び出される関数の名前を取得または設定します。
parameterDescriptionJson 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。
model 省略可。 使用する OpenAI チャット モデル デプロイを gpt-3.5-turbo の規定値で取得または設定します。

デコレーター

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

パラメーター 説明
function_description モデルに提供されるアシスタント関数の説明を取得します。
function_name 省略可。 アシスタントによって呼び出される関数の名前を取得または設定します。
parameterDescriptionJson 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。
model 省略可。 使用する OpenAI チャット モデル デプロイを gpt-3.5-turbo の規定値で取得または設定します。

構成

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

プロパティ 説明
type AssistantSkillTriggerである必要があります。
direction inである必要があります。
name トリガーの名前。
functionName アシスタントによって呼び出される関数の名前を取得または設定します。
functionDescription LLM に提供されるアシスタント関数の説明を取得します
parameterDescriptionJson 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。
model 省略可。 使用する OpenAI チャット モデル デプロイを gpt-3.5-turbo の規定値で取得または設定します。

構成

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

プロパティ 説明
type AssistantSkillTriggerである必要があります。
name トリガーの名前。
functionName アシスタントによって呼び出される関数の名前を取得または設定します。
functionDescription LLM に提供されるアシスタント関数の説明を取得します
parameterDescriptionJson 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。
model 省略可。 使用する OpenAI チャット モデル デプロイを gpt-3.5-turbo の規定値で取得または設定します。

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

使用方法

parameterDescriptionJson の JSON 値が指定されていない場合は、自動生成されます。 このオブジェクトの構文の詳細については、OpenAI API ドキュメントに関する記事をご覧ください。