Java với LangChain4j: Xây dựng ứng dụng AI cục bộ trong vài phút

Giả sử bạn đang phát triển một hệ thống hỗ trợ nội bộ cho công ty — nơi nhân viên có thể hỏi bằng tiếng Việt như "Cách khôi phục mật khẩu tài khoản?" và nhận ngay câu trả lời chính xác được trích xuất từ tài liệu sản phẩm, quy trình IT hoặc cơ sở tri thức nội bộ. Không cần GPU đắt đỏ, không cần dịch vụ đám mây trả phí, cũng chẳng cần chuyển sang Python: bạn hoàn toàn có thể thực hiện điều đó — bằng Java thuần.

Chìa khóa nằm ở LangChain4j: thư viện mã nguồn mở, không phụ thuộc framework, giúp nhà phát triển Java xây dựng các ứng dụng AI theo kiểu "lắp ráp mô-đun", từ chat đơn giản đến hệ thống RAG (Retrieval-Augmented Generation) đầy đủ chức năng.

Khởi động nhanh với Ollama và mô hình nhẹ

Trước tiên, cài đặt Ollama — công cụ chạy mô hình ngôn ngữ cục bộ trên máy cá nhân:

  • macOS/Linux: curl -fsSL https://ollama.com/install.sh | sh
  • Windows: Tải file cài đặt từ trang chủ, sau đó chạy với tùy chọn đường dẫn tuỳ chỉnh để tránh chiếm dung lượng ổ C:
    OllamaSetup.exe /DIR=D:\ollama

Sau khi cài xong, kéo mô hình nhỏ phù hợp với phần cứng (ví dụ: qwen2:0.5b hoặc phi3:mini):

ollama pull qwen2:0.5b

Dịch vụ sẽ tự khởi động và lắng nghe tại http://localhost:11434. Bạn có thể kiểm tra bằng lệnh:

ollama list

Tạo dự án Java và tích hợp LangChain4j

Dùng Maven để thêm hai dependency thiết yếu:

<dependency>
  <groupId>dev.langchain4j</groupId>
  <artifactId>langchain4j</artifactId>
  <version>1.12.0</version>
</dependency>
<dependency>
  <groupId>dev.langchain4j</groupId>
  <artifactId>langchain4j-ollama</artifactId>
  <version>1.12.0</version>
</dependency>

Lưu ý: Luôn kiểm tra phiên bản mới nhất tại trang phát hành chính thức.

Viết mã — chỉ 8 dòng để gọi AI cục bộ

Dưới đây là lớp LocalAiStarter, minh hoạ cách khởi tạo mô hình và gửi truy vấn đơn giản:

import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.ollama.OllamaChatModel;

public class LocalAiStarter {
    public static void main(String[] args) {
        ChatModel aiEngine = OllamaChatModel.builder()
                .baseUrl("http://localhost:11434")
                .modelName("qwen2:0.5b")
                .temperature(0.3)
                .build();

        String response = aiEngine.generate("Hãy giới thiệu ngắn gọn về vai trò của bạn trong hệ thống hỗ trợ kỹ thuật.");
        System.out.println("💬 Trả lời: " + response);
    }
}

Kết quả đầu ra có thể là:

💬 Trả lời: Tôi là mô hình ngôn ngữ hỗ trợ kỹ thuật nội bộ, chuyên phân tích câu hỏi người dùng và trích xuất thông tin liên quan từ tài liệu đã được nhúng.

Tại sao không dùng OkHttp trực tiếp?

Đúng vậy — bạn hoàn toàn có thể viết HTTP request thủ công. Nhưng LangChain4j không chỉ là "wrapper HTTP". Nó cung cấp kiến trúc thành phần rõ ràng:

  • EmbeddingModel: Chuyển văn bản thành vector
  • EmbeddingStore: Lưu và tìm kiếm vector (hỗ trợ Redis, Elasticsearch, PGVector...)
  • Retriever: Kết nối giữa truy vấn và tài liệu liên quan
  • PromptTemplate: Quản lý mẫu prompt linh hoạt, hỗ trợ tham số hoá
  • OutputParser: Chuyển kết quả dạng text thành đối tượng Java an toàn (ví dụ: AnswerResult.class)

Mỗi thành phần đều có thể thay thế, mở rộng hoặc test độc lập — điều mà một đoạn mã gọi API thuần không thể đảm bảo.

Mở rộng sang RAG: Kết nối với dữ liệu doanh nghiệp

Để AI trả lời dựa trên tài liệu nội bộ, bạn chỉ cần thêm vài bước:

  1. Phân mảnh tài liệu (PDF/DOCX/MD) thành các đoạn văn bản nhỏ
  2. Dùng EmbeddingModel để tạo vector cho từng đoạn
  3. Lưu vào EmbeddingStore (ví dụ: Elasticsearch với plugin vector)
  4. Xây dựng chuỗi xử lý: UserQuery → Embedding → Retrieve → AugmentPrompt → ChatModel → Parse

LangChain4j cung cấp sẵn các builder như RetrievalAugmentationChain.builder() để kết nối các thành phần này một cách khai báo — không cần viết logic điều phối thủ công.

Thẻ: langchain4j ollama java-ai RAG embedding

Đăng vào ngày 27 tháng 5 lúc 22:32