{count, plural, one {Khóa học} other {Khóa học}}
Dify là một nền tảng thân thiện với người dùng, giúp bạn xây dựng ứng dụng AI với rất ít hoặc không cần viết mã. Cách hoạt động là kéo thả các khối chức năng khác nhau. Thông tin sẽ chảy qua các khối, được xử lý và kết hợp để tạo ra câu trả lời.
Trong bài viết này, tôi sẽ giải thích các kiến thức nền tảng của Dify bằng cách hướng dẫn bạn tạo một trợ lý du lịch AI.
Chúng tôi cập nhật cho độc giả những điều mới nhất về AI qua The Median, bản tin miễn phí mỗi thứ Sáu tóm lược các câu chuyện nổi bật trong tuần. Đăng ký để luôn nắm bắt chỉ trong vài phút mỗi tuần:
Dify là gì?
Dify là một nền tảng được thiết kế để đơn giản hóa việc phát triển ứng dụng AI mà không đòi hỏi kỹ năng lập trình sâu. Nó cung cấp môi trường low-code thân thiện, nơi người dùng có thể xây dựng ứng dụng bằng cách kéo thả các thành phần khác nhau.
Hãy hình dung Dify như một hộp công cụ số chứa các khối dựng sẵn có thể ghép lại để tạo nên phần mềm hoạt động. Cách tiếp cận này giúp công nghệ trở nên dễ tiếp cận hơn, cho phép những người ít kiến thức lập trình hiện thực hóa ý tưởng của mình.
Mỗi loại khối có đầu vào và chuyển đổi chúng thành các đầu ra khác nhau, tùy thuộc vào loại khối. Thông tin được truyền và biến đổi qua từng khối, tạo ra kết quả cuối cùng.
Bắt đầu với Dify
Có hai cách sử dụng Dify:
- Thiết lập cục bộ.
- Dùng phiên bản đám mây.
Trong hướng dẫn này, chúng ta dùng phiên bản đám mây. Bản đám mây của Dify có gói miễn phí, nên bạn có thể theo dõi mà không cần đăng ký trả phí.
Nếu bạn quan tâm đến thiết lập cục bộ, cách dễ nhất là:
- Tải xuống hoặc clone Dify từ kho lưu trữ chính thức.
- Chạy Dify bằng Docker như mô tả trong phần Quick Start của README trong kho.
Tạo một Chatflow với Dify
Dify cung cấp nhiều loại ứng dụng. Chúng ta sẽ tập trung xây dựng một ứng dụng Chatflow, tức một luồng AI mà người dùng tương tác với tác tử qua giao diện chat.
Để tạo Chatflow mới, trước hết nhấn "Create from blank" và chọn tùy chọn "Chatflow".

Để tạo luồng, đặt tên rồi nhấn nút “Create”:

Hành động này sẽ tạo luồng mặc định sau:

Luồng này có ba khối:
- Khối bắt đầu chịu trách nhiệm khởi động luồng. Với Chatflow, luồng bắt đầu khi người dùng gửi tin nhắn.
- Nút LLM nhận đầu vào là tin nhắn người dùng và gửi đến một LLM, trong trường hợp này là
gpt-4. - Nút cuối dùng để hiển thị tin nhắn trong chat. Ở ví dụ này, nó được nối với nút LLM, nên đầu ra của LLM sẽ được gửi vào chat.
Ba nút này kết hợp với nhau tạo ra một chatbot AI tương tự ChatGPT. Trước khi chạy ứng dụng, chúng ta cần cài đặt và thiết lập plugin OpenAI.
Cài đặt và thiết lập plugin OpenAI
Để cài plugin OpenAI, hãy thực hiện:
- Nhấn nút "Plugins" ở góc trên bên phải.

- Nhấn “Install from Marketplace.”

- Gõ "openai" trong ô tìm kiếm và nhấn vào plugin OpenAI.

- Chọn plugin OpenAI và nhấn “Install.”
Tiếp theo, chúng ta cần thiết lập khóa API OpenAI. Nếu bạn chưa có, hãy tạo tại đây. Lưu ý việc sử dụng API OpenAI không miễn phí, nên bạn sẽ cần gắn phương thức thanh toán với khóa API.
Khi đã có khóa, ta cấu hình như sau:
- Chọn nút LLM.

- Nhấn biểu tượng cấu hình bên cạnh tên mô hình.

- Nhấn vào danh sách thả xuống Model ở trên cùng.

- Nhấn "Model Provider Settings" ở cuối danh sách.

- Nhấn "Setup" trong phần API key.

- Dán khóa API và nhấn “Save”.

Chạy ứng dụng
Giờ đây chúng ta có thể chạy ứng dụng bằng cách nhấn nút xem trước:

Hiện tại, nó chưa thú vị lắm vì mới chỉ là một chatbot AI. Hãy nhớ rằng nó sẽ không làm gì cho đến khi người dùng gửi tin nhắn.

Tạo biến
Dify cho phép lưu trạng thái ứng dụng bằng cách gán giá trị cho các biến có thể truy cập được từ mọi khối.
Để tạo biến, nhấn nút biến:

Hãy tạo một biến để lưu tên người dùng:

Cấu hình này tạo biến tên name lưu một chuỗi (văn bản). Chúng ta để trống giá trị mặc định, nên ban đầu biến sẽ là chuỗi rỗng.
Có nhiều cách để gán giá trị cho biến, nhưng cách thường gặp nhất là dùng một khối AI để tự động suy ra từ hội thoại. Chúng ta sẽ học điều đó sau. Trước hết, hãy học cách kiểm tra giá trị của biến để điều khiển luồng ứng dụng.
Khối IF/ELSE
Để kiểm tra giá trị của biến, ta có thể dùng khối IF/ELSE. Khối này dùng để thực thi các hành động khác nhau tùy vào giá trị biến.
Để thêm khối mới, nhấn nút "+" ở bên dưới:

Sau đó chọn khối bạn muốn thêm. Ở đây, chọn "IF/ELSE":

Tiếp theo nhấn vào khối để cấu hình bằng cách chọn biến name mà ta đã tạo trước đó.
Để thử nghiệm, thêm hai khối Answer. Các khối này dùng để hiển thị tin nhắn trong chat. Nối một khối với đầu ra IF (chạy khi điều kiện đúng) và khối còn lại với đầu ra ELSE (chạy khi điều kiện sai).

Với đầu ra IF, tôi đặt chuỗi "Xin lỗi, tôi không biết tên của bạn." còn với ELSE, tôi đặt "Xin chào, {name}!". Ta có thể dùng dấu ngoặc nhọn để chèn biến vào chuỗi. Điều này cũng sẽ hữu ích sau này khi xây dựng prompt.
Bạn có thể thử Chatflow này bằng cách nhấn nút "Preview". Lưu ý Chatflow được kích hoạt bởi tin nhắn người dùng, nên trước tiên cần gửi một tin như "Hi." Dưới đây là kết quả tùy vào việc tên đã được đặt hay chưa (tôi đặt thủ công trong giao diện biến cho ví dụ thứ hai):

Khối gán biến và khối trích xuất tham số
Chúng ta có thể dùng AI để nhận diện và trích xuất giá trị biến bằng khối Parameter Extractor. Khối này sử dụng LLM để trích xuất thông tin từ hội thoại.

Trước hết, thêm một khối Parameter Extractor nối vào nhánh IF. Cấu hình khối như sau:

INPUT VARIABLEđược đặt làsys.query, tương ứng với tin nhắn của người dùng. Nghĩa là khối Parameter Extractor sẽ cố gắng trích xuất giá trị từ tin nhắn người dùng.- Trong
EXTRACTION PARAMETERS, ta định nghĩa thông tin cần trích xuất. Tiếc là không thể chỉ định trực tiếp một biến ở đây, nên ta cần định nghĩa lại thông tin đó bằng cách nhấn nút “+”.

- Trường
INSTRUCTIONlà prompt để hướng dẫn LLM cần làm gì. - Tiếp theo, thêm khối Variable Assigner để gán giá trị do Parameter Extractor trích xuất (nếu có) vào biến
name.

Hãy đảm bảo gán name đã trích xuất vào biến name.

Sau bước này, biến name vẫn có thể chưa được xác định vì có thể người dùng chưa cung cấp tên. Vậy nên ta thêm một khối IF/ELSE nữa để kiểm tra. Nếu tên đã có, hãy chào người dùng. Nếu chưa, hãy hỏi tên của họ.

Ví dụ tương tác như sau:

Luồng này minh họa các nguyên lý cơ bản của workflow trong Dify. Dù người dùng nhắn gì, nếu tên chưa được xác định, hệ thống sẽ cố trích xuất tên từ tin nhắn. Nếu thất bại, nó sẽ hỏi. Nếu thành công, nó sẽ chào người dùng bằng tên của họ.
Ở thời điểm này chưa có khối LLM, nên tác tử sẽ không làm gì khác.
Khối Code
Khối Code dùng để thực thi mã Python tùy chỉnh. Hãy sửa luồng trước đó để trích xuất vị trí của người dùng thay vì tên. Sau đó dùng khối Code để gọi một API thời tiết và gửi dự báo thời tiết cho người dùng.
- Tạo biến mới tên
location. - Sửa các khối IF/ELSE để kiểm tra
locationthay vìname. - Sửa khối Parameter Extractor để trích xuất vị trí thay vì tên.
- Sửa khối Variable Assigner để gán giá trị trích xuất vào biến
location. - Sửa các khối Answer để lần lượt hỏi vị trí và hiển thị vị trí.
Sau các bước này, luồng sẽ trông như sau:

Ví dụ tương tác:

Bước tiếp theo là thêm một khối Code sau khi đã có vị trí. Khối này sẽ gọi OpenWeather API để lấy dự báo thời tiết cho vị trí đó.
API này miễn phí sử dụng, miễn là chúng ta không gửi quá nhiều yêu cầu.
Thay khối Answer thứ hai bằng một khối Code.

Cấu hình để nó nhận một tham số duy nhất là giá trị location.

Với mã Python, dưới đây là cách dùng gói requests để lấy thời tiết từ OpenWeather API:
import requests
API_KEY = "PASTE_YOUR_API_KEY_HERE"
def main(location: str) -> str:
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": location,
"appid": API_KEY,
"units": "metric",
}
response = requests.get(base_url, params=params)
data = response.json()
if response.status_code == 200:
weather_desc = data["weather"][0]["description"]
temp = data["main"]["temp"]
return {
"result": f"Current weather in {location}: {weather_desc}, Temperature: {temp}°C"
}
else:
return {
"result": "Could not retrieve weather data",
}
Cuối cùng, nối đầu ra của nút Code tới một nút Answer để hiển thị cho người dùng.

Giờ ta đã có một Chatflow có thể cho biết dự báo thời tiết:

Dự án: Tạo tác tử AI lập kế hoạch du lịch
Giờ chúng ta đã có đủ công cụ để xây dựng một trợ lý du lịch AI. Khả năng là vô tận, nhưng để tránh làm phức tạp hướng dẫn này, ta sẽ giữ mọi thứ đơn giản.
Tác tử sẽ tập trung lập kế hoạch cho một ngày của chuyến đi. Nó sẽ bắt đầu bằng cách thu thập vị trí của người dùng và các loại hoạt động họ yêu thích. Để làm điều này, ta dùng hai biến:
location: Lưu vị trí nơi người dùng đi du lịch.activities: Một mảng chuỗi lưu các hoạt động người dùng muốn làm.

Dưới đây là cách tạo luồng để trích xuất cả hai biến:

Trong ví dụ này, chúng ta bắt đầu bằng một khối trích xuất tham số để lấy cả location và danh sách activities.

Sau đó, chúng ta dùng các khối IF/ELSE để kiểm tra từng tham số này có được trích xuất không và cập nhật biến nếu có. Khác với các ví dụ trước, cách này cho phép người dùng cập nhật các giá trị.
Cuối phần trích xuất giá trị và gán biến, ta thêm một khối IF/ELSE khác để kiểm tra xem còn thiếu giá trị nào không. Nếu thiếu, hãy yêu cầu người dùng cung cấp rõ ràng.

Nếu cả location và activities đều được xác định, chúng ta dùng khối Code đã tạo trước đó để lấy thời tiết tại vị trí đã cho. Cuối cùng, cung cấp thời tiết, vị trí và hoạt động cho một khối LLM để lập kế hoạch cho ngày của người dùng.

Khối LLM được cấu hình với system prompt hướng dẫn mô hình cần làm gì. Vị trí, hoạt động và thời tiết sẽ được chèn vào đó. Dưới đây là phần cuối của luồng:

Ví dụ tương tác với tác tử:

Ta thấy trong phản hồi, nhờ có nút Code, tác tử có thể cung cấp thông tin thời tiết cho người dùng và tính đến yếu tố đó khi lên kế hoạch hoạt động.
Với cách thiết lập luồng như vậy, nếu người dùng cung cấp thông tin ngay trong tin nhắn đầu tiên, tác tử sẽ trực tiếp đưa ra kế hoạch cho cả ngày.

Định nghĩa lời chào tùy chỉnh
Bạn có thể nhận thấy tác tử bắt đầu bằng cách chào người dùng bằng một tin nhắn:

Để bật tính năng này, chúng ta cần kích hoạt tính năng Conversation Opener.


Công cụ của Dify
Trong hướng dẫn này, chúng ta đã học các khối xây dựng cơ bản của Dify. Một khía cạnh chưa đề cập là công cụ (tools).
Trong Dify, công cụ là các phần mở rộng mạnh mẽ cho phép tác tử AI tương tác với thế giới bên ngoài, vượt ra ngoài giới hạn của mô hình ngôn ngữ. Dù một LLM có thể suy luận và tạo phản hồi dựa trên dữ liệu huấn luyện và ngữ cảnh prompt, nó không có quyền truy cập thời gian thực vào dữ liệu sống hoặc dịch vụ bên ngoài.
Các công cụ giải quyết điều này bằng cách cho phép tác tử gọi API, truy vấn cơ sở dữ liệu, thực hiện tính toán, truy xuất tài liệu, v.v., về bản chất đóng vai trò cầu nối giữa AI và nguồn thông tin bên ngoài.

Bạn có thể cấu hình công cụ trong Dify qua giao diện trực quan của nền tảng bằng cách chỉ định loại công cụ (như yêu cầu HTTP, bộ thông dịch mã, hay plugin bên thứ ba), lược đồ đầu vào/đầu ra, và các yêu cầu xác thực. Khi đã thiết lập, các công cụ này có thể được sử dụng trong luồng tác tử qua các khối Tool, cho phép bạn truyền dữ liệu ra/vào công cụ và đưa kết quả vào các nút LLM hoặc các khối logic khác.

Điều này giúp tác tử của bạn không chỉ thông minh hơn mà còn có khả năng hành động, cung cấp câu trả lời cập nhật, phù hợp ngữ cảnh bằng cách tương tác với các dịch vụ thực tế.
Trong ví dụ của chúng ta, ta đã dùng khối code để gửi yêu cầu tới API thời tiết. Một cách thay thế là tạo một công cụ và cung cấp công cụ đó cho LLM.
Kết luận
Trong hướng dẫn này, chúng ta đã khám phá một số khối cơ bản bạn cần để bắt đầu làm việc với Dify. Tuy nhiên, Dify còn nhiều tính năng và khả năng khác để khám phá.
Để củng cố hiểu biết, một bài tập hay là nâng cấp trợ lý du lịch mà chúng ta đã tạo. Hãy cân nhắc thêm tính năng tìm kiếm trên internet để tìm hoạt động địa phương trực tuyến, từ đó làm phong phú chức năng của tác tử và cung cấp gợi ý linh hoạt hơn.
Nếu bạn hứng thú với các trình dựng tác tử AI như Dify, tôi khuyên bạn xem thêm các hướng dẫn khác của chúng tôi để học tiếp:
