Chuyển đến nội dung chính

Flowise AI: Hướng dẫn kèm dự án minh họa

Tìm hiểu cách xây dựng một tác nhân AI trả lời câu hỏi dựa trên tập dữ liệu CSV bằng Flowise, một công cụ low-code dựa trên luồng công việc.
· 12 phút đọc

Khám phá cùng AI

Trong bài viết này, tôi sẽ giải thích từng bước cách sử dụng Flowise để xây dựng một tác nhân AI có thể trả lời câu hỏi dựa trên tập dữ liệu CSV.

Flowise là công cụ hữu ích cho những ai muốn xây dựng tác nhân AI mà không phải vướng vào mã nguồn phức tạp. Flowise theo cách tiếp cận low-code, cho phép chúng ta tập trung nhiều hơn vào nhiệm vụ cần làm thay vì chi tiết kỹ thuật.

Gần đây, tôi thấy sự bùng nổ của các công cụ dùng để xây dựng tác nhân AI. Những công cụ này ngày càng dễ tiếp cận và thân thiện với người dùng, cho phép mọi người tạo hệ thống thông minh mà không cần kỹ năng kỹ thuật sâu rộng. Nếu bạn muốn khám phá thêm về các công cụ này, hãy xem thêm các hướng dẫn sau:

Flowise là gì?

Flowise là công cụ được thiết kế để giúp chúng ta tạo tác nhân AI thông qua giao diện kéo‑thả đơn giản. Nó hoạt động bằng cách cho phép kết nối các khối (blocks) đại diện cho những chức năng khác nhau để xây dựng một luồng công việc tùy chỉnh. Mỗi khối có thể được cấu hình để thực hiện một hành động cụ thể.

Chẳng hạn, có các khối LLM dùng để gửi thông điệp đến mô hình ngôn ngữ lớn. Cũng có các khối hàm cho phép chúng ta thực thi các hàm JavaScript tùy chỉnh, giúp thao tác linh hoạt hơn nữa.

Bằng cách liên kết các khối này, thông tin sẽ chảy từ khối này sang khối khác, xử lý và chuyển đổi dữ liệu theo từng bước. Cách tiếp cận theo mô‑đun này giúp việc xây dựng tác nhân AI trở nên dễ dàng mà không cần kiến thức lập trình sâu, vì chúng ta có thể tập trung vào thiết kế luồng và cấu hình các hành động cần thiết.

Xây dựng tác nhân AI phân tích dữ liệu với Flowise

Hãy cùng phân tích quy trình xây dựng một tác nhân AI phân tích dữ liệu bằng Flowise. Hướng dẫn này sẽ bao gồm đăng ký Flowise, xây dựng luồng công việc tùy chỉnh và sử dụng các khối khác nhau để tạo một tác nhân tương tác có thể phân tích tập dữ liệu.

Bước 1: Tạo tài khoản trên Flowise

Bắt đầu bằng cách truy cập trang đăng ký Flowise và tạo tài khoản. Điền các thông tin cần thiết và làm theo hướng dẫn gửi đến email của bạn để xác minh và kích hoạt tài khoản.

Bước 2: Thiết lập cơ sở dữ liệu

Khi tài khoản Flowise đã sẵn sàng, đã đến lúc thiết lập cơ sở dữ liệu mà chúng ta sẽ sử dụng. Chúng ta cần một cơ sở dữ liệu để lưu trữ dữ liệu muốn phân tích.

Chúng ta sẽ dùng SingleStore, một nhà cung cấp cơ sở dữ liệu SQL phổ biến và thân thiện với người dùng, để quản lý dữ liệu. Thực hiện các bước sau:

  1. Truy cập trang web SingleStore.
  2. Đăng ký tài khoản mới trên SingleStore. 
  3. Khi tài khoản SingleStore đã hoạt động, bước tiếp theo là tải lên tập dữ liệu chúng ta sẽ dùng. Trong ví dụ này, chúng ta sử dụng tập dữ liệu về thói quen mạng xã hội của sinh viên, có trên Kaggle. Hãy tải tệp dữ liệu từ Kaggle và tải nó lên SingleStore.

Tải tệp vào SingleStore

  1. Sau khi tải lên, SingleStore sẽ tự động tạo một bảng cơ sở dữ liệu từ đó. Bảng này sẽ là nền tảng cho phân tích dữ liệu của chúng ta, giúp thông tin sẵn sàng để tác nhân AI của Flowise tương tác.

Bước 3: Điều hướng đến phần chatflows

Sau khi đăng nhập, vào trang tổng quan và tìm phần "Chatflows". Nhấp "Add New" để bắt đầu tạo luồng công việc mới.

Tạo chatflow mới trong flowise

Bước 4: Tạo hàm tùy chỉnh để tải thông tin bảng

Bước này liên quan đến việc viết một hàm tùy chỉnh để lấy thông tin về bảng, như mô tả và tên các cột. Dữ liệu này rất quan trọng để tác nhân AI hiểu cấu trúc của tập dữ liệu sẽ được truy vấn.

  1. Tạo một khối hàm tùy chỉnh.

Thêm một khối hàm tùy chỉnh

  1. Dán đoạn mã sau vào trình soạn thảo của khối hàm:
const mysql = require('mysql2/promise');

const tableName = $tableName;
const tableDescription = $tableDescription;
const connectionUrl = "<PASTE_YOUR_CONNECTION_STRING_HERE>" 

async function main() {
  try {
    const pool = mysql.createPool(connectionUrl);
    const q = 
    DESCRIBE ${tableName};
    ;
    const [rows] = await pool.query(q);
    const fields = rows.map((row) => ${row.Field} of type ${row.Type}).join("\n");
    const tableInformation = Table name: ${tableName}\nTable description:\n${tableDescription.trim()}\nColumns:\n${fields.trim()};
    return tableInformation;
  } catch(error) {
    return String(error);
  }  
}

return main();

Ở đầu hàm, chúng ta cần đặt giá trị connectionUrl. Bạn có thể tìm thấy nó trên SingleStore, trong tab Deployments.

Lấy thông tin kết nối cơ sở dữ liệu

Chuỗi kết nối trông như sau:

françois-19ecc:<françois-19ecc Password>@svc-3482219c-a389-4079-b18b-d50662524e8a-shared-dml.aws-virginia-6.svc.SingleStore.com:3333/db_franois_88ec0

Phần đầu tiên, françois-19ecc trong trường hợp của tôi, là tên người dùng. Ngay sau đó là chỗ để mật khẩu, <françois-19ecc Password>, mà chúng ta cần thay thế.

Hàm này kết nối đến cơ sở dữ liệu SingleStore và lấy thông tin cột của bảng. Nó có hai đầu vào:

  • tableName: Tên bảng
  • tableDescription: Mô tả của bảng.

Cần cấu hình chúng bằng cách nhấp nút “Input Variables” trên nút mã tùy chỉnh. Biến có thể được truy cập trong mã bằng cách thêm tiền tố $ trước tên biến.

Truy cập biến.

Trong trường hợp của tôi, bảng được đặt tên là dataset khi tạo trên SingleStore. Bạn nên dùng tên đã được đặt khi tải tệp CSV lên.

Kiểm tra tên bảng trong SingleStore.

Bước 5: Tạo nút mẫu nhắc (prompt template)

Đây là nơi chúng ta soạn các câu hỏi định hướng cho tác nhân AI. Kết nối nút này với hàm tùy chỉnh của bạn.

  1. Tạo một nút prompt template.

Tạo nút prompt template trong flowise

  1. Chèn prompt sau:
Based on the SQL table information and the user's questions, return a SQL query that answers that question.
TABLE INFORMATION: {tableInformation}
QUESTION: {question}

Kết nối hàm tùy chỉnh với prompt template trong flowise

Prompt có hai chỗ trống: {tableInformation} và {question}. question là prompt do người dùng gửi, còn tableInformation là đầu ra của hàm chúng ta đã định nghĩa ở bước trước.

Các giá trị chèn này cần được cấu hình bằng cách nhấp nút “Format Prompt Values” trên nút prompt template.

Cấu hình biến cho prompt trong flowise

Bước 6: Liên kết với khối LLM chain

Giờ hãy kết nối nút prompt template với một khối LLM chain, khối này sẽ diễn giải prompt và sinh ra truy vấn SQL từ đó. Thực hiện các bước sau:

  1. Thêm một khối LLM chain.
  2. Thêm một khối mô hình được cấu hình dùng OpenAI và kết nối nó với khối LLM chain tại đầu vào “Language Model”.
  3. Để cấu hình mô hình OpenAI, bạn cần thiết lập khóa API OpenAI. Nếu chưa có, bạn có thể tạo tại đây.
  4. Kết nối khối prompt template với đầu vào “Prompt”.

Cấu hình nút LLM Chain trong flowise

Bước 7: Dùng khối đặt biến (set variable)

Để lưu truy vấn SQL đã tạo nhằm sử dụng tiếp, hãy tạo một khối set variable và liên kết nó với đầu ra từ khối LLM chain.

Lưu giá trị bằng khối set variable trong flowise

Bước 8: Thực thi truy vấn SQL

Gửi truy vấn SQL đến một khối mã tùy chỉnh mới để thực thi trên cơ sở dữ liệu.

  1. Tạo một khối mã tùy chỉnh khác.
  2. Nhập đoạn mã sau:
const mysql = require('mysql2/promise');

const connectionUrl = "<PASTE_THE_SAME_URL_USED_BEFORE>";

function formatQuery() {
  // This function is used to clean the query provided by ChatGPT 
  // by removing markdown quotes
  const q = $query;
  let lines = q.trim().split(/\r\n|\r|\n/);
  if(lines[0].startsWith("")) {
    lines = lines.slice(1, lines.length - 1);
  }
  return lines.join("\n").trim()
}

const q = formatQuery();
try {
  const pool = mysql.createPool(connectionUrl);
  const [rows] = await pool.query(q);
  return rows;
} catch(error) {
  return Query: ${q}\nError:${String(error)}`
}

Nhớ đặt giá trị connectionUrl. Đó là giá trị chúng ta đã dùng trước đó.

Hàm này có một đầu vào là truy vấn cần thực thi, được truy cập trong mã bằng $query.  

Truy cập biến trong một nút hàm tùy chỉnh

Bước 9: Tạo một prompt template khác

Mẫu này dùng để định dạng câu trả lời mà tác nhân AI sẽ trình bày cho người dùng dựa trên kết quả truy vấn.

  1. Tạo một prompt template mới.
  2. Dùng prompt sau:
Based on the question and the query result, provide an answer to the user's question. Always show the query to the user.
QUERY: {query}
QUERY RESULT: {queryResult}
QUESTION: {question}

Prompt này có ba chỗ trống:

  • query: Truy vấn SQL do LLM tạo ra, lấy bằng cách kết nối nút biến.
  • queryResult: Kết quả của truy vấn, được tính bởi nút hàm tùy chỉnh trước đó.
  • question: Prompt ban đầu của người dùng.

Kết nối đến prompt template thứ hai để tạo truy vấn SQL trong flowise

Bước 10: Khối LLM chain cuối cùng

Cuối cùng, kết nối prompt template này với một khối LLM chain mới, khối này sẽ dùng prompt để soạn câu trả lời. Bạn có thể kết nối nó với cùng khối mô hình OpenAI đã dùng trước đó.

Đây là luồng tác nhân cuối cùng:

Luồng cuối cùng trong flowise

Với các bước trên, tác nhân AI của chúng ta đã sẵn sàng. Nó có thể nhận câu hỏi, tạo truy vấn SQL để lấy dữ liệu liên quan và đưa ra câu trả lời rõ ràng, súc tích.

Trò chuyện với tác nhân phân tích dữ liệu

Tác nhân giờ đã sẵn sàng sử dụng. Để trò chuyện với nó, nhấp nút chat màu tím ở góc trên bên phải:

Trò chuyện với tác nhân AI

Hãy thử hỏi xem khảo sát nhận được bao nhiêu phản hồi:

Ví dụ về tác nhân AI dùng flowise

Lưu ý rằng tác nhân đưa kèm truy vấn trong câu trả lời do cách chúng ta thiết kế prompt cuối cùng. Hãy hỏi một số thống kê về dữ liệu:

Ví dụ về tác nhân AI dùng flowise

Đây là một ví dụ khác:

Ví dụ về tác nhân AI dùng flowise

Nhận xét của tôi về Flowise

Sau khi thử nghiệm nhiều công cụ xây dựng tác nhân AI, trải nghiệm của tôi với Flowise có phần gây nản. Vấn đề lặp đi lặp lại tôi gặp phải là vô tình xóa một số cấu hình biến, khiến tác nhân hoạt động thất thường mà không rõ lý do. Điều này thường khiến việc khắc phục sự cố trở nên tẻ nhạt.

Hơn nữa, Flowise thiếu một điểm bắt đầu rõ ràng cho các luồng tác nhân, khiến việc theo dõi và hiểu cách tác nhân vận hành trở nên khó khăn. Điều này đặc biệt dễ gây nản cho người mới bắt đầu xây dựng hệ thống AI. Ngoài ra, Flowise còn hạn chế trong việc dễ dàng xem kết quả trung gian hoặc kiểm thử từng nút riêng lẻ. Điều đó làm cho việc xác định vấn đề hoặc tinh chỉnh luồng công việc trở nên kém hiệu quả.

Tôi cũng thấy khó để xem nhanh cấu hình của các nút. Ví dụ, các nút mã tùy chỉnh mà chúng ta dùng có định nghĩa biến đầu vào, nhưng điều này không hiển thị ra ngoài. Chúng ta phải nhấp vào phần đó của nút mới thấy. Điều này khiến khó hiểu được luồng chỉ bằng cách quan sát.

Kết luận

Mặc dù Flowise mang đến giao diện low-code đầy hứa hẹn để tạo tác nhân AI, nhưng vẫn có một số vấn đề về khả năng sử dụng khiến nó khó dùng hơn so với các công cụ tương tự, đặc biệt với những ai tìm kiếm trải nghiệm mượt mà và trực quan hơn. Dẫu vậy, ý tưởng của Flowise vẫn có tiềm năng, và với một vài cải tiến, nó có thể trở thành công cụ tuyệt vời để xây dựng giải pháp AI.

François Aubry

Tác giả

François Aubry

Kỹ sư full-stack & nhà sáng lập tại CheapGPT. Giảng dạy luôn là niềm đam mê của tôi. Từ những ngày còn là sinh viên, tôi đã háo hức tìm kiếm cơ hội kèm cặp và hỗ trợ các bạn học khác. Niềm đam mê đó đã thôi thúc tôi theo học tiến sĩ, nơi tôi cũng đảm nhiệm vai trò trợ giảng để hỗ trợ con đường học thuật của mình. Trong những năm ấy, tôi tìm thấy sự mãn nguyện lớn lao trong môi trường lớp học truyền thống, xây dựng kết nối và thúc đẩy việc học tập. Tuy nhiên, với sự ra đời của các nền tảng học trực tuyến, tôi nhận ra tiềm năng thay đổi của giáo dục số. Thực tế, tôi đã trực tiếp tham gia phát triển một nền tảng như vậy tại trường đại học của chúng tôi. Tôi tận tâm kết hợp các nguyên tắc giảng dạy truyền thống với những phương pháp số đổi mới. Đam mê của tôi là tạo ra các khóa học không chỉ hấp dẫn và giàu thông tin mà còn dễ tiếp cận với người học trong thời đại số này.

Chủ đề

Liên quan