feat(rag): modularize knowledge retrieval pipeline

This commit is contained in:
zhuyongxin
2026-07-06 17:06:05 +08:00
parent a375daead7
commit cf3333d607
38 changed files with 2981 additions and 1033 deletions
@@ -2,7 +2,10 @@ package com.superbiz.agent.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.superbiz.agent.domain.entity.ToolInvocation;
import com.superbiz.agent.dto.ContextPack;
import com.superbiz.agent.dto.EvidenceBlock;
import com.superbiz.agent.dto.KnowledgeQuery;
import com.superbiz.agent.dto.RetrievalTrace;
import com.superbiz.agent.repository.ToolInvocationRepository;
import com.superbiz.agent.util.SessionContextHolder;
import org.junit.jupiter.api.Test;
@@ -129,23 +132,51 @@ class ToolInvocationRecorderTest {
.evidenceCandidateCount(3)
.evidenceBlockCount(1)
.evidenceBlocks(List.of(block))
.contextPack(ContextPack.builder()
.packedText("packed evidence")
.strategy("ranked_evidence_char_budget")
.charBudget(4000)
.usedChars(15)
.includedSources(List.of("doc.md"))
.omittedSources(List.of())
.build())
.retrievalTrace(RetrievalTrace.builder()
.originalQuery("query")
.rewrittenQuery("query")
.selectedAttempt("UNFILTERED_VECTOR")
.evidenceStatus(ToolInvocationRecorder.EVIDENCE_STATUS_SUPPORTED)
.attempts(List.of(RetrievalTrace.Attempt.builder()
.name("UNFILTERED_VECTOR")
.candidateCount(3)
.topScore(0.42)
.topSimilarity(0.79)
.usable(true)
.build()))
.build())
.build();
KnowledgeQuery query = KnowledgeQuery.builder()
.originalQuery("query")
.rewrittenQuery("query")
.domainHints(List.of())
.matchedKeywords(List.of())
.entities(List.of())
.l0Titles(List.of())
.l0MatchCount(0)
.build();
ToolInvocationRecorder.LookupKnowledgeRecord record = ToolInvocationRecorder.LookupKnowledgeRecord.from(
"query",
KnowledgeIndexService.L0Hint.empty(),
List.of(),
false,
query,
result,
null,
null,
10,
-1
10
);
assertEquals(3, record.evidenceCandidateCount());
assertEquals(1, record.evidenceBlockCount());
assertEquals(1, record.evidenceBlocks().size());
assertTrue(String.valueOf(record.evidenceBlocks().get(0).get("content_preview")).endsWith("..."));
assertEquals("UNFILTERED_VECTOR", record.retrievalLayer());
assertEquals(3, record.l1MatchCount());
}
}