Udostępnij za pośrednictwem


Dodawanie usługi Logic Apps jako wtyczek

Często w przedsiębiorstwie masz już zestaw przepływów pracy, które wykonują rzeczywistą pracę w usłudze Logic Apps. Mogą one być używane przez inne usługi automatyzacji lub aplikacje frontonu zasilania, z którymi korzystają ludzie. W jądrze semantycznym można dodać dokładnie te same przepływy pracy co wtyczki, aby agenci mogli ich również używać.

Weźmy na przykład przepływy pracy usługi Logic Apps używane przez zespół jądra semantycznego, aby odpowiedzieć na pytania dotyczące nowych reguł ściągnięcia. W przypadku następujących przepływów pracy agent ma wszystko, czego potrzebuje, aby pobrać zmiany kodu, wyszukać powiązane pliki i sprawdzić dzienniki błędów.

Logic Apps

  • Wyszukaj pliki — aby znaleźć fragmenty kodu, które są istotne dla danego problemu
  • Pobieranie pliku — pobieranie zawartości pliku w repozytorium GitHub
  • Pobieranie szczegółów żądania ściągnięcia — aby pobrać szczegóły żądania ściągnięcia (np. tytuł żądania ściągnięcia, opis i autor)
  • Pobieranie plików żądania ściągnięcia — pobieranie plików, które zostały zmienione w żądaniu ściągnięcia
  • Uzyskiwanie niepowodzeń kompilacji i testowania — aby pobrać błędy kompilacji i testu dla danego przebiegu akcji usługi GitHub
  • Pobieranie pliku dziennika — aby pobrać plik dziennika dla danego uruchomienia akcji usługi GitHub

Korzystanie z wtyczek jądra semantycznego w usłudze Logic Apps to również doskonały sposób korzystania z ponad 1400 łączników dostępnych w usłudze Logic Apps. Oznacza to, że można łatwo połączyć się z szeroką gamą usług i systemów bez konieczności pisania kodu.

Ważne

Obecnie można dodawać tylko standardowe aplikacje logiki (znane również jako aplikacje logiki z jedną dzierżawą) jako wtyczki. Użycie usługi Logic Apps będzie wkrótce.

Importowanie usługi Logic Apps jako wtyczek

Aby dodać przepływy pracy usługi Logic Apps do jądra semantycznego, użyjesz tych samych metod co ładowanie w specyfikacji interfejsu OpenAPI. Poniżej znajduje się przykładowy kod.

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
    }
);

Konfigurowanie usługi Logic Apps dla jądra semantycznego

Aby można było zaimportować aplikację logiki jako wtyczkę, należy najpierw skonfigurować aplikację logiki, aby była dostępna przez jądro semantyczne. Obejmuje to włączenie punktów końcowych metadanych i skonfigurowanie aplikacji na potrzeby prostego uwierzytelniania przed zaimportowaniem aplikacji logiki jako wtyczki z uwierzytelnianiem.

Włączanie punktów końcowych metadanych

Najprostszą konfiguracją można włączyć nieuwierzytelniony dostęp do punktów końcowych metadanych dla aplikacji logiki. Pozwoli to zaimportować aplikację logiki jako wtyczkę do jądra semantycznego bez konieczności tworzenia niestandardowego klienta HTTP do obsługi uwierzytelniania na potrzeby początkowego importu.

Poniższy plik host.json utworzy dwa nieuwierzytelnione punkty końcowe. Możesz to zrobić w witrynie Azure Portal, przechodząc do konsoli kudu i edytując plik host.json znajdujący się w lokalizacji 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" 
      } 
    } 
  } 
} 

Konfigurowanie aplikacji pod kątem łatwego uwierzytelniania

Teraz chcesz zabezpieczyć przepływy pracy aplikacji logiki, aby tylko autoryzowani użytkownicy mogli do nich uzyskiwać dostęp. Można to zrobić, włączając usługę Easy Auth w aplikacji logiki. Umożliwi to korzystanie z tego samego mechanizmu uwierzytelniania co inne usługi platformy Azure, co ułatwia zarządzanie zasadami zabezpieczeń.

Szczegółowe instrukcje dotyczące konfigurowania usługi Easy Auth można znaleźć w tym samouczku zatytułowanym Wyzwalanie przepływów pracy w aplikacjach logiki w warstwie Standardowa z funkcją Easy Auth.

W przypadku osób, które już znają usługę Easy Auth (i masz już aplikację klienta Entra, której chcesz użyć), jest to konfiguracja, którą chcesz opublikować w usłudze Azure Management.

#!/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"

Używanie usługi Logic Apps z semantycznym jądrem jako wtyczką

Po zabezpieczeniu aplikacji logiki i włączeniu punktów końcowych metadanych wszystkie twarde części zostały ukończone. Teraz możesz zaimportować aplikację logiki jako wtyczkę do jądra semantycznego przy użyciu metody importowania interfejsu OpenAPI.

Podczas tworzenia wtyczki należy podać niestandardowego klienta HTTP, który może obsługiwać uwierzytelnianie dla aplikacji logiki. Umożliwi to korzystanie z wtyczki w agentach sztucznej inteligencji bez konieczności martwienia się o uwierzytelnianie.

Poniżej przedstawiono przykład w języku C#, który korzysta z interaktywnego uwierzytelniania w celu uzyskania tokenu i uwierzytelnienia użytkownika dla aplikacji logiki.

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)
            }
        },
    }
));

Następne kroki

Teraz, gdy wiesz, jak utworzyć wtyczkę, możesz teraz dowiedzieć się, jak używać ich z agentem sztucznej inteligencji. W zależności od typu funkcji dodanych do wtyczek należy przestrzegać różnych wzorców. Aby zapoznać się z funkcjami pobierania, zapoznaj się z artykułem using retrieval functions (Korzystanie z funkcji pobierania). W przypadku funkcji automatyzacji zadań zapoznaj się z artykułem using task automation functions (Korzystanie z funkcji automatyzacji zadań).