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

Hành Trình Từ Zero Đến AI Agent Với Java

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

• 5 phút đọc

Giới thiệu

Trong thế giới công nghệ hiện nay, trí tuệ nhân tạo (AI) đang trở thành một phần không thể thiếu trong nhiều ứng dụng. Mặc dù ban đầu tôi từng nghĩ rằng "AI chỉ là một trào lưu", nhưng đến giữa năm 2024, tôi đã tự mình xây dựng các agent AI thực sự hoạt động bằng Java. Bài viết này sẽ chia sẻ hành trình của tôi từ những ngày đầu bỡ ngỡ cho đến khi trở thành một lập trình viên Java có khả năng phát triển các ứng dụng thông minh.

Tại sao là Java? (Thực sự đấy)

Khi bắt đầu tìm hiểu về AI, nhiều người khuyên tôi nên sử dụng Python vì "đó là nơi có nhiều thư viện". Họ nói rằng "Java quá dài dòng cho AI". Tuy nhiên, tôi là một lập trình viên Java dày dạn kinh nghiệm và tôi biết cách xây dựng ứng dụng bằng Java. Thực tế, nhiều demo AI mà tôi xem đều rất ấn tượng nhưng cảm giác khá mong manh. Tôi muốn xây dựng điều gì đó bền vững từ những dòng mã Java quen thuộc.

Khám Phá Giao Thức Model Context Protocol

Vào cuối năm 2024, Anthropic đã công bố Model Context Protocol (MCP). Hãy tưởng tượng đây là một cách tiêu chuẩn hóa để các mô hình AI giao tiếp với các công cụ và nguồn dữ liệu bên ngoài. Thay vì mã hóa cứng logic như "khi người dùng nói X, gọi API Y", MCP cho phép kết nối các mô hình AI với các công cụ một cách linh hoạt. AI có thể phát hiện các công cụ có sẵn và tìm ra cách sử dụng chúng dựa trên yêu cầu bằng ngôn ngữ tự nhiên.

Điều khiến tôi ngạc nhiên chính là việc với MCP, tôi có thể nói "lưu dự báo thời tiết cho NYC vào một tệp" và AI sẽ:

  1. Hiểu rằng nó cần dữ liệu thời tiết.
  2. Tìm công cụ thời tiết.
  3. Nhận dự báo cho NYC.
  4. Tìm công cụ ghi tệp.
  5. Lưu dữ liệu.

Không cần logic mã hóa cứng. Không cần chuỗi if-else. Chỉ cần hướng dẫn bằng ngôn ngữ tự nhiên.

Khoảnh Khắc "Hello World" Đầu Tiên

Sau khi tìm thấy SDK Java chính thức cho các máy chủ và khách hàng MCP và xem qua tài liệu, tôi đã viết ra đoạn mã sau:

java Copy
import java.time.Duration;
import java.util.Map;

import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.McpSyncClient;
import io.modelcontextprotocol.client.transport.ServerParameters;
import io.modelcontextprotocol.client.transport.StdioClientTransport;
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;

public class SimpleClientMCP {
    public static void main(String[] args) {
        int requestTimeoutSeconds = 30;
        String basePath = System.getProperty("user.home") + "/Documents";

        StdioClientTransport stdioTransport = new StdioClientTransport(
            ServerParameters.builder("cmd.exe")
                .args("/c", "npx @modelcontextprotocol/server-filesystem " + basePath)
                .build());

        McpSyncClient client = McpClient.sync(stdioTransport)
            .requestTimeout(Duration.ofSeconds(requestTimeoutSeconds))
            .build();

        client.initialize();

        CallToolRequest request = new CallToolRequest("write_file", Map.of(
            "path", basePath + "\\test.txt",
            "content", "Hello from Java MCP client!"
        ));

        CallToolResult result = client.callTool(request);
        System.out.println(result.toString());
    }
}

Khi tôi chạy đoạn mã này và thấy "Hello from Java MCP client!" xuất hiện trong một tệp được tạo ra bởi mã Java của tôi thông qua giao thức AI, tôi cảm thấy thật tuyệt vời. Nhưng tôi nhận thấy rằng mọi thứ không tự động xảy ra như ma thuật.

Những Gì Tôi Đã Học Ngay Lập Tức

Hãy thành thật về đoạn mã mẫu này:

Khám phá công cụ là thủ công. Tôi phải mã hóa cứng các máy chủ để kết nối và ánh xạ các yêu cầu của người dùng tới các công cụ cụ thể. Nó hoạt động, nhưng không thông minh.

Không có hiểu biết ngôn ngữ tự nhiên. Phiên bản đầu tiên của tôi thực chất chỉ là "nếu người dùng nói 'lưu tệp' thì gọi công cụ write_file". Rất dễ bị hỏng và không thực sự có tính năng AI.

Để thực sự tạo ra điều kỳ diệu, tôi cần viết mã để cho LLM hiểu rằng nó phải thực hiện một công cụ và gọi nó.

Hành Trình Này Đưa Tôi Đến Đâu

Ví dụ đơn giản về việc ghi tệp chỉ là khởi đầu. Trong vài tháng tiếp theo, tôi đã xây dựng:

  • Một hệ thống có thể kết nối với nhiều máy chủ MCP cùng một lúc.
  • Lựa chọn công cụ bằng ngôn ngữ tự nhiên sử dụng LLMs.
  • Một giao diện trò chuyện nơi người dùng có thể yêu cầu "các thao tác phức tạp" bằng tiếng Anh đơn giản.
  • Tích hợp với nhiều nhà cung cấp AI (Groq, Gemini, OpenAI).

Nhưng điều quan trọng nhất, tôi đã học được rằng xây dựng các agent AI không phải là về phần AI hoàn hảo. Nó phụ thuộc vào việc xây dựng các hệ thống với chức năng mới mà trước đây chúng ta không thể đạt được.

Điều Gì Đang Đến Tiếp Theo

Trong các bài viết tiếp theo, tôi sẽ chia sẻ:

  • Cách MCP thực sự hoạt động.
  • Xây dựng khách hàng MCP đa máy chủ đầu tiên của bạn.
  • Thêm lựa chọn công cụ bằng ngôn ngữ tự nhiên với LLMs.
  • Những cơn ác mộng khi gỡ lỗi mà tôi đã trải qua (và cách tránh chúng).
  • Các mô hình kiến trúc để cho phép LLMs chọn công cụ.

Đây sẽ không phải là một chuỗi các demo hoàn hảo. Tôi sẽ chia sẻ những gì tôi đã học được khi phát triển các ứng dụng agent.

Tại Sao Chia Sẻ Điều Này?

Tôi viết chuỗi bài viết này vì khi tôi bắt đầu, không có nhiều tài nguyên về cách xây dựng các ứng dụng AI sản xuất bằng Java. Nếu bạn là một lập trình viên Java tò mò về AI, hoặc một người đam mê AI muốn xây dựng điều gì đó mà không sử dụng bất kỳ framework AI nào, có lẽ những bài viết này sẽ giúp bạn tiết kiệm một phần thời gian mà tôi đã bỏ ra để tìm hiểu những điều khó khăn.

Trong bài viết tiếp theo, tôi sẽ đi sâu vào Model Context Protocol. Nó là gì, tại sao nó quan trọng, và cách mà nó khác biệt so với mọi thứ bạn đã từng sử dụng.


Bạn đã từng thử xây dựng ứng dụng AI bằng Java chưa? Những thách thức nào đã khiến bạn gặp khó khăn? Tôi rất muốn nghe về những trải nghiệm của bạn trong phần bình luận.

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