Phát triển Trợ lý Tra cứu Vé Tàu Thông minh với 12306-MCP và AI Hỗ trợ Lập trình

Giới thiệu

Trong bối cảnh hệ thống bán vé tàu điện tử 12306 của Trung Quốc ngày càng phổ biến, nhu cầu tối ưu hóa quá trình mua vé, tự động hóa việc kiểm tra tình trạng chỗ trống và thu thập thông tin mã ga tàu trở nên cấp thiết. Bài viết này trình bày cách xây dựng một công cụ thông minh, dễ dàng truy cập các dịch vụ của 12306 thông qua kỹ thuật lập trình tác tử (agent programming) kết hợp với công nghệ Model-as-a-Service (MCP).

Trong quá trình phát triển, chúng tôi đã tận dụng sức mạnh của trợ lý lập trình AI để nhanh chóng định hình cấu trúc dự án, viết logic mã nguồn và hỗ trợ gỡ lỗi các vấn đề phổ biến trong tương tác giữa frontend và backend.

Trải nghiệm ban đầu với Trợ lý AI và MCP

Để bắt đầu, chúng ta cần cài đặt phiên bản mới nhất của tiện ích mở rộng trợ lý lập trình AI trong VSCode. Sau khi cài đặt và tin cậy nhà phát hành, giao diện sẽ hiển thị nút công cụ MCP. Nút này cho phép truy cập trực tiếp vào kho tài nguyên MCP chất lượng cao trên cộng đồng ModelScope.

Chúng tôi đã tìm và triển khai MCP có tên `12306-mcp`. Sau khi cài đặt, dịch vụ này sẽ xuất hiện trong danh sách các dịch vụ đã triển khai, cung cấp một loạt các chức năng phong phú liên quan đến hệ thống 12306.

Để kiểm tra, chúng tôi tương tác trực tiếp với tác tử thông minh qua hộp thoại, sử dụng một mô hình ngôn ngữ lớn (LLM) như Qwen. Ví dụ, khi chúng tôi hỏi: "Vui lòng giúp tôi tra cứu vé tàu từ Vũ Hán đến Quảng Châu trước 17:30 chiều nay", tác tử đã thực thi MCP thành công và hiển thị các chuyến tàu khả dụng trong khung thời gian yêu cầu.

Quy trình phát triển chuyên sâu

Mặc dù việc tra cứu trực tiếp trong VSCode rất tiện lợi, nhưng để mở rộng khả năng tiếp cận, mục tiêu tiếp theo là phát triển một giao diện web cho phép người dùng truy vấn thông tin vé tàu mọi lúc, mọi nơi thông qua trình duyệt. Để đạt được điều này, chúng tôi đã sử dụng tính năng phát triển tác tử (Agent Development) của trợ lý lập trình AI.

Dự án này là một minh chứng cho sự đột phá của AI trong việc hỗ trợ phát triển hệ thống kinh doanh phức tạp. Bằng cách tích hợp sâu rộng với hệ sinh thái dịch vụ 12306-MCP, chúng tôi đã xây dựng một hệ thống tra cứu vé tàu thế hệ mới, kết hợp khả năng quyết định thông minh, nhận thức môi trườngtự tối ưu hóa.

Tìm hiểu về 12306-MCP

Trước khi bắt tay vào mã hóa, việc tìm hiểu chi tiết về các tham số và đặc tính của `12306-mcp` là rất quan trọng. Thông tin này có thể được tìm thấy trên trang cộng đồng ModelScope, bao gồm cấu hình MCP và bộ thử nghiệm công cụ.

Mục tiêu và thiết kế hệ thống

Trở lại giao diện hộp thoại VSCode, chúng tôi yêu cầu trợ lý lập trình AI hỗ trợ viết mã. Các mục tiêu chính của dự án bao gồm:

  • Xây dựng một máy chủ HTTP cục bộ dựa trên Node.js để cung cấp trang frontend.
  • Tạo một máy chủ proxy để chuyển tiếp các yêu cầu đến giao diện 12306-MCP.
  • Triển khai máy khách JavaScript để gọi các API của MCP.
  • Giải quyết các vấn đề phổ biến như CORS, xung đột cổng và lỗi chuyển tiếp API.
  • Cung cấp quy trình kiểm thử hoàn chỉnh để đảm bảo chức năng.

Trong quá trình tương tác, chúng tôi có thể cấu hình trợ lý AI để sử dụng một mô hình ngôn ngữ lớn cục bộ (ví dụ: Qwen 2.5:7b thông qua Ollama) hoặc một mô hình từ xa.

Các bước triển khai môi trường cục bộ

Sau khi hoàn tất phát triển, trợ lý lập trình AI sẽ hướng dẫn từng bước để triển khai môi trường cục bộ:

1. Xây dựng dịch vụ nền tảng

  • Máy chủ HTTP chính (main-server.js):
    • Lắng nghe tại địa chỉ: http://localhost:3000/
    • Cung cấp trang HTML và các tài nguyên tĩnh.
  • Máy chủ proxy (api-proxy.js):
    • Lắng nghe tại địa chỉ: http://localhost:3001/
    • Giải quyết vấn đề CORS (cross-origin resource sharing) của trình duyệt.
    • Hỗ trợ chuyển tiếp các yêu cầu API sau:
      • GET /api/current-datetime → Lấy ngày giờ hiện tại
      • POST /api/city-station-codes → Tra cứu mã ga theo thành phố
      • POST /api/available-tickets → Tra cứu thông tin vé còn trống

2. Triển khai chức năng frontend

  • Máy khách JavaScript (ticket-client.js):
    • Đóng gói các lệnh gọi đến giao diện MCP.
    • Thực hiện việc lấy ngày hiện tại không đồng bộ.
    • Lấy mã ga dựa trên tên thành phố.
    • Tra cứu vé còn trống giữa các điểm khởi hành và điểm đến đã chỉ định.
    • Cơ chế xử lý lỗi (lỗi mạng, lỗi API, v.v.).
    • Xuất thông tin gỡ lỗi ra console.
  • Trang frontend (index.html):
    • Hiển thị trang thử nghiệm.
    • Tự động tải tập lệnh máy khách JS.
    • Hiển thị kiểu dáng cơ bản và khu vực kết quả.

3. Công cụ hỗ trợ phát triển

  • Tập lệnh kiểm tra môi trường (env-check.js):
    • Xác minh việc cài đặt Node.js.
    • Xuất thông tin môi trường.
  • Tập lệnh khởi động (start-app.js):
    • Khởi động song song máy chủ chính và máy chủ proxy.
    • Xuất nhật ký chạy rõ ràng.
  • Tệp cấu hình (app-config.js):
    • Lưu trữ các mục cấu hình như địa chỉ dịch vụ.

4. Quy trình yêu cầu API

  • Trình duyệt thông qua máy khách JS gửi yêu cầu đến proxy cục bộ.
  • Máy chủ proxy chuyển tiếp yêu cầu đến giao diện 12306-MCP mục tiêu.
  • Dịch vụ MCP trả về dữ liệu JSON.
  • Máy chủ proxy trả dữ liệu nguyên trạng về frontend.
  • Trang frontend hiển thị kết quả trên console hoặc trên trang.

Cấu trúc dự án

Trợ lý AI đã giúp phát triển một khung chương trình với cấu trúc sau:

train-ticket-assistant/
├── ticket-client.js        # Logic máy khách JS
├── index.html              # Trang frontend thử nghiệm
├── main-server.js          # Máy chủ chính
├── api-proxy.js            # Máy chủ proxy
├── env-check.js            # Kiểm tra môi trường
├── start-app.js            # Tập lệnh khởi động
├── app-config.js           # Tệp cấu hình
├── package.json            # Quản lý dependencies
├── README.md               # Mô tả dự án
└── error-404.html          # Trang lỗi

Thiết kế luồng gọi API

Bước Thành phần Hành động
1 Trang trình duyệt (index.html) Tải ticket-client.js
2 Máy khách JS (ticket-client.js) Gửi yêu cầu không đồng bộ đến máy chủ proxy cục bộ
3 Proxy cục bộ (api-proxy.js) Chuyển tiếp yêu cầu đến giao diện MCP đích
4 Dịch vụ MCP Trả về dữ liệu JSON
5 Máy chủ proxy Trả dữ liệu nguyên trạng về frontend
6 Trang frontend Hiển thị kết quả trên console hoặc trên trang

Giải pháp cho các vấn đề thường gặp

Dự án có cấu hình backend tương đối phức tạp, nhưng may mắn thay, chúng ta có thể sử dụng trợ lý lập trình AI để được hướng dẫn hoàn thành việc cấu hình dịch vụ, khởi động và gỡ lỗi.

1. Vấn đề CORS (Cross-Origin Resource Sharing)

Để giải quyết vấn đề CORS, máy chủ proxy cần thiết lập các tiêu đề phản hồi thích hợp:

function setCorsHeaders(response) {
    response.setHeader('Access-Control-Allow-Origin', '*');
    response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
    response.setHeader('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Authorization');
    response.setHeader('Access-Control-Max-Age', '86400'); // Cache preflight requests for 24 hours
}
// Trong logic xử lý yêu cầu:
// setCorsHeaders(response);
// if (request.method === 'OPTIONS') { response.writeHead(204); response.end(); return; }

2. Vấn đề xung đột cổng

Nếu cổng 3000 hoặc 3001 đã bị chiếm dụng:

  • Tìm tiến trình chiếm dụng cổng:
    # Trên Windows, ví dụ cổng 3000:
    netstat -ano | findstr :3000
    
    # Trên Linux/macOS, ví dụ cổng 3000:
    lsof -i :3000
    
  • Kết thúc tiến trình:
    # Trên Windows:
    taskkill /PID <ID_TIEN_TRINH> /F
    
    # Trên Linux/macOS:
    kill -9 <ID_TIEN_TRINH>
    

3. Vấn đề xử lý yêu cầu không đầy đủ

Để đọc toàn bộ phần thân yêu cầu (request body) một cách không đồng bộ:

async function readFullRequestBody(requestStream) {
    let payloadChunks = [];
    for await (const chunk of requestStream) {
        payloadChunks.push(chunk);
    }
    return Buffer.concat(payloadChunks).toString('utf8');
}

Triển khai dự án và hiển thị kết quả

Mở hai cửa sổ terminal riêng biệt để khởi động các dịch vụ:

node main-server.js   # Khởi động máy chủ chính
node api-proxy.js     # Khởi động máy chủ proxy

Sau đó, truy cập địa chỉ được cấu hình (ví dụ: http://localhost:6001/, tùy thuộc vào cấu hình của bạn) bằng trình duyệt. Giao diện chương trình đã phát triển sẽ hiển thị các chức năng chính của MCP được tích hợp, cùng với tính năng tra cứu thông minh kết nối với mô hình ngôn ngữ lớn ở backend. Các chức năng liên quan đã được kiểm tra như sau:

Cuối cùng là chức năng tra cứu thông minh, thể hiện logic thông minh của mô hình lớn, cho phép người dùng đặt câu hỏi bằng ngôn ngữ tự nhiên thay vì phải chọn từng tiêu chí một. Mô hình có thể hiểu chính xác nhu cầu và gọi chức năng 12306-MCP thành công, xuất ra thông tin các chuyến tàu từ Vũ Hán đến Quảng Châu, đạt được mục tiêu phát triển đã đề ra.

Kế hoạch mở rộng trong tương lai

1. Hệ thống giám sát vé thông minh

Với sự hỗ trợ của trợ lý lập trình AI, chúng tôi có thể triển khai một chiến lược giám sát đa chiều để theo dõi vé, giúp người dùng không còn lo lắng về việc tìm và mua vé.

2. Nâng cấp tính năng toàn diện

Tính năng Mô tả
Nâng cấp giao diện người dùng (UI) Thêm các ô nhập liệu để người dùng chọn điểm đi, điểm đến, ngày, v.v.
Hỗ trợ gửi biểu mẫu Người dùng có thể tự kích hoạt thao tác tra cứu.
Hiển thị kết quả vé Hiển thị thông tin chuyến tàu, số lượng vé còn trống dưới dạng bảng.
Tối ưu hóa thông báo lỗi Đưa ra thông báo thân thiện khi không có kết quả tra cứu.
Cơ chế lưu trữ cục bộ (cache) Giảm yêu cầu lặp lại, nâng cao hiệu suất.
Triển khai dạng Docker Xây dựng image container, thuận tiện cho việc di chuyển và triển khai.

Tổng kết trải nghiệm dự án

Dự án này là một ví dụ thực tế về việc sử dụng trợ lý lập trình AI, thể hiện rõ ràng lợi thế của công cụ này trong việc gọi MCP để hiện thực hóa các công cụ thông minh dựa trên mô hình ngôn ngữ lớn.

1. Khả năng sinh mã

Trợ lý lập trình AI đã thể hiện khả năng hiểu mã vượt xa mong đợi:

  • Ánh xạ giao diện chính xác: Tự động chuyển đổi tài liệu MCP thành mã có thể thực thi.
  • Chuyển đổi kiểu an toàn: Tự động tạo logic xác thực dữ liệu.

2. Khả năng nhận thức ngữ cảnh

Trợ lý lập trình AI thể hiện khả năng hiểu dự án vượt trội:

  • Liên kết đa tệp: Theo dõi chính xác luồng dữ liệu qua nhiều module.
  • Nhận dạng mẫu: Tự động phát hiện và thống nhất các mẫu gọi giao diện tương tự trong dự án.

3. Khả năng tối ưu hóa quyết định

Trong các kịch bản quan trọng, trợ lý AI đã đạt được những đột phá:

  • Lựa chọn chiến lược bộ nhớ đệm: Đề xuất giải pháp bộ nhớ đệm tối ưu dựa trên đặc tính của giao diện.
  • Đường dẫn phục hồi lỗi: Cung cấp các đề xuất cơ chế dự phòng theo cấp độ.
  • Dự đoán tắc nghẽn hiệu suất: Đánh dấu các khu vực có khả năng nhạy cảm về hiệu suất.

Dự án này không chỉ xác minh tính hữu dụng của AI trong các kịch bản kinh doanh phức tạp mà còn báo hiệu một cuộc cách mạng trong mô hình phát triển phần mềm. Thông qua thực hành, chúng ta có thể thấy giá trị vượt trội của AI trong việc nâng cao hiệu quả kỹ thuật, chất lượng hệ thốngtốc độ đổi mới.

Thẻ: Node.js AI Development Large Language Models qwen Model-as-a-Service

Đăng vào ngày 23 tháng 7 lúc 18:06