# Xem trước luồng

> Đọc canvas Preview Flow chỉ dành cho admin — cách các cạnh của pipeline Input → Model → Output được vẽ, ý nghĩa của hoạt ảnh trực tiếp, và việc bấm vào một node sẽ làm gì.

<AppFrame name="PreviewFlow" alt="Canvas Preview Flow hiển thị các datasource đầu vào, model và datasource đầu ra được nối thành đồ thị pipeline trực tiếp" caption="Preview Flow — pipeline Input → Model → Output dưới dạng đồ thị trực tiếp." />

**Preview Flow** (`/preview-flow`) là một canvas chỉ dành cho admin, chỉ đọc, trực
quan hóa pipeline của bạn dưới dạng đồ thị: các datasource đầu vào ở bên trái, các
model ở giữa, và các datasource đầu ra ở bên phải. Nó chỉ hiển thị cho tài khoản
admin — cả mục điều hướng và route đều bị giới hạn cho admin, nên một người dùng
không phải admin không bỏ lỡ gì nếu nó không xuất hiện trong sidebar của họ.

Đồ thị được suy ra trực tiếp từ cấu hình datasource và model hiện có của bạn — không
có kho dữ liệu, API, hay bảng cơ sở dữ liệu riêng nào cho Preview Flow. Nó phản ánh
đúng những gì đang được ghép cặp, bật, và hoạt động ở thời điểm hiện tại.

## Nodes

Mỗi node mang một icon loại nhỏ và phản ánh dữ liệu bạn đã thấy ở nơi khác:

- **Input datasource** — loại, số lượng tag, và cùng công tắc `Enabled`/`Disabled`
  hiển thị trên bảng Data Sources (ở đây chỉ đọc — việc bật/tắt diễn ra trong drill-in
  drawer).
- **Model** — `Version`, `Status`, `Output shape` (`Input shape` xuất hiện trong
  drill-in drawer, bên dưới).
- **Output datasource** — loại, số lượng tag, và công tắc `Enabled`/`Disabled` của nó.

Một model mà một input tham chiếu tới nhưng không còn tồn tại trong danh sách model
sẽ được hiển thị dưới dạng **ghost node** với nhãn `Missing`, thay vì bị âm thầm bỏ
qua.

## Chú giải cạnh (edge legend)

Canvas vẽ **mọi luồng đã cấu hình**, không chỉ luồng đang chạy. Một luồng là một
chuỗi Đầu vào → Mô hình → Đầu ra, và nhiều luồng có thể đọc cùng một đầu vào với các
mô hình khác nhau, nên một node đầu vào có thể toả ra nhiều mô hình.

Thứ phân biệt chúng là **đang sống**: chuỗi thuộc luồng đang bật được vẽ bình thường,
phần còn lại mờ đi với nét đứt. Nếu chỉ vẽ luồng đang bật thì sẽ giấu mất topology bạn
đã cấu hình và Task Manager đang liệt kê.

- **Đầu vào → Mô hình** — mỗi luồng một cạnh. Nếu mô hình của luồng đó không có trong
  danh sách mô hình, cạnh được vẽ đỏ/không hợp lệ trỏ tới node ma thay vì lặng lẽ biến
  mất. Cạnh không hợp lệ vẫn nổi bật kể cả khi bị làm mờ — tham chiếu mô hình hụt là lỗi
  bất kể luồng đó có đang chạy hay không.
- **Mô hình → Đầu ra** — mỗi đầu ra mà luồng gắn là một cạnh, bị bỏ qua khi mô hình
  không thể thực sự nuôi sink đó (không phân tích được hình dạng, hoặc lệch số kênh).
  Đầu ra thuộc luồng **đang bật** mà không gì nuôi được sẽ bị gắn cờ **Không kết nối**,
  để một đầu ra cấu hình sai vẫn hiện rõ thay vì âm thầm không làm gì. Đầu ra không
  thuộc luồng đang bật thì chỉ bị làm mờ — chưa sống không phải là lỗi.

**Vì sao vẽ mọi luồng**

Phiên bản trước của canvas chỉ vẽ được một cạnh Đầu vào → Mô hình cho mỗi datasource,
vì phép ghép cặp là một cột đơn trên hàng datasource. Luồng làm cách biểu diễn đó trở
nên bất khả: với ba luồng trên một đầu vào và ba mô hình khác nhau, không có chỗ nào
để chứa câu trả lời. Trang này tên là Preview Flow, nên giờ nó vẽ các luồng và làm mờ
những luồng chưa chạy.

## Hoạt ảnh luồng dữ liệu trực tiếp

Trong khi suy luận đang **chạy**, chuỗi đang streaming — đầu vào → mô hình của luồng
đó → các đầu ra được kết nối của mô hình đó — sẽ có hoạt ảnh để tạo tín hiệu "luồng dữ
liệu" trực tiếp. Mọi cạnh khác trên canvas vẫn đứng yên. Vì suy luận là singleton, tối
đa một chuỗi có hoạt ảnh tại một thời điểm: hiệu ứng luôn phản ánh đúng một pipeline
đang thực sự chạy, không bao giờ ngụ ý luồng chảy qua một đường đang rảnh (idle).

Làm mờ và hoạt ảnh trả lời hai câu hỏi khác nhau. Mờ nghĩa là "không phải luồng đang
bật"; có hoạt ảnh nghĩa là "dự đoán đang chảy ngay lúc này". Một luồng có thể đang bật
mà không có hoạt ảnh — đó là Ready nhưng chưa start, một trạng thái hợp lệ chứ không
phải lỗi.

**Các control theo đúng theme của bạn**

Các control zoom-in / zoom-out / fit-view ở góc canvas khớp với theme sáng/tối hiện
tại của bạn, nên chúng không còn nổi bật như một hộp trắng lệch tông trong dark mode.

## Tương tác với một node

Preview Flow là một trình xem, không phải trình chỉnh sửa — bạn không thể kéo node
hay vẽ kết nối mới. Bấm vào một node sẽ mở đúng các hộp thoại cấu hình mà bạn tiếp
cận được từ trang Data Sources hoặc Model Manager, trong một drill-in drawer:

- **Input node** — `Edit config`, `Pair model`, `Map tags`, và công tắc `Enable`/`Disable`.
- **Output node** — `Edit config`, `Map outputs`, `Test write`, và công tắc `Enable`/`Disable`.
- **Model node** — một bản tóm tắt chỉ đọc (`Version`, `Status`, `Input shape`,
  `Output shape`). Chi tiết model ở đây chỉ đọc; quản lý model trên trang Model
  Manager.

Lưu bất kỳ thay đổi nào sẽ khiến canvas được suy ra lại từ cấu hình đã cập nhật, nên
đồ thị luôn phản ánh trạng thái ghép cặp/bật hiện tại sau khi bạn đóng drawer.

**Chế độ xem chỉ đọc, không có bề mặt thay đổi mới**

Bản thân Preview Flow không ghi gì cả. Mọi hành động có sẵn từ drawer của một node
đều là một thao tác Data Sources / Model Manager đã tồn tại được tái sử dụng ở đây —
trang này không thêm cách mới nào để thay đổi cấu hình của bạn ngoài những gì các
trang đó đã cung cấp.

## Nếu có gì đó trục trặc

- Canvas hiển thị một cặp ghép treo/không hợp lệ, hoặc một output "not connected" —
  hãy ghép input với một model hợp lệ, hoặc khớp shape của output với model đang hoạt
  động. Xem runbook [Khắc phục sự cố](/vi/troubleshooting/).

## Tiếp theo

  - [Giám sát các dự đoán](/vi/operate/monitoring/) — Độ trễ, thông lượng, và KPI khi một datasource đang truyền dữ liệu luồng.
  - [Cấu hình một nguồn dữ liệu đầu vào](/vi/configure/input-datasources/) — Ghép cặp, bật, và ánh xạ tag cho một input để cung cấp dữ liệu cho model.
