iflytek/astron-agent · error · BusinessException

REPO_KNOWLEDGE_QUERY_FAILED

REPO_KNOWLEDGE_QUERY_FAILED

Error message

ResponseEnum.REPO_KNOWLEDGE_QUERY_FAILED

What it means

RepoService.hitTest calls knowledgeV2ServiceCallHandler.knowledgeQuery(request); if the returned KnowledgeResponse code != 0 it logs the upstream message and throws REPO_KNOWLEDGE_QUERY_FAILED. This is a wrapper around a failure of the downstream knowledge retrieval microservice, not a problem with the repo record itself.

Solutions

  1. Read the server log line 'Knowledge retrieval failed, message:{}' for the upstream cause
  2. Verify the knowledge service is running and reachable (registration/config of knowledgeV2ServiceCallHandler target)
  3. Confirm the repo's documents completed vectorization and the underlying collection exists
  4. Retry with a smaller topN / shorter query to rule out payload-related rejections; then escalate to the knowledge service team with the logged message

Example fix

// before
KnowledgeResponse resp = handler.knowledgeQuery(request);
if (resp.getCode() != 0) { throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_QUERY_FAILED); }
// after
KnowledgeResponse resp = handler.knowledgeQuery(request);
if (resp.getCode() != 0) {
    log.error("Knowledge retrieval failed, message:{}, repoId:{}", resp.getMessage(), repo.getId());
    throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_QUERY_FAILED);
}
Defensive patterns

Strategy: retry

Try / catch

try {
    repoService.hitTest(repoId, query, topN, true);
} catch (BusinessException e) {
    if ("REPO_KNOWLEDGE_QUERY_FAILED".equals(e.getCode())) {
        // check knowledge service health, then retry with backoff
    }
}

Prevention

When it happens

Trigger: The knowledge core service returns a non-zero code — vector DB unavailable, embedding model error, malformed query, retrieval timeout, or core service internal error.

Common situations: Knowledge service not deployed or unreachable after a partial deployment; index/collection missing because documents never finished vectorizing; oversized topN or query text rejected by the retrieval engine.

Related errors


AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12). Data as JSON: /api/errors/6d479dcef1d960dd. Report an issue: GitHub.

Appendix: source

Thrown at console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/repo/RepoService.java:787

        }
        boolean hasEnabledFile = false;
        for (FileDirectoryTree fileDirectoryTree : fileDirectoryTrees) {
            FileInfoV2 fileInfoV2 = fileInfoV2Service.getById(fileDirectoryTree.getFileId());
            if (fileInfoV2 != null && fileInfoV2.getEnabled() == 1) {
                hasEnabledFile = true;
                break;
            }
        }
        if (!hasEnabledFile) {
            throw new BusinessException(ResponseEnum.REPO_FILE_DISABLED);
        }

        QueryRequest request = this.getKnowledgeQueryObject(repo, topN, query);

        KnowledgeResponse resp = knowledgeV2ServiceCallHandler.knowledgeQuery(request);
        if (resp.getCode() != 0) {
            log.error("Knowledge retrieval failed, message:{}", resp.getMessage());
            throw new BusinessException(ResponseEnum.REPO_KNOWLEDGE_QUERY_FAILED);
        }

        HitTestHistory hitTestHistory = new HitTestHistory();
        hitTestHistory.setRepoId(id);
        hitTestHistory.setUserId(UserInfoManagerHandler.getUserId());
        hitTestHistory.setQuery(query);
        hitTestHistory.setCreateTime(new Timestamp(System.currentTimeMillis()));
        historyService.save(hitTestHistory);

        QueryRespData data = JSON.parseObject(resp.getData().toString(), QueryRespData.class);
        List<ChunkInfo> results = data.getResults();
        Map<Long, FileDirectoryTree> processedFileIds = new HashMap<>();
        if (!CollectionUtils.isEmpty(results)) {
            for (ChunkInfo info : results) {
                String docId = info.getDocId();
                FileInfoV2 fileInfoV2 = fileInfoV2Service.getOnly(new QueryWrapper<FileInfoV2>().eq("uuid", docId));
                // Skip if this fileId has already been processed
                if (!processedFileIds.containsKey(fileInfoV2.getId())) {

View on GitHub (pinned to 5e758547a8)