Проблема:
Сервер возвращает 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)))
);
}
Код: Выделить всё
@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
Мобильная версия