<!-- Canonical URL: https://ask.atlascloud.ai/vi/product-csv-recoverable-video-production-queue -->

# Làm thế nào biến CSV sản phẩm thành hàng đợi sản xuất video có thể khôi phục?

> Chuyển mỗi dòng sản phẩm thành job có phiên bản, ID ổn định, đầu vào đã xác thực, trạng thái rõ ràng, lịch sử lần thử và vị trí đầu ra bền vững. Hàng đợi có thể khôi phục khi worker tiếp tục an toàn sau sự cố mà không mất việc hoặc tạo cùng video hai lần.

<!-- Canonical URL: https://ask.atlascloud.ai/product-csv-recoverable-video-production-queue -->

# Làm thế nào biến CSV sản phẩm thành hàng đợi sản xuất video có thể khôi phục?

Tệp danh mục là dữ liệu đầu vào, không phải hàng đợi sản xuất. Nếu script chỉ đọc dòng 17, gọi API video và ghi URL vào cột kế tiếp, sự cố hoặc timeout sẽ khiến ba câu hỏi không có đáp án đáng tin: đã yêu cầu gì, provider có chấp nhận không và asset hoàn tất đã được lưu chưa?

Giải pháp thực tế là giữ CSV như bản nhập bất biến, mở rộng thành record job bền vững và làm mỗi bước của worker an toàn khi lặp lại. Hệ thống có thể dừng sau bất kỳ thao tác nào và tiếp tục từ trạng thái được xác nhận cuối cùng thay vì chạy lại toàn bộ batch.

## Tách dữ liệu danh mục khỏi job sản xuất

Dòng sản phẩm mô tả hàng hóa. Job video mô tả một đầu ra sáng tạo được yêu cầu. Đây là các record khác nhau vì một sản phẩm có thể tạo nhiều deliverable.

Giả sử một dòng có ID, tên, URL ảnh, giá, danh mục và mô tả. Kế hoạch yêu cầu hai hook, ba locale và hai tỷ lệ. Dòng đó mở rộng thành mười hai job. Việc sửa mô tả sau đó không được âm thầm thay đổi các yêu cầu đang chạy.

Lưu ba lớp:

* bản nhập gốc gồm hash tệp và thời gian;
* snapshot sản phẩm đã chuẩn hóa cho đợt sản xuất;
* một job cho mỗi tổ hợp template, locale, tỷ lệ và biến thể.

Sự tách biệt khiến việc chạy lại có chủ đích. Tệp mới tạo phiên bản import mới, còn job không đổi có thể được dùng lại nếu toàn bộ fingerprint đầu vào khớp.

## Xác thực CSV trước khi mở rộng

Từ chối dữ liệu xấu trước khi gọi API rẻ hơn chẩn đoán lỗi hỗn hợp sau khi hàng trăm job chạy. Kiểm tra encoding, cột bắt buộc, ID sản phẩm duy nhất, cú pháp URL và giới hạn template.

| Kiểm tra | Ví dụ lỗi | Hành động |
|---|---|---|
| ID sản phẩm ổn định | SKU trống hoặc trùng | Dừng import |
| Media nguồn bắt buộc | Thiếu ảnh chính | Đánh dấu dòng sai |
| Độ dài văn bản | Mô tả vượt giới hạn | Chuyển sang review nội dung |
| Nguồn locale | Mã không được hỗ trợ | Đánh dấu mở rộng sai |
| Dữ liệu số | Giá có text chưa parse | Chuẩn hóa hoặc từ chối |
| Khả năng truy cập URL | Ảnh trả lỗi | Thử xác thực lại, rồi review |

Tạo báo cáo có dòng, trường, giá trị và lý do. Không sửa CSV gốc để che vấn đề. Tệp sửa phải có hash mới và quan hệ truy vết với import bị từ chối.

## Cấp danh tính xác định cho mỗi job

Hàng đợi khôi phục cần danh tính tồn tại qua sắp xếp, khởi động lại và nhập lặp. Số dòng CSV không phù hợp vì thay đổi khi chèn hoặc sắp xếp lại.

Tạo object đầu vào canonical từ các trường xác định đầu ra:

```json
{
  "catalog": "spring-2027",
  "product_id": "SKU-1042",
  "template_version": "ugc-demo-v3",
  "locale": "en-US",
  "aspect_ratio": "9:16",
  "variant": "hook-b"
}
```

Serialize với thứ tự khóa cố định rồi hash. Lưu cả trường đọc được và hash, đặt unique constraint cho khóa job. Nếu cùng phép mở rộng chạy hai lần, database trả job hiện có.

Nội dung ảnh hưởng đầu ra phải tham gia danh tính. Nếu prompt hoặc ảnh nguồn đổi mà phiên bản template không đổi, hãy thêm hash; nếu không hệ thống có thể dùng nhầm kết quả cũ.

## Mô hình hóa hàng đợi bằng trạng thái rõ ràng

Một cờ `done` không giải thích job dừng ở đâu. Dùng trạng thái tương ứng với các ranh giới có thể khôi phục.

| Trạng thái | Ý nghĩa | Hành động an toàn tiếp theo |
|---|---|---|
| `ready` | Đầu vào đã xác thực | Claim job |
| `leased` | Worker tạm sở hữu | Tạo request |
| `submitting` | Request đã chuẩn bị | Gửi với idempotency key nếu hỗ trợ |
| `accepted` | Provider trả job ID | Poll trạng thái |
| `downloading` | Đầu ra sẵn sàng | Sao chép vào storage bền vững |
| `review` | Asset cần kiểm duyệt | Áp dụng quy tắc review |
| `complete` | Asset và metadata đã ghi | Giao hoặc export |
| `retry_wait` | Lỗi tạm thời | Tiếp tục sau backoff |
| `needs_attention` | Cần quyết định con người | Hiển thị ngữ cảnh cho operator |

Lưu provider job ID ngay khi xác nhận chấp nhận. Timeout khi gửi là mơ hồ; giữ lần thử ở trạng thái có thể đối soát thay vì cho rằng không có gì xảy ra.

## Dùng lease thay vì khóa vĩnh viễn

Worker nên claim job trong thời gian giới hạn. Lưu owner và thời điểm hết hạn trong cùng atomic update từ `ready` sang `leased`. Worker khác chỉ được lấy sau khi hết hạn.

Worker gia hạn lease khi xử lý. Nếu tiến trình lỗi, lease hết và worker khác kiểm tra lần thử. Không gửi lại mù quáng; trước tiên tìm provider ID, request key hoặc output hoàn tất.

Chọn lease dài hơn bước cục bộ thông thường nhưng ngắn hơn thời gian khôi phục chấp nhận. Job provider dài không cần worker giữ lease suốt quá trình: lưu remote ID, giải phóng worker và lên lịch kiểm tra sau.

## Ghi lần thử tách khỏi job

Job thể hiện ý định; attempt ghi điều xảy ra trong một lần chạy. Tách chúng ngăn record chính bị ghi đè bởi lỗi mới nhất.

Mỗi lần thử ghi:

* số lần và timestamp;
* danh tính worker và phiên bản phần mềm;
* hash request đã chuẩn hóa;
* provider và tuyến model;
* request hoặc job ID;
* HTTP status và loại lỗi;
* lịch sử polling hoặc trạng thái cuối;
* checksum, kích thước, thời lượng và storage key;
* usage đầu vào và đầu ra nếu có.

Không lưu secret hoặc dữ liệu khách hàng không hạn chế trong log. Giữ bằng chứng đã che đủ để đối soát timeout, retry hoặc hóa đơn.

## Làm gửi và tải có thể lặp an toàn

Idempotency cần ở nhiều ranh giới. Unique constraint ngăn hai job cục bộ, key provider có thể ngăn hai lần gửi remote, và storage key xác định ngăn hai asset không liên quan.

Nếu provider không tài liệu hóa idempotency, coi timeout gửi là kết quả chưa biết. Tìm trong attempt và dùng chức năng liệt kê hoặc lookup trước khi gửi lại. Nếu không thể đối soát, dùng chính sách chờ, review thủ công hoặc gửi lại với rủi ro chi phí trùng được ghi rõ.

Ghi trước vào object tạm, kiểm tra checksum và thuộc tính media, rồi promote sang khóa cuối. Chỉ ghi URI bền vững sau khi xác thực. Tải lại phải xác nhận cùng checksum hoặc chỉ thay object tạm đã chứng minh hỏng.

## Xây khôi phục quanh checkpoint quan sát được

Test bằng cách dừng worker ở mỗi ranh giới: trước gửi, sau chấp nhận, khi polling, trong tải và sau khi ghi asset nhưng trước update database.

| Điểm gián đoạn | Bằng chứng | Hành vi kỳ vọng |
|---|---|---|
| Trước API | Không ID, request chưa đánh dấu gửi | Gửi một lần |
| Sau chấp nhận | ID đã lưu | Tiếp tục polling |
| Timeout gửi | Fingerprint request, kết quả chưa rõ | Đối soát trước retry |
| Trong tải | Object tạm và metadata | Tiếp tục hoặc khởi động lại |
| Sau ghi bền vững | Checksum nhưng trạng thái chưa xong | Xác minh rồi hoàn tất |

Theo dõi tuổi hàng đợi, thời gian trong trạng thái, số lần thử, lease hết hạn, gửi chưa biết, dòng sai và tồn đọng review. Các metric này phản ánh sức khỏe tốt hơn một tỷ lệ thành công.

## Giữ tầng model có thể thay thế

Hàng đợi nên phụ thuộc adapter chuẩn hóa, không phải response riêng của provider rải khắp code. Adapter chuyển request chung sang schema model và trả record chuẩn hóa cho accept, status, usage, error và output.

[Atlas Cloud](https://www.atlascloud.ai/?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=product-csv-recoverable-video-production-queue) hữu ích khi kế hoạch gồm model văn bản, hình ảnh và video nhưng team muốn một nền tảng tương thích OpenAI và một quan hệ billing. Nó đơn giản hóa tích hợp và kế toán, nhưng không thay ID job, log attempt, storage bền vững hoặc kiểm tra capability.

Lưu provider, model ID chính xác, phiên bản adapter và tham số với mỗi attempt. Đổi route không được khiến output cũ không thể giải thích.

## Kết luận

Biến CSV thành hàng đợi có thể khôi phục bằng cách xem tệp như import có phiên bản, mở rộng sản phẩm thành job xác định và lưu trạng thái cùng attempt rõ ràng. Dùng lease hết hạn, đối soát lần gửi mơ hồ và sao chép output đã xác minh vào storage bền vững. Thiết kế thành công khi bất kỳ worker nào sau sự cố có thể xác định hành động an toàn tiếp theo chỉ từ bằng chứng đã lưu.

## FAQ

### ID duy nhất của job video tạo từ CSV nên là gì?

Dùng ID xác định từ danh mục, ID sản phẩm, phiên bản template, locale và biến thể đầu ra. Không dùng số dòng vì nó thay đổi khi sắp xếp hoặc chèn.

### Một dòng CSV có nên bằng một job video?

Không phải lúc nào cũng vậy. Một dòng có thể mở rộng thành nhiều job cho nhiều ngôn ngữ, tỷ lệ, hook hoặc template. Giữ dòng nguồn tách khỏi record job mở rộng.

### Worker nên thử lại một lần tạo thất bại bao nhiêu lần?

Đặt chính sách nhỏ và có giới hạn theo loại lỗi. Thử lại lỗi mạng và provider tạm thời với backoff, nhưng chuyển đầu vào sai và lần thử cạn sang review hoặc dead-letter.

### Video đã tạo nên được lưu ở đâu?

Sao chép đầu ra thành công vào object storage bền vững dưới khóa dự đoán được. Không coi URL tải tạm của provider là vị trí cuối.

### Làm sao tiếp tục hàng đợi sau khi tiến trình lỗi?

Lưu mọi chuyển trạng thái và dùng lease có hạn. Khi khởi động lại, lấy lại job hết lease, kiểm tra lần thử mới nhất và chỉ tiếp tục bước chưa xong.

### Có thể dùng Atlas Cloud trong hàng đợi nhiều model không?

Có. Atlas Cloud có thể giảm công việc tích hợp khi dùng model văn bản, hình ảnh và video qua một nền tảng tương thích OpenAI, nhưng hàng đợi vẫn phải chuẩn hóa trạng thái và đầu ra riêng của provider.
