Добавление Logic Apps в качестве подключаемых модулей
Часто в организации уже есть набор рабочих процессов, выполняющих реальную работу в Logic Apps. Они могут использоваться другими службами автоматизации или интерфейсными приложениями, с которыми взаимодействуют люди. В семантическом ядре можно добавить эти же рабочие процессы, что и подключаемые модули, чтобы агенты могли также использовать их.
Например, рабочие процессы Logic Apps, используемые командой семантического ядра, отвечают на вопросы о новых PR. В следующих рабочих процессах агент имеет все необходимое для получения изменений кода, поиска связанных файлов и проверки журналов сбоев.
- Поиск файлов — поиск фрагментов кода, относящихся к данной проблеме
- Получение файла — получение содержимого файла в репозитории GitHub
- Получение сведений о pr — для получения сведений о pr (например, заголовке PR, описании и авторе)
- Получение PR-файлов — для получения файлов, которые были изменены в PR
- Получение сбоев сборки и тестирования для получения сбоев сборки и тестирования для заданного выполнения действия GitHub
- Получение файла журнала — для получения файла журнала для заданного действия GitHub
Использование подключаемых модулей Logic Apps для семантического ядра также отлично подходит для использования более 1400 соединителей, доступных в Logic Apps. Это означает, что вы можете легко подключаться к различным службам и системам без написания кода.
Внимание
Сегодня вы можете добавлять только стандартные logic Apps (также известные как однотенантные приложения Logic Apps) как подключаемые модули. Приложения логики потребления скоро идут.
Импорт Logic Apps в качестве подключаемых модулей
Чтобы добавить рабочие процессы Logic Apps в семантический ядро, вы будете использовать те же методы, что и загрузка в спецификациях OpenAPI. Ниже приведен пример кода.
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
}
);
Настройка Logic Apps для семантического ядра
Прежде чем импортировать приложение логики в качестве подключаемого модуля, необходимо сначала настроить приложение логики для доступа к семантике ядра. Это включает включение конечных точек метаданных и настройку приложения для простой проверки подлинности, прежде чем, наконец, импортировать приложение логики в качестве подключаемого модуля с проверкой подлинности.
Включение конечных точек метаданных
Для самой простой настройки вы можете включить доступ к конечным точкам метаданных для приложения логики без проверки подлинности. Это позволит импортировать приложение логики в качестве подключаемого модуля в семантический ядро без необходимости создания пользовательского HTTP-клиента для обработки проверки подлинности для первоначального импорта.
Приведенный ниже host.json файл создаст две неуверенные конечные точки. Это можно сделать на портале Azure, перейдя в консоль kudu и изменив файл host.json, расположенный в папке 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"
}
}
}
}
Настройка приложения для Easy Auth
Теперь вы хотите защитить рабочие процессы приложения логики, чтобы к ним могли обращаться только авторизованные пользователи. Это можно сделать, включив простую проверку подлинности в приложении логики. Это позволит использовать тот же механизм проверки подлинности, что и другие службы Azure, что упрощает управление политиками безопасности.
Подробное пошаговое руководство по настройке простой проверки подлинности см. в этом руководстве: рабочие процессы триггеров в стандартных приложениях логики с помощью Easy Auth.
Для тех, кто уже знаком с Easy Auth (и уже имеет клиентское приложение Entra, которое вы хотите использовать), это конфигурация, которую вы хотите опубликовать в службе управления 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"
Использование Logic Apps с семантическим ядром в качестве подключаемого модуля
Теперь, когда приложение логики защищены и включены конечные точки метаданных, вы завершили все жесткие части. Теперь вы можете импортировать приложение логики в качестве подключаемого модуля в семантический ядро с помощью метода импорта OpenAPI.
При создании подключаемого модуля необходимо предоставить пользовательский HTTP-клиент, который может обрабатывать проверку подлинности для приложения логики. Это позволит использовать подключаемый модуль в агентах ИИ без необходимости беспокоиться о проверке подлинности.
Ниже приведен пример в C#, который использует интерактивную проверку подлинности для получения маркера и проверки подлинности пользователя для приложения логики.
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)
}
},
}
));
Следующие шаги
Теперь, когда вы знаете, как создать подключаемый модуль, вы можете узнать, как использовать их с агентом ИИ. В зависимости от типа функций, которые вы добавили в подключаемые модули, следует следовать разным шаблонам. Сведения о функциях извлечения см. в статье об использовании функций извлечения. Сведения о функциях автоматизации задач см. в статье об использовании функций автоматизации задач.