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.