多くの場合、企業には、Logic Apps で実際の作業を実行する一連のワークフローが既にあります。 これらは、人間が操作する他のオートメーション サービスや電源フロントエンド アプリケーションで使用できます。 セマンティック カーネルでは、これらのワークフローをプラグインとまったく同じに追加して、エージェントで使用することもできます。
たとえば、セマンティック カーネル チームが新しい PR に関する質問に回答するために使用する Logic Apps ワークフローを考えてみます。 次のワークフローでは、エージェントには、コード変更の取得、関連ファイルの検索、エラー ログの確認に必要なものがすべて含まれています。
- ファイルを検索 する – 特定の問題に関連するコード スニペットを検索する
- ファイルの取得 – GitHub リポジトリ内のファイルの内容を取得する
- PR の詳細を取得 する – PR の詳細 (PR タイトル、説明、作成者など) を取得します。
- PR ファイルを取得 する – PR で変更されたファイルを取得する
- ビルドとテストの失敗を取得する - 特定の GitHub アクション実行のビルドとテストの失敗を取得する
- ログ ファイルを取得 する – 特定の GitHub アクション実行のログ ファイルを取得する
セマンティック カーネル プラグインに Logic Apps を利用することは、 Logic Apps で利用できる 1,400 を超えるコネクタを活用する優れた方法でもあります。 つまり、コードを記述することなく、さまざまなサービスやシステムに簡単に接続できます。
重要
現時点では、標準の 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 の設定
ロジック アプリをプラグインとしてインポートするには、まず、セマンティック カーネルからアクセスできるようにロジック アプリを設定する必要があります。 これには、メタデータ エンドポイントを有効にし、アプリケーションを Easy Auth 用に構成してから、最後に認証を含むプラグインとしてロジック アプリをインポートする必要があります。
メタデータ エンドポイントを有効にする
最も簡単なセットアップのために、ロジック アプリのメタデータ エンドポイントへの認証されていないアクセスを有効にすることができます。 これにより、ロジック アプリをプラグインとしてセマンティック カーネルにインポートできます。初期インポートの認証を処理するカスタム HTTP クライアントを作成する必要はありません。
以下の host.json ファイルでは、2 つの認証されていないエンドポイントが作成されます。 これを azure portal で行うには、 kudu コンソールに移動し、C:\home\site\wwwroot\host.jsにある 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 用にアプリケーションを構成する
承認されたユーザーのみがアクセスできるように、ロジック アプリワークフローをセキュリティで保護する必要があります。 これを行うには、ロジック アプリで Easy Auth を有効にします。 これにより、他の Azure サービスと同じ認証メカニズムを使用できるため、セキュリティ ポリシーの管理が容易になります。
Easy Auth の設定に関する詳細なチュートリアルについては、このチュートリアル「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 クライアントを提供する必要があります。 これにより、認証について心配する必要なく、AI エージェントでプラグインを使用できます。
次に、対話型認証を利用してトークンを取得し、ロジック アプリのユーザーを認証する C# の例を示します。
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)
}
},
}
));
次のステップ
プラグインを作成する方法がわかったら、AI エージェントでプラグインを使用する方法を学習できるようになりました。 プラグインに追加した関数の種類に応じて、従う必要があるパターンが異なります。 取得関数については、 取得関数の使用に関する記事 参照してください。 タスク自動化関数については、 タスク自動化関数の使用に関する記事 参照してください。