RAG ,MCP项目开发日志day1

关于RAG知识库:

文本知识库可以是非常多种的类型,不非得限定到文字,也可以是sql或者java代码。那么这里我们就可以解析一类是上传的文件,一类是Git代码库的项目。也可以是来自于网页的内容之后爬虫。这些内容都可以被解析处理。
image
关于linux 的各个文件划分原则:
image
记录一次云服务器的故障:
云服务器的bash文件是不能够在windows下进行直接使用,会自动带有换行符,解决办法就是
1是利用相应的工具进行转换。
2是在linux系统中直接用vim指令进行修改。
关于MCP本身的一些作用
image
关于MCP的client
image
3.关于MCP的架构图
image
3、MCP 客户端
MCP Client 是‍ MCP 架构中的关键组件,主要负责和 MCP‏ 服务器建立连接并进行通信。它能自动匹配服务器⁡的协议版本、确认可用功能、负责数据传输和 JS​ON-RPC 交互。此外,它还能发现和使用各种​工具、管理资源、和提示词系统进行交互。
除了这些核心功‍能,MCP 客户端还支持一‏些额外特性,比如根管理、采⁡样控制,以及同步或异步操作​。为了适应不同场景,它提供​了多种数据传输方式,包括:
Stdio 标准输入 / 输出:适用于本地调用
基于 Java HttpClient 和 WebFlux 的 SSE 传输:适用于远程调用
客户端可以‍通过不同传输方式调‏用不同的 MCP ⁡服务,可以是本地的​、也可以是远程的。​如图:
image
思考tools的使用是关键
如何在程序中使用MCP服务
一段调用MCphee服务的具体实例

@Test
void doChatWithMcp() {
    String chatId = UUID.randomUUID().toString();
    // 测试地图 MCP
    String message = "我的另一半居住在上海静安区,请帮我找到 5 公里内合适的约会地点";
    String answer =  loveApp.doChatWithMcp(message, chatId);
}

Spring AI MCP 客户端与服务器连接方式

以下是客户端的配置文件,用于配置与服务器的两种传输方式:

```yaml
spring:
  ai:
    mcp:
      client:
        enabled: true
        name: my-mcp-client
        version: 1.0.0
        request-timeout: 30s
        type: SYNC
        sse:
          connections:
            server1:
              url: http://localhost:8080
        stdio:
          connections:
            server1:
              command: /path/to/server
              args:
                - --port=8080
              env:
                API_KEY: your-api-key

MCP 客户端自定义配置

以下是一个自定义 McpSyncClientCustomizer 的示例:

```java
@Component
public class CustomMcpSyncClientCustomizer implements McpSyncClientCustomizer {
    @Override
    public void customize(String serverConfigurationName, McpClient.SyncSpec spec) {
        // 自定义请求超时配置
        spec.requestTimeout(Duration.ofSeconds(30));
        
        // 设置此客户端可访问的根目录 URI
        spec.roots(roots);
        
        // 设置处理消息创建请求的自定义采样处理器
        spec.sampling((CreateMessageRequest messageRequest) -> {
            // 处理采样
            CreateMessageResult result = ...
            return result;
        });

        // 添加在可用工具变更时通知的消费者
        spec.toolsChangeConsumer((List<McpSchema.Tool> tools) -> {
            // 处理工具变更
        });

        // 添加在可用资源变更时通知的消费者
        spec.resourcesChangeConsumer((List<McpSchema.Resource> resources) -> {
            // 处理资源变更
        });

        // 添加在可用提示词变更时通知的消费者
        spec.promptsChangeConsumer((List<McpSchema.Prompt> prompts) -> {
            // 处理提示词变更
        });

        // 添加接收服务器日志消息时通知的消费者
        spec.loggingConsumer((McpSchema.LoggingMessageNotification log) -> {
            // 处理日志消息
        });
    }
}

配置说明

  • 连接方式配置 :通过 type 属性指定连接类型为 SYNC,然后在对应的 ssestdio 配置块中设置服务器的连接信息,如 URL、命令、参数和环境变量等。
  • 自定义配置 :通过实现 McpSyncClientCustomizer 接口,在 customize 方法中可以对客户端的请求超时、根目录 URI、消息采样处理器以及各种变更通知消费者等进行自定义设置。
    MCP的几个java版本的SDK
    spring-ai-starter-mcp-server:提供 stdio 传输支持,不需要额外的 web 依赖
    spring-ai-starter-mcp-server-webmvc:提供基于 Spring MVC 的 SSE 传输和可选的 stdio 传输(一般建议引入这个)
    spring-ai-starter-mcp-server-webflux:提供基于 Spring WebFlux 的响应式 SSE 传输和可选的 stdio 传输
    关于这个tool的注解开发
    3、开发服务
    无论采用哪种传输方式,开发 MCP 服务的过程都是类似的,跟开发工具调用一样,直接使用 @Tool 注解标记服务类中的方法。

▼
java
复制代码
@Service
public class WeatherService {
    @Tool(description = "获取指定城市的天气信息")
    public String getWeather(
            @ToolParameter(description = "城市名称,如北京、上海") String cityName) {
        // 实现天气查询逻辑
        return "城市" + cityName + "的天气是晴天,温度22°C";
    }
}
然后在 Spring Boot 项目启动时注册一个 ToolCallbackProvider Bean 即可:

▼
java
复制代码
@SpringBootApplication
public class McpServerApplication {
    @Bean
    public ToolCallbackProvider weatherTools(WeatherService weatherService) {
        return MethodToolCallbackProvider.builder()
                .toolObjects(weatherService)
                .build();
    }
}
posted @ 2025-07-03 09:22  ruo_feng  阅读(23)  评论(0)    收藏  举报
-->