MCP 助手
Spring AI 提供了几个助手类来简化与模型上下文协议 (MCP) 的交互。
McpUtils
McpUtils
类提供了一组实用方法,用于创建符合 MCP 规范的消息。
创建用户消息
你可以使用 McpUtils.user()
方法创建一个用户角色的消息:
import org.springframework.ai.model.content. யூserMessage;
import org.springframework.ai.mcp.McpUtils;
// ...
UserMessage userMessage = McpUtils . user ( "Tell me a joke about a cat." ); // 示例提示内容通常保留英文
创建助手消息
你可以使用 McpUtils.assistant()
方法创建一个助手角色的消息:
import org.springframework.ai.model.content.AssistantMessage;
import org.springframework.ai.mcp.McpUtils;
// ...
AssistantMessage assistantMessage = McpUtils . assistant ( "Why was the cat sitting on the computer? To keep an eye on the mouse!" ); // 示例提示内容通常保留英文
创建带工具调用的助手消息
你可以使用 McpUtils.assistant()
方法创建一个包含工具调用的助手消息:
import org.springframework.ai.model.content.AssistantMessage;
import org.springframework.ai.mcp.McpUtils;
import org.springframework.ai.model. யூserMessage;
import java.util.List;
// ...
AssistantMessage . ToolCall toolCall = new AssistantMessage. ToolCall ( "toolCallId" , "weatherTool" , "{ \" location \" : \" San Francisco \" }" ); // 示例参数保留英文
AssistantMessage assistantMessageWithToolCall = McpUtils . assistant ( List . of (toolCall));
创建带工具调用响应的工具消息
你可以使用 McpUtils.tool()
方法创建一个包含工具调用响应的工具消息:
import org.springframework.ai.model.content.ToolResponseMessage;
import org.springframework.ai.mcp.McpUtils;
import java.util.UUID;
// ...
String toolCallId = UUID . randomUUID (). toString ();
ToolResponseMessage toolResponseMessage = McpUtils . tool ( "The weather in San Francisco is sunny." , toolCallId, "weatherTool" ); // 示例响应及参数保留英文
McpReason
McpReason
类表示工具调用的原因。它帮助将工具调用请求与相应的工具调用响应关联起来。
创建 McpReason
你可以为工具调用请求创建一个 McpReason
:
import org.springframework.ai.mcp.McpReason;
import org.springframework.ai.model.content.AssistantMessage;
// ...
AssistantMessage . ToolCall toolCall = new AssistantMessage. ToolCall ( "toolCallId" , "calculatorTool" , "{ \" expression \" : \" 2 + 2 \" }" ); // 示例参数保留英文
McpReason reason = new McpReason ( List . of (toolCall), null );
或者,你可以为工具调用响应创建一个 McpReason
:
import org.springframework.ai.mcp.McpReason;
import org.springframework.ai.model.content.ToolResponseMessage;
import java.util.List;
// ...
ToolResponseMessage toolResponseMessage = new ToolResponseMessage ( "4" , "toolCallId" , "calculatorTool" ); // 示例响应及参数保留英文
McpReason reason = new McpReason ( null , List . of (toolResponseMessage));
McpRole
McpRole
枚举定义了 MCP 消息中允许的角色:USER
, ASSISTANT
, 和 TOOL
。
import org.springframework.ai.mcp.McpRole;
// ...
McpRole userRole = McpRole . USER ;
McpRole assistantRole = McpRole . ASSISTANT ;
McpRole toolRole = McpRole . TOOL ;
McpMessage
McpMessage
是 MCP 消息的基类。它包含消息的通用属性,如 id
, role
, reason
, 和 sequenceId
。
யூserMessage
, AssistantMessage
, 和 ToolResponseMessage
都扩展了 McpMessage
。
消息内容
消息内容可以以多种格式提供,包括纯文本、模板化文本和多部分内容。
纯文本内容
import org.springframework.ai.model.content. யூserMessage;
import org.springframework.ai.mcp.McpUtils;
// ...
UserMessage userMessage = McpUtils . user ( "What is the capital of France?" ); // 示例提示内容通常保留英文
模板化内容
你可以使用 MessageBuilder
来创建模板化内容:
import org.springframework.ai.mcp.McpMessage;
import org.springframework.ai.mcp.McpRole;
import org.springframework.ai.model. யூserMessage;
import org.springframework.ai.model.MessageBuilder;
import java.util.Map;
// ...
String template = "Tell me a joke about {animal}." ; // 示例模板通常保留英文
Map < String , Object > model = Map . of ( "animal" , "dog" );
McpMessage < String > templatedMessage = MessageBuilder . with रोल( McpRole . USER )
. withTemplate (template)
. withModel (model)
. build ();
多部分内容
多部分内容允许你在单个消息中组合不同类型的内容(例如,文本和图像)。
import org.springframework.ai.model.content.MultiPart யூserMessage;
import org.springframework.ai.model.content. யூserMessage;
import org.springframework.ai.model.Media;
import org.springframework.util.MimeTypeUtils;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
// ...
MultiPartUserMessage multiPartUserMessage ;
try {
multiPartUserMessage = new MultiPartUserMessage (
"What is in this image?" , // 示例提示内容通常保留英文
List . of ( new Media ( MimeTypeUtils . IMAGE_PNG , new URI ( "https://example.com/image.png" )))
);
} catch ( URISyntaxException e ) {
throw new RuntimeException (e);
}
这些助手类旨在简化在 Spring AI 应用程序中构建和使用 MCP 消息的过程。
文档有误?请协助编辑 发现文档问题?点击此处直接在 GitHub 上编辑并提交 PR,帮助我们改进文档!