Azure OpenAI assistant trigger for Azure Functions

Important

The Azure OpenAI extension for Azure Functions is currently in preview.

The Azure OpenAI assistant trigger lets you run your code based on custom chat bot or skill request made to an assistant.

For information on setup and configuration details of the Azure OpenAI extension, see Azure OpenAI extensions for Azure Functions. To learn more about Azure OpenAI assistants, see Azure OpenAI Assistants API.

Note

References and examples are only provided for the Node.js v4 model.

Note

References and examples are only provided for the Python v2 model.

Note

While both C# process models are supported, only isolated worker model examples are provided.

Example

This example demonstrates how to create an assistant that adds a new todo task to a database. The trigger has a static description of Create a new todo task used by the model. The function itself takes a string, which represents a new task to add. When executed, the function adds the task as a new todo item in a custom item store and returns a response from the store.

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

This example demonstrates how to create an assistant that adds a new todo task to a database. The trigger has a static description of Create a new todo task used by the model. The function itself takes a string, which represents a new task to add. When executed, the function adds the task as a new todo item in a custom item store and returns a response from the store.

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

Examples aren't yet available.

This example demonstrates how to create an assistant that adds a new todo task to a database. The trigger has a static description of Create a new todo task used by the model. The function itself takes a string, which represents a new task to add. When executed, the function adds the task as a new todo item in a custom item store and returns a response from the store.


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

This example demonstrates how to create an assistant that adds a new todo task to a database. The trigger has a static description of Create a new todo task used by the model. The function itself takes a string, which represents a new task to add. When executed, the function adds the task as a new todo item in a custom item store and returns a response from the store.

Here's the function.json file for Add Todo:

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

For more information about function.json file properties, see the Configuration section.

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

This example demonstrates how to create an assistant that adds a new todo task to a database. The trigger has a static description of Create a new todo task used by the model. The function itself takes a string, which represents a new task to add. When executed, the function adds the task as a new todo item in a custom item store and returns a response from the store.

@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

Attributes

Apply the AssistantSkillTrigger attribute to define an assistant trigger, which supports these parameters:

Parameter Description
FunctionDescription Gets the description of the assistant function, which is provided to the model.
FunctionName Optional. Gets or sets the name of the function called by the assistant.
ParameterDescriptionJson Optional. Gets or sets a JSON description of the function parameter, which is provided to the model. For more information, see Usage.
Model Optional. Gets or sets the OpenAI chat model deployment to use, with a default value of gpt-3.5-turbo.

Annotations

The AssistantSkillTrigger annotation enables you to define an assistant trigger, which supports these parameters:

Element Description
name Gets or sets the name of the input binding.
functionDescription Gets the description of the assistant function, which is provided to the model.
functionName Optional. Gets or sets the name of the function called by the assistant.
parameterDescriptionJson Optional. Gets or sets a JSON description of the function parameter, which is provided to the model. For more information, see Usage.
model Optional. Gets or sets the OpenAI chat model deployment to use, with a default value of gpt-3.5-turbo.

Decorators

During the preview, define the input binding as a generic_trigger binding of type assistantSkillTrigger, which supports these parameters:

Parameter Description
function_description Gets the description of the assistant function, which is provided to the model.
function_name Optional. Gets or sets the name of a function called by the assistant.
parameterDescriptionJson Optional. Gets or sets a JSON description of the function parameter, which is provided to the model. For more information, see Usage.
model Optional. Gets or sets the OpenAI chat model deployment to use, with a default value of gpt-3.5-turbo.

Configuration

The binding supports these configuration properties that you set in the function.json file.

Property Description
type Must be AssistantSkillTrigger.
direction Must be in.
name The name of the trigger.
functionName Gets or sets the name of the function called by the assistant.
functionDescription Gets the description of the assistant function, which is provided to the LLM
parameterDescriptionJson Optional. Gets or sets a JSON description of the function parameter, which is provided to the model. For more information, see Usage.
model Optional. Gets or sets the OpenAI chat model deployment to use, with a default value of gpt-3.5-turbo.

Configuration

The binding supports these properties, which are defined in your code:

Property Description
type Must be AssistantSkillTrigger.
name The name of the trigger.
functionName Gets or sets the name of the function called by the assistant.
functionDescription Gets the description of the assistant function, which is provided to the LLM
parameterDescriptionJson Optional. Gets or sets a JSON description of the function parameter, which is provided to the model. For more information, see Usage.
model Optional. Gets or sets the OpenAI chat model deployment to use, with a default value of gpt-3.5-turbo.

See the Example section for complete examples.

Usage

When parameterDescriptionJson JSON value isn't provided, it's autogenerated. For more information on the syntax of this object, see the OpenAI API documentation.