Chuyển đến nội dung chính

Quality Gate

Mỗi bản dịch đều phải đi qua một cổng kiểm định (validation gate) mang tính xác định trước khi được ghi vào đĩa. Quality gate này sẽ phát hiện các lỗi dịch máy phổ biến — không có chuyện âm thầm bỏ qua lỗi, không ghi dữ liệu rác vào các tệp ngôn ngữ (locale) của bạn.

Kiểm tra Xác thực

Kiểm traLỗi phát hiệnNhãn Gate
Trống/rỗngMô hình trả về chuỗi rỗng hoặc khoảng trắng[GATE] empty
Lặp lại nguồnMô hình trả về văn bản gốc tiếng Anh[GATE] source-echo
Vòng lặp ảo giácCác mẫu trigram lặp đi lặp lại (ví dụ: "Qo' Qo' Qo'")[GATE] hallucination
Phình to độ dàiKết quả đầu ra dài hơn đáng kể so với nguồn[GATE] length
Tuân thủ hệ chữ viếtSai hệ chữ viết cho locale đích[GATE] script
Các dạng số nhiều ICUThiếu các dạng số nhiều bắt buộc cho locale đó[GATE] icu-plural

Trống/Rỗng

Từ từ chối các bản dịch là chuỗi rỗng, chỉ chứa khoảng trắng, hoặc null. Điều này giúp phát hiện các mô hình không trả về kết quả gì cho các khóa (key) khó.

Lặp lại Nguồn

Phát hiện khi mô hình trả về văn bản nguồn tiếng Anh thay vì dịch nó. Lỗi này thường xảy ra với các chuỗi ngắn và các prompt thiếu chi tiết.

Vòng lặp Ảo giác

Phân tích các mẫu trigram (3 ký tự) trong kết quả đầu ra. Nếu bất kỳ trigram nào lặp lại nhiều hơn một số lần ngưỡng nhất định so với độ dài đầu ra, bản dịch sẽ bị từ chối. Điều này giúp phát hiện các đầu ra bị lỗi thoái hóa như "Qo' Qo' Qo' Qo' Qo'".

Phình to Độ dài

Từ chối các bản dịch có độ dài đầu ra vượt quá maxLengthRatio × source length (mặc định: 4×). Điều này giúp phát hiện các ảo giác của mô hình tạo ra cả một bức tường văn bản cho một đầu vào ngắn.

Có thể cấu hình thông qua maxLengthRatio trong tệp cấu hình của bạn.

Tuân thủ Hệ chữ viết

Đối với các locale có trường script được cấu hình (ví dụ: "script": "cans" cho chữ viết âm tiết Plains Cree), hệ thống sẽ xác thực xem đầu ra có chứa các ký tự non-ASCII phù hợp với hệ chữ viết đích hay không. Đầu ra chỉ chứa ký tự Latin cho một locale tiếng Ả Rập, CJK hoặc Syllabics sẽ bị từ chối.

Điều gì xảy ra khi Thất bại

  1. Bản dịch bị lỗi sẽ được ghi nhật ký (log) vào stderr với tiền tố [GATE], tên khóa (key), lý do và bản xem trước của giá trị
  2. Khóa đó sẽ không được ghi vào tệp locale
  3. Cơ chế thử lại phân tầng (retry cascade) sẽ được kích hoạt (xem bên dưới)
[GATE] hero.title: source-echo — "Welcome to our platform"
[GATE] nav.about: hallucination — "À À À À À À À À"

Thử lại Phân tầng (Retry Cascade)

Khi một loạt (batch) bị lỗi (lỗi phân tích cú pháp JSON hoặc bị từ chối bởi quality gate), Champollion sẽ thử lại với các loạt nhỏ dần:

Full batch (80 keys) → parse error
└→ Half batch (40 keys) → 2 failures
└→ Individual keys (1 each) → isolates the 2 problem keys

Ngân sách thử lại được giới hạn bởi maxRetries (mặc định: 3, có thể cấu hình cho từng ngôn ngữ). Điều này ngăn chặn việc tiêu tốn token ngoài tầm kiểm soát cho các khóa liên tục bị lỗi.

Sau khi đã thử lại hết số lần cho phép, các khóa gặp sự cố sẽ được ghi nhật ký và bỏ qua. Chúng sẽ được thử lại trong lần chạy sync tiếp theo.

Bộ nhớ đệm Prompt (Prompt Caching)

Thông điệp hệ thống (system message - bao gồm văn phong, quy tắc ngữ pháp, lưu ý về phong cách) được tách biệt khỏi thông điệp của người dùng (user message - các khóa cần dịch). Sự phân tách này là có chủ ý:

  • Thông điệp hệ thống là giống hệt nhau giữa các loạt đối với một locale nhất định
  • Các nhà cung cấp như Anthropic và Google sẽ lưu bộ nhớ đệm (cache) cho các thông điệp hệ thống được lặp lại
  • Kết quả: loạt đầu tiên sẽ trả toàn bộ chi phí token, các loạt tiếp theo chỉ trả phí cho thông điệp của người dùng

Điều này có thể giảm đáng kể chi phí token cho các dự án có nhiều loạt dịch.

Xác thực ICU MessageFormat

Lệnh integrity xác thực các mẫu số nhiều ICU MessageFormat dựa trên các quy tắc số nhiều của CLDR. Nếu tệp nguồn của bạn sử dụng cú pháp ICU như:

"items": "{count, plural, one {# item} other {# items}}"

Champollion sẽ xác minh xem các phiên bản dịch có bao gồm tất cả các dạng số nhiều bắt buộc cho locale đích hay không. Ví dụ, tiếng Ả Rập yêu cầu sáu dạng (zero, one, two, few, many, other) — chứ không chỉ có one and other.

Chạy champollion integrity để kiểm tra tính đầy đủ của các dạng số nhiều trên tất cả các locale.

Áp dụng Thuật ngữ bắt buộc

Đối với các cặp được huấn luyện (coached pairs) có kèm từ điển, Champollion sẽ chạy một bước kiểm tra thuật ngữ sau khi dịch. Sau khi vượt qua quality gate, hệ thống sẽ xác minh xem LLM có thực sự sử dụng các thuật ngữ bắt buộc trong từ điển hay không.

[TERM] en→fr: 2 term violation(s)
• hero.title: "dashboard" → expected "tableau de bord" but got "panneau de contrôle"

Các vi phạm thuật ngữ chỉ là cảnh báo, không phải lỗi chặn (blocking error). Bản dịch vẫn sẽ được ghi vào đĩa. Điều này là có chủ ý — LLM có thể có những lý do hợp lý để lựa chọn từ ngữ thay thế (ngữ cảnh, ngữ pháp), và việc chặn bản dịch chỉ vì không khớp thuật ngữ sẽ gây hại nhiều hơn lợi.

Để khắc phục các vi phạm, hãy cập nhật từ điển huấn luyện (coaching dictionary) hoặc chỉnh sửa tệp locale một cách thủ công.


Xem thêm