+8

Tạo chatbot "like ChatGPT" miễn phí với Ollama và Open WebUI

Giới thiệu

Sự mạnh mẽ của ChatGPT đưa bạn đến với việc nghiên cứu về các mô hình ngôn ngữ lớn (LLMs) và muốn dựng một app chatbot giống như ChatGPT? Bạn muốn tạo ra một chatbot mang dấu ấn cá nhân? Bạn muốn triển khai một công cụ chatbot cho nhóm của bạn ở công ty phục vụ các công việc hàng ngày? Bài viết này sẽ hướng dẫn các bạn có thể xây dựng một chatbot miễn phí (đấy là khi bạn có sẵn GPU rồi 🤭) để thuận tiện hơn cho việc nghiên cứu cũng như có thể đáp ứng tương đối các tính năng giống như ChatGPT (cái này còn tùy vào tài nguyên phần cứng bạn có nha 🫢). Let's go

Chạy LLMs với Ollama

Chạy các mô hình ngôn ngữ lớn (LLMs) trên local server có thể rất hữu ích khi bạn có sẵn tài nguyên tính toán, dù bạn muốn khám phá với LLMs hay xây dựng các ứng dụng mạnh mẽ hơn bằng chúng. Tuy nhiên, việc cấu hình môi trường làm việc và chạy LLMs trên máy của bạn không phải là việc dễ dàng do có nhiều vấn đề về tối ưu. Với việc sử dụng Ollama, bạn có thể dễ dàng có thể chạy được mô hình Llama 3.1 (q4_0 quantization) với GPU khoảng 8GB VRAM.

Vậy làm thế nào để chạy LLMs trên local server nhanh chóng? Hãy đến với Ollama, một nền tảng giúp phát triển cục bộ với các mô hình ngôn ngữ lớn mã nguồn mở trở nên đơn giản. Với Ollama, mọi thứ bạn cần để chạy một LLM là weight của mô hình và tất cả các cấu hình đều được đóng gói vào một file Modelfile duy nhất. Hãy tưởng tượng cách hoạt động của Docker cho LLMs. Trong phần này, chúng ta sẽ tìm hiểu cách bắt đầu với Ollama để chạy các mô hình ngôn ngữ lớn trên server local. Hướng dẫn này được thực hiện trên hệ điều hành Ubuntu. Với Windows hay Mac, các bạn có thể tìm đọc docs của Ollama và Open WebUI nó cũng khá dễ nắm bắt

Cài đặt Ollama

Bước đầu tiên, bạn cần tải Ollama về máy của mình. Ollama hỗ trợ trên tất cả các nền tảng chính: MacOS, Windows và Linux.

Để tải Ollama, bạn có thể truy cập GitHub repo và làm theo các hướng dẫn. Hoặc truy cập trang web chính thức của Ollama để cài đặt Trên Ubuntu, mình sử dụng lệnh sau để cài đặt:

curl -fsSL https://ollama.com/install.sh | sh

Quá trình cài đặt thường mất vài phút. Trong quá trình cài đặt, driver của GPU NVIDIA/AMD sẽ được phát hiện tự động (Hãy chắc chắn rằng bạn đã cài đặt driver). Ollama cũng có thể chỉ sử dụng CPU khi không đủ GPU cần thiết cho model (nhưng chắc không ai muốn một con chatbot chậm rì vài phút mới rep xong 1 câu đơn giản đâu 🙃)

Kéo model về và chạy

Tiếp theo, bạn có thể truy cập thư viện mô hình của Ollama để kiểm tra danh sách tất cả các họ mô hình hiện đang được hỗ trợ (đến thời điểm mình viết bài này, Ollama đã hỗ trợ đến Llama 3.2 1B và 3B, chưa hỗ trợ bản vision 11B và 90B). Mô hình mặc định được tải xuống là mô hình có tag latest (thấy nó bắt đầu giống Docker rồi ha 🤗). Trên trang của từng mô hình, bạn có thể tìm thêm thông tin như kích thước và phương pháp lượng tử hóa (quantization) được sử dụng. Quantization hiểu đơn giản là sẽ cưa bớt phần thập phân của mỗi params để tốn ít bộ nhớ lưu trữ hơn và đánh đổi là độ chính xác sẽ kém đi (Do thời lượng bài viết có hạn mình không đi sâu vấn đề này). Mặc định full precision cho số thập phân là 32bits (FP32). Tuy nhiên theo trải nghiệm cá nhân mình thì các mô hình mặc định của Ollama thường được quantize về 4bit và vẫn đáp ứng tốt các tác vụ thông thường như code hoặc đọc hiểu văn bản. Trên thư viện của Ollama, bạn có thể xem các biển thể model và số lượng tham số của chúng để có thể lựa chọn model phù hợp với nhu cầu sử dụng image.png Bạn có thể chạy mô hình bằng lệnh ollama run để tải về và bắt đầu tương tác với mô hình trực tiếp. Tuy nhiên, bạn cũng có thể kéo (pull) mô hình về máy trước và sau đó mới chạy. Điều này tương tự như cách bạn làm việc với các Docker image.

Ví dụ để tải xuống mô hình Llama 3.1, hãy chạy lệnh terminal để:

ollama pull llama3.1

Hoặc chạy luôn như này

ollama run llama3.1

Nếu mô hình chưa có thì Ollama sẽ tự pull về. Sau khi chạy bạn có thể chat trực tiếp với Ollama trên Terminal (để thoát bạn có thể gõ /bye hoặc nhấn Ctrl+D

Customize mô hình

Lại giống như Docker, bạn có thể chỉnh sửa mô hình với việc viết Modelfile. Ví dụ về việc thêm system prompt bạn có thể tham khảo mẫu sau

FROM llama3.1:latest

SYSTEM """
You are a virtual assistant developed by the AI Team of TonAI Company
Your name is 'TonAI Lạc Đà' (Llama is Lạc đà in Vietnamese) because your base model is Llama 3.1 8B
"""

Ngoài ra bạn có thể chỉnh sửa các tham số của mô hình như temperature, num_ctx... Cách viết Modeilfile chi tiết bạn có thể tham khảo tại link này hoặc tìm kiếm trên Ollama Hub, đây là nơi mọi người chia sẻ về các mô hình. Để tạo mô hình mơi, bạn chạy lệnh

ollama create TonAI:chatbot_mini -f ./Modelfile

Trong đó TonAI:chatbot_mini là tên model của mình (nếu các bạn không viết gì sau dấu : nó sẽ auto là latest như Docker) và f [đường dẫn tới Modelfile] Sau khi tạo model ta có thể chạy thử nghiệm

ollama run TonAI:chatbot_mini

Và sau đây là kết quả

>>> Hi
Xin chào! (Hello!) How can I assist you today? Is there something specific on your mind, or would you like to have a chat?

>>> Who are you
I am TonAI Lạc Đà, a virtual assistant developed by the AI Team of TonAI Company. My base model is based on Llama 3.1 8B, which allows me to understand and respond to a wide 
range of questions and topics.

I'm here to help answer your questions, provide information, offer suggestions, and even just have a friendly conversation if you'd like!

>>> Send a message (/? for help)

Sử dụng Ollama với Python

Ngoài ra bạn có thể sử dụng Ollama với thư viện python. Cài đặt Ollama bằng cách sử dụng pip:

$ pip install ollama

Dưới đây là một ví dụ sử dụng Ollama với Python

import ollama

while True:
    message = input("User: ")
    response = ollama.chat(model='TonAI:chatbot_mini', messages=[
        {
            'role': 'user',
            'content': message,
        },
    ])
    print(f"Ollama: {response['message']['content']}")

Open WebUI

sau khi cài Ollama, bạn cần một giao diện để sử dụng dễ dàng hơn. Ở trong bài này mình sẽ sử dụng Open WebUI để dựng một giao diện web giống ChatGPT.

Open WebUI is an extensible, feature-rich, and user-friendly self-hosted WebUI designed to operate entirely offline. It supports various LLM runners, including Ollama and OpenAI-compatible APIs.

Bạn có thể cài đặt Open WebUI bằng cách sử dụng Docker, PyPi hoặc có thể kéo source code tại ĐÂY

Cài đặt

Với Docker:

Nếu sử dụng GPU, chạy câu lệnh sau:

$ docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

Với bạn nào chỉ dùng CPU:

$ docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

Sau khi cài đặt, bạn có thể truy cập Open WebUI tại địa chỉ http://localhost:3000

Với Python pip:

Chạy lệnh sau để cài đặt Open WebUI:

$ pip install open-webui

Chạy lệnh sau để chạy Open WebUI

$ open-webui serve

Sau khi cài đặt, bạn có thể truy cập Open WebUI tại địa chỉ http://localhost:8080

Với Source code:

Cách này khá hữu ích khi bạn có thể customize giao diện theo ý mình. Đầu tiên clone source code về máy:

$ git clone https://github.com/open-webui/open-webui.git

Trong thư mục backend có một file script start.sh, các bạn có thể chạy nó (trong đó có thể customize port và hostname)

$ cd open-webui/backend
$ bash start.sh

Để tránh trường hợp khi bạn tắt Terminal, ứng dụng sẽ bị down thì có thể tham khảo cách sử dụng Tmux để treo ứng dụng này liên tục

Trải nghiệm thôi nào 😎

Sau khi cài đặt các bạn sẽ có giao diện sử dụng như sau image.png Customize model trả lời theo ý bạn image.png Ollama có thể truy cập link, tài liệu để đọc. Với một số mô hình vision có thể nhận diện được ảnh input. Giao diện Open WebUI có khá nhiều chức năng như quản lý model, quản lý user (nếu bạn là admin), quản lý database... Ngoài ra có cả một số tính năng nâng cao như kết nối với image generator với ComfyUI hay A1111.

Trên đây là bài viết hướng dẫn sơ lược về cách dựng nhanh một chatbot để thử nghiệm các mô hình ngôn ngữ lớn. Hy vọng nó giúp ích cho project của các bạn. Mình sẽ cố gắng nghiên cứu và ra nhiều bài viết chuyên sâu hơn trong lĩnh vực Generative AI trong tương lai 😊


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí