{"record":{"id":"37a5eb7afcc0d734","repo":"alibaba/spring-ai-alibaba","slug":"error-37a5eb","errorCode":null,"errorMessage":"数据集为空，实验完成: {}","messagePattern":"数据集为空，实验完成: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java","lineNumber":404,"sourceCode":"\n\n    private void promptEvaluation(ExperimentDO experimentDO) throws StudioException {\n        EvaluationObjectConfig evaluationObjectConfig = JSONObject.parseObject(experimentDO.getEvaluationObjectConfig(),EvaluationObjectConfig.class);\n        EvaluationPromptConfig evaluationPromptConfig = JSONObject.parseObject(evaluationObjectConfig.getConfig(),EvaluationPromptConfig.class);\n\n        Long experimentId = experimentDO.getId();\n\n        // 获取数据集中的所有数据项\n\n        DatasetVersionDO datasetVersion = datasetVersionMapper.selectById(experimentDO.getDatasetVersionId());\n\n        List<Long> itemIds = CommonUtils.parseItemIds(datasetVersion.getDatasetItems());\n\n        List<DatasetItemDO> datasetItems = datasetItemMapper.selectByDatasetIdAndItemIds(\n                datasetVersion.getDatasetId(), itemIds);\n\n        if (datasetItems.isEmpty()) {\n            log.warn(\"数据集为空，实验完成: {}\", experimentId);\n            updateExperimentStatus(experimentId, ExperimentStatus.COMPLETED, 100);\n            return;\n        }\n\n        int totalItems = datasetItems.size();\n        AtomicInteger processedItems = new AtomicInteger(0);\n\n        log.info(\"实验 {} 开始处理 {} 个数据项\", experimentId, totalItems);\n\n\n        PromptVersionDetail prompt = promptVersionService.getByPromptKeyAndVersion(evaluationPromptConfig.getPromptKey(),evaluationPromptConfig.getVersion());\n\n\n        for (DatasetItemDO datasetItem : datasetItems) {\n            try {\n                // 检查实验是否被停止\n                if (isExperimentStopped(experimentId)) {\n                    log.info(\"实验 {} 已被停止\", experimentId);","sourceCodeStart":386,"sourceCodeEnd":422,"githubUrl":"https://github.com/alibaba/spring-ai-alibaba/blob/f82da0b50f35744c13968191be2b1cd2452ef550/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java#L386-L422","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Inspect the dataset version's datasetItems JSON and the dataset_item table — confirm items exist for the given datasetId and itemIds.","Validate that the dataset has at least one item before starting an experiment; reject empty datasets at creation.","Re-upload the dataset items and re-run the experiment.","Check that datasetId in datasetVersion matches the items' datasetId (re-created datasets get new IDs)."],"exampleFix":"// before\nexperimentService.executeExperiment(request); // silently completes with empty dataset\n\n// after\nDatasetVersion version = datasetVersionService.getById(request.getDatasetVersionId());\nList<Long> itemIds = CommonUtils.parseItemIds(version.getDatasetItems());\nif (itemIds.isEmpty()) {\n    throw new IllegalArgumentException(\"Dataset version \" + version.getId() + \" has no items\");\n}\nexperimentService.executeExperiment(request);","handlingStrategy":"validation","validationCode":"List<Long> itemIds = CommonUtils.parseItemIds(version.getDatasetItems());\nList<DatasetItemDO> items = datasetItemMapper.selectByDatasetIdAndItemIds(version.getDatasetId(), itemIds);\nif (items.isEmpty()) {\n    throw new IllegalStateException(\"Dataset version \" + version.getId() + \" resolves to zero items\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    experimentService.executeExperiment(req);\n} catch (IllegalStateException e) {\n    // empty dataset: prompt evaluation would complete trivially with no results\n    throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, e.getMessage());\n}","preventionTips":["Reject dataset versions with zero items at creation/upload time.","Verify datasetItems JSON parses to non-empty item IDs before running experiments.","Block deletion of dataset items while experiments reference the version.","Treat a COMPLETED experiment with zero evaluated items as suspicious; alert on it."],"tags":["java","spring","dataset","experiment","empty-input"],"backgroundTag":"empty-result-set","analyzedSha":"f82da0b50f35744c13968191be2b1cd2452ef550","analyzedAt":"2026-09-09T15:32:42.421Z","contentChangedAt":"2026-09-09T15:32:42.421Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}