alibaba/spring-ai-alibaba · warning

数据集为空,实验完成: {}

Error message

数据集为空,实验完成: {}

What it means

In ExperimentServiceImpl.promptEvaluation (invoked from executeExperiment), after loading dataset items for the experiment's dataset version, an empty list means there is nothing to evaluate. The code logs this warning, marks the experiment COMPLETED with 100% progress, and returns early — the experiment 'succeeds' trivially without evaluating anything.

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:404


    private void promptEvaluation(ExperimentDO experimentDO) throws StudioException {
        EvaluationObjectConfig evaluationObjectConfig = JSONObject.parseObject(experimentDO.getEvaluationObjectConfig(),EvaluationObjectConfig.class);
        EvaluationPromptConfig evaluationPromptConfig = JSONObject.parseObject(evaluationObjectConfig.getConfig(),EvaluationPromptConfig.class);

        Long experimentId = experimentDO.getId();

        // 获取数据集中的所有数据项

        DatasetVersionDO datasetVersion = datasetVersionMapper.selectById(experimentDO.getDatasetVersionId());

        List<Long> itemIds = CommonUtils.parseItemIds(datasetVersion.getDatasetItems());

        List<DatasetItemDO> datasetItems = datasetItemMapper.selectByDatasetIdAndItemIds(
                datasetVersion.getDatasetId(), itemIds);

        if (datasetItems.isEmpty()) {
            log.warn("数据集为空,实验完成: {}", experimentId);
            updateExperimentStatus(experimentId, ExperimentStatus.COMPLETED, 100);
            return;
        }

        int totalItems = datasetItems.size();
        AtomicInteger processedItems = new AtomicInteger(0);

        log.info("实验 {} 开始处理 {} 个数据项", experimentId, totalItems);


        PromptVersionDetail prompt = promptVersionService.getByPromptKeyAndVersion(evaluationPromptConfig.getPromptKey(),evaluationPromptConfig.getVersion());


        for (DatasetItemDO datasetItem : datasetItems) {
            try {
                // 检查实验是否被停止
                if (isExperimentStopped(experimentId)) {
                    log.info("实验 {} 已被停止", experimentId);

View on GitHub (pinned to f82da0b50f)

Solutions

  1. Inspect the dataset version's datasetItems JSON and the dataset_item table — confirm items exist for the given datasetId and itemIds.
  2. Validate that the dataset has at least one item before starting an experiment; reject empty datasets at creation.
  3. Re-upload the dataset items and re-run the experiment.
  4. Check that datasetId in datasetVersion matches the items' datasetId (re-created datasets get new IDs).

Example fix

// before
experimentService.executeExperiment(request); // silently completes with empty dataset

// after
DatasetVersion version = datasetVersionService.getById(request.getDatasetVersionId());
List<Long> itemIds = CommonUtils.parseItemIds(version.getDatasetItems());
if (itemIds.isEmpty()) {
    throw new IllegalArgumentException("Dataset version " + version.getId() + " has no items");
}
experimentService.executeExperiment(request);
Defensive patterns

Strategy: validation

Validate before calling

List<Long> itemIds = CommonUtils.parseItemIds(version.getDatasetItems());
List<DatasetItemDO> items = datasetItemMapper.selectByDatasetIdAndItemIds(version.getDatasetId(), itemIds);
if (items.isEmpty()) {
    throw new IllegalStateException("Dataset version " + version.getId() + " resolves to zero items");
}

Try / catch

try {
    experimentService.executeExperiment(req);
} catch (IllegalStateException e) {
    // empty dataset: prompt evaluation would complete trivially with no results
    throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, e.getMessage());
}

Prevention

When it happens

Trigger: Executing an experiment whose dataset version's items were all deleted, whose datasetItems JSON references item IDs that no longer exist, or whose dataset was created with zero items — datasetItemMapper.selectByDatasetIdAndItemIds returns an empty list.

Common situations: Dataset items purged by a cleanup job while the experiment ran; dataset uploaded empty; datasetItems JSON parse produced no valid IDs; item IDs filtered out by datasetId mismatch after a dataset was re-created with a new ID.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


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