Chào bạn! Trong thế giới xoay quanh dữ liệu ngày nay, khả năng "moi" ra những thông tin giá trị từ kho dữ liệu khổng lồ là chìa khóa vàng dẫn đến thành công của mọi doanh nghiệp. <img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dy159et6g5jzpujb9ynj.png' alt='Mở khóa dữ liệu bằng AI'> Nhưng khoan đã, để làm được điều đó, bạn thường cần một kỹ năng "thượng thừa" là viết các câu lệnh SQL phức tạp. Đây chính là nút thắt cổ chai đó bạn! Nhiều anh chị em trong giới kinh doanh, dù siêu giỏi trong lĩnh vực của mình, lại không rành về kỹ thuật để "nói chuyện" trực tiếp với cơ sở dữ liệu. Và đây rồi, đây chính là lúc các Mô hình Ngôn ngữ Lớn (LLMs) như "gia đình" Ollama, đặc biệt là khi kết hợp với những "ngôi sao" như Granite, tỏa sáng rực rỡ! Chúng đang thay đổi hoàn toàn cách những người không chuyên về kỹ thuật có thể truy vấn và hiểu dữ liệu của mình. Bạn thử hình dung xem, bạn chỉ cần hỏi bằng ngôn ngữ tự nhiên thôi – kiểu như: “Cho tôi xem doanh số quý trước với!” hay “Những nhân viên nào làm ở phòng marketing vậy?” – và “phù phép” một cái, nó biến thành câu lệnh SQL chính xác, mà bạn chẳng cần gõ lấy một dòng code nào cả! Nghe có thần kỳ không? LLMs chính là cây cầu nối vĩ đại này đó! Chúng đóng vai trò như những "phiên dịch viên" siêu thông minh, biến ngôn ngữ đời thường của con người thành các truy vấn cơ sở dữ liệu có thể thực thi được. Điều này không chỉ giúp "dân chủ hóa" việc tiếp cận dữ liệu mà còn trao quyền cho các nhà kinh doanh tự mình tìm kiếm thông tin cần thiết, giúp đưa ra quyết định nhanh hơn và tạo ra một môi trường làm việc linh hoạt, am hiểu dữ liệu hơn bao giờ hết. Để dễ hình dung và minh họa, chúng ta sẽ cùng "mổ xẻ" ý tưởng này với hai cơ sở dữ liệu SQLite nhé! Một cơ sở dữ liệu sẽ lưu trữ thông tin cá nhân của mỗi người, như tên, họ và ngày sinh. Cơ sở dữ liệu thứ hai thì chứa chi tiết cụ thể về công việc của nhân viên, bao gồm lương, chức danh và phòng ban. Hai "anh em" cơ sở dữ liệu này được "ghép đôi" với nhau bằng một mã định danh duy nhất (unique ID) chung, giúp chúng ta dễ dàng kết hợp thông tin từ cả hai nguồn chỉ với một truy vấn đơn giản. Đầu tiên là cơ sở dữ liệu "personal_data" (dữ liệu cá nhân), nó chứa các thông tin rất đơn giản thôi: <img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzp5snjmxxgqmjk2uz00.png' alt='Cấu trúc bảng personal_data'> Cơ sở dữ liệu thứ hai thì là "employment_data" (dữ liệu công việc), chứa thông tin về việc làm của nhân viên. Hai bảng này dùng chung một khóa chính duy nhất đấy nhé: <img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drt2b61nsh1ghdbs9h4l.png' alt='Cấu trúc bảng employment_data'> Đầu tiên, hãy chuẩn bị "môi trường" và tất cả các gói thư viện cần thiết đã nhé! ``` python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install requests ``` Tiếp theo, chúng ta sẽ bắt tay vào "xây dựng" hai cơ sở dữ liệu của mình: một cái cho thông tin cá nhân của nhân viên (`personal_data.db`) và một cái cho thông tin công việc của họ (`employment_data.db`). Đoạn code Python dưới đây (`create-db.py`) sẽ giúp chúng ta tạo ra các bảng và điền dữ liệu mẫu vào đó một cách tự động. Giờ thì chúng ta hãy thử "hỏi thăm" hai cơ sở dữ liệu này xem sao nhé! Đoạn code `display-db.py` sẽ giúp bạn kết nối, liệt kê các bảng và hiển thị tất cả các hàng dữ liệu từ mỗi bảng. Và đây là kết quả khi chúng ta chạy file `display-db.py` với `personal_data.db` làm ví dụ: ``` python display-db.py Please enter the name of the SQLite database file (e.g., personal_data.db): personal_data.db --- Connected to database: personal_data.db --- --- Tables found in the database --- - employees_personal --- Data from table: 'employees_personal' --- Columns: firstName, lastName, dateOfBirth, uniqueID ('Alice', 'Smith', '1990-05-15', 'EMP001') ('Bob', 'Johnson', '1985-11-22', 'EMP002') ('Charlie', 'Brown', '1992-03-01', 'EMP003') --------------------------------- --- Connection to personal_data.db closed. --- ``` Có vẻ mọi thứ hoạt động ngon lành rồi đó! Chúng ta cùng tiến lên nào! Trong phần này, chúng ta sẽ xây dựng một truy vấn mẫu: bạn chỉ cần nhập vào mã số ID duy nhất của nhân viên (uniqueID), và chương trình sẽ hiển thị thông tin công việc của họ, kèm theo cả câu lệnh SQL mà nó đã tự tạo ra! Để làm được điều này, chúng ta sẽ dùng "trợ thủ đắc lực" IBM Granite, mà trong ví dụ này nó sẽ chạy "ngon ơ" ngay trên máy của bạn thông qua Ollama. Đoạn code "thần thánh" giúp tự động hóa nhiệm vụ này đây rồi! (`text2sql.py`) Nó bao gồm các hàm chính: * `get_employee_details(unique_id)`: Hàm này sẽ kết nối với cả hai cơ sở dữ liệu `personal_data.db` và `employment_data.db`, thực hiện một thao tác JOIN kinh điển trong SQL để tìm kiếm thông tin nhân viên dựa trên `unique_id` bạn nhập vào. Điều đặc biệt là, nó sẽ *hiển thị chính xác câu lệnh SQL mà nó đang thực thi*, giúp bạn hiểu rõ "bên trong" đang diễn ra những gì. * `send_to_ollama(prompt)`: "Người đưa thư" này sẽ gửi câu hỏi của bạn (prompt) đến Ollama API cục bộ và nhận về phản hồi từ mô hình ngôn ngữ lớn. * `run_chat_app()`: Đây là "trái tim" của ứng dụng chatbot. Nó sẽ liên tục hỏi bạn nhập ID nhân viên, sau đó dùng các hàm trên để tìm kiếm thông tin và nhờ LLM "phiên dịch" kết quả thành một câu trả lời thân thiện, dễ hiểu. <img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/ollama_granite_concept.png' alt='Mô hình Ollama và Granite'> Giờ thì chạy thử code và xem kết quả nhé! Đầu tiên là khi bạn hỏi về một ID có trong hệ thống: ``` python text2sql.py Welcome to the Employee Lookup Chatbot! (Using Ollama with granite3.3:latest) Type 'exit' or 'quit' to end the session. Enter employee Unique ID (e.g., EMP001): EMP001 --- Executing SQL Query --- SELECT p.firstName, p.lastName, e.jobTitle FROM employees_personal AS p JOIN employment_db.employees_employment AS e ON p.uniqueID = e.uniqueID WHERE p.uniqueID = 'EMP001'; -- Displaying the query with the ID for clarity --------------------------- Chatbot: Bạn đã tìm thấy Alice Smith, người có ID duy nhất là EMP001 và làm việc với chức danh Kỹ sư phần mềm. Bạn có cần biết thêm thông tin gì không? ``` Và ta-da! Thành quả đây rồi! ✌️ Bạn thấy đấy, chương trình đã tự động tạo ra câu lệnh SQL phức tạp (`JOIN` giữa hai bảng) để lấy thông tin, sau đó dùng LLM để biến kết quả tra cứu thành một câu trả lời cực kỳ "người" và dễ chịu. Thật tiện lợi phải không nào? Tuy các bước chúng ta vừa thực hiện khá đơn giản, nhưng chúng đã phô diễn sức mạnh "khủng khiếp" của việc ứng dụng LLMs để xây dựng các ứng dụng mạnh mẽ. Những ứng dụng này giúp đơn giản hóa việc sử dụng thông tin có cấu trúc trong các cơ sở dữ liệu lớn của doanh nghiệp, đưa dữ liệu đến tận tay người dùng kinh doanh. Dù ứng dụng này chỉ là một ví dụ "nhỏ xíu", nhưng nó đã chứng minh một cách hiệu quả giá trị to lớn mà nó mang lại cho người dùng kinh doanh. Họ có thể tự chủ hơn trong các tác vụ hàng ngày mà không cần phải "vắt óc" suy nghĩ về cách sử dụng cơ sở dữ liệu hay các hệ thống phức tạp nữa. Một kỷ nguyên mới cho việc truy cập dữ liệu đã mở ra rồi đó!