205-Spring AI Model Context Protocol 功能:Brave Search 功能完整案例

205-Spring AI Model Context Protocol 功能:Brave Search 功能完整案例

本案例演示如何创建一个 Spring AI Model Context Protocol (MCP) 客户端,该客户端与 Brave Search MCP 服务器通信。应用程序展示了如何构建一个 MCP 客户端,通过对话界面实现与 Brave Search 的自然语言交互,允许您通过对话界面执行互联网搜索。本示例使用 Spring Boot 自动配置通过配置文件设置 MCP 客户端。

运行时,应用程序通过询问特定问题来演示 MCP 客户端的功能:"Spring AI 是否支持 Model Context Protocol?请提供一些参考资料。"MCP 客户端使用 Brave Search 查找相关信息并返回全面答案。提供响应后,应用程序退出。

1. 案例目标

我们将创建一个展示以下功能的 Spring Boot 应用:

  1. MCP 客户端配置:通过配置文件设置与 Brave Search MCP 服务器的连接。
  2. 自然语言搜索:通过对话界面实现互联网搜索功能。
  3. 自动查询执行:应用程序启动时自动执行预设问题,展示 MCP 客户端的功能。

2. 技术栈与核心依赖

  • Spring Boot 3.4.5
  • Spring AI 1.1.0-SNAPSHOT
  • Spring AI MCP Client (用于连接 MCP 服务器)
  • Spring AI OpenAI (用于处理自然语言交互)
  • Maven (项目构建工具)

在 pom.xml 中,你需要引入以下核心依赖:

<dependencies> <!-- Spring Boot 启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Spring AI OpenAI 模型启动器 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> </dependency> <!-- Spring AI MCP 客户端启动器 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client</artifactId> </dependency> </dependencies> <!-- 添加 Spring AI BOM 进行版本管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.1.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

3. 项目配置

在 src/main/resources/application.properties 文件中,配置你的 OpenAI API Key 和 MCP 客户端设置。

debug=true spring.application.name=mcp spring.main.web-application-type=none # OpenAI API Key 配置 spring.ai.openai.api-key=${OPENAI_API_KEY} # MCP 客户端配置 spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json # 日志配置 logging.level.root=INFO logging.level.org.springframework.ai.mcp=WARN logging.level.org.springframework.ai.mcp.client.transport.StdioClientTransport=WARN logging.level.org.springframework.ai.mcp.samples.brave=INFO logging.level.io.modelcontextprotocol.client=WARN logging.level.io.modelcontextprotocol.spec=WARN

重要提示:请将 OPENAI_API_KEY 环境变量设置为你从 OpenAI 获取的有效 API Key。

4. MCP 服务器配置

在 src/main/resources/mcp-servers-config.json 文件中,配置 Brave Search MCP 服务器:

{ "mcpServers": { "brave-search": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-brave-search" ], "env": { } } } }

此配置:

  • 通过 npx 使用 Brave Search MCP 服务器
  • Brave API 密钥通过环境变量传递
  • 初始化与服务器的同步连接

5. 编写 Java 代码

5.1 Application.java

主应用程序类,配置 ChatClient 并执行预设问题。

package org.springframework.ai.mcp.samples.brave; import java.util.List; import io.modelcontextprotocol.client.McpSyncClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.mcp.SyncMcpToolCallbackProvider; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class Application { private static final Logger logger = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args).close(); } @Bean public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder, List<McpSyncClient> mcpSyncClients) { return args -> { var chatClient = chatClientBuilder .defaultToolCallbacks(new SyncMcpToolCallbackProvider(mcpSyncClients)) .build(); String question = "Does Spring AI supports the Model Context Protocol? Please provide some references."; logger.info("QUESTION: {}\n", question); logger.info("ASSISTANT: {}\n", chatClient.prompt(question).call().content()); }; } }

代码解析

这段代码的主要功能:

  • 应用程序入口:标准的 Spring Boot 应用程序入口点。
  • ChatClient 配置:使用 SyncMcpToolCallbackProvider 配置 ChatClient,使其能够使用 MCP 工具回调。
  • 预设问题执行:在应用程序启动时,自动执行一个关于 Spring AI 是否支持 Model Context Protocol 的问题。
  • 日志记录:记录问题和 AI 助手的回答。

6. 运行与测试

6.1 前置条件

  • Java 17 或更高版本
  • Maven 3.6+
  • npx 包管理器
  • Git
  • OpenAI API 密钥
  • Brave Search API 密钥(在 https://brave.com/search/api/ 获取)

6.2 设置步骤

构建应用程序

./mvnw clean install

设置 API 密钥

export OPENAI_API_KEY='your-openai-api-key-here' export BRAVE_API_KEY='your-brave-api-key-here'

克隆仓库

git clone https://github.com/spring-projects/spring-ai-examples.git cd model-context-protocol/brave

安装 npx:首先确保安装 [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm),然后运行:

npm install -g npx

6.3 运行应用程序

使用 Maven 运行应用程序:

./mvnw spring-boot:run

应用程序将执行一个查询,询问 Spring AI 是否支持 Model Context Protocol。它使用 Brave Search MCP 服务器在互联网上搜索相关信息,通过 MCP 客户端处理结果,并在退出前提供详细回答。

7. 工作原理

7.1 MCP 客户端配置

MCP 客户端通过配置文件进行配置:

application.properties

spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json

mcp-servers-config.json

{ "mcpServers": { "brave-search": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-brave-search" ], "env": { } } } }

7.2 聊天集成

ChatClient 在 Application 类中配置了 MCP 工具回调:

var chatClient = chatClientBuilder .defaultToolCallbacks(new SyncMcpToolCallbackProvider(mcpSyncClients)) .build();

此设置允许 AI 模型:

  • 理解何时使用 Brave Search
  • 适当地格式化查询
  • 处理搜索结果并将其整合到回答中

8. 集成测试

项目包含一个集成测试,用于验证应用程序是否正常工作:

8.1 ExampleInfo.json

{ "timeoutSec": 300, "successRegex": [ "Does Spring AI supports the Model Context Protocol", "QUESTION:", "ASSISTANT:", "Spring AI.*Model Context Protocol" ], "requiredEnv": [ "OPENAI_API_KEY", "BRAVE_API_KEY" ], "setupCommands": [] }

8.2 RunBrave.java

///usr/bin/env jbang "$0" "$@" ; exit $? //DEPS org.zeroturnaround:zt-exec:1.12 //DEPS com.fasterxml.jackson.core:jackson-databind:2.17.1 //JAVA 17 //FILES ExampleInfo.json //SOURCES ../../../integration-testing/jbang-lib/IntegrationTestUtils.java /* * Integration test launcher for brave * Refactored to use centralized utilities */ public class RunBrave { public static void main(String... args) throws Exception { IntegrationTestUtils.runIntegrationTest("brave"); } }

9. 实现思路与扩展建议

9.1 实现思路

本案例的核心思想是"通过 MCP 协议连接 AI 模型与外部工具"。我们:

  • 使用标准协议:通过 Model Context Protocol (MCP) 连接 AI 模型与 Brave Search 工具。
  • 自动配置:利用 Spring Boot 的自动配置功能,通过配置文件轻松设置 MCP 客户端。
  • 工具回调:通过 SyncMcpToolCallbackProvider 将 MCP 工具集成到 ChatClient 中。

9.2 扩展建议

  • 多 MCP 服务器:可以配置多个 MCP 服务器,使 AI 模型能够访问更多工具和服务。
  • 自定义工具:开发自定义 MCP 服务器,提供特定领域的工具和功能。
  • 异步处理:使用异步 MCP 客户端,提高应用程序的响应性能。
  • Web 界面:添加 Web 界面,使用户能够直接与 AI 模型进行交互,而不仅仅是预设问题。
  • 错误处理:增强错误处理机制,处理 MCP 服务器连接失败或 API 限制等情况。

Read more

机器人 - 关于MIT电机模式控制

目录 一、MIT电机模式简单介绍 1.1 简单介绍 1.2 MIT模式的控制参数 1.3 使用场景 二、调试时建议 2.1 调试 2.2 问题定位 一、MIT电机模式简单介绍 1.1 简单介绍 Mixed Integrated Torque为一种混合控制模式,在同一帧CAN数据里包含 位置、速度、扭矩三类的闭环指令。驱动器里面把位置环、速度环、前馈扭矩相加,得到一个参考电流,然后再交给电流环完成精准扭矩输出。 1.2 MIT模式的控制参数 参数含义取值范围(常见)说明kp位置比例系数(刚度)0 ~ 500 (单位视驱动器而定)kp = 0 时位置环失效,

By Ne0inhk

2026年 , 最新的机器人系统架构介绍 (1)

文章目录 * 第一部分:机器人的完整系统架构(由底向上) * 第二部分:最有前景、最具迁移性的核心是什么? * 第三部分:学习与技术路线图 * 标题数据驱动的机器人操作与决策算法 * 工业级机器人系统架构 * 第一部分:生动形象的工业级机器人系统架构 * 第二部分:热门公司技术路线全解析与优劣势对比 * **1. 宇树科技 (Unitree) —— 运动性能的极致派** * **2. 智平方 (AI² Robotics) —— 全栈VLA的实战派** * **3. 银河通用 (Galbot) —— 仿真数据驱动的垂直深耕派** * **4. 逐际动力 (LimX Dynamics) —— OS系统整合派** * **5. 优必选 (UBTECH) —— 全栈技术的老牌劲旅** * 第三部分:总结与你的切入路线图 第一部分:机器人的完整系统架构(由底向上) 我们可以把一个智能机器人系统想象成一个“人体”,从物理接触世界的大脑,分为以下几个层次: 1. 最底层:硬件平台与执行机构

By Ne0inhk

Django框架丨从零开始的Django入门学习

Django 是一个用于构建 Web 应用程序的高级 Python Web 框架,Django是一个高度模块化的框架,使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。 每个 Django App 的组织结构符合 Django 的 MTV 法则——Model(模型)+ Template(模板)+ View(视图),文章内容将从安装开始,对Django每一个模块的操作进行简单的讲解 1. 安装Django 想必大家肯定都安装好python了,如果没有的话网络上很多教程可以参考,安装好python后可以直接在命令行安装Django pip install django 安装完成后,你可以通过运行以下命令验证 Django 是否成功安装: python -m django --version 或通过import进行检查 2.

By Ne0inhk