Bagikan melalui


Menambahkan Logic Apps sebagai plugin

Seringkali di perusahaan, Anda sudah memiliki serangkaian alur kerja yang melakukan pekerjaan nyata di Logic Apps. Ini dapat digunakan oleh layanan otomatisasi lain atau aplikasi front-end yang bertenaga yang digunakan manusia untuk berinteraksi. Di Semantic Kernel, Anda dapat menambahkan alur kerja yang sama persis ini sebagai plugin sehingga agen Anda juga dapat menggunakannya.

Ambil contoh alur kerja Logic Apps yang digunakan oleh tim Semantic Kernel untuk menjawab pertanyaan tentang PR baru. Dengan alur kerja berikut, agen memiliki semua yang diperlukan untuk mengambil perubahan kode, mencari file terkait, dan memeriksa log kegagalan.

Logic Apps

  • File pencarian – untuk menemukan cuplikan kode yang relevan dengan masalah tertentu
  • Dapatkan file - untuk mengambil konten file di repositori GitHub
  • Dapatkan detail PR – untuk mengambil detail PR (misalnya, judul, deskripsi, dan penulis PR)
  • Dapatkan file PR – untuk mengambil file yang diubah dalam PR
  • Dapatkan kegagalan build dan pengujian – untuk mendapatkan kegagalan build dan pengujian dari eksekusi aksi GitHub yang ditentukan
  • Dapatkan file log - untuk mengambil file log untuk pelaksanaan suatu tindakan GitHub

Memanfaatkan plugin Logic Apps for Semantic Kernel juga merupakan cara yang bagus untuk memanfaatkan lebih dari 1.400 konektor yang tersedia di Logic Apps. Ini berarti Anda dapat dengan mudah terhubung ke berbagai layanan dan sistem tanpa menulis kode apa pun.

Penting

Saat ini, Anda hanya dapat menambahkan Logic Apps standar (juga dikenal sebagai Logic Apps penyewa tunggal) sebagai plugin. Aplikasi Logika Konsumsi akan segera hadir.

Mengimpor Logic Apps sebagai plugin

Untuk menambahkan alur kerja Logic Apps ke Semantic Kernel, Anda akan menggunakan metode yang sama seperti memuat dalam spesifikasi OpenAPI. Di bawah ini adalah beberapa kode sampel.

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

Mempersiapkan Logic Apps untuk Kernel Semantik

Sebelum dapat mengimpor Aplikasi Logika sebagai plugin, Anda harus terlebih dahulu menyiapkan Aplikasi Logika agar dapat diakses oleh Semantic Kernel. Ini melibatkan pengaktifan titik akhir metadata dan mengonfigurasi aplikasi Anda untuk Easy Auth sebelum akhirnya mengimpor Logic App sebagai plugin dengan autentikasi.

Mengaktifkan titik akhir metadata

Untuk penyiapan yang paling mudah, Anda dapat mengaktifkan akses yang tidak terautentikasi ke titik akhir metadata untuk Aplikasi Logika Anda. Ini akan memungkinkan Anda untuk mengimpor Aplikasi Logika Anda sebagai plugin ke Semantic Kernel tanpa perlu membuat klien HTTP kustom untuk menangani autentikasi untuk impor awal.

File host.json di bawah ini akan membuat dua titik akhir yang tidak terautentikasi. Anda dapat melakukan ini di portal Microsoft Azure dengan membuka konsol kudu dan mengedit file host.json yang terletak di C:\home\site\wwwroot\host.jsdi.

{ 
  "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" 
      } 
    } 
  } 
} 

Mengonfigurasi aplikasi Anda untuk Easy Auth

Anda sekarang ingin mengamankan alur kerja Aplikasi Logika Sehingga hanya pengguna yang berwenang yang dapat mengaksesnya. Anda dapat melakukan ini dengan mengaktifkan Easy Auth di Aplikasi Logika Anda. Ini akan memungkinkan Anda menggunakan mekanisme autentikasi yang sama dengan layanan Azure Lainnya, sehingga lebih mudah untuk mengelola kebijakan keamanan Anda.

Untuk panduan mendalam tentang menyiapkan Easy Auth, lihat tutorial ini berjudul Alur kerja pemicu di aplikasi logika Standar dengan Easy Auth.

Bagi mereka yang sudah terbiasa dengan Easy Auth (dan sudah memiliki aplikasi klien Entra yang ingin Anda gunakan), ini adalah konfigurasi yang ingin Anda posting ke manajemen 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"

Menggunakan Logic Apps dengan Semantic Kernel sebagai plugin

Setelah Logic App Anda diamankan dan titik akhir metadata diaktifkan, Anda telah menyelesaikan semua bagian yang sulit. Anda sekarang dapat mengimpor Aplikasi Logika Anda sebagai plugin ke Kernel Semantik menggunakan metode impor OpenAPI.

Saat membuat plugin, Anda harus menyediakan klien HTTP kustom yang dapat menangani autentikasi untuk Aplikasi Logika Anda. Ini akan memungkinkan Anda untuk menggunakan plugin di agen AI Anda tanpa perlu khawatir tentang autentikasi.

Di bawah ini adalah contoh dalam C# yang memanfaatkan autentikasi interaktif untuk memperoleh token dan mengautentikasi pengguna untuk Aplikasi Logika.

string ClientId = "[AAD_CLIENT_ID]";
string TenantId = "[TENANT_ID]";
string Authority = $"https://login.microsoftonline.com/{TenantId}";
string[] Scopes = new string[] { "api://[AAD_CLIENT_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)
            }
        },
    }
));

Langkah berikutnya

Sekarang setelah Anda tahu cara membuat plugin, Anda sekarang dapat mempelajari cara menggunakannya dengan agen AI Anda. Tergantung pada jenis fungsi yang telah Anda tambahkan ke plugin Anda, ada berbagai pola yang harus Anda ikuti. Untuk fungsi pengambilan, lihat artikel menggunakan fungsi pengambilan. Untuk fungsi otomatisasi tugas, lihat artikel menggunakan fungsi otomatisasi tugas.