Skip to main content

评估模块 - 高级特性

1. 评估项依赖关系

评估项可以通过 dependsOn 建立依赖关系,形成 DAG(有向无环图)执行:

EvaluationSuiteBuilder.create("complex_suite", evaluatorRegistry)
// Layer 1:并行执行
.addCriterion(
EvaluationCriterionBuilder.create("language")
.description("识别输入语言")
.resultType(ResultType.ENUM)
.options("CHINESE", "ENGLISH", "OTHER")
.build()
)
.addCriterion(
EvaluationCriterionBuilder.create("sentiment")
.description("情感分析")
.resultType(ResultType.ENUM)
.options("POSITIVE", "NEGATIVE", "NEUTRAL")
.build()
)
// Layer 2:依赖前置结果
.addCriterion(
EvaluationCriterionBuilder.create("response_style")
.description("根据语言和情感决定回复风格")
.resultType(ResultType.TEXT)
.dependsOn("language", "sentiment") // 依赖两个评估项
.workingMechanism("综合语言和情感分析结果,决定回复风格")
.build()
)
.build();

2. Few-Shot 示例配置

为 LLM 评估器提供示例,提升评估准确性:

EvaluationCriterionBuilder.create("intent_type")
.description("判断用户意图类型")
.resultType(ResultType.ENUM)
.options("QUESTION", "TOOL_CALL", "CHITCHAT")
.addFewShot(
"今天天气怎么样?", // input
"", // context(可选)
"QUESTION" // expectedOutput
)
.addFewShot(
"帮我查一下订单状态",
"",
"TOOL_CALL"
)
.addFewShot(
"你好呀",
"",
"CHITCHAT"
)
.build();

3. 推理策略(ReasoningPolicy)

控制 LLM 是否输出推理过程:

import com.alibaba.assistant.agent.evaluation.model.ReasoningPolicy;

EvaluationCriterionBuilder.create("complex_decision")
.description("复杂业务决策")
.resultType(ResultType.ENUM)
.options("APPROVE", "REJECT", "MANUAL_REVIEW")
.reasoningPolicy(ReasoningPolicy.REQUIRED) // 要求输出推理过程
.build();
策略说明
NONE不要求推理(默认)
OPTIONAL可选输出推理
REQUIRED必须输出推理

4. 自定义 Prompt 模板

完全自定义评估 Prompt:

EvaluationCriterionBuilder.create("custom_eval")
.description("自定义评估")
.resultType(ResultType.TEXT)
.promptTemplate("""
你是一个专业的评估专家。

用户输入:{input}
历史上下文:{history}

请评估该输入的专业程度,返回评估结果。
""")
.contextBindings("input", "history") // 绑定上下文变量
.build();

5. 批量评估(Batching)

对多个输入进行批量评估:

import com.alibaba.assistant.agent.evaluation.model.CriterionBatchingConfig;
import com.alibaba.assistant.agent.evaluation.model.EvaluationCriterion;

// 创建批量配置
CriterionBatchingConfig batchingConfig = new CriterionBatchingConfig();
batchingConfig.setEnabled(true);
batchingConfig.setBatchSize(10); // 每批最大数量
batchingConfig.setMaxConcurrentBatches(3); // 并行执行数
batchingConfig.setSourcePath("context.items"); // 数据源路径
batchingConfig.setBatchBindingKey("itemBatch"); // 绑定键名
batchingConfig.setAggregationStrategy("ALL_TRUE"); // 聚合策略:ALL_TRUE 或 ANY_TRUE

// 创建评估项并设置批量配置
EvaluationCriterion criterion = EvaluationCriterionBuilder.create("batch_eval")
.description("批量内容评估")
.resultType(ResultType.BOOLEAN)
.build();

// 通过 EvaluationCriterion 设置批量配置
criterion.setBatchingConfig(batchingConfig);

6. 多评估点配置

在 Agent 执行的不同阶段进行评估:

spring:
ai:
alibaba:
codeact:
extension:
evaluation:
enabled: true

# 输入路由评估(Agent 执行前)
input-routing:
enabled: true
suite-id: input_routing_suite

# 模型输出评估(每次模型调用后)
model-output:
enabled: true
suite-id: model_output_quality_suite

# 代码生成输入评估
code-generation-input:
enabled: true
suite-id: code_generation_input_suite

# 代码执行评估
code-execution:
enabled: true
suite-id: code_execution_suite

# 会话总结评估(Agent 执行后)
session-summary:
enabled: true
suite-id: session_summary_suite

7. 异步评估

对于非关键路径的评估,可以启用异步执行:

spring:
ai:
alibaba:
codeact:
extension:
evaluation:
async: true # 异步执行
timeout-ms: 3000 # 超时后跳过
// 编程方式获取异步结果
CompletableFuture<EvaluationResult> future = evaluationService.evaluateAsync(suite, context);
future.whenComplete((result, ex) -> {
if (ex != null) {
logger.warn("Evaluation failed: {}", ex.getMessage());
} else {
processResult(result);
}
});

8. 评估结果持久化

通过 EvaluationResultAttacher 将评估结果附加到 Agent 状态:

@Component
public class CustomResultProcessor {

private final CodeactEvaluationResultAttacher resultAttacher;

public CustomResultProcessor(CodeactEvaluationResultAttacher resultAttacher) {
this.resultAttacher = resultAttacher;
}

public void attachResults(OverAllState state, EvaluationResult result) {
resultAttacher.attach(state, result);

// 结果现在可以在后续节点中访问
// state.get("evaluation_result") -> EvaluationResult
}
}

9. 与经验模块集成

评估结果可以触发经验匹配:

// 在评估套件中配置经验评估项
EvaluationCriterionBuilder.create("experience_match")
.description("匹配相关经验")
.evaluatorRef("experience_evaluator") // 使用经验评估器
.resultType(ResultType.TEXT)
.build();

经验评估器会自动从经验库中检索相关经验,并将匹配的经验 ID 放入评估结果的 metadata 中。


10. 自定义评估器注册

实现复杂评估逻辑:

import com.alibaba.assistant.agent.evaluation.evaluator.Evaluator;
import com.alibaba.assistant.agent.evaluation.model.*;

public class BusinessRuleEvaluator implements Evaluator {

private final BusinessService businessService;

public BusinessRuleEvaluator(BusinessService businessService) {
this.businessService = businessService;
}

@Override
public String getEvaluatorId() {
return "business_rule_evaluator";
}

@Override
public CriterionResult evaluate(CriterionExecutionContext context) {
CriterionResult result = new CriterionResult();
result.setCriterionName(context.getCriterion().getName());
result.setStartTimeMillis(System.currentTimeMillis());

try {
String input = context.getEvaluationContext().getInput();

// 调用业务服务进行评估
BusinessDecision decision = businessService.evaluate(input);

result.setStatus(CriterionStatus.SUCCESS);
result.setValue(decision.getResult());
result.setReason(decision.getReason());

// 添加元数据
result.getMetadata().put("confidence", decision.getConfidence());
result.getMetadata().put("matched_rules", decision.getMatchedRules());

} catch (Exception e) {
result.setStatus(CriterionStatus.ERROR);
result.setErrorMessage(e.getMessage());
} finally {
result.setEndTimeMillis(System.currentTimeMillis());
}

return result;
}
}

注册自定义评估器:

@PostConstruct
public void register() {
evaluatorRegistry.register(new BusinessRuleEvaluator(businessService));
}

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。