iflytek/astron-agent · error · BusinessException
REPO_KNOWLEDGE_GET_FAILED
REPO_KNOWLEDGE_GET_FAILED
Error message
REPO_KNOWLEDGE_GET_FAILED
What it means
BusinessException REPO_KNOWLEDGE_GET_FAILED thrown by loadPreviewKnowledge when previewKnowledgeMapper.findByFileId(lastUuid) returns an empty list. The embedding-confirm flow requires the preview chunks stored during document parsing to exist; no rows means the preview data is missing or was keyed under a different uuid, so processing cannot proceed.
Solutions
- Re-run document parsing/split to regenerate preview_knowledge rows for the file, then retry the embed/confirm call.
- Verify the lastUuid derivation: for CBG confirm it equals chunkInfos[0].docId; ensure preview rows were stored under that same fileId.
- Check preview_knowledge contents: SELECT COUNT(*) FROM preview_knowledge WHERE file_id = '<lastUuid>'.
- Compare against previous parse results if a version upgrade changed docId generation; re-parse affected docs.
Example fix
// before
List<MysqlPreviewKnowledge> mysqlList = previewKnowledgeMapper.findByFileId(lastUuid);
if (CollectionUtils.isEmpty(mysqlList)) { throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_GET_FAILED); }
// after (degrade instead of hard fail)
if (CollectionUtils.isEmpty(mysqlList)) {
log.warn("no preview knowledge for {}", lastUuid);
return new ArrayList<>(); // or trigger re-parse
} Defensive patterns
Strategy: fallback
Validate before calling
long n = previewKnowledgeMapper.count(new QueryWrapper<MysqlPreviewKnowledge>().eq("file_id", lastUuid));
if (n == 0) { reparseDocument(fileId); return; } Try / catch
try { return loadPreviewKnowledge(lastUuid); } catch (BusinessException e) { log.warn("preview knowledge missing for {}", lastUuid); return Collections.emptyList(); } Prevention
- Re-parse documents after backend upgrades that change docId/lastUuid derivation.
- Don't wipe preview rows while a confirm/embed flow may be in flight.
- Verify the MySQL migration carried over preview_knowledge rows from MongoDB.
When it happens
Trigger: Calling the confirm/embed flow for a document whose preview_knowledge rows are absent for lastUuid: preview storage was skipped or failed during parse, the lastUuid convention changed (CBG uses chunk docId, others use file uuid — see updateLastUuidBySource), or the same document was re-parsed wiping rows.
Common situations: CBG docId/uuid mismatch after a backend upgrade changed the docId scheme. Rows deleted by a re-parse while a confirm was in flight. MySQL migration lost preview_knowledge data that used to live in MongoDB.
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
- ChunkQueryFailed
- No flowId found for botId=
- CREATE_BOT_FAILED
- UPDATE_BOT_FAILED
- NOTIFICATION_MARK_READ_FAILED
AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12).
Data as JSON: /api/errors/ca07eac24f98da6b.
Report an issue: GitHub.
Appendix: source
Thrown at console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/repo/KnowledgeService.java:1045
}
restoreManualKnowledge(uuid.get(0), uuid.get(2));
} catch (Exception e) {
log.error("Embedding failed", e);
throw e;
}
return push.failedKnowledge.size();
}
private List<PreviewKnowledge> loadPreviewKnowledge(String lastUuid) {
// Criteria criteria = Criteria.where("fileId").is(lastUuid);
// List<PreviewKnowledge> list = mongoTemplate.find(new Query(criteria), PreviewKnowledge.class);
// Use MySQL query to replace MongoDB query
List<MysqlPreviewKnowledge> mysqlList = previewKnowledgeMapper.findByFileId(lastUuid);
if (CollectionUtils.isEmpty(mysqlList)) {
throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_GET_FAILED);
}
List<PreviewKnowledge> list = new ArrayList<>();
for (MysqlPreviewKnowledge mysql : mysqlList) {
PreviewKnowledge preview = new PreviewKnowledge();
BeanUtils.copyProperties(mysql, preview);
list.add(preview);
}
return list;
}
private List<Knowledge> findOldAutoKnowledge(String docUuid) {
// Criteria c = Criteria.where("fileId").is(docUuid).and("source").is(0);
// return mongoTemplate.find(new Query(c), Knowledge.class);
// Use MySQL query to replace MongoDB query
List<MysqlKnowledge> mysqlList = knowledgeMapper.findByFileIdAndSource(docUuid, 0);
List<Knowledge> result = new ArrayList<>();View on GitHub (pinned to 5e758547a8)