[Developer] #569 plain text vector Top-K probe

This commit is contained in:
devmrko
2026-06-30 13:23:49 +09:00
parent 084c5e59cf
commit cde5266a77
9 changed files with 266 additions and 20 deletions

View File

@@ -8,6 +8,7 @@ import com.cloudhandson.vpdbackoffice.domain.vector.VectorChunk;
import com.cloudhandson.vpdbackoffice.domain.vector.VectorIngestCommand;
import com.cloudhandson.vpdbackoffice.domain.vector.VectorIngestResult;
import com.cloudhandson.vpdbackoffice.domain.vector.VectorKnowledgeSummary;
import com.cloudhandson.vpdbackoffice.domain.vector.VectorQueryEmbedding;
import com.cloudhandson.vpdbackoffice.domain.vector.VectorSearchResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
@@ -73,6 +74,16 @@ public class VectorKnowledgeService {
return embeddingClient.embeddingConfigured();
}
public VectorQueryEmbedding vectorizeQuery(String query, String embeddingMode) {
String normalizedQuery = required(query, "검색 질문");
String mode = normalizeMode(embeddingMode);
return new VectorQueryEmbedding(
normalizedQuery,
mode,
embeddingModel(mode),
"{\"embedding\":" + json(embed(normalizedQuery, mode)) + "}");
}
@Transactional
public VectorIngestResult ingest(VectorIngestCommand command) {
String documentId = requiredDocumentId(command.documentId());
@@ -112,19 +123,19 @@ public class VectorKnowledgeService {
}
public VectorSearchResult search(long userId, String query, int limit, String embeddingMode) {
String normalizedQuery = required(query, "검색 질문");
ProtectedObject vectorObject = protectedObjectService.findEnabled().stream()
.filter(object -> VECTOR_OBJECT.equalsIgnoreCase(object.objectName()))
.findFirst()
.orElseThrow(() -> new AppException(
"CB_VECTOR_SEARCH_DOCUMENTS 보호 객체가 없습니다. 28_agent_ords_vector_tag_vpd_setup.sql을 먼저 실행하세요."));
String mode = normalizeMode(embeddingMode);
String requestBody = "{\"embedding\":" + json(embed(normalizedQuery, mode)) + "}";
VectorQueryEmbedding vectorQuery = vectorizeQuery(query, embeddingMode);
IssuedToken temporary = tokenService.issueTemporaryToken(userId, "지식 검색 검증 세션");
try {
ProbeResult probe = ordsProbeService.runProbe(new ProbeCommand(
temporary.keyId(), vectorObject.objectId(), temporary.plainToken(), normalizeLimit(limit), requestBody));
return new VectorSearchResult(normalizedQuery, mode, embeddingModel(mode), probe);
temporary.keyId(), vectorObject.objectId(), temporary.plainToken(), normalizeLimit(limit),
vectorQuery.requestBody()));
return new VectorSearchResult(
vectorQuery.query(), vectorQuery.embeddingMode(), vectorQuery.embeddingModel(), probe);
} finally {
tokenService.revokeToken(temporary.keyId(), "temporary vector search completed");
}