Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
L’extension Azure OpenAI pour Azure Functions est actuellement en préversion.
Le déclencheur de l’Assistant Azure OpenAI vous permet d’exécuter votre code en fonction d’une demande personnalisée de bot de conversation ou de compétence adressée à un assistant.
Pour plus d’informations sur l’installation et la configuration de l’extension Azure OpenAI, consultez Extensions Azure OpenAI pour Azure Functions. Si vous souhaitez en savoir plus sur les assistants Azure OpenAI, veuillez consulter la rubrique API d’assistants Azure OpenAI.
Remarque
Les références et les exemples sont fournis uniquement pour le modèle Node.js v4.
Remarque
Les références et exemples sont fournis uniquement pour le modèle Python v2.
Remarque
Bien que les deux modèles de processus C# soient pris en charge, seuls les exemples de modèles worker isolés sont fournis.
Exemple
Le support Go n’est pas disponible pour ce liaison pour le moment.
Cet exemple montre comment créer un assistant qui ajoute une nouvelle tâche TODO à une base de données. Le déclencheur a une description statique Create a new todo task utilisé par le modèle. La fonction elle-même prend une chaîne, qui représente une nouvelle tâche à ajouter. Lorsqu’elle est exécutée, la fonction ajoute la tâche en tant que nouvel élément todo dans un magasin d’éléments personnalisé et retourne une réponse à partir du magasin.
[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));
}
Cet exemple montre comment créer un assistant qui ajoute une nouvelle tâche TODO à une base de données. Le déclencheur a une description statique Create a new todo task utilisé par le modèle. La fonction elle-même prend une chaîne, qui représente une nouvelle tâche à ajouter. Lorsqu’elle est exécutée, la fonction ajoute la tâche en tant que nouvel élément todo dans un magasin d’éléments personnalisé et retourne une réponse à partir du magasin.
/**
* Called by the assistant to create new todo tasks.
*/
@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);
}
Cet exemple montre comment créer un assistant qui ajoute une nouvelle tâche TODO à une base de données. Le déclencheur a une description statique Create a new todo task utilisé par le modèle. La fonction elle-même prend une chaîne, qui représente une nouvelle tâche à ajouter. Lorsqu’elle est exécutée, la fonction ajoute la tâche en tant que nouvel élément todo dans un magasin d’éléments personnalisé et retourne une réponse à partir du magasin.
const { app, trigger } = require("@azure/functions");
const { TodoItem, CreateTodoManager } = require("../services/todoManager");
const { randomUUID } = require('crypto');
const todoManager = CreateTodoManager()
app.generic('AddTodo', {
trigger: trigger.generic({
type: 'assistantSkillTrigger',
functionDescription: 'Create a new todo task'
}),
handler: async (taskDescription, context) => {
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))
}
})
import { InvocationContext, app, trigger } from "@azure/functions"
import { TodoItem, ITodoManager, CreateTodoManager } from "../services/todoManager"
import { randomUUID } from 'crypto';
const todoManager: ITodoManager = CreateTodoManager()
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))
}
})
Cet exemple montre comment créer un assistant qui ajoute une nouvelle tâche TODO à une base de données. Le déclencheur a une description statique Create a new todo task utilisé par le modèle. La fonction elle-même prend une chaîne, qui représente une nouvelle tâche à ajouter. Lorsqu’elle est exécutée, la fonction ajoute la tâche en tant que nouvel élément todo dans un magasin d’éléments personnalisé et retourne une réponse à partir du magasin.
Voici le fichier function.json pour ajouter todo :
{
"bindings": [
{
"name": "TaskDescription",
"type": "assistantSkillTrigger",
"dataType": "string",
"direction": "in",
"functionDescription": "Create a new todo task"
}
]
}
Pour plus d’informations sur les propriétés du fichier function.json, consultez la section Configuration.
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
Cet exemple montre comment créer un assistant qui ajoute une nouvelle tâche TODO à une base de données. Le déclencheur a une description statique Create a new todo task utilisé par le modèle. La fonction elle-même prend une chaîne, qui représente une nouvelle tâche à ajouter. Lorsqu’elle est exécutée, la fonction ajoute la tâche en tant que nouvel élément todo dans un magasin d’éléments personnalisé et retourne une réponse à partir du magasin.
@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
Attributs
Appliquez l’attribut AssistantSkillTrigger pour définir un déclencheur Assistant, qui prend en charge ces paramètres :
| Paramètre | Descriptif |
|---|---|
| FunctionDescription | Obtient la description de la fonction Assistant, qui est fournie au modèle. |
| FunctionName | Facultatif. Obtient ou définit le nom de la fonction appelée par l’Assistant. |
| ParameterDescriptionJson | Facultatif. Obtient ou définit une description JSON du paramètre de fonction, qui est fourni au modèle. Pour plus d’informations, consultez Utilisation. |
Commentaires
L’annotation AssistantSkillTrigger vous permet de définir un déclencheur Assistant, qui prend en charge ces paramètres :
| Élément | Descriptif |
|---|---|
| nom | Obtient ou définit le nom de la liaison d’entrée. |
| functionDescription | Obtient la description de la fonction Assistant, qui est fournie au modèle. |
| Nom de fonction | Facultatif. Obtient ou définit le nom de la fonction appelée par l’Assistant. |
| parameterDescriptionJson | Facultatif. Obtient ou définit une description JSON du paramètre de fonction, qui est fourni au modèle. Pour plus d’informations, consultez Utilisation. |
Décorateurs
Pendant la préversion, définissez la liaison d’entrée en tant que liaison generic_trigger de type assistantSkillTrigger, qui prend en charge ces paramètres :
| Paramètre | Descriptif |
|---|---|
| function_description | Obtient la description de la fonction Assistant, qui est fournie au modèle. |
| function_name | Facultatif. Obtient ou définit le nom d’une fonction appelée par l’Assistant. |
| parameterDescriptionJson | Facultatif. Obtient ou définit une description JSON du paramètre de fonction, qui est fourni au modèle. Pour plus d’informations, consultez Utilisation. |
Paramétrage
La liaison prend en charge ces propriétés de configuration que vous définissez dans le fichier function.json.
| Propriété | Descriptif |
|---|---|
| type | Doit être AssistantSkillTrigger. |
| direction | Doit être in. |
| nom | Nom du déclencheur. |
| Nom de fonction | Obtient ou définit le nom de la fonction appelée par l’Assistant. |
| functionDescription | Obtient la description de la fonction Assistant, qui est fournie au modèle de langage. |
| parameterDescriptionJson | Facultatif. Obtient ou définit une description JSON du paramètre de fonction, qui est fourni au modèle. Pour plus d’informations, consultez Utilisation. |
Paramétrage
La liaison prend en charge ces propriétés, qui sont définies dans votre code :
| Propriété | Descriptif |
|---|---|
| type | Doit être AssistantSkillTrigger. |
| nom | Nom du déclencheur. |
| Nom de fonction | Obtient ou définit le nom de la fonction appelée par l’Assistant. |
| functionDescription | Obtient la description de la fonction Assistant, qui est fournie au LLM |
| parameterDescriptionJson | Facultatif. Obtient ou définit une description JSON du paramètre de fonction, qui est fourni au modèle. Pour plus d’informations, consultez Utilisation. |
Pour obtenir des exemples complets, consultez la section Exemple.
Utilisation
Lorsque la valeur JSON parameterDescriptionJson n’est pas fournie, elle est générée automatiquement. Pour plus d’informations sur la syntaxe de cet objet, voir la documentation sur l’appel de fonction OpenAI.
Connections
Pour utiliser l’extension de liaison Azure OpenAI, vous devez spécifier une connexion à une définition de modèle OpenAI. Configurez la connexion du modèle OpenAI dans vos liaisons en utilisant l’une de ces approches :
- Utilisez la
AIConnectionNamepropriété de liaison (préférée pour Azure OpenAI). - Définissez
AZURE_OPENAI_ENDPOINTetAZURE_OPENAI_KEYdans les paramètres de l’application (pour Azure OpenAI). - Réglez uniquement
Open_API_Keydans les paramètres de l’application (pourhttps://api.openai.com).
La façon dont vous définissez la connexion dépend à la fois de l’API du modèle et de la méthode d’authentification, comme indiqué par le tableau suivant :
| API d’authentification/modèle | Azure OpenAI | OpenAI (https://api.openai.com) |
|---|---|---|
| Connexion d’identité gérée | AIConnectionName |
Non pris en charge |
| Référence Key Vault | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| Référence de configuration de l’application | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| Secret partagé | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
Utilisez des connexions basées sur l’identité et la AIConnectionName propriété.
Lorsque vous utilisez AIConnectionName, la valeur de ce réglage de propriété dépend du type de connexion :
-
Connexion d’identité gérée : Cette
AIConnectionNamepropriété est<CONNECTION_NAME_PREFIX>partagée par un groupe de paramètres qui définissent ensemble une connexion basée sur l’identité avec Azure OpenAI. Pour plus d’informations, voir Définir les connexions identités. -
Référence Key Vault : Le
AIConnectionNameparamètre de propriété renvoie une référence Azure Key Vault à l’emplacement où la clé API est centralisée. Pour plus d’informations, voir Définir les connexions Key Vault. -
Référence App Configuration : Le
AIConnectionNameparamètre de propriété renvoie une référence Azure App Configuration qui renvoie une clé API ou une référence Key Vault. Pour plus d’informations, consultez Azure App Configuration dans l’article sur les connexions. -
Clé API : Le
AIConnectionNameparamètre de propriété se résout aux paramètres de l’application contenant directement le point de terminaison et la clé. Comme les clés partagées peuvent être compromises, utilisez des connexions d’identité gérées lorsque cela est possible. Pour plus d’informations, voir Définir les connexions.
Pour en savoir plus sur les connexions de liaisons, voir Gérer les connexions dans Azure Functions.
Les liaisons OpenAI incluent une AIConnectionName propriété que vous pouvez utiliser pour spécifier le <ConnectionNamePrefix> groupe de paramètres d’application qui définissent la connexion à Azure OpenAI :
| Nom de la configuration | Descriptif |
|---|---|
<CONNECTION_NAME_PREFIX>__endpoint |
Définit le point de terminaison URI du service Azure OpenAI. Ce paramètre est toujours requis. |
<CONNECTION_NAME_PREFIX>__clientId |
Définit l’identité affectée par l’utilisateur spécifique à utiliser lors de l’obtention d’un jeton d’accès. Exige que <CONNECTION_NAME_PREFIX>__credential soit défini sur managedidentity. La propriété accepte un ID client correspondant à une identité attribuée par l’utilisateur affectée à l’application. Il incorrect de spécifier à la fois un ID de la ressource et un ID client. Si vous ne spécifiez pas cette propriété, l’identité attribuée par le système est utilisée. Cette propriété est utilisée différemment dans des scénarios de développement local lorsque credential ne doit pas être défini. |
<CONNECTION_NAME_PREFIX>__credential |
Définit la façon dont un jeton access est obtenu pour la connexion. Utiliser managedidentity pour l’authentification d’identité managée. Cette valeur n’est valide que lorsqu’une identité managée est disponible dans l’environnement d’hébergement. |
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId |
Lorsque credential est défini à managedidentity, définissez cette propriété pour spécifier l’identifiant de ressource à utiliser lors de l’obtention d’un jeton. La propriété accepte un identifiant de ressource correspondant à l’ID de la ressource de l’identité managée définie par l’utilisateur. Il n’est pas correct de spécifier à la fois un ID de la ressource et un ID client. Si vous ne spécifiez ni l’un ni l’autre, l’identité attribuée par le système est utilisée. Cette propriété est utilisée différemment dans des scénarios de développement local lorsque credential ne doit pas être défini. |
<CONNECTION_NAME_PREFIX>__key |
Définit la clé secrète partagée nécessaire pour accéder au point de terminaison du service OpenAI Azure en utilisant une authentification basée sur une clé. En guise de bonne pratique en matière de sécurité, utilisez toujours Microsoft Entra ID avec des identités gérées pour l’authentification. |
Considérez ces paramètres de connexion d’identité gérée lorsque vous définissez la AIConnectionName propriété à myAzureOpenAI:
myAzureOpenAI__endpoint=https://contoso.openai.azure.com/myAzureOpenAI__credential=managedidentitymyAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222
À l’exécution, l’hôte interprète ces paramètres comme un seul myAzureOpenAI paramètre :
"myAzureOpenAI":
{
"endpoint": "https://contoso.openai.azure.com/",
"credential": "managedidentity",
"clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
Lorsque vous utilisez des identités gérées, assurez-vous d’ajouter votre identité au rôle d’utilisateur OpenAI des services cognitifs .
Lors de l’exécution locale, ajoutez ces paramètres au fichierlocal.settings.json projet. Pour plus d’informations, consultez Développement local avec des connexions basées sur des identités.
Pour plus d’informations, consultez Utiliser des paramètres d’application.