50 lines
2.2 KiB
Java
50 lines
2.2 KiB
Java
package com.superbiz.agent.service;
|
|
|
|
import com.superbiz.agent.dto.ContextPack;
|
|
import com.superbiz.agent.dto.EvidencePostprocessResult;
|
|
import com.superbiz.agent.dto.LookupResult;
|
|
import com.superbiz.agent.dto.RetrievalTrace;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Assembles evidence-first LookupResult instances.
|
|
*/
|
|
@Service
|
|
public class LookupResultAssembler {
|
|
|
|
public LookupResult assemble(EvidencePostprocessResult evidence,
|
|
ContextPack contextPack,
|
|
RetrievalTrace retrievalTrace) {
|
|
boolean found = evidence != null && evidence.hasUsableEvidence();
|
|
return LookupResult.builder()
|
|
.found(found)
|
|
.evidenceBlocks(evidence != null ? evidence.getEvidenceBlocks() : List.of())
|
|
.evidenceCandidateCount(evidence != null ? evidence.getCandidateCount() : 0)
|
|
.evidenceBlockCount(evidence != null ? evidence.getEvidenceBlockCount() : 0)
|
|
.contextPack(contextPack)
|
|
.retrievalTrace(retrievalTrace)
|
|
.rerankTrace(evidence != null ? evidence.getRerankTrace() : null)
|
|
.relevanceLevel(evidence != null ? evidence.getRelevanceLevel() : null)
|
|
.completenessHint(evidence != null ? evidence.getCompletenessHint() : null)
|
|
.message(found ? null : "知识库未检索到可用证据,请结合日志、指标、告警继续排查")
|
|
.build();
|
|
}
|
|
|
|
public LookupResult deduped(LookupResult original, List<String> retrievedDomains, String docKey) {
|
|
return LookupResult.builder()
|
|
.found(false)
|
|
.message("文档已在本会话中检索过,无需重复召回: " + docKey)
|
|
.evidenceBlocks(List.of())
|
|
.evidenceCandidateCount(0)
|
|
.evidenceBlockCount(0)
|
|
.retrievalTrace(original.getRetrievalTrace())
|
|
.rerankTrace(original.getRerankTrace())
|
|
.relevanceLevel(original.getRelevanceLevel())
|
|
.completenessHint(original.getCompletenessHint())
|
|
.retrievedDomainsThisSession(retrievedDomains)
|
|
.build();
|
|
}
|
|
}
|