Bắt đầu
Nếu bạn đang thiết lập một tác nhân lần đầu, hãy cài Youka CLI trước, sau đó cài kỹ năng Youka karaoke:Nhắc lệnh cho tác nhân
Sau khi cài CLI và skill, bạn có thể giao cho tác nhân một nhiệm vụ trực tiếp như sau:Quy tắc vận hành
Luôn dùng --json
Trên CLI, luôn truyền
--json. Trên API, luôn đặt Accept: application/json. Không bao giờ phân tích đầu ra dành cho con người.Luôn gửi một khóa idempotency
Mọi thao tác ghi nên mang một khóa idempotency ổn định để việc thử lại sau khi
timeout trả về kết quả ban đầu thay vì nhân đôi công việc.
Đọc lại trạng thái bền vững
Đừng tin phản hồi đột biến đã cũ. Sau một tác vụ kết thúc, hãy đọc lại
project hoặc export để lấy trạng thái cuối cùng.
Poll với backoff
Bắt đầu với khoảng 2–3 giây. Tăng giãn cách theo cấp số nhân cho các job dài.
Tôn trọng phản hồi 429.
Hợp đồng đầu ra
Mọi lệnh CLI ở chế độ--json ghi chính xác một phong bì ra stdout.
Thành công:
| Code | Meaning | Retry? |
|---|---|---|
0 | Thành công. | N/A |
1 | Lỗi thời gian chạy (network, API, rendering). | Kiểm tra error.retryable. |
2 | Đầu vào không hợp lệ (flag sai, payload không đọc được). | Không — sửa đầu vào. |
Quy trình end-to-end
Quy trình chuẩn cho tác nhân là: tạo project, đợi, export, tải xuống kết quả. Đây là mẫu đầy đủ với cả triển khai CLI và SDK.Hướng dẫn polling
Hầu hết các thao tác ghi trả về operation handles trong SDK. Ưu tiênclient.projects.wait(...) và client.exports.wait(...), và chỉ hạ xuống client.tasks.* khi bạn thực sự cần truy cập task mức thấp.
| Job type | Recommended initial interval | Max wait |
|---|---|---|
| Tạo project (stems + đồng bộ lyrics) | 3 s | 15 min |
| Chỉ tách stem | 3 s | 10 min |
| Chỉ đồng bộ lyrics | 2 s | 5 min |
| Render export | 3 s | 30 min |
--wait sẽ xử lý polling cho bạn. Trên SDK, các helper wait dùng khoảng 2 s theo mặc định và chấp nhận pollIntervalMs.
Khóa idempotency
Mọi thao tác create và update đều hỗ trợ một khóa idempotency. Quy tắc:- Dùng một khóa ổn định, duy nhất, mang tính quyết định cho mỗi đột biến logic. Tốt:
create-song-${sourceHash}. Không tốt: một UUID mới cho mỗi lần retry. - Tái sử dụng cùng khóa qua các lần retry. Server nhận ra việc phát lại và trả về kết quả ban đầu.
- Khóa có phạm vi theo từng tài khoản và hết hạn sau 24 giờ.
- Nếu server trả về
IDEMPOTENT_REPLAY_IN_PROGRESS(HTTP 202), request ban đầu vẫn đang chạy. Hãy đợi và retry với cùng khóa.
Khôi phục lỗi
Rẽ nhánh theoerror.code và error.retryable. Các trường hợp phổ biến:
| Code | Cause | Action |
|---|---|---|
INVALID_REQUEST | Request body không vượt qua xác thực schema. | Sửa payload. Không retry. |
UNAUTHORIZED | Thiếu hoặc API key không hợp lệ. | Hiển thị cho người gọi. Không retry. |
NOT_FOUND | Tài nguyên không tồn tại hoặc bạn không có quyền truy cập. | Không retry. |
CONFLICT (409) | Xung đột phiên bản hoặc va chạm idempotency. | Retry với cùng khóa idempotency. |
TOO_MANY_REQUESTS (429) | Rate limit. | Back off theo Retry-After hoặc 30 s. |
INTERNAL_SERVER_ERROR (500) | Lỗi máy chủ tạm thời. | Retry tối đa 3 lần với backoff. |
IDEMPOTENT_REPLAY_IN_PROGRESS (202) | Request trước vẫn đang chạy. | Đợi và retry với cùng khóa. |
TASK_FAILED | Task async kết thúc thất bại. | Hiển thị error.task.error cho người gọi. Không retry. |
TASK_TIMED_OUT | Task async vượt quá ngân sách thời gian. | Có thể retry an toàn một lần. |
Khám phá các trường có thể thay đổi
Trước khi mutate preset, hãy fetch schema của preset để mô hình biết các field hợp lệ và kiểu giá trị:youka project settings <id> --body ....
Fetch một lần cho mỗi phiên tác nhân và cache kết quả.
Tác nhân song song
Khi nhiều tác nhân chạy đồng thời trên cùng một tài khoản:- Giới hạn phạm vi khóa idempotency theo cả danh tính tác nhân và đột biến logic:
agent-${agentId}-create-${sourceHash}. Điều này ngăn retry của một tác nhân va chạm với request mới của tác nhân khác. - Giữ các thao tác đọc không bị ràng buộc — các request
GETrẻ và không có tác dụng phụ. - Dùng một hàng đợi duy nhất cho
POST /projects/{projectId}/exportstheo từng project nếu bạn cần lịch sử export theo thứ tự. Nếu không, các export có thể đến không theo thứ tự.
Tiếp theo
- CLI global options — mọi flag có sẵn cho tác nhân
- SDK errors — tham chiếu đầy đủ các lớp lỗi
- API async jobs — hợp đồng polling
- API idempotency — hợp đồng idempotency
