[Developer] #569 plain text vector Top-K probe
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user