备注
预览功能不适合生产使用且功能可能受限。 这些功能在正式发布之前已经可用,以便客户可以抢先体验并提供反馈。
测试人工智能驱动的应用程序带来了独特的挑战,因为即使输入相同,人工智能输出也可能在运行之间有所不同。 这种非确定性行为需要特殊的测试方法。 本指南介绍如何有效地验证应用程序中的 Power Platform AI 组件。
了解非确定性输出
传统测试依赖于产生一致输出的确定性输入。 然而,由于以下原因,人工智能系统每次通常会产生略有不同的结果:
- 模型温度设置和采样方法
- 选择不同版本的模型
- 自然语言处理的细微变化
- 置信度分数在正常范围内波动
- 可能采取不同路径的上下文相关推理
测试非确定性人工智能的策略
Power Apps 测试引擎提供了多种有效测试人工智能组件的策略:
使用 Preview.AIExecutePrompt 函数
Preview.AIExecutePrompt 函数 可以在测试中受控地执行 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
测试引擎提供了 专门用于测试 AI 交互的 Preview.AIExecutePrompt 函数 。
函数签名
Preview.AIExecutePrompt(
PromptName: Text,
PromptContext: Record
): Record
参数设置
- 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"
))