<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      王炸!SpringBoot+MCP 讓你的系統秒變AI小助手

      王炸!SpringBoot+MCP 讓你的系統秒變AI小助手

      感覺本篇對你有幫助可以關注一下我的微信公眾號(深入淺出談java),會不定期更新知識和面試資料、技巧!!!

      一、MCP 是什么?

      MCP(Model Context Protocol) 官網:Introduction - Model Context Protocol

      解釋:Model Context Protocol(MCP)是由 Anthropic 推出的開放協議,旨在標準化大型語言模型(LLM)與外部數據源、工具的交互方式。它類似于“AI 領域的 USB-C 接口”,通過統一的通信規范(如 JSON-RPC 2.0)實現跨模型、跨工具的兼容性。

      白話解釋:MCP就像 AI 和工具之間的“翻譯官”,它制定了一套標準對話規則,讓不同 AI 模型(比如 ChatGPT、Claude)都能用同樣的方式和你的系統“聊天”。比如以前每個 AI 都要學不同的方言才能操作你的數據庫,現在它們只要會說 MCP 這個“普通話”就行!

      舉個栗子??:。
      你做了一個文件管理系統,用 MCP 改造后,不管是 ChatGPT 還是 Claude,都能用同一套指令幫你查文件、刪文件,不用為每個 AI 單獨開發接口。

      二、MCP 的核心原理(一張圖看懂)


      解釋:MCP 采用客戶端-服務器(C/S)架構,包含以下組件:

      1. MCP Host:集成 AI 模型的應用(如 IDE、聊天界面),負責發起請求。

      2. MCP Client:協議客戶端,管理 Host 與 Server 的通信(如發送請求、解析響應)。

      3. MCP Server:輕量級程序,提供特定功能(如文件讀寫、數據庫查詢)。

      4. 數據源/工具:本地文件、數據庫、第三方 API 等

      核心三兄弟

      1. MCP Client(傳話筒):負責把 AI 的請求轉發給工具,類似快遞小哥。
      2. MCP Server(工具管家):管理你提供的工具(比如查數據庫、讀文件)。
      3. 工具:你現有的功能(比如 SpringBoot 里的訂單查詢接口)。

      白話解釋:

      想象 MCP 是個“中間人”,負責協調 AI 和你的系統工具(可以理解為接口之類)之間的對話:

      用戶問AI:“幫我查昨天的訂單”  
         ↓  
      AI 把問題翻譯成 MCP 格式:“調用訂單查詢工具,時間=昨天”  
         ↓  
      MCP 中間人找到對應的工具執行  
         ↓  
      工具返回數據,MCP 翻譯成自然語言給用戶 
      
      
      ---------------------------------------------------------------
      
      用戶說話
         │
         ↓
      AI 翻譯成 MCP 格式
         │
         ↓
      SpringBoot 收到請求
         │
         ↓
      執行對應的Service方法(比如查訂單)
         │
         ↓
      返回結果給AI → AI 翻譯成人話給用戶
      

      三、MCP 能干啥?


      1. 讓AI操作你的系統
        • 比如用戶對AI說:“把訂單123退貨”,AI自動調用你的退款接口。
      2. 無縫切換AI模型
        • 今天用 ChatGPT,明天換 Claude,系統接口不用改!
      3. 動態擴展功能
        • 新增一個工具(比如短信發送),所有支持的 AI 都能立刻用上。

      實際場景

      • 客服機器人自動查訂單、退換貨
      • AI 助手自動寫周報(讀取你的會議記錄和郵件)
      • 智能 IDE 自動調接口生成代碼

      四、傳統方式與MCP 服務 對比圖:

      傳統接口開發流程:
      用戶請求→ 前端 → 路由分發 → 控制器 → 服務層 → 數據庫操作 → 返回DTO-》前端
      
      MCP服務開發流程:
      用戶自然語言 → MCP協議轉換 → 工具路由 → 領域服務 → 數據庫操作 → 自然語言生成
      

      流程步驟說明:

      1. 用戶請求階段

        • 用戶向MCP Client發送自然語言指令:"幫我查昨天的訂單"
        • ??MCP Client作用:用戶交互終端,負責自然語言處理
      2. 指令翻譯階段

        • AI將指令轉換為MCP標準格式:

          {
            "action": "order_query",
            "params": {"time": "yesterday"}
          }
          
        • ?? 協議轉換發生在MCP Client內部

      3. 請求路由階段

        • MCP Client通過HTTPS將結構化數據發送至MCP Server
        • ?? MCP Server作用:中央調度器,驗證請求并匹配服務端點
      4. 服務執行階段

        • MCP Server識別需調用"訂單查詢工具",通過RPC調用MCP Host
        • ?? MCP Host作用:微服務執行環境,承載具體業務邏輯實現
      5. 數據處理階段

        • 訂單工具在MCP Host執行SQL查詢:

          SELECT * FROM orders 
          WHERE order_date = CURRENT_DATE - 1;
          
        • 查詢結果經數據清洗后返回JSON格式

      6. 響應返回階段

        • MCP Server接收Host返回的原始數據
        • MCP Client將結構化數據轉換為自然語言:
          "您昨天共有5筆訂單,總金額2380元,最新訂單是XX商品..."

      五、改造 SpringBoot 項目的步驟(保姆級教程)

      核心步驟:

      • 添加MCP 的依賴包
      • 修改配置文件
      • 改造現有接口
      • 注冊到MCP服務器

      1、添加依賴


      由于目前這些依賴還是預覽版本,所以在Maven中央倉庫中是找不到的,需要我們額外引入倉庫地址。

        <!-- Spring AI 核心依賴 -->
              <dependency>
                  <groupId>org.springframework.ai</groupId>
                  <artifactId>spring-ai-core</artifactId>
                  <version>1.0.0-SNAPSHOT</version>
              </dependency>
      
              <!-- Anthropic 模型支持 -->
              <dependency>
                  <groupId>org.springframework.ai</groupId>
                  <artifactId>spring-ai-anthropic-spring-boot-starter</artifactId>
                  <version>1.0.0-SNAPSHOT</version>
              </dependency>
      
              <!-- MCP 服務器支持 - WebMVC版本 -->
              <dependency>
                  <groupId>org.springframework.ai</groupId>
                  <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
                  <version>1.0.0-SNAPSHOT</version>
              </dependency>
      

      其他倉庫配置信息

      <repositories>
          <repository>
              <id>spring-milestones</id>
              <name>Spring Milestones</name>
              <url>https://repo.spring.io/milestone</url>
              <snapshots>
                  <enabled>false</enabled>
              </snapshots>
          </repository>
          <repository>
              <id>spring-snapshots</id>
              <name>Spring Snapshots</name>
              <url>https://repo.spring.io/snapshot</url>
              <releases>
                  <enabled>false</enabled>
              </releases>
          </repository>
          <repository>
              <name>Central Portal Snapshots</name>
              <id>central-portal-snapshots</id>
              <url>https://central.sonatype.com/repository/maven-snapshots/</url>
              <releases>
                  <enabled>false</enabled>
              </releases>
              <snapshots>
                  <enabled>true</enabled>
              </snapshots>
          </repository>
      </repositories>
      

      2、項目配置


      我們的目的是將一個Spring服務改造成MCP服務,所以這里不需要進行客戶端的配置,同理,在引入依賴的時候也不用引入客戶端的依賴。

      Anthropic 旗下強大的 Claude 大語言模型 key 需要在官網申請 官網地址:https://console.anthropic.com

      # Spring AI api-key
      spring.ai.anthropic.api-key=這里換成你的api-key
      
      # MCP服務端開啟
      spring.ai.mcp.server.enabled=true
      
      # MCP服務端配置
      spring.ai.mcp.server.name=book-management-server
      spring.ai.mcp.server.version=1.0.0
      spring.ai.mcp.server.type=SYNC
      spring.ai.mcp.server.sse-message-endpoint=/mcp/message
      

      3、改造原服務方法


      改造方法有兩種:

      1. 工具配置
      2. 函數Bean

      方法一:工具配置

      工具配置方式在需要改造的實現類對需要改造的方法加上@Tool@ToolParam注解分別標記方法和參數

      @Service
      @RequiredArgsConstructor
      publicclass BookServiceImpl  implements BookService {
      
      @Resource
      private BookRepository bookRepository;
      
      
      @Override
      @Tool(name = "findBooksByTitle", description = "根據書名模糊查詢圖書,支持部分標題匹配")
      public List<Book> findBooksByTitle(@ToolParam(description = "書名關鍵詞") String title) {
          return bookRepository.findByTitleContaining(title);
        }
      
      @Override
      @Tool(name = "findBooksByAuthor", description = "根據作者精確查詢圖書")
      public List<Book> findBooksByAuthor(@ToolParam(description = "作者姓名") String author) {
          return bookRepository.findByAuthor(author);
        }
      
      @Override
      @Tool(name = "findBooksByCategory", description = "根據圖書分類精確查詢圖書")
      public List<Book> findBooksByCategory(@ToolParam(description = "圖書分類")String category) {
          return bookRepository.findByCategory(category);
        }
      }
      

      接著將這個 BookServiceImpl 實現類注冊到MCP服務器配置上即可。

      /**
       * MCP服務器配置類,負責注冊MCP工具
       */
      @Configuration
      publicclass McpServerConfig {
      
      /**
         * 注冊工具回調提供者,將BookQueryService中的@Tool方法暴露為MCP工具
         *
         * @param bookService 圖書服務
         * @return 工具回調提供者
         */
      @Bean
      public ToolCallbackProvider bookToolCallbackProvider(BookService bookService) {
          return MethodToolCallbackProvider.builder()
                  .toolObjects(bookService)
                  .build();
        }
      
      }
      

      聊天客戶端配置引入注冊工具

      /**
       * 聊天客戶端配置類
       */
      @Configuration
      publicclass ChatClientConfig {
      
      
      @Autowired
      private ToolCallbackProvider toolCallbackProvider;
      
      /**
         * 配置ChatClient,注冊系統指令和工具函數
         */
      @Bean
      public ChatClient chatClient(ChatClient.Builder builder) {
          return builder
                  .defaultSystem("你是一個圖書管理助手,可以幫助用戶查詢圖書信息。" +
                          "你可以根據書名模糊查詢、根據作者查詢和根據分類查詢圖書。" +
                          "回復時,請使用簡潔友好的語言,并將圖書信息整理為易讀的格式。")
                  // 注冊工具方法
                  .defaultTools(toolCallbackProvider)
                  .build();
        }
      }
      

      方法二:函數Bean


      單獨聲明一個類將查詢方法作為函數Bean導出

      /**
       * 圖書查詢服務,將查詢方法作為函數Bean導出
       */
      @Service
      publicclass BookQueryService {
      
      @Resource
      private BookService bookService;
      
      /**
         * 根據書名查詢圖書的函數Bean
         */
      @Bean
      public Function<String, List<Book>> findBooksByTitle() {
          return title -> bookService.findBooksByTitle(title);
        }
      
      /**
         * 根據作者查詢圖書的函數Bean
         */
      @Bean
      public Function<String, List<Book>> findBooksByAuthor() {
          return author -> bookService.findBooksByAuthor(author);
        }
      
      /**
         * 根據分類查詢圖書的函數Bean
         */
      @Bean
      public Function<String, List<Book>> findBooksByCategory() {
          return category -> bookService.findBooksByCategory(category);
        }
      
      }
      

      這種方式在定義AI聊天客戶端的時候需要顯式地聲明。

      /**
       * 聊天客戶端配置類
       */
      @Configuration
      publicclass ChatClientConfig {
      
      /**
         * 配置ChatClient,注冊系統指令和工具函數
         */
      @Bean
      public ChatClient chatClient(ChatClient.Builder builder) {
          return builder
                  .defaultSystem("你是一個圖書管理助手,可以幫助用戶查詢圖書信息。" +
                          "你可以根據書名模糊查詢、根據作者查詢和根據分類查詢圖書。" +
                          "回復時,請使用簡潔友好的語言,并將圖書信息整理為易讀的格式。")
                  // 注冊工具方法,這里使用方法名稱來引用Spring上下文中的函數Bean
                  .defaultTools(
                          "findBooksByTitle",
                          "findBooksByAuthor",
                          "findBooksByCategory"
                  )
                  .build();
        }
      }
      

      4、接口測試


      服務開發后,聲明一個控制器對外暴露進行調用。

      @Resource
      private ChatClient chatClient;
      
      
      /**
         * 處理聊天請求,使用AI和MCP工具進行響應
         *
         * @param request 聊天請求
         * @return 包含AI回復的響應
         */
      @PostMapping
      public ResponseEntity<ChatResponse> chat(@RequestBody ChatRequest request) {
          try {
            // 創建用戶消息
            String userMessage = request.getMessage();
      
            // 使用流式API調用聊天
            String content = chatClient.prompt()
                    .user(userMessage)
                    .call()
                    .content();
      
            return ResponseEntity.ok(new ChatResponse(content));
          } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.ok(new ChatResponse("處理請求時出錯: " + e.getMessage()));
          }
        }
      
      }
      

      5、測試


      通過測試工具進行接口請求

      注意事項

      1. 權限控制:別讓AI隨便刪數據!可以用 Spring Security 限制敏感操作。
      2. 錯誤處理:AI 不懂“系統異常”,記得把錯誤信息轉成人話(比如“系統忙,稍后再試”)。
      3. 提示詞優化:在 @Tool 的 description 里寫清楚功能,AI 才知道什么時候該調用它。

      總結

      改造 MCP 就像給你的 SpringBoot 項目裝了個“AI萬能插座”:

      • 省時:一次開發,所有 AI 都能用
      • 靈活:加新功能只需暴露接口,不用改 AI 端
      • 智能:讓用戶用自然語言操作你的系統

      趕緊試試,讓你的項目秒變 AI 神器吧!

      最后文章有啥不對,歡迎大佬在評論區指點!!!
      如果感覺對你有幫助就點贊推薦或者關注一下吧!!!

      img

      posted @ 2025-05-13 09:56  古渡藍按  閱讀(3096)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人免费AA片在线观看 | 人成午夜大片免费视频77777| 国色天香成人一区二区| 伊人蕉影院久亚洲高清| 亚洲中文字幕亚洲中文精| 日韩有码中文字幕国产| 欧美激情肉欲高潮视频| 深夜福利成人免费在线观看| 少妇人妻偷人免费观看| 国产女人被狂躁到高潮小说| 国产精品人妻| 国产久免费热视频在线观看| 欧美色欧美亚洲另类二区| 亚洲va中文字幕无码久久不卡| 亚洲成人精品综合在线| 长岛县| 亚洲乱码中文字幕综合| 十八禁午夜福利免费网站| 黑龙江省| 亚洲一区二区三区丝袜| 久久天天躁夜夜躁狠狠| 99久久激情国产精品| 国产一区二区三区精品片| 国产精品老年自拍视频| 亚洲午夜精品久久久久久抢| 好看的国产精品自拍视频| 免费国产高清在线精品一区| 中文字幕无码视频手机免费看 | 少妇宾馆粉嫩10p| 国精品午夜福利视频不卡| 一区二区不卡国产精品| 熟妇的奶头又大又长奶水视频| 最新日韩精品中文字幕| 人妻丝袜AV中文系列先锋影音| 国产精品无码免费播放| 91久久性奴调教国产免费| 日韩毛片在线视频x| 四虎成人精品国产永久免费| 亚洲最大国产成人综合网站| 无码人妻精品一区二区三区下载| 99久久婷婷国产综合精品青草漫画 |