0
0
Lập trình
Admin Team
Admin Teamtechmely

Khám Phá Giao Thức Streamable HTTP trong Spring AI

Đăng vào 7 tháng trước

• 6 phút đọc

Giới thiệu

Trong phần 2 của chuỗi bài viết này, chúng ta đã triển khai máy chủ Model Context Protocol (MCP) với các công cụ đã định nghĩa và sử dụng Model Context Protocol Inspector cũng như plugin Amazon Q Developer trong Visual Studio Code như là các khách hàng MCP để liệt kê các công cụ có sẵn và giao tiếp với ứng dụng của chúng ta bằng ngôn ngữ tự nhiên, đồng thời tìm kiếm các hội nghị theo chủ đề và khoảng thời gian bắt đầu. Chúng ta đã tập trung vào giao thức truyền tải STDIO.

Trong phần 3 của loạt bài, chúng ta đã tập trung vào giao thức truyền tải SSE.

Khi tôi hoàn thành bài viết đó, việc sử dụng giao thức truyền tải SSE trong MCP đã trở nên lỗi thời. Chúng ta chuyển sang sử dụng giao thức truyền tải HTTP Streamable. May mắn thay, Spring AI đã cung cấp hỗ trợ cho các máy chủ MCP Streamable-HTTP hiện có trong phiên bản Spring AI 1.1.0-SNAPSHOT mà chúng ta sẽ khám phá trong phần này của chuỗi bài viết.

Ứng dụng mẫu

Bạn có thể tìm thấy ứng dụng mẫu spring-mcp-conference-search trên tài khoản GitHub của tôi. Đây là cùng một ứng dụng mà chúng ta đã triển khai trong phần 2. Có sự khác biệt về các phụ thuộc và cấu hình cũng như cách chúng ta chạy ứng dụng này. Hãy cùng khám phá chúng.

Vì hỗ trợ giao thức truyền tải HTTP Streamable MCP là một phần của bản phát hành Spring AI 1.1, phiên bản xem trước hiện tại có sẵn trong 1.1-SNAPSHOT. Các bản phát hành Snapshot có sẵn trên cổng thông tin Spring Snapshots. Đó là lý do tại sao chúng ta cần thực hiện một số thay đổi trong pom.xml. Đầu tiên, hãy khai báo các kho lưu trữ snapshot:

xml Copy
<repositories>
   <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>

Khi Spring AI 1.1 được phát hành, chúng ta có thể xóa các khai báo kho lưu trữ snapshot này.

Ngoài ra, chúng ta cần thiết lập phiên bản Spring AI thành 1.1.0-SNAPSHOT trong pom.xml.

xml Copy
<properties>
   <java.version>21</java.version>
   <spring-ai.version>1.1.0-SNAPSHOT</spring-ai.version>
</properties>

Trong application.properties, vui lòng chỉ kích hoạt các thuộc tính liên quan đến cấu hình HTTP Streamable MCP. Phiên bản hoàn chỉnh được cung cấp thêm dưới dạng application-streamable-http.properties. Dưới đây là danh sách các thuộc tính mà chúng ta cần định nghĩa theo tài liệu hiện hành:

properties Copy
# Cấu hình STREAMABLE MCP

spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.name=spring-mcp-conference-search-streamable-http
spring.ai.mcp.client.version=0.0.1
spring.ai.mcp.client.request-timeout=59s
spring.ai.mcp.client.type=SYNC
spring.ai.mcp.server.protocol=STREAMABLE
spring.ai.mcp.client.toolcallback.enabled=true

server.port=8081

logging.level.root=INFO
logging.level.org.springframework.ai.mcp=DEBUG

Hãy lưu ý rằng việc triển khai và cấu hình có thể thay đổi cho đến khi phiên bản Spring Gen AI 1.1 ổn định được phát hành.

Chúng ta kích hoạt khách hàng MCP, thiết lập giao thức máy chủ thành STREAMABLE và loại yêu cầu khách hàng thành SYNC và kích hoạt callback công cụ. Khi chạy ứng dụng của chúng ta dưới dạng máy chủ, chúng ta kích hoạt logging và thiết lập số cổng mà chúng ta chạy ứng dụng là 8081 (bạn có thể sử dụng cổng mặc định 8080 nếu muốn). Theo mặc định, máy chủ MCP Spring Boot của chúng ta sẽ phơi bày /mcp như là điểm cuối SSE (như phần bổ sung URL) để sử dụng cho kết nối từ khách hàng MCP, xem các thuộc tính Streamable Transport, nhưng bạn có thể ghi đè nó như đã mô tả trong bài viết đã đề cập.

Giao thức truyền tải HTTP Streamable MCP cũng hỗ trợ loại khách hàng ASYNC song song với loại SYNC. Để kích hoạt phiên bản bất đồng bộ, chúng ta sẽ cần thiết lập spring.ai.mcp.client.type=ASYNC và sử dụng phụ thuộc spring-ai-starter-mcp-server-webflux trong pom.xml thay vì spring-ai-starter-mcp-server-webmvc đang được sử dụng:

xml Copy
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>

Chúng ta đã hoàn tất việc triển khai (không cần thay đổi nào thêm!), vì vậy bây giờ hãy xây dựng ứng dụng với mvn clean package và chạy nó cục bộ với java -jar target/spring-mcp-conference-search-0.0.1-SNAPSHOT.jar.

Hãy sử dụng trước MCP Inspector để kiểm tra công cụ của chúng ta. Tôi đã đề cập ở phần 2 về cách cài đặt và chạy inspector. Sự khác biệt duy nhất là chúng ta chọn loại Giao thức Truyền Tải Streamable HTTP và sử dụng http://localhost:8081/mcp làm URL. Vui lòng sử dụng cùng số cổng đã cấu hình trong thuộc tính server.port trong application.properties.

Sau đó, chúng ta có thể kết nối đến máy chủ và đi đến phần Công cụ, liệt kê và sử dụng chúng. Điều này hoạt động giống như đã mô tả trong các phần 2 và 3.

Bây giờ hãy sử dụng Amazon Q Developer và khách hàng MCP của nó để giao tiếp với máy chủ MCP của chúng ta bằng ngôn ngữ tự nhiên. Một lần nữa, tôi đã đề cập ở phần 2 về cách thực hiện điều này. Sự khác biệt duy nhất là cách cấu hình máy chủ MCP. Chúng ta đặt tên cho máy chủ MCP, chọn http làm Giao thức và sử dụng http://localhost:8081/mcp làm URL. Vui lòng sử dụng cùng số cổng đã cấu hình trong thuộc tính server.port trong application.properties.

Ngoài ra, bạn có thể điều chỉnh và sao chép nội dung của tệp mcp-streamable-http.json mà trong trường hợp của tôi trông như sau:

json Copy
{
  "mcpServers": {
    "conference-search-tool-streamable-http": {
       "url": "http://localhost:8081/mcp",
        "disabled": false,
        "timeout": 60000
     }
  }
}

Chúng ta có thể nhấn nút "Lưu" khi đã cấu hình mọi thứ và sau đó chúng ta có thể thấy 3 công cụ được phơi bày:

Tôi đã đề cập đến các phần 2 và 3 của chuỗi bài viết này, nơi chúng ta đã đưa ra các ví dụ về cách giao tiếp với máy chủ MCP của chúng ta bằng ngôn ngữ tự nhiên. Vì đây là cùng một ứng dụng, chúng ta có thể hỏi cùng một câu hỏi.

Tất nhiên, tôi đã triển khai ứng dụng cục bộ, trong các kịch bản thực tế, tôi sẽ cần lưu trữ ứng dụng theo cách mà nó có thể được truy cập công khai. Đây là một ví dụ về Hướng dẫn Triển Khai Máy Chủ Model Context Protocol trên AWS. Ví dụ này chủ yếu đề cập đến việc triển khai máy chủ MCP trên dịch vụ AWS Elastic Container Service (ECS), nhưng bạn có thể làm điều này trên Amazon Elastic Kubernetes Service (EKS), Amazon EC2 hoặc thậm chí trên AWS Lambda. Trong trường hợp này, đừng quên thay thế URL http://localhost:8081/mcp bằng URL phù hợp.

Bảo mật ứng dụng mẫu của chúng ta

Đó là ngoài phạm vi của bài viết này, nhưng bạn cần nghĩ về việc Bảo mật các máy chủ MCP của Spring AI. Chúng tôi sẽ cung cấp một danh sách tài nguyên mô tả cách đạt được mục tiêu này (với framework Spring Security).

  • Bảo mật các máy chủ MCP của Spring AI với OAuth2
  • Ủy quyền MCP trong thực tiễn với Spring AI và OAuth2
  • Bảo mật các máy chủ MCP của Spring AI với OAuth2

Kết luận

Trong phần này của chuỗi bài viết, chúng ta đã chạy máy chủ Model Context Protocol (MCP) với các công cụ đã định nghĩa và sử dụng Model Context Protocol Inspector và plugin Amazon Q Developer trong Visual Studio Code như là các khách hàng MCP để liệt kê các công cụ có sẵn và giao tiếp với ứng dụng của chúng ta bằng ngôn ngữ tự nhiên, đồng thời tìm kiếm các hội nghị theo chủ đề và khoảng thời gian bắt đầu. Chúng ta đã tập trung vào giao thức truyền tải HTTP Streamable, hiện đang là một phần của phiên bản 1.1-SNAPSHOT, chưa ổn định.

Chuỗi bài viết này sẽ tiếp tục. Trong phần tiếp theo, chúng ta sẽ khám phá thêm các tính năng khác của Spring AI Amazon Bedrock Converse API như Đa phương thức và Tạo nội dung tăng cường truy hồi.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào