Есть ли разумный способ использования подсказок Spring AI MCP между клиентом и сервером?JAVA

Программисты JAVA общаются здесь
Anonymous
Есть ли разумный способ использования подсказок Spring AI MCP между клиентом и сервером?

Сообщение Anonymous »

Я изо всех сил пытаюсь понять, как беспрепятственно использовать приглашение MCP от сервера MCP к клиенту MCP, оба используют Spring AI 1.1.0.
Проблема:
Сервер возвращает GetPromptResult, который содержит PromptMessage, но ни один из них напрямую не коррелирует с тем, что ожидает ChatClient.
Реализация также не упрощает задачу.
В примере показано:

Код: Выделить всё

@McpPrompt(
name = "greeting",
description = "Generate a greeting message")
public GetPromptResult greeting(
@McpArg(name = "name", description = "User's name", required = true)
String name) {

String message = "Hello, " + name + "! How can I help you today?";

return new GetPromptResult(
"Greeting",
List.of(new PromptMessage(Role.ASSISTANT, new TextContent(message)))
);
}
Однако для построения строки сообщения я, похоже, не могу напрямую использовать PromptTemplate или AssistantPromptTemplate. Вместо этого мне приходится делать что-то вроде:

Код: Выделить всё

@McpPrompt(
name = "greeting",
description = "Generate a greeting message")
public McpSchema.GetPromptResult greeting(
@McpArg(name = "name", description = "User's name", required = true)
String name) {

String messageTemplate = "Hello, {name}! How can I help you today?";
String message = PromptTemplate.builder()
.template(messageTemplate)
.variables(Map.of("name", name))
.build()
.create()
.getContents();

return new McpSchema.GetPromptResult(
"Greeting",
List.of(new McpSchema.PromptMessage(
McpSchema.Role.USER,
new McpSchema.TextContent(message)
))
);
}
Честно говоря, это кажется излишне сложным.
Было бы разумнее, если бы сервер просто возвращал клиенту приглашение с заполнителями, а затем позволял клиенту обрабатывать и заполнять их.
Но даже это не кажется простым.
Пример использования клиента:

Код: Выделить всё

McpSchema.GetPromptResult getPromptResult =
mcpClients.getFirst().getPrompt(
new McpSchema.GetPromptRequest("greeting", Map.of("name", "hell"))
);

McpSchema.TextContent content =
(McpSchema.TextContent) getPromptResult.messages().getFirst().content();

content.text();
Я был бы признателен, если бы кто-нибудь указал на то, что мой нынешний подход совершенно неверен, и предложил лучший, более идиоматический способ справиться с этим сценарием.


Подробнее здесь: https://stackoverflow.com/questions/798 ... client-and

Вернуться в «JAVA»