Adición de Logic Apps como complementos
A menudo en una empresa, ya tiene un conjunto de flujos de trabajo que realizan un trabajo real en Logic Apps. Estos podrían ser utilizados por otros servicios de automatización o aplicaciones de front-end de energía con las que interactúan los seres humanos. En kernel semántico, puede agregar estos mismos flujos de trabajo exactos que los complementos para que los agentes también puedan usarlos.
Tome por ejemplo los flujos de trabajo de Logic Apps usados por el equipo de kernel semántico para responder a preguntas sobre las nuevas solicitudes de incorporación de cambios. Con los siguientes flujos de trabajo, un agente tiene todo lo que necesita para recuperar los cambios de código, buscar archivos relacionados y comprobar los registros de errores.
- Buscar archivos : para buscar fragmentos de código relevantes para un problema determinado
- Obtener archivo : para recuperar el contenido de un archivo en el repositorio de GitHub
- Obtener detalles de la solicitud de incorporación de cambios : para recuperar los detalles de una solicitud de incorporación de cambios (por ejemplo, el título de la solicitud de incorporación de cambios, la descripción y el autor)
- Obtener archivos de solicitud de incorporación de cambios : para recuperar los archivos que se cambiaron en una solicitud de incorporación de cambios
- Obtención de errores de compilación y prueba: para recuperar los errores de compilación y prueba de una determinada ejecución de acción de GitHub
- Obtener el archivo de registro: para recuperar el archivo de registro de una determinada ejecución de acción de GitHub
Aprovechar logic Apps para complementos de kernel semántico también es una excelente manera de aprovechar los más de 1400 conectores disponibles en Logic Apps. Esto significa que puede conectarse fácilmente a una amplia variedad de servicios y sistemas sin escribir ningún código.
Importante
En la actualidad, solo puede agregar Logic Apps estándar (también conocido como Logic Apps de un solo inquilino) como complementos. El consumo de Logic Apps estará disponible próximamente.
Importación de Logic Apps como complementos
Para agregar flujos de trabajo de Logic Apps al kernel semántico, usará los mismos métodos que la carga en una especificación de OpenAPI. A continuación se muestra código de ejemplo.
await kernel.ImportPluginFromOpenApiAsync(
pluginName: "openapi_plugin",
uri: new Uri("https://example.azurewebsites.net/swagger.json"),
executionParameters: new OpenApiFunctionExecutionParameters()
{
// Determines whether payload parameter names are augmented with namespaces.
// Namespaces prevent naming conflicts by adding the parent parameter name
// as a prefix, separated by dots
EnablePayloadNamespacing = true
}
);
Configuración de Logic Apps para kernel semántico
Para poder importar una aplicación lógica como complemento, primero debe configurar la aplicación lógica para que sea accesible mediante kernel semántico. Esto implica habilitar los puntos de conexión de metadatos y configurar la aplicación para Easy Auth antes de finalmente importar la aplicación lógica como complemento con autenticación.
Habilitación de puntos de conexión de metadatos
Para la configuración más sencilla, puede habilitar el acceso no autenticado a los puntos de conexión de metadatos de la aplicación lógica. Esto le permitirá importar la aplicación lógica como complemento en kernel semántico sin necesidad de crear un cliente HTTP personalizado para controlar la autenticación de la importación inicial.
El siguiente archivo host.json creará dos puntos de conexión no autenticados. Para ello, vaya a la consola kudu y edite el archivo host.json ubicado en C:\home\site\wwwroot\host.json.
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows",
"version": "[1.*, 2.0.0)"
},
"extensions": {
"http": {
"routePrefix": ""
},
"workflow": {
"MetadataEndpoints": {
"plugin": {
"enable": true,
"Authentication":{
"Type":"Anonymous"
}
},
"openapi": {
"enable": true,
"Authentication":{
"Type":"Anonymous"
}
}
},
"Settings": {
"Runtime.Triggers.RequestTriggerDefaultApiVersion": "2020-05-01-preview"
}
}
}
}
Configuración de la aplicación para Easy Auth
Ahora quiere proteger los flujos de trabajo de la aplicación lógica para que solo los usuarios autorizados puedan acceder a ellos. Para ello, habilite La autenticación sencilla en la aplicación lógica. Esto le permitirá usar el mismo mecanismo de autenticación que los demás servicios de Azure, lo que facilita la administración de las directivas de seguridad.
Para obtener un tutorial detallado sobre cómo configurar Easy Auth, consulte este tutorial titulado Desencadenamiento de flujos de trabajo en aplicaciones lógicas estándar con Easy Auth.
Para aquellos que ya están familiarizados con Easy Auth (y ya tienen una aplicación cliente entra que quiere usar), esta es la configuración que desea publicar en la administración de Azure.
#!/bin/bash
# Variables
subscription_id="[SUBSCRIPTION_ID]"
resource_group="[RESOURCE_GROUP]"
app_name="[APP_NAME]"
api_version="2022-03-01"
arm_token="[ARM_TOKEN]"
tenant_id="[TENANT_ID]"
aad_client_id="[AAD_CLIENT_ID]"
object_ids=("[OBJECT_ID_FOR_USER1]" "[OBJECT_ID_FOR_USER2]" "[OBJECT_ID_FOR_APP1]")
# Convert the object_ids array to a JSON array
object_ids_json=$(printf '%s\n' "${object_ids[@]}" | jq -R . | jq -s .)
# Request URL
url="https://management.azure.com/subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.Web/sites/$app_name/config/authsettingsV2?api-version=$api_version"
# JSON payload
json_payload=$(cat <<EOF
{
"properties": {
"platform": {
"enabled": true,
"runtimeVersion": "~1"
},
"globalValidation": {
"requireAuthentication": true,
"unauthenticatedClientAction": "AllowAnonymous"
},
"identityProviders": {
"azureActiveDirectory": {
"enabled": true,
"registration": {
"openIdIssuer": "https://sts.windows.net/$tenant_id/",
"clientId": "$aad_client_id"
},
"validation": {
"jwtClaimChecks": {},
"allowedAudiences": [
"api://$aad_client_id"
],
"defaultAuthorizationPolicy": {
"allowedPrincipals": {
"identities": $object_ids_json
}
}
}
},
"facebook": {
"enabled": false,
"registration": {},
"login": {}
},
"gitHub": {
"enabled": false,
"registration": {},
"login": {}
},
"google": {
"enabled": false,
"registration": {},
"login": {},
"validation": {}
},
"twitter": {
"enabled": false,
"registration": {}
},
"legacyMicrosoftAccount": {
"enabled": false,
"registration": {},
"login": {},
"validation": {}
},
"apple": {
"enabled": false,
"registration": {},
"login": {}
}
}
}
}
EOF
)
# HTTP PUT request
curl -X PUT "$url" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $arm_token" \
-d "$json_payload"
Uso de Logic Apps con kernel semántico como complemento
Ahora que tiene la aplicación lógica protegida y los puntos de conexión de metadatos habilitados, ha terminado todas las partes duras. Ahora puede importar la aplicación lógica como complemento en kernel semántico mediante el método de importación openAPI.
Al crear el complemento, querrá proporcionar un cliente HTTP personalizado que pueda controlar la autenticación de la aplicación lógica. Esto le permitirá usar el complemento en los agentes de IA sin necesidad de preocuparse por la autenticación.
A continuación se muestra un ejemplo de C# que aprovecha la autenticación interactiva para adquirir un token y autenticar al usuario para la aplicación lógica.
string ClientId = "[AAD_CLIENT_ID]";
string TenantId = "[TENANT_ID]";
string Authority = $"https://login.microsoftonline.com/{TenantId}";
string[] Scopes = new string[] { "api://[AAD_CIENT_ID]/SKLogicApp" };
var app = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority(Authority)
.WithDefaultRedirectUri() // Uses http://localhost for a console app
.Build();
AuthenticationResult authResult = null;
try
{
authResult = await app.AcquireTokenInteractive(Scopes).ExecuteAsync();
}
catch (MsalException ex)
{
Console.WriteLine("An error occurred acquiring the token: " + ex.Message);
}
// Add the plugin to the kernel with a custom HTTP client for authentication
kernel.Plugins.Add(await kernel.ImportPluginFromOpenApiAsync(
pluginName: "[NAME_OF_PLUGIN]",
uri: new Uri("https://[LOGIC_APP_NAME].azurewebsites.net/swagger.json"),
executionParameters: new OpenApiFunctionExecutionParameters()
{
HttpClient = new HttpClient()
{
DefaultRequestHeaders =
{
Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken)
}
},
}
));
Pasos siguientes
Ahora que sabe cómo crear un complemento, ahora puede aprender a usarlos con el agente de IA. Dependiendo del tipo de funciones que haya agregado a los complementos, hay diferentes patrones que debe seguir. Para las funciones de recuperación, consulte el artículo uso de funciones de recuperación. Para las funciones de automatización de tareas, consulte el artículo uso de funciones de automatización de tareas .