refactor #565: productize knowledge search language

This commit is contained in:
devmrko
2026-06-29 20:51:42 +09:00
parent b674d301db
commit 5b98c87da1
17 changed files with 102 additions and 101 deletions

View File

@@ -103,7 +103,7 @@ public class McpSseService {
if (isVectorTool(tool)) {
ObjectNode embedding = objectMapper.createObjectNode();
embedding.put("type", "array");
embedding.put("description", "외부 임베딩 모델이 만든 검색 벡터. 이 예제 fixture는 4차원입니다.");
embedding.put("description", "외부 임베딩 모델이 만든 검색 벡터. 개발 환경에서는 4차원 벡터를 사용합니다.");
ObjectNode items = objectMapper.createObjectNode();
items.put("type", "number");
embedding.set("items", items);

View File

@@ -64,7 +64,7 @@ public class OpenAiCompatibleClient {
public List<Double> embedding(String input) {
if (!embeddingConfigured()) {
throw new AppException("AI 임베딩 설정이 없습니다. BACKOFFICE_AI_EMBEDDING_MODEL을 설정하거나 데모 임베딩을 선택하세요.");
throw new AppException("AI 임베딩 설정이 없습니다. BACKOFFICE_AI_EMBEDDING_MODEL을 설정하거나 로컬 임베딩(개발용)을 선택하세요.");
}
BackofficeProperties.Ai ai = properties.ai();

View File

@@ -138,7 +138,7 @@ public class ProtectedObjectService {
defaultOrdsPath(normalizedOwner, normalizedObjectName),
String.join(",", columns),
"",
"DB 객체를 한 개의 ORDS 조회 Handler로 노출하는 예제 대상"
"DB 객체를 한 개의 ORDS 조회 Handler로 노출하는 기본 구성"
);
long objectId = mapper.nextObjectId();
mapper.insertObject(objectId, command);

View File

@@ -65,7 +65,7 @@ public class VectorKnowledgeService {
chunks,
tags,
registered,
embeddingClient.embeddingConfigured() ? embeddingClient.embeddingModelName() : "DEMO-4D"
embeddingClient.embeddingConfigured() ? embeddingClient.embeddingModelName() : "로컬 임베딩(개발용)"
);
}
@@ -120,7 +120,7 @@ public class VectorKnowledgeService {
"CB_VECTOR_SEARCH_DOCUMENTS 보호 객체가 없습니다. 28_agent_ords_vector_tag_vpd_setup.sql을 먼저 실행하세요."));
String mode = normalizeMode(embeddingMode);
String requestBody = "{\"embedding\":" + json(embed(normalizedQuery, mode)) + "}";
IssuedToken temporary = tokenService.issueTemporaryToken(userId, "벡터 지식자료 검색 임시 실행");
IssuedToken temporary = tokenService.issueTemporaryToken(userId, "지식 검색 검증 세션");
try {
ProbeResult probe = ordsProbeService.runProbe(new ProbeCommand(
temporary.keyId(), vectorObject.objectId(), temporary.plainToken(), normalizeLimit(limit), requestBody));
@@ -223,16 +223,16 @@ public class VectorKnowledgeService {
private String normalizeMode(String mode) {
String normalized = mode == null ? DEMO_MODE : mode.trim().toUpperCase(Locale.ROOT);
if (!DEMO_MODE.equals(normalized) && !AI_MODE.equals(normalized)) {
throw new AppException("임베딩 방식은 DEMO 또는 AI만 사용할 수 있습니다.");
throw new AppException("임베딩 방식은 로컬 임베딩 또는 AI 임베딩만 사용할 수 있습니다.");
}
if (AI_MODE.equals(normalized) && !embeddingClient.embeddingConfigured()) {
throw new AppException("AI 임베딩이 설정되지 않았습니다. 설정에서 embedding model/API key를 추가하거나 DEMO 임베딩을 선택하세요.");
throw new AppException("AI 임베딩이 설정되지 않았습니다. 설정에서 embedding model/API key를 추가하거나 로컬 임베딩(개발용)을 선택하세요.");
}
return normalized;
}
private String embeddingModel(String mode) {
return AI_MODE.equals(mode) ? embeddingClient.embeddingModelName() : "DEMO-4D";
return AI_MODE.equals(mode) ? embeddingClient.embeddingModelName() : "로컬 임베딩(개발용)";
}
private String json(List<Double> values) {