Read Frog

Một yêu cầu được ghép lại như thế nào

Thứ tự Read Frog dựng nên câu lệnh nó gửi đi, và nó làm gì với văn bản mô hình trả về.

Hai trường câu lệnh bạn điền không phải là thứ rời khỏi trình duyệt. Read Frog thêm các khối quy tắc, thay biến, kèm thuật ngữ; rồi làm kha khá việc với câu trả lời trước khi bất cứ phần nào của nó tới được trang. Trang này đi qua cả hai nửa, theo thứ tự.

Toàn bộ ở đây nói về nhà cung cấp LLM. Google Translate, Microsoft Translator và DeepL không nhận câu lệnh nào, và không bước nào trong số này áp cho chúng.

Ghép yêu cầu

1. Chọn các đoạn

Content script thu các đoạn khi chúng tiến gần khung nhìn, loại đi những đoạn bị một quy tắc bỏ qua hoặc bộ lọc văn bản ngắn gạt ra, rồi giao phần còn lại cho một hàng đợi. Trên nhà cung cấp LLM, hàng đợi gom những đoạn tương thích với nhau vào cùng một yêu cầu — cùng nhà cung cấp, cùng cặp ngôn ngữ, cùng ngữ cảnh trang — cho tới khi chạm các giới hạn về số ký tự và số đoạn ở trang Kiểm soát yêu cầu. Nhóm đó chính là thứ trở thành {{input}}.

2. Chọn câu lệnh

Read Frog tra id câu lệnh bạn đã chọn. Nếu id đó trỏ tới một câu lệnh tích hợp sẵn thì bản tích hợp sẵn thắng; nếu không, nó tìm trong các câu lệnh của bạn; nếu cả hai bên đều không khớp — chẳng hạn bạn đã xóa đúng câu lệnh đang được chọn — thì nó rơi về Mặc định thay vì báo lỗi.

3. Thêm các khối quy tắc

Các chỉ dẫn bổ sung được thêm vào system prompt, và chỉ khi cần tới. Đây là lý do cùng một câu lệnh lại tạo ra những yêu cầu khác nhau ở những đoạn khác nhau.

KhốiĐược thêm vào khi
Quy tắc nhiều đoạnYêu cầu mang theo nhiều hơn một đoạn
Quy tắc "đã ở ngôn ngữ đích"Yêu cầu mang theo nhiều hơn một đoạn, và chỉ với dịch trang
Quy tắc bảo vệ dấu hiệu HTMLVăn bản có chứa một dấu hiệu data-rf-attr
Quy tắc bảo vệ chỗ giữVăn bản có chứa một chỗ giữ công thức có số thứ tự

Yêu cầu chỉ có một đoạn thì không nhận khối nào. Dịch phụ đề nhận các quy tắc nhiều đoạn, nhưng không bao giờ nhận quy tắc "đã ở ngôn ngữ đích".

4. Thay các biến

Đến lúc này các tên {{...}} mới được thay, ở cả hai trường, bằng những giá trị mô tả trong Biến trong câu lệnh. Chỉ những tên đã biết được thay; mọi thứ khác giữ nguyên như bạn viết.

5. Kèm bảng thuật ngữ

Cuối cùng, những thuật ngữ trong bảng thuật ngữ của bạn mà thực sự xuất hiện trong văn bản này được thêm vào câu lệnh hệ thống. Chúng đứng cuối là có chủ ý: một thuật ngữ là văn bản do bạn gõ, và nếu nó được kèm vào trước bước thay biến, một thuật ngữ tình cờ chứa tên biến có thể viết lại câu lệnh quanh nó.

Một yêu cầu đã thành hình

Hai đoạn của một bài viết tiếng Anh, dịch sang tiếng Trung giản thể, dùng câu lệnh Mặc định và Ngữ cảnh thông minh AI đang tắt. Đây là system prompt được gửi đi:

You are a professional Simplified Mandarin Chinese native translator who needs to fluently translate text into Simplified Mandarin Chinese.

## Translation Rules
1. Output only the translated content, without explanations or additional content ...
2. The returned translation must maintain exactly the same number of paragraphs and format as the original text.
3. If the text contains HTML tags, consider where the tags should be placed in the translation while maintaining fluency.
4. For content that should not be translated (such as proper nouns, code, etc.), keep the original text.

## Document Metadata for Context Awareness
Webpage title: Why your timestamps are eight hours off — devblog
Webpage summary: No summary available

## Multi-paragraph Translation Rules
1. If input contains a standalone line containing only %%, use a standalone %% line in your output ...
2. **CRITICAL**: Treat %% as a separator only when it appears on its own line ...

## OUTPUT FORMAT:
- **Single paragraph input** → Output translation directly (no separators, no extra text)
- **Multi-paragraph input** → Put %% on its own line between translations

## Already-translated Input Rule
Output only {{NO_TRANSLATION_NEEDED}} when only non-translatable names, brands, handles, URLs, numbers, or code differ from Simplified Mandarin Chinese. A foreign-language phrase or clause must be translated.

Và đây là prompt:

Translate to Simplified Mandarin Chinese:


Every timestamp you store without a zone is a bug waiting for a plane ticket.

%%

The fix is boring: store UTC, render local, and never let the two meet in a database column.

Để ý hai dòng trống sau dấu hai chấm — chúng đến từ chính trường prompt, tức là Translate to {{targetLanguage}}: rồi hai dòng trống rồi {{input}}.

Đọc câu trả lời

1. Cắt khoảng trắng và chia

Câu trả lời được cắt khoảng trắng hai đầu, rồi chia theo những dòng không chứa gì ngoài %%. Mỗi mảnh lại được cắt khoảng trắng một lần nữa và ghép với đoạn nằm ở đúng vị trí đó trong yêu cầu. Một %% nằm giữa câu, trong mẫu mã hay trong một đoạn trích thì không phải dấu phân tách — chỉ dòng nào không chứa gì khác mới tính.

2. Kiểm số lượng

Read Frog đòi số mảnh cắt ra đúng bằng số đoạn nó đã gửi. Lệch số là cả nhóm thất bại hoàn toàn, chứ không phải thành công một phần: yêu cầu được thử lại tối đa ba lần với khoảng chờ tăng dần, và nếu vẫn không khớp, từng đoạn trong nhóm sẽ được gửi lại riêng lẻ. Cách đó chậm hơn và tốn hơn, nên một câu lệnh khiến mô hình thêm lời bình hoặc gộp đoạn không chỉ là không gọn gàng, mà là thật sự đắt.

3. Xử lý "không có gì cần dịch"

{{NO_TRANSLATION_NEEDED}} là câu trả lời mà mô hình được dặn phải đưa ra cho một đoạn vốn đã viết bằng ngôn ngữ đích của bạn. Khi một mảnh đúng bằng dấu hiệu đó, Read Frog coi bản dịch là rỗng, và bản dịch rỗng thì không hiển thị gì — ở chế độ song ngữ không có dòng thứ hai nào hiện dưới đoạn đó, còn ở chế độ chỉ bản dịch thì nguyên văn vẫn ở lại.

Dấu hiệu này được lưu vào bộ nhớ đệm y nguyên, nên một đoạn đã ngã ngũ theo cách đó sẽ không bị gửi lại ở lần ghé sau. Nó được cố ý tạo hình giống một biến: bước thay biến chỉ thay những tên nó biết, nên dấu hiệu này đi qua cả quá trình ghép câu lệnh mà không hề sứt mẻ, và lần nào tới mô hình cũng được viết y như nhau.

4. Bỏ đi bản dịch chẳng nói gì

Khi nhận văn bản vốn đã cùng ngôn ngữ, mô hình thường không dùng dấu hiệu đó mà chép lại nguyên văn kèm vài khác biệt bề mặt — khoảng trắng bị xếp lại, dấu nháy thẳng thành dấu nháy cong, dấu câu toàn phần. Read Frog gạt những khác biệt đó đi rồi so câu trả lời với bản gốc, và nếu hai bên trùng nhau thì nó cũng coi kết quả là rỗng. Đây là lý do trên một trang trộn nhiều ngôn ngữ, có những đoạn rõ ràng đã gửi yêu cầu mà lại không thấy bản dịch.

5. Đối chiếu các dấu hiệu

Nếu văn bản có mang các dấu hiệu data-rf-attr, câu trả lời phải trả lại từng dấu hiệu đúng một lần, trên cùng loại phần tử. Dấu hiệu bị thiếu, bị lặp, bị tự nghĩ ra, hoặc chuyển sang một thẻ khác sẽ làm đoạn đó thất bại, thay vì hiển thị một liên kết trỏ đi đâu mất.

Các chỗ giữ công thức có số thứ tự được kiểm nhẹ tay hơn. Câu trả lời làm mất hay làm lặp một chỗ giữ thì vẫn được hiển thị — những công thức bị thiếu sẽ được thêm vào cuối — nhưng nó không được ghi vào bộ nhớ đệm, nên lần ghé sau sẽ là một lần thử mới chứ không phải một đoạn hỏng vĩnh viễn.

6. Lưu lại

Thứ sống sót được ghi vào bộ nhớ đệm bản dịch, và trang được cập nhật.

Key của bộ nhớ đệm

Một bản dịch đã lưu đệm được đánh key bằng — ngoài những thứ khác — system prompt đã thành hình và prompt đã thành hình: sau các khối quy tắc, sau bước thay biến, sau bảng thuật ngữ.

Điều đó dẫn tới ba hệ quả đáng biết:

  • Sửa một câu lệnh là bỏ rơi mọi bản dịch làm ra bằng câu lệnh cũ. Những trang bạn đã đọc sẽ được dịch lại, và trả tiền lại.
  • Sửa bảng thuật ngữ chỉ bỏ rơi những đoạn có chứa một thuật ngữ khớp. Đoạn không khớp gì cả sẽ tạo ra một câu lệnh giống hệt từng byte với trường hợp không hề có bảng thuật ngữ, nên mục lưu đệm của nó vẫn còn.
  • Bật hay tắt Ngữ cảnh thông minh AI làm đổi mọi key, vì biến tóm tắt thay đổi — từ một bản tóm tắt thật thành No summary available hoặc ngược lại.

Xóa bộ nhớ đệm ở Cài đặt → Dịch sẽ bỏ đi các bản dịch và bản tóm tắt trang đã lưu. Nó không đụng tới câu lệnh, nhà cung cấp hay bảng thuật ngữ của bạn.

On this page