alibaba/spring-ai-alibaba · warning

实验不存在: {}

Error message

实验不存在: {}

What it means

ExperimentServiceImpl.getResults first verifies the experiment exists. When experimentMapper.selectById(experimentId) returns null, it logs this warning and returns null. This is a guard against querying results for a nonexistent experiment; the null return means 'no such experiment' and must be handled by the caller.

Source

Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java:172

                        EvaluatorDO evaluatorDO = evaluatorMapper.selectById(evaluatorConfig.getEvaluatorId());
                        evaluatorConfig.setEvaluatorName(evaluatorDO != null ? evaluatorDO.getName() : "Unknown Evaluator");
                    } catch (Exception e) {
                        log.warn("Failed to fetch evaluator name for id: {}", evaluatorConfig.getEvaluatorId(), e);
                        evaluatorConfig.setEvaluatorName("Error Fetching Name");
                    }
                });
        experiment.setEvaluatorConfig(JSON.toJSONString(evaluatorConfigList));
        return experiment;
    }

    @Override
    public List<ExperimentEvaluatorResult> getResults(Long experimentId) {
        log.info("查询实验结果: {}", experimentId);
        
        // 先检查实验是否存在
        ExperimentDO experiment = experimentMapper.selectById(experimentId);
        if (experiment == null) {
            log.warn("实验不存在: {}", experimentId);
            return null;
        }

        Integer dataCount = datasetVersionMapper.selectById(experiment.getDatasetVersionId()).getDataCount();
        // 检查dataCount是否为null或0,避免除零异常
        if (dataCount == null || dataCount == 0) {
            log.warn("数据集版本数据量为0或不存在: {}", experiment.getDatasetVersionId());
            dataCount = 1; // 避免除零异常,设置默认值
        }


        // 正确解析 evaluatorConfig JSON 数组字符串为 List<EvaluatorConfig>
        List<EvaluatorConfig> evaluatorConfigList = JSON.parseArray(experiment.getEvaluatorConfig(), EvaluatorConfig.class);

        // 提取 evaluatorVersionId 列表
        List<Long> evaluatorList = evaluatorConfigList.stream()
                .map(e -> Long.valueOf(e.getEvaluatorVersionId()))
                .toList();

View on GitHub (pinned to f82da0b50f)

Solutions

  1. Verify the experimentId via list() or a direct selectById before requesting results.
  2. Null-check getResults' return and respond with 404 rather than assuming empty results.
  3. Re-run or re-create the experiment if it was deleted.
  4. Check that the service connects to the expected database.

Example fix

// before
List<ExperimentEvaluatorResult> results = experimentService.getResults(id);
results.size(); // NPE when experiment missing

// after
List<ExperimentEvaluatorResult> results = experimentService.getResults(id);
if (results == null) {
    throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Experiment not found: " + id);
}
Defensive patterns

Strategy: type-guard

Validate before calling

public static boolean experimentExists(Long id) {
    return id != null && experimentMapper.selectById(id) != null;
}

Type guard

List<ExperimentEvaluatorResult> results = experimentService.getResults(experimentId);
if (results == null) {
    throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Experiment not found: " + experimentId);
}

Prevention

When it happens

Trigger: Calling experimentService.getResults(experimentId) with an experimentId that does not exist in the experiment table, or that was deleted before the call.

Common situations: Client retries with an old ID after experiment deletion; results page refreshed after cleanup; ID copy-paste from another environment; race between list and results fetch.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09). Data as JSON: /api/errors/77d073ada6fa2a89. Report an issue: GitHub.