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

  1. Re-run document parsing/split to regenerate preview_knowledge rows for the file, then retry the embed/confirm call.
  2. Verify the lastUuid derivation: for CBG confirm it equals chunkInfos[0].docId; ensure preview rows were stored under that same fileId.
  3. Check preview_knowledge contents: SELECT COUNT(*) FROM preview_knowledge WHERE file_id = '<lastUuid>'.
  4. 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

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


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)