Есть ли разумный способ использования подсказок 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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