ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MCP 请求链路深度解析:Content Safety 双层守卫下的 MCP 计算器服务调用时序(mcp-for-beginners)

MCP 请求链路深度解析:Content Safety 双层守卫下的 MCP 计算器服务调用时序(mcp-for-beginners) 教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载本文以mcp-for-beginners仓库中 Java 版 containerapp 示例的官方时序图为骨架逐帧拆解一条从「用户输入计算提示词」到「拿到计算结果与安全分析报告」的完整 MCP 调用链路输入安全检测 → LangChain4j 决策 → MCP 客户端经 SSE 调用计算器服务 → 输出安全复检。读完本文你将掌握 Content Safety 与 MCP 组合下的双闸门架构设计、参与者与源码的逐一对应关系以及如何在本地一键运行并验证这条链路。系统架构与参与者该示例04-PracticalImplementation/samples/java/containerapp演示的是一个先做内容安全检测、再通过 Model Context Protocol 把用户提示词交给计算器服务的 Web 应用。其整体架构如下整条链路共涉及 8 个参与者官方时序图sequence-diagram.md另附 PlantUML 版本按消息先后顺序完整刻画了它们之间的交互时序图中的参与者实际对应物仓库源码/配置位置User浏览器中的终端用户Web 模板 index.htmlWebAppContentSafetyControllerSpring MVC 控制器ContentSafetyController.javaSafetyServiceContent Safety Service内容安全编排服务ContentSafetyService.javaAzureAPIAzure Content Safety APIAzure AI 内容安全服务ContentSafetyUtil.javaLangChainLangChain4jLLM 编排框架与 Bot 智能体Bot.javaMcpClientMCP ClientLangChain4j MCP 客户端ContentSafetyService.java中的DefaultMcpClient/McpToolProviderMcpServerMCP Calculator Server端口 8080以 SSE 模式运行在 8080 的本地计算器 MCP 服务参见 README.mdCalcServiceCalculator Service计算器工具集add、subtract、multiply 等由 MCP Server 对外暴露的 tool官方时序图完整继承下面是该示例随源码分发的官方时序图原文它定义了这条链路的全部消息轨迹与分支逻辑整条链路可以概括为输入 → 安检 → 分派 → 计算 → 输出复检 → 展示。下面按时序逐段展开并给出对应的源码证据。第一阶段用户交互与请求对象构建时序图的第一组消息对应 Web 层的表单交互用户在前端文本框中输入诸如Calculate the sum of 24.5 and 17.3的计算提示词后表单以POST /submit提交。控制器把表单数据绑定为PromptRequest模型对象PromptRequest.java 仅含一个prompt字段然后立即委托给内容安全服务对应源码// ContentSafetyController.java 中的 POST /submit PostMapping(/submit) public String submitPrompt(ModelAttribute PromptRequest promptRequest, Model model) { MapString, String result contentSafetyService.processPrompt(promptRequest.getPrompt()); ... return result; }可以看到控制器本身不包含任何业务逻辑它只负责「接收请求 → 调processPrompt→ 把结果塞进 Model → 渲染 result 视图」。从源码结构看/process端点与/submit完全复用同一套逻辑。第二阶段输入安全检测Input Screening这是双闸门架构的第一道闸门processPrompt的第一步调用ContentSafetyUtil.checkContentIsSafe(prompt)ContentSafetyService.java#L81-L87其内部完成对 Azure Content Safety API 的同步文本分析。关键的判定逻辑位于 ContentSafetyUtil.java#L102-L141// ContentSafetyUtil.checkContentIsSafe(String text) AnalyzeTextOptions options new AnalyzeTextOptions(text); options.setCategories(TEXT_CATEGORIES); AnalyzeTextResult response client.analyzeText(options); for (TextCategoriesAnalysis result : response.getCategoriesAnalysis()) { // Consider content harmful if severity is 2 (moderate severity) if (result.getSeverity() 2) { isSafe false; ... } }这里有两个关键实现事实检测分类TEXT_CATEGORIES固定为HATE仇恨、SELF_HARM自伤、SEXUAL色情、VIOLENCE暴力四类定义见 ContentSafetyUtil.java#L29-L34安全阈值只要任一分类的severity 2中等及以上严重度即判定为不安全这与时序图中标注的severity 2 for all categories完全一致——所有分类的严重度都小于 2 才算安全。调用链上还有一处容易忽略的细节initializeClient()通过Configuration.getGlobalConfiguration()读取CONTENT_SAFETY_ENDPOINT与CONTENT_SAFETY_KEY两个环境变量ContentSafetyUtil.java#L56-L73。若未设置代码会落入占位值分支此时内容安全功能实际不可用这与 README.md 的说明一致。第三阶段分支决策——安全内容进入 MCP 计算链路时序图用alt/else结构把后续流程一分为二。当输入安全时进入 MCP 调用主链路对应 ContentSafetyService.java#L89-L91if (safetyResult.contains(RESULT: Content is safe.)) { String botResponse bot.chat(prompt); ... }bot是一个由 LangChain4jAiServices生成的Bot接口代理Bot.java 只声明了String chat(String prompt)一个方法其组装过程揭示了 MCP 客户端的三层结构ContentSafetyService.java#L44-L61// 第 1 层传输层——基于 SSE 的 HTTP 传输 McpTransport transport new HttpMcpTransport.Builder() .sseUrl(http://localhost:8080/sse) .timeout(Duration.ofMinutes(60)) .build(); // 第 2 层MCP 客户端 this.mcpClient new DefaultMcpClient.Builder() .transport(transport) .build(); // 第 3 层工具提供者——把 MCP 工具暴露给 LLM ToolProvider toolProvider McpToolProvider.builder() .mcpClients(List.of(mcpClient)) .build(); this.bot AiServices.builder(Bot.class) .chatLanguageModel(model) .toolProvider(toolProvider) .build();从源码结构可以清晰看出时序图「McpClient → McpServer → CalcService」这一段的真实含义HttpMcpTransport以 SSEServer-Sent Events方式连接http://localhost:8080/sse即时序图中标注的Call appropriate calculator tool via SSEDefaultMcpClient负责与 MCP Server 的协议交互把计算器暴露的add、subtract、multiply等工具注册进McpToolProvider当 LLMOpenAiOfficialChatModelAzure 部署默认模型名gpt-5.1判定某条提示词需要调用计算工具时bot.chat(prompt)便会经由工具提供者触发对应的 MCP 工具调用最终由 Calculator Service 完成运算并逐层回传结果。第四阶段输出安全复检Output Screening时序图中LangChain--SafetyService: Bot response之后并非直接返回而是进入第二道闸门——对模型输出再做一次内容安全检测对应 ContentSafetyService.java#L93-L110// 对模型输出做与输入完全相同的安全检测 String botResponseSafetyResult ContentSafetyUtil.checkContentIsSafe(botResponse); result.put(botResponseSafetyResult, botResponseSafetyResult); if (botResponseSafetyResult.contains(RESULT: Content is safe.)) { result.put(botResponse, botResponse); result.put(isSafe, true); } else { result.put(botResponse, The generated response was flagged for safety concerns and cannot be displayed.); result.put(isSafe, false); }这一段体现了示例的核心设计动机即使底层模型是未经审查的uncensored模型输出也必须经过与输入相同的过滤器才能展示给用户。双层检测双闸门确保系统安全性不依赖具体模型的自我约束。同时注意异常分支——若输入安全但调用失败isSafe会被置为true并写入error字段ContentSafetyService.java#L104-L107控制器会将该错误透传到 result 视图ContentSafetyController.java#L43-L46。最终返回给控制器的resultMap 与 README 中 Web 界面展示的五个字段一一对应safetyResult输入安检详情、botResponse计算结果、isSafe、botResponseSafetyResult输出安检详情与可选的error。关键配置参数速查整条链路依赖两类环境变量与两个端口均以仓库当前内容为准配置项值/默认作用证据来源AZURE_OPENAI_ENDPOINThttps://resource-name.openai.azure.comLLM 端点拼接/openai/v1/作为 baseUrlREADME.mdAZURE_OPENAI_API_KEYAzure 部署密钥LLM 认证同上AZURE_OPENAI_DEPLOYMENT默认gpt-5.1Azure 模型部署名ContentSafetyService.java#L38CONTENT_SAFETY_ENDPOINT未设置时使用占位值Azure Content Safety 端点ContentSafetyUtil.java#L57-L66CONTENT_SAFETY_KEY未设置时使用占位值Content Safety 密钥同上MCP Server 地址http://localhost:8080/sse计算器 MCP 服务的 SSE 传输端点ContentSafetyService.java#L45Web 应用端口8087Spring Boot 服务端口spring.application.nameContentSafetyCalculatorapplication.properties依赖版本同样值得记录项目基于 Spring Boot 3.4.4、Java 21使用dev.langchain4j:langchain4j-mcp:1.0.0-beta3与com.azure:azure-ai-contentsafety:1.0.11详见 pom.xml。运行与验证这条链路方式一完整 Web 应用含 UI 与双层安检先以 SSE 模式在localhost:8080启动计算器 MCP Server导出前述五个环境变量在 04-PracticalImplementation/samples/java/containerapp 目录执行mvn spring-boot:run浏览器访问http://localhost:8087输入安全提示词如Calculate the sum of 24.5 and 17.3提交即可看到输入安检详情、计算结果、输出安检详情三部分若输入不安全则只展示安全警告且不触发计算。方式二命令行直跑快速验证 MCP 工具调用项目还提供了一个独立的可执行入口 LangChain4jClient.java内置了三组精心挑选的提示词String[] prompts { Calculate the sum of 24.5 and 17.3 using the calculator service, // 安全触发计算工具 Go kill yourself!, // 不安全安检拦截 Show me the help for the calculator service // 安全触发帮助工具 };这段代码完整复刻了时序图的分支语义每条提示词先过checkContentIsSafe只有安全内容才交给bot.chat并在循环结束后调用mcpClient.close()释放连接LangChain4jClient.java#L60-L83。运行它需要先设置 LLM 与 Content Safety 的环境变量并启动 MCP ServerMaven 已通过exec-maven-plugin把主类预置为com.microsoft.cognitiveservices.LangChain4jClient见 pom.xml执行mvn exec:java即可观察「安检 → 工具调用 → 响应」的完整日志该客户端在传输层开启了logRequests(true)与logResponses(true)LangChain4jClient.java#L44-L45。小结这条时序图用一页 Mermaid 就讲清了「AI 应用中如何安全地编排 MCP 工具」的完整范式输入安检把住第一道闸门MCP 客户端经 SSE 把工具能力注入 LLM 决策输出安检再守最后一道防线。对照 ContentSafetyService.java 与 ContentSafetyUtil.java 的实现可以看到时序图中的每一根箭头背后都有明确的类与方法支撑而severity 2这一安全阈值、8080/8087 双端口、五组环境变量则是把这张图真正跑起来所需的全部关键参数。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐MCP for Beginners 实战解读基于 Azure Content Safety 与 LangChain4j 的内容安全守护计算器 MCP 调用时序分析MCP for Beginners 实战解读基于 Azure Content Safety 与 LangChain4j 的内容安全守护计算器 MCP 调用时序教程文档人工智能MCP for Beginners 实战用 LangChain4j Azure Content Safety 构建带双层内容安全检查的 MCP 计算器应用MCP for Beginners 实战用 LangChain4j Azure Content Safety 构建带双层内容安全检查的 MCP 计算器应用教程文档人工智能MCP for Beginners基于 Java、LangChain4j 与 Azure Content Safety 的 MCP 计算器应用实战MCP for Beginners基于 Java、LangChain4j 与 Azure Content Safety 的 MCP 计算器应用实战 导读 本文教程文档人工智能上一篇深入解读 go-digestKubeSphere 容器生态中基于内容寻址的内容摘要库下一篇USB/IP for Windows跨平台USB设备网络共享的技术实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表