refs #735: add few-shot NL2SQL MCP tool
This commit is contained in:
@@ -73,7 +73,8 @@ public class McpSseService {
|
||||
/** Tools registered by this MCP server. */
|
||||
public List<McpToolView> registeredTools() {
|
||||
return List.of(
|
||||
selectAiQueryView(), selectAiShowpromptView(), qaVectorSearchView(), qaVectorStoreView());
|
||||
selectAiQueryView(), selectAiShowpromptView(), qaVectorSearchView(),
|
||||
qaVectorStoreView(), fewShotNl2SqlView());
|
||||
}
|
||||
|
||||
private ObjectNode initializeResult(String contextPath) {
|
||||
@@ -96,6 +97,7 @@ public class McpSseService {
|
||||
tools.add(toolDefinition(selectAiShowpromptView()));
|
||||
tools.add(toolDefinition(qaVectorSearchView()));
|
||||
tools.add(toolDefinition(qaVectorStoreView()));
|
||||
tools.add(toolDefinition(fewShotNl2SqlView()));
|
||||
result.set("tools", tools);
|
||||
return result;
|
||||
}
|
||||
@@ -149,7 +151,8 @@ public class McpSseService {
|
||||
boolean showpromptTool = showpromptToolName().equals(calledToolName);
|
||||
boolean qaVectorSearchTool = qaVectorSearchToolName().equals(calledToolName);
|
||||
boolean qaVectorStoreTool = qaVectorStoreToolName().equals(calledToolName);
|
||||
if (!queryTool && !showpromptTool && !qaVectorSearchTool && !qaVectorStoreTool) {
|
||||
boolean fewShotNl2SqlTool = fewShotNl2SqlToolName().equals(calledToolName);
|
||||
if (!queryTool && !showpromptTool && !qaVectorSearchTool && !qaVectorStoreTool && !fewShotNl2SqlTool) {
|
||||
throw new AppException("등록되지 않은 MCP tool입니다: " + calledToolName);
|
||||
}
|
||||
|
||||
@@ -172,7 +175,7 @@ public class McpSseService {
|
||||
));
|
||||
} else {
|
||||
String prompt = arguments.path("prompt").asText("");
|
||||
response = queryTool
|
||||
response = queryTool || fewShotNl2SqlTool
|
||||
? selectAiService.generateAndExecute(token, prompt)
|
||||
: selectAiService.generatePrompt(token, prompt);
|
||||
}
|
||||
@@ -278,6 +281,12 @@ public class McpSseService {
|
||||
qaVectorStoreToolLabel(), SELECT_AI_TOOL_PATH);
|
||||
}
|
||||
|
||||
private McpToolView fewShotNl2SqlView() {
|
||||
return new McpToolView(
|
||||
fewShotNl2SqlToolName(), fewShotNl2SqlToolDescription(), -1L,
|
||||
fewShotNl2SqlToolLabel(), SELECT_AI_TOOL_PATH);
|
||||
}
|
||||
|
||||
private String selectAiProfile() {
|
||||
BackofficeProperties.SelectAi selectAi = properties == null ? null : properties.selectAi();
|
||||
if (selectAi == null || selectAi.profile() == null || selectAi.profile().isBlank()) {
|
||||
@@ -354,6 +363,22 @@ public class McpSseService {
|
||||
: mcpProperties.resolvedQaVectorStoreToolDescription();
|
||||
}
|
||||
|
||||
private String fewShotNl2SqlToolName() {
|
||||
return mcpProperties == null ? "oracle.select_ai.smilegate_fewshot_nl2sql"
|
||||
: mcpProperties.resolvedFewShotNl2SqlToolName();
|
||||
}
|
||||
|
||||
private String fewShotNl2SqlToolLabel() {
|
||||
return mcpProperties == null ? "Few-shot NL2SQL 실행"
|
||||
: mcpProperties.resolvedFewShotNl2SqlToolLabel();
|
||||
}
|
||||
|
||||
private String fewShotNl2SqlToolDescription() {
|
||||
return mcpProperties == null
|
||||
? "벡터 Few-shot 예제를 찾아 prompt에 반영하고 SHOWSQL로 생성한 읽기 전용 SQL을 실행합니다. Few-shot 근거, 생성 SQL, 실행 결과를 함께 반환합니다."
|
||||
: mcpProperties.resolvedFewShotNl2SqlToolDescription();
|
||||
}
|
||||
|
||||
private String pretty(Object value) {
|
||||
try {
|
||||
return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(value);
|
||||
|
||||
Reference in New Issue
Block a user