注意
プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能を公式リリースの前に使用できるようにすることで、顧客が事前にアクセスし、そこからフィードバックを得ることができます。
AI を活用したアプリケーションのテストでは、同じ入力であっても AI の出力が実行ごとに異なる可能性があるため、独自の課題が生じます。 この非決定論的な動作には、特別なテスト アプローチが必要です。 このガイドでは、Power Platform アプリケーションの AI コンポーネントを効果的に検証する方法を説明します。
非決定論的出力の理解
従来のテストは、一貫した出力を生成する決定論的な入力に依存していました。 ただし、AI システムは、多くの場合、次の理由により、毎回わずかに異なる結果を生成します。
- モデルの温度設定とサンプリング方法
- 異なるバージョンのモデルの選択
- 自然言語処理の軽微な違い
- 正常範囲内で変動する信頼度スコア
- 異なる経路をたどる可能性のあるコンテキスト依存の推論
非決定論的 AI をテストするための戦略
Power Apps Test Engine は、AI 搭載コンポーネントを効果的にテストするためのいくつかの戦略を提供します:
Preview.AIExecutePrompt 関数を使用する
Preview.AIExecutePrompt function は、テスト内で AI プロンプトの制御された実行を可能にします。 次の例はその使用方法を示しています:
Response: ParseJSON(
Preview.AIExecutePrompt("CustomPrompt",
{
Context: "You are a helpful assistant.",
Question: "What is the capital of France?"
}).Text)
このアプローチにより、ユーザーは次のことが可能になります:
- 制御された入力でプロンプトを実行
- 構造化された応答の解析と検証
- 結果を期待値と比較する
公差ベースの検証を実装する
完全一致を期待するのではなく、出力が許容可能なしきい値内の基準を満たしていることを確認します。 次のコードはその一例です:
// Validate that the sentiment score is within appropriate range
Assert(Response.SentimentScore >= 0.7, "Sentiment score should be positive")
正確な出力ではなくコア機能をテストする
次の例に示すように、AI コンポーネントがその本質的な目的を果たしていることを検証することにテストに焦点を当てます。
// Check that the classification happens (not the exact classification)
Assert(
Response.Category = "Positive" ||
Response.Category = "Neutral" ||
Response.Category = "Negative",
"Response should include a valid sentiment category"
)
複雑な出力に構造検証を使用する
複雑な AI 応答の場合は、次の例に示すように、特定のコンテンツではなく応答構造を検証します。
// Verify all expected fields exist in the response
Assert(!IsBlank(Response.Rating), "Rating should be present")
Assert(!IsBlank(Response.Explanation), "Explanation should be present")
Assert(!IsBlank(Response.NextSteps), "Next steps should be present")
Preview.AIExecutePrompt の使用
Test Engine は、AI とのインタラクションをテストするために特別に Preview.AIExecutePrompt 関数を提供しています。
関数のシグネチャ
Preview.AIExecutePrompt(
PromptName: Text,
PromptContext: Record
): Record
Parameters
- PromptName: 使用するプロンプト テンプレートの名前
-
PromptContext: プロンプトのコンテキスト データには、一般的に次が含まれます:
- コンテキストまたはシステム メッセージ
- 質問またはユーザー入力
- モデルのその他のパラメーター
値を返す
レコードには次が含まれます:
- テキスト: 未加工の応答テキスト
- プロンプト テンプレートとモデルに依存するその他のプロパティ
機能を有効にする
この関数を使用するには、テストの設定で AI 関数モジュールを有効にします。
testSettings:
extensionModules:
enable: true
parameters:
enableAIFunctions: true
例: 感情分析コンポーネントのテスト
次の例は、AI を活用した感情分析機能のテストを示しています。
EvaluateSentimentPrompt(Input: Text): TestResult =
With({
Response: ParseJSON(
Preview.AIExecutePrompt("SentimentAnalyzer",
{
Text: Input
}).Text)
},
{
Result: Response.Sentiment,
Score: Response.ConfidenceScore,
IsPositive: Response.Sentiment = "Positive" && Response.ConfidenceScore > 0.7,
IsValid: !IsBlank(Response.Sentiment) && !IsBlank(Response.ConfidenceScore)
})
例: AI による評価
次の例は、Preview.AIExecutePrompt を使用して AI を利用した評価システムをテストする方法を示しています。
EvaluateTestQuestionPrompt(Prompt: TestQuestion): TestResult =
With({
Response: ParseJSON(
Preview.AIExecutePrompt("PromptEvaluator",
{
Context: "You are a helpful agent asking about external customer service questions.",
Question: Prompt.Question
}).Text)
},If(
IsError(AssertNotError(Prompt.ExpectedRating=Response.Rating, Prompt.Question & ", Expected " & Prompt.ExpectedRating & ", Actual " & Response.Rating)),
{PassFail: 1, Summary: Prompt.Question & ", Expected " & Prompt.ExpectedRating & ", Actual " & Response.Rating},
{PassFail: 0, Summary: "Pass " & Prompt.Question}
))
完全な実装については、AI プロンプトのサンプルを参照してください。
AI コンポーネント テストのベスト プラクティス
AI を活用したコンポーネントの効果的なテストを作成するには、次のようにします。
- 数値出力の正確な値ではなく、許容範囲を定義します
- ガードレールを作成して出力が構造要件を満たしていることを確認する
- エッジケースや境界条件を含む多様な入力によるテスト
- ネガティブなテストケースを含めることで、AI が無効な入力を適切に処理するようにする
- 特定のコンテンツではなく、機能によってテストをセグメント化します
- 部品の重要性に基づいた適切な公差の使用
AI テストの一般的なパターン
たとえば、次の例は、Power Platform アプリケーションで AI 機能をテストするための一般的なアプローチを示しています。 これらのパターンは、コンテンツ分類、境界条件、および AI 出力が変化する可能性のあるその他のシナリオを検証するのに役立ちます。
コンテンツ分類テスト
// Test that a content classifier produces valid categories
ClassifyContent(Text: Text): Record =
With({
Result: ParseJSON(Preview.AIExecutePrompt("Classifier", { Content: Text }).Text)
},
Assert(
Result.Category In ["News", "Opinion", "Advertisement"],
"Content should be classified into valid category"
))
境界テスト
// Test AI Builder form processing with edge cases
TestFormProcessing(FormType: Text): TestResult =
With({
Result: ParseJSON(Preview.AIExecutePrompt("FormProcessor", { FormType: FormType }).Text)
},
Assert(
!IsBlank(Result.Fields),
"Form processing should extract fields even with poor quality input"
))
関連記事
Power Fx のテスト機能の詳細情報
AI 支援によるテスト作成の詳細
モデル コンテキスト プロトコルを理解する
Test Engine のサンプル カタログを参照する