iflytek/astron-agent · error · BusinessException
REPO_KNOWLEDGE_DELETE_FAILED
REPO_KNOWLEDGE_DELETE_FAILED
Error message
ResponseEnum.REPO_KNOWLEDGE_DELETE_FAILED
What it means
After resolving the file and applying the RAGFlow dataset ID, KnowledgeService calls knowledgeV2ServiceCallHandler.deleteDocOrChunk(request) to remove chunks. A response code != 0 triggers the log 'Failed to delete knowledge chunk' and BusinessException(REPO_KNOWLEDGE_DELETE_FAILED), wrapping any upstream rejection of the chunk delete.
Solutions
- Read 'Failed to delete knowledge chunk, message:{}' in the logs for the upstream cause.
- Verify chunks still exist upstream; treat 'not found' as success for idempotency.
- Re-validate the file's source/ragType and regenerate the ragflowDatasetId before retrying.
- Retry after upstream recovery; if state is divergent, reconcile the upstream index (re-sync or recreate dataset mapping).
Example fix
// before
KnowledgeResponse response = knowledgeV2ServiceCallHandler.deleteDocOrChunk(request);
if (response.getCode() != 0) {
throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_DELETE_FAILED);
}
// after
KnowledgeResponse response = knowledgeV2ServiceCallHandler.deleteDocOrChunk(request);
if (response.getCode() != 0) {
log.warn("chunk delete failed docId={} msg={}", request.getDocId(), response.getMessage());
if (!isNotFoundUpstream(response)) {
throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_DELETE_FAILED);
} // else: already gone, treat as success
} Defensive patterns
Strategy: retry
Validate before calling
// ensure dataset mapping is valid before delete
if (fileInfoV2.getSource().equals(ProjectContent.FILE_SOURCE_RAG_FLOW_RAG_STR)
&& repo.getRagflowDatasetId() == null) {
return; // cannot delete upstream without dataset mapping
} Try / catch
try {
knowledgeService.deleteChunks(docId, chunkIds);
} catch (BusinessException e) {
if (ResponseEnum.REPO_KNOWLEDGE_DELETE_FAILED.getCode().equals(e.getCode())) {
// if upstream says not-found, treat as success; otherwise retry with backoff
} else { throw e; }
} Prevention
- Make chunk deletes idempotent against upstream 'already deleted'.
- Re-sync ragflowDatasetId whenever the RAGFlow dataset changes.
- Retry transient upstream failures with backoff, not immediately in a loop.
- Log the upstream message for every non-zero code.
When it happens
Trigger: deleteDocOrChunk returns non-zero: chunks already removed upstream, invalid/missing ragflowDatasetId (or applyRagflowDatasetIdForDelete produced a state the upstream rejects), wrong ragType, or upstream RAG service failure/outage.
Common situations: Concurrent deletions of the same chunks; RAGFlow dataset deleted/recreated making datasetId stale; upstream maintenance window; contract drift after knowledge-service upgrade.
Related errors
- REPO_FILE_DELETE_FAILED
- REPO_KNOWLEDGE_ADD_FAILED
- REPO_KNOWLEDGE_MODIFY_FAILED
- REPO_CREATE_RAGFLOW_FAILED
- RESPONSE_FAILED
AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12).
Data as JSON: /api/errors/25f15832ce297461.
Report an issue: GitHub.
Appendix: source
Thrown at console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/repo/KnowledgeService.java:1677
* @throws BusinessException if file not found or deletion operations fail
*/
public void deleteKnowledgeChunks(String docId, JSONArray deleteChunkIds) {
if (!deleteChunkIds.isEmpty()) { // Delete documents
KnowledgeRequest request = new KnowledgeRequest();
request.setDocId(docId);
request.setChunkIds(deleteChunkIds.toJavaList(String.class));
FileInfoV2 fileInfoV2 = fileInfoV2Service.getOnly(new QueryWrapper<FileInfoV2>().eq("uuid", docId));
if (fileInfoV2 == null) {
throw new BusinessException(ResponseEnum.REPO_FILE_NOT_EXIST);
}
request.setRagType(fileInfoV2.getSource());
if (!applyRagflowDatasetIdForDelete(request, fileInfoV2)) {
return;
}
KnowledgeResponse response = knowledgeV2ServiceCallHandler.deleteDocOrChunk(request);
if (response.getCode() != 0) {
log.error("Failed to delete knowledge chunk, message:{}", response.getMessage());
throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_DELETE_FAILED);
}
}
}
/**
* Create a Knowledge POJO from KnowledgeVO with default settings
*
* @param knowledgeVO the knowledge value object containing user input
* @param fileId the file UUID associated with this knowledge
* @return Knowledge object with populated default values
*/
private Knowledge getKnowledgePojo(KnowledgeVO knowledgeVO, String fileId) {
Knowledge knowledge = new Knowledge();
knowledge.setFileId(fileId);
knowledge.setContent(this.getKnowledgeDefaultConfig(knowledgeVO.getContent()));
knowledge.setCharCount((long) knowledgeVO.getContent().length());
knowledge.setEnabled(1);
// Source is manual creationView on GitHub (pinned to 5e758547a8)