Back to articles
Technology Insight

Triển khai Open-WebUI Pipelines: Tự viết bộ lọc Guardrails kiểm duyệt mã độc và rò rỉ dữ liệu doanh nghiệp

June 3, 2026

Đặt vấn đề: Thách thức bảo mật dữ liệu khi doanh nghiệp ứng dụng Generative AI

Trong kỷ nguyên số hóa, việc tích hợp Generative AI và các mô hình ngôn ngữ lớn (LLM) vào quy trình vận hành đang trở thành chiến lược cốt lõi của nhiều doanh nghiệp. Các công cụ mã nguồn mở như Open-WebUI mang lại khả năng tùy biến cao, giao diện thân thiện và quyền kiểm soát dữ liệu tuyệt đối khi triển khai on-premise. Tuy nhiên, sự tự do này cũng đi kèm với những rủi ro bảo mật nghiêm trọng nếu thiếu đi cơ chế kiểm soát chặt chẽ.

Khi nhân viên tương tác với LLM, hai nguy cơ lớn nhất luôn thường trực là: Rò rỉ dữ liệu cấu trúc/bí mật kinh doanh (Data Leakage) và Tấn công Prompt Injection / Thực thi mã độc (Malicious Code). Một câu hỏi vô tình chứa mã khách hàng, thông tin tài chính cá nhân (PII), hoặc một đoạn mã độc được nhúng tinh vi vào prompt có thể phá hủy hoàn toàn hệ thống an toàn thông tin của tổ chức. Để giải quyết bài toán này, việc xây dựng một tầng kiểm duyệt trung gian — hay còn gọi là Guardrails — là điều bắt buộc.

Open-WebUI Pipelines là gì? Kiến trúc và nguyên lý hoạt động

Open-WebUI Pipelines là một khung mở rộng (plugin framework) mạnh mẽ, cho phép lập trình viên can thiệp trực tiếp vào vòng đời của một yêu cầu (request) và phản hồi (response) giữa người dùng và LLM. Bằng cách sử dụng ngôn ngữ lập trình Python, Pipelines hoạt động như một hệ thống Middleware linh hoạt.

Kiến trúc xử lý của một Pipeline kiểm duyệt (Guardrails Filter) tuân theo quy trình nghiêm ngặt sau:

  1. Giai đoạn Tiền xử lý (Inlet Filter): Khi người dùng gửi một prompt, Pipeline sẽ chặn yêu cầu này lại trước khi nó được chuyển tới LLM. Tại đây, mã nguồn Python sẽ phân tích cú pháp, nhận diện thực thể, rà soát từ khóa nguy hiểm hoặc kiểm tra mã độc. Nếu phát hiện vi phạm, Pipeline có thể chặn đứng yêu cầu hoặc làm sạch (sanitize) dữ liệu nhạy cảm.
  2. Giai đoạn LLM xử lý: Nếu vượt qua vòng Inlet, prompt an toàn sẽ được gửi tới mô hình để xử lý.
  3. Giai đoạn Hậu xử lý (Outlet Filter): Phản hồi từ LLM trước khi hiển thị màn hình người dùng cũng sẽ bị chặn lại để kiểm tra một lần nữa, đảm bảo mô hình không sinh ra mã độc, nội dung độc hại hoặc vô tình làm lộ các thông tin hệ thống.

Hướng dẫn từng bước tự viết bộ lọc Guardrails bằng Python trên Open-WebUI Pipelines

Để giúp doanh nghiệp nhanh chóng làm chủ công nghệ, dưới đây là hướng dẫn chi tiết cách xây dựng một Pipeline bộ lọc kép: Vừa lọc thông tin nhạy cảm (Regex-based PII filter), vừa ngăn chặn mã độc nhúng vào hệ thống.

Bước 1: Thiết lập môi trường và cấu trúc Class

Mỗi Pipeline trong Open-WebUI được định nghĩa dưới dạng một Python Class. Bạn cần khai báo cấu trúc cơ bản và các siêu dữ liệu (metadata) cần thiết để hệ thống nhận diện.

import re
from typing import Dict, Any

class Pipeline:
    class Valves:
        # Khai báo các tham số cấu hình có thể điều chỉnh trên giao diện UI
        BLOCK_PROMPT_INJECTION: bool = True
        SECRET_KEY_PATTERN: str = r'(AIzaSy[A-Za-z0-9-_]{35}|(?i)password|(?i)secret)'

    def __init__(self):
        self.name = "Enterprise Security Guardrails"
        self.valves = self.Valves()

Bước 2: Xây dựng bộ lọc đầu vào (Inlet Function) kiểm duyệt mã độc và rò rỉ dữ liệu

Hàm inlet sẽ chịu trách nhiệm quét toàn bộ nội dung văn bản người dùng nhập vào. Chúng ta sẽ sử dụng Regular Expressions (Regex) để nhận diện định dạng dữ liệu nhạy cảm (như số căn cước, mã thẻ tín dụng, API Key) và kiểm tra các từ khóa có nguy cơ tấn công Prompt Injection.

    async def inlet(self, body: Dict[str, Any], __user__: Dict[str, Any]) -> Dict[str, Any]:
        messages = body.get("messages", [])
        if not messages:
            return body

        # Lấy nội dung prompt mới nhất từ người dùng
        latest_message = messages[-1]["content"]

        # 1. Kiểm tra rò rỉ dữ liệu nhạy cảm (API Keys, Token, Passwords)
        if re.search(self.valves.SECRET_KEY_PATTERN, latest_message):
            raise Exception("Cảnh báo bảo mật: Phát hiện thông tin nhạy cảm hoặc API Key trong yêu cầu của bạn!")

        # 2. Kiểm tra tấn công nhúng mã độc / Prompt Injection cơ bản
        malicious_patterns = [r"(?i)ignore previous instructions", r"(?i)system override", r"Triển khai Open-WebUI Pipelines: Tự viết bộ lọc Guardrails kiểm duyệt mã độc và rò rỉ dữ liệu doanh nghiệp | DPTCloud