Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
De Azure OpenAI-extensie voor Azure Functions is momenteel in preview.
Met de Azure OpenAI-assistenttrigger kunt u uw code uitvoeren op basis van een aangepaste chatbot of een aanvraag voor vaardigheden in een assistent.
Zie Azure OpenAI-extensies voor Azure Functions voor informatie over de installatie en configuratie van de Azure OpenAI-extensie. Zie de Api voor Azure OpenAI-assistenten voor meer informatie over Azure OpenAI-assistenten.
Notitie
Verwijzingen en voorbeelden worden alleen verstrekt voor het Node.js v4-model.
Notitie
Verwijzingen en voorbeelden worden alleen verstrekt voor het Python v2-model.
Notitie
Hoewel beide C#-procesmodellen worden ondersteund, worden alleen geïsoleerde werkrolmodelvoorbeelden gegeven.
Opmerking
Go-ondersteuning is momenteel niet beschikbaar voor deze binding.
In dit voorbeeld ziet u hoe u een assistent maakt waarmee een nieuwe taak aan een database wordt toegevoegd. De trigger heeft een statische beschrijving van Create a new todo task het model. De functie zelf neemt een tekenreeks, die een nieuwe taak vertegenwoordigt die moet worden toegevoegd. Wanneer deze wordt uitgevoerd, voegt de functie de taak toe als een nieuw taakitem in een aangepast itemarchief en retourneert een antwoord uit de 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));
}
In dit voorbeeld ziet u hoe u een assistent maakt waarmee een nieuwe taak aan een database wordt toegevoegd. De trigger heeft een statische beschrijving van Create a new todo task het model. De functie zelf neemt een tekenreeks, die een nieuwe taak vertegenwoordigt die moet worden toegevoegd. Wanneer deze wordt uitgevoerd, voegt de functie de taak toe als een nieuw taakitem in een aangepast itemarchief en retourneert een antwoord uit de store.
/**
* 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);
}
In dit voorbeeld ziet u hoe u een assistent maakt waarmee een nieuwe taak aan een database wordt toegevoegd. De trigger heeft een statische beschrijving van Create a new todo task het model. De functie zelf neemt een tekenreeks, die een nieuwe taak vertegenwoordigt die moet worden toegevoegd. Wanneer deze wordt uitgevoerd, voegt de functie de taak toe als een nieuw taakitem in een aangepast itemarchief en retourneert een antwoord uit de store.
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))
}
})
In dit voorbeeld ziet u hoe u een assistent maakt waarmee een nieuwe taak aan een database wordt toegevoegd. De trigger heeft een statische beschrijving van Create a new todo task het model. De functie zelf neemt een tekenreeks, die een nieuwe taak vertegenwoordigt die moet worden toegevoegd. Wanneer deze wordt uitgevoerd, voegt de functie de taak toe als een nieuw taakitem in een aangepast itemarchief en retourneert een antwoord uit de store.
Dit is het function.json-bestand voor Todo toevoegen:
{
"bindings": [
{
"name": "TaskDescription",
"type": "assistantSkillTrigger",
"dataType": "string",
"direction": "in",
"functionDescription": "Create a new todo task"
}
]
}
Zie de sectie Configuratie voor meer informatie over function.json bestandseigenschappen.
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
In dit voorbeeld ziet u hoe u een assistent maakt waarmee een nieuwe taak aan een database wordt toegevoegd. De trigger heeft een statische beschrijving van Create a new todo task het model. De functie zelf neemt een tekenreeks, die een nieuwe taak vertegenwoordigt die moet worden toegevoegd. Wanneer deze wordt uitgevoerd, voegt de functie de taak toe als een nieuw taakitem in een aangepast itemarchief en retourneert een antwoord uit de 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
Kenmerken
Pas het AssistantSkillTrigger kenmerk toe om een assistenttrigger te definiëren die ondersteuning biedt voor deze parameters:
| Kenmerk | Beschrijving |
|---|---|
| FunctionDescription | Hiermee haalt u de beschrijving op van de assistentfunctie, die aan het model wordt verstrekt. |
| FunctionName | Optioneel. Hiermee haalt u de naam op van de functie die door de assistent wordt aangeroepen of stelt u deze in. |
| ParameterDescriptionJson | Optioneel. Hiermee haalt u een JSON-beschrijving op van de functieparameter, die aan het model wordt verstrekt. Zie Gebruik voor meer informatie. |
Aantekeningen
Met de AssistantSkillTrigger aantekening kunt u een assistenttrigger definiëren, die deze parameters ondersteunt:
| Onderdeel | Beschrijving |
|---|---|
| naam | Hiermee haalt u de naam van de invoerbinding op of stelt u deze in. |
| functionDescription | Hiermee haalt u de beschrijving op van de assistentfunctie, die aan het model wordt verstrekt. |
| functionName | Optioneel. Hiermee haalt u de naam op van de functie die door de assistent wordt aangeroepen of stelt u deze in. |
| parameterDescriptionJson | Optioneel. Hiermee haalt u een JSON-beschrijving op van de functieparameter, die aan het model wordt verstrekt. Zie Gebruik voor meer informatie. |
Decorateurs
Definieer tijdens de preview de invoerbinding als een generic_trigger binding van het type assistantSkillTrigger, die ondersteuning biedt voor deze parameters:
| Kenmerk | Beschrijving |
|---|---|
| function_description | Hiermee haalt u de beschrijving op van de assistentfunctie, die aan het model wordt verstrekt. |
| function_name | Optioneel. Hiermee haalt u de naam op van een functie die wordt aangeroepen door de assistent. |
| parameterDescriptionJson | Optioneel. Hiermee haalt u een JSON-beschrijving op van de functieparameter, die aan het model wordt verstrekt. Zie Gebruik voor meer informatie. |
Configuratie
De binding ondersteunt deze configuratie-eigenschappen die u in het function.json-bestand hebt ingesteld.
| Eigenschappen | Beschrijving |
|---|---|
| soort | Moet AssistantSkillTrigger zijn. |
| richting | Moet in zijn. |
| naam | De naam van de trigger. |
| functionName | Hiermee haalt u de naam op van de functie die door de assistent wordt aangeroepen of stelt u deze in. |
| functionDescription | Hiermee haalt u de beschrijving van de assistentfunctie op, die wordt geleverd aan het taalmodel. |
| parameterDescriptionJson | Optioneel. Hiermee haalt u een JSON-beschrijving op van de functieparameter, die aan het model wordt verstrekt. Zie Gebruik voor meer informatie. |
Configuratie
De binding ondersteunt deze eigenschappen, die zijn gedefinieerd in uw code:
| Eigenschappen | Beschrijving |
|---|---|
| soort | Moet AssistantSkillTrigger zijn. |
| naam | De naam van de trigger. |
| functionName | Hiermee haalt u de naam op van de functie die door de assistent wordt aangeroepen of stelt u deze in. |
| functionDescription | Hiermee wordt de beschrijving opgehaald van de assistentfunctie, die aan de LLM wordt verstrekt |
| parameterDescriptionJson | Optioneel. Hiermee haalt u een JSON-beschrijving op van de functieparameter, die aan het model wordt verstrekt. Zie Gebruik voor meer informatie. |
Zie de sectie Voorbeeld voor volledige voorbeelden.
Gebruik
Wanneer parameterDescriptionJson de JSON-waarde niet is opgegeven, wordt deze automatisch gegenereerd. Voor meer informatie over de syntaxis van dit object, zie de OpenAI-functie die documentatie aanroept.
Connections
Om de Azure OpenAI-bindingsextensie te gebruiken, moet je een verbinding specificeren met een OpenAI-modeldefinitie. Stel de OpenAI-modelverbinding in je bindings in met een van deze benaderingen:
- Gebruik de
AIConnectionNamebinding-eigenschap (voorkeur voor Azure OpenAI). - Instellen
AZURE_OPENAI_ENDPOINTenAZURE_OPENAI_KEYin de app-instellingen (voor Azure OpenAI). - Stel alleen
Open_API_Keyin de app-instellingen in (voorhttps://api.openai.com).
De manier waarop je de verbinding instelt hangt af van zowel de model-API als de authenticatiemethode, zoals aangegeven in de volgende tabel:
| Authenticatie/Model API | Azure OpenAI | OpenAI (https://api.openai.com) |
|---|---|---|
| Beheerde identiteitsverbinding | AIConnectionName |
Niet ondersteund |
| Key Vault-referentie | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| App-configuratiereferentie | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| Gedeeld geheim | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
Gebruik beheerde identiteitsgebaseerde verbindingen en het eigendom AIConnectionName .
Wanneer je gebruikt AIConnectionName, hangt de waarde van deze eigenschapsinstelling af van het type verbinding:
-
Managed identity-verbinding: De
AIConnectionNameeigenschap wordt<CONNECTION_NAME_PREFIX>gedeeld door een groep instellingen die samen een identiteitsgebaseerde verbinding met Azure OpenAI definiëren. Voor meer informatie, zie Definieer identiteitsverbindingen. -
Key Vault-referentie: De
AIConnectionNameproperty-instelling geeft een Azure Key Vault-referentie terug naar de locatie waar de API-sleutel centraal wordt onderhouden. Voor meer informatie, zie Define Key Vault-verbindingen. -
App Configuration reference: De
AIConnectionNameproperty-instelling geeft een Azure App Configuration-referentie terug die een API-sleutel of een Key Vault-referentie teruggeeft. Voor meer informatie, zie Azure App Configuration in het artikel over verbindingen. -
API-sleutel: De
AIConnectionNameproperty-instelling wordt direct omgezet naar app-instellingen die het eindpunt en de sleutel bevatten. Omdat gedeelde sleutels gecompromitteerd kunnen worden, gebruik waar mogelijk beheerde identiteitsverbindingen. Voor meer informatie, zie Verbindingen definiëren.
Voor meer informatie over bindingsverbindingen, zie Verbindingen beheren in Azure Functions.
De OpenAI-bindings bevatten een AIConnectionName eigenschap die je kunt gebruiken om de <ConnectionNamePrefix> voor de groep app-instellingen te specificeren die de verbinding met Azure OpenAI definiëren:
| Instellingsnaam | Beschrijving |
|---|---|
<CONNECTION_NAME_PREFIX>__endpoint |
Zet het URI-eindpunt van de Azure OpenAI-service. Deze instelling is altijd vereist. |
<CONNECTION_NAME_PREFIX>__clientId |
Hiermee stelt u de specifieke door de gebruiker toegewezen identiteit in die moet worden gebruikt bij het verkrijgen van een toegangstoken. Vereist dat deze <CONNECTION_NAME_PREFIX>__credential is ingesteld op managedidentity. De eigenschap accepteert een client-id die overeenkomt met een door de gebruiker toegewezen identiteit die aan de toepassing is toegewezen. Het is ongeldig om zowel een resource-id als een client-id op te geven. Als je deze eigenschap niet specificeert, wordt de systeem-toegewezen identiteit gebruikt. Deze eigenschap wordt anders gebruikt in lokale ontwikkelscenario's, wanneer credential deze niet moeten worden ingesteld. |
<CONNECTION_NAME_PREFIX>__credential |
Hiermee definieert u hoe een access token wordt verkregen voor de verbinding. Gebruiken managedidentity voor verificatie van beheerde identiteiten. Deze waarde is alleen geldig wanneer een beheerde identiteit beschikbaar is in de hostingomgeving. |
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId |
Wanneer credential is gezet op managedidentity, stel deze eigenschap in om de resource Identifier te specificeren die gebruikt moet worden bij het verkrijgen van een token. De eigenschap accepteert een resource-id die overeenkomt met de resource-id van de door de gebruiker gedefinieerde beheerde identiteit. Het is ongeldig om zowel een resource-id als een client-id op te geven. Als je geen van beide specificeert, wordt de door het systeem toegewezen identiteit gebruikt. Deze eigenschap wordt anders gebruikt in lokale ontwikkelscenario's, wanneer credential deze niet moeten worden ingesteld. |
<CONNECTION_NAME_PREFIX>__key |
Stelt de gedeelde geheime sleutel in die nodig is om toegang te krijgen tot het eindpunt van de Azure OpenAI-dienst door gebruik te maken van sleutelgebaseerde authenticatie. Als beveiligingsbest practice gebruik je altijd Microsoft Entra ID met beheerde identiteiten voor authenticatie. |
Overweeg deze managed identity-verbindingsinstellingen wanneer je de AIConnectionName eigenschap instelt op myAzureOpenAI:
myAzureOpenAI__endpoint=https://contoso.openai.azure.com/myAzureOpenAI__credential=managedidentitymyAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222
Tijdens runtime interpreteert de host deze instellingen als één enkele myAzureOpenAI instelling:
"myAzureOpenAI":
{
"endpoint": "https://contoso.openai.azure.com/",
"credential": "managedidentity",
"clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
Wanneer je managed identitys gebruikt, voeg je dan je identiteit toe aan de Cognitive Services OpenAI User rol.
Voeg deze instellingen bij lokaal uitvoeren toe aan het local.settings.json projectbestand. Zie Lokale ontwikkeling met op identiteit gebaseerde verbindingen voor meer informatie.
Zie Werken met toepassingsinstellingen voor meer informatie.