Skip to content
··12 phút đọc

Tôi Dịch 3,9 Triệu Từ Trong 4 Ngày Với Các AI Agent Song Song

493 bài viết trải dài 17 năm, dịch sang 10 ngôn ngữ, ~4.900 file, ~3,9 triệu từ. Các AI agent song song của Claude Code đã làm cho điều đó trở thành khả thi — nhưng thảm họa tiếng Hàn, vấn đề giọng Quảng Đông, và giới hạn 5 tiếng sử dụng đã dạy tôi nhiều hơn cả những gì thành công mang lại.

Một tháng trước, tôi đã thêm 5 ngôn ngữ vào DIALØGUE trong 48 giờ và viết về việc tại sao các tài liệu lập kế hoạch lại là bí quyết để AI thực thi nhanh.

Đó là 5 ngôn ngữ cho một app duy nhất với khoảng 400 chuỗi giao diện.

Tuần này, tôi thử một thứ lớn hơn nhiều: bản địa hóa toàn bộ blog của mình — 493 bài viết trải dài 17 năm — sang 10 ngôn ngữ. Tiếng Việt, tiếng Indonesia, tiếng Tây Ban Nha, tiếng Pháp, tiếng Bồ Đào Nha, tiếng Đức, tiếng Nhật, tiếng Hàn, tiếng Trung giản thể và tiếng Quảng Đông.

~4.900 file đã được dịch. ~3,9 triệu từ. 4 ngày.

Đây không phải câu chuyện về việc AI huyền diệu như thế nào. Đây là câu chuyện về những gì thực sự xảy ra khi bạn tung hàng nghìn tác vụ dịch thuật vào các AI agent chạy song song — sự phối hợp nào hoạt động, những thất bại nào chỉ hiện ra khi bạn đọc lại đầu ra, và sự thật không mấy dễ chịu về kiểm soát chất lượng khi máy móc viết với quy mô lớn.


Bài Toán Về Quy Mô

Blog của tôi bắt đầu từ năm 2007. Có những bài chỉ 300 từ về search marketing tại Singapore. Có những bài dài 5.000 từ phân tích quan hệ Mỹ-Trung hay hướng dẫn định cư cho người nước ngoài. Kho lưu trữ bao gồm đủ thứ từ phân tích Yahoo SEM đến điểm sách đến ra mắt sản phẩm AI.

Dịch 493 bài thủ công sang 9 ngôn ngữ sẽ tốn của một đội dịch thuật chuyên nghiệp vài tuần. Có thể vài tháng. Và chi phí sẽ nằm đâu đó giữa "khó chịu" và "cầm cố nhà."

Nhưng tôi đã xây dựng xong hạ tầng i18n — định tuyến next-intl, các component nhận biết locale, ISR cho các trang không phải tiếng Anh — như một phần của chiến lược quốc tế hóa rộng hơn. Stack kỹ thuật đã sẵn sàng. Tôi chỉ cần nội dung.


Ngày 1: Tiếng Việt Và Những Bài Học Đầu Tiên

Tôi bắt đầu với tiếng Việt vì nó gắn với cá nhân — đây là tiếng mẹ đẻ của tôi. Tôi có thể đọc từng bài được dịch và ngay lập tức biết nếu có gì đó nghe không ổn.

Claude Code đã dịch toàn bộ 493 bài trong một phiên. Quy trình trông có vẻ gọn gàng:

  1. Đọc file MDX tiếng Anh
  2. Dịch nội dung, giữ nguyên toàn bộ cấu trúc frontmatter
  3. Giữ nguyên URL, code block và các thuật ngữ kỹ thuật
  4. Ghi file đã dịch vào content/blog/vi/YYYY/MM/DD/slug.mdx
  5. Kết thúc bằng lời chào tương đương tiếng Việt của "Cheers, Chandler"

Lượt QA đầu tiên phát hiện ra một mẫu sẽ ám ảnh mọi ngôn ngữ: URL và lời ký tên. Agent sẽ "dịch" các URL blog nội bộ (biến /blog/2024/... thành các slug tiếng Việt không tồn tại), thay thế "Chandler" bằng một biến thể tên tiếng Việt, và đôi khi mất hoàn toàn trường slug trong frontmatter.

Tôi đã xây dựng một checklist QA:

  • Số lượng file khớp với nguồn (493)
  • Không có file rỗng hoặc file stub
  • Tất cả frontmatter có slug, title, date, categories
  • Không có URL nội bộ bị viết lại
  • Lời ký tên khớp với quy ước của locale đích
  • Với ngôn ngữ CJK: ký tự bản ngữ thực sự có mặt

Checklist đó trở thành xương sống của mọi locale tiếp theo.


Ngày 2: Đột Phá Với Agent Song Song

Với tiếng Việt hoàn thành và checklist QA đã được chứng minh, tôi cần đẩy nhanh hơn. Tính năng vượt trội của Claude Code cho loại công việc này là dispatch subagent song song — bạn có thể khởi chạy nhiều agent độc lập cùng lúc, mỗi agent xử lý các file riêng biệt đồng thời.

Đây là cách phối hợp trông như thế nào với tiếng Tây Ban Nha:

Dispatching 30 translation agents...
├── Agent 1: 2007-2008 posts (42 posts)
├── Agent 2: 2009 posts (38 posts)
├── Agent 3: 2010-2011 posts (35 posts)
├── ...
├── Agent 28: 2025 Nov-Dec posts (12 posts)
├── Agent 29: 2026 Jan posts (8 posts)
└── Agent 30: 2026 Feb posts (9 posts)

Mỗi agent nhận một lô bài, style guide, checklist QA và quy ước ký tên. Chúng chạy song song, ghi file độc lập. Không cần phối hợp vì mỗi agent chạm vào các file khác nhau.

Tiếng Tây Ban Nha: 493 bài được dịch trong một phiên. Rồi tiếng Pháp. Rồi tiếng Bồ Đào Nha. Rồi tiếng Đức. Rồi tiếng Nhật.

Năm ngôn ngữ trong khoảng 12 giờ. Đó là phần cảm giác như tương lai — nhìn terminal của bạn hiện lên 30 thanh tiến trình đồng thời, mỗi agent đang nghiền qua một thập kỷ bài viết blog trong khi bạn nấu ăn tối.

Đây là mô phỏng phiên dịch Cantonese (zh-HK) thực tế trông như thế nào — từ lập kế hoạch đến dispatch đến QA:

Claude Code

Mẫu Phối Hợp

Mẫu đã hình thành:

  1. Tạo trước tất cả thư mục — agent thất bại âm thầm nếu thư mục đích không tồn tại
  2. Chia lô theo khoảng năm — 10-15 bài mỗi agent cho bài thường, 2-3 bài mỗi agent cho bài dài 3.000+ từ
  3. Đưa style guide vào mỗi lần dispatch — các agent không có bộ nhớ chung, nên mỗi agent cần đầy đủ ngữ cảnh
  4. Chạy QA sau khi mỗi locale hoàn thành — đếm file, file rỗng, frontmatter hỏng, URL bị viết lại, tính nhất quán của lời ký tên
  5. Sửa phần còn lại bằng cleanup agent có mục tiêu — luôn có 5-15 bài bị bỏ sót hoặc bị lỗi

Thảm Họa Tiếng Hàn

Tiếng Hàn lẽ ra chỉ là việc bình thường. Cùng mẫu như 7 ngôn ngữ kia. Dispatch agent, chờ, QA, sửa phần còn lại.

Thay vào đó, đó là chất lượng dịch thuật tệ nhất trong mọi locale.

72% bài tiếng Hàn không phải bản dịch — chúng là bản tóm tắt. Các agent đã rút gọn 350+ bài thành những tóm tắt 2-3 đoạn, mất hết chi tiết, mất hết tính cách, mất hết sắc thái. Một bài phân tích 4.000 từ về "Principles" của Ray Dalio trở thành tổng quan 200 từ. Một hướng dẫn SEM chi tiết trở thành "Bài viết này thảo luận về các chiến lược marketing công cụ tìm kiếm."

File chuỗi giao diện (messages/ko.json) còn tệ hơn. Lẫn lộn tiếng Hàn và tiếng Anh xuyên suốt, với các ký tự bị hỏng như "Ch및ler" thay vì "Chandler." Ký tự trong tiếng Hàn có nghĩa là "và" — bằng cách nào đó model đã thay thế nó vào giữa từ.

Tôi phải làm lại toàn bộ locale từ đầu. Từng bài một. Lần thứ hai, với hướng dẫn nghiêm ngặt hơn về việc giữ nguyên nội dung đầy đủ và khớp độ dài bài gốc, kết quả ra sạch đẹp.

Bài học: thực thi song song khuếch đại sai lầm. Nếu prompt của bạn có một lỗ hổng nhỏ, 30 agent sẽ mắc cùng sai lầm đó 30 lần nhanh hơn. QA không phải tùy chọn — đó là thứ duy nhất đứng giữa "xong" và "thảm họa."


Vấn Đề Tiếng Trung: 43 Commit Để Làm Đúng

Tiếng Trung giản thể (zh) là locale tốn công nhất. Không phải vì vấn đề chất lượng — các bản dịch rất tốt — mà vì 493 bài qua 43 commit riêng biệt cho bạn thấy phiên liên tục bị đụng giới hạn.

Claude Code chạy trên API của Anthropic, và có giới hạn sử dụng. Ngay cả ở tier Max với Sonnet 4.6, các phiên mở rộng dispatch hàng chục agent song song sẽ đến lúc gặp thời gian chờ 5 tiếng. Với tiếng Trung, điều đó có nghĩa là dịch theo từng đợt: ~50 bài, đụng giới hạn, chờ, tiếp tục, lại đụng giới hạn.

Các bản dịch tiếng Trung cũng cần QA nhiều nhất vì nội dung CJK có những kiểu lỗi đặc trưng:

  • Ký tự từ script sai (chữ kanji Nhật lẫn vào tiếng Trung giản thể)
  • Văn phong quá trang trọng, đọc như văn bản chính phủ thay vì blog
  • Dấu câu phương Tây thay vì dấu câu Trung Quốc (,so với , và 。so với .)
  • Tên được dịch khi không nên dịch ("Claude" là "Claude" trong tiếng Trung, không phải 克劳德)

Vấn Đề Giọng Quảng Đông

Khi tôi thêm tiếng Trung phồn thể với giọng Quảng Đông (zh-HK), tôi đối mặt với một thách thức hoàn toàn khác. Các bản dịch cần dùng các hạt từ đặc trưng của tiếng Quảng Đông — 嘅 (sở hữu cách), 咗 (thì quá khứ), 喺 (ở tại), 啲 (một ít), 冇 (không có) — và duy trì giọng văn bình dị, thân mật vốn là đặc trưng của văn viết Quảng Đông.

Các bản dịch tiếng Quan Thoại chuẩn nghe có vẻ quan liêu ở Hong Kong. "本网站提供中文版本" là tiếng Quan Thoại chuẩn, nhưng người đọc tiếng Quảng Đông kỳ vọng "呢個網站有中文版本." Cùng ý nghĩa, giọng điệu hoàn toàn khác.

Thách thức không phải là độ chính xác của bản dịch — mà là tính xác thực của giọng văn. Model có thể tạo ra tiếng Quảng Đông đúng ngữ pháp, nhưng nó mặc định về văn phong Quan Thoại trừ khi bạn chỉ rõ phải dùng các hạt từ thông dụng và các mẫu code-mixing.

Kiểm tra QA của tôi cho tiếng Quảng Đông bao gồm grep từng file để tìm sự hiện diện của các hạt từ đặc trưng. 493 trên 493 đạt. Nhưng tôi vẫn phải viết lại toàn bộ file chuỗi giao diện messages/zh-HK.json thủ công vì phiên bản đầu tiên có ~70% tiếng Anh — agent đã bỏ qua phần lớn các bản dịch.


Những Gì Tôi Thử Với OpenAI Codex

Đâu đó trong quá trình dịch tiếng Đức, tôi đụng giới hạn của Claude Code và quyết định thử OpenAI's Codex trong khi chờ. Tôi có một tháng dùng thử ChatGPT Plus miễn phí, bao gồm quyền truy cập Codex.

Điểm tốt: Codex tạo ra các tài liệu lập kế hoạch chắc chắn. Phân tích ban đầu của nó về codebase và đề xuất phương pháp dịch thuật được cấu trúc rõ ràng và hợp lý. Thời gian phản hồi nhanh. Và nó tuân theo hướng dẫn chặt chẽ — gần như quá chặt, điều đó đôi khi lại là ưu điểm.

Điểm xấu: Phiên bản tôi dùng (gpt-5.2-codex) không thể chạy subagent song song. Nó xử lý bài tuần tự — từng bài một. Với 493 bài, điều đó không khả thi. Nó cũng hoạt động theo từng đợt ngắn, hoàn thành 5-10 bài rồi dừng lại để hỏi phản hồi. Mỗi lần, tôi phải nói "tiếp tục" để nhận lô tiếp theo.

Khi gpt-5.3-codex ra mắt giữa phiên, tôi chuyển sang. Tốt hơn, nhưng vẫn không có thực thi song song. Sự khác biệt kiến trúc cơ bản — Claude Code có thể dispatch 30+ agent độc lập chạy đồng thời, trong khi Codex hoạt động như một quy trình tuần tự đơn — khiến Claude Code nhanh hơn đáng kể cho các tác vụ nội dung số lượng lớn.

So sánh trung thực: Codex tốt cho công việc tập trung vào một file. Nó phản hồi tốt và làm theo chỉ dẫn đúng. Nhưng cho loại thực thi song song quy mô lớn tôi cần — 4.437 file qua 9 locale — kiến trúc agent của Claude Code thuộc một đẳng cấp hoàn toàn khác.


Checklist Đã Cứu Tất Cả

Mỗi locale đều qua cùng một pipeline QA:

✓ File count: 493/493
✓ Empty files: 0
✓ Small files (<100 bytes): 0
✓ Missing slugs: 0
✓ Rewritten URLs: 0
✓ Broken frontmatter: 0
✓ Wrong sign-off: 0
✓ Native characters present: 493/493

Với ngôn ngữ CJK, tôi thêm:

✓ Cantonese particles (嘅/咗/喺/啲/冇): 493/493
✓ No mixed-script contamination: PASS
✓ Chinese punctuation: PASS

Nếu không có checklist này, tôi đã đưa các bản tóm tắt tiếng Hàn lên production. Tôi đã đưa giao diện tiếng Quảng Đông với 70% tiếng Anh lên. Tôi đã đưa các bài blog với link nội bộ hỏng trỏ đến các slug đã dịch không tồn tại lên.

Checklist không phải là thủ tục hành chính. Đó là QA đáng tin cậy duy nhất khi pipeline production của bạn tạo ra hàng nghìn file mà bạn không thể đọc hết từng cái một.


Con Số Cuối Cùng

Ngôn ngữ11 (tiếng Anh + 10 bản dịch)
Bài được dịch493 bài mỗi ngôn ngữ × 10 = ~4.900 file
Số từ~3,9 triệu
Ngày dương lịch4 (24–27/02)
File chuỗi giao diện10 file JSON locale (~475 key mỗi file)
Template email10 locale
Dữ liệu hành trìnhMilestones + learning paths được dịch qua JSONB
Số lần đụng giới hạnKhông đếm nổi
Locale phải làm lại hoàn toàn1 (tiếng Hàn)

Những Gì Tôi Thực Sự Học Được

1. Style guide là tất cả. Giọng Quảng Đông, mức độ trang trọng của tiếng Hàn, lời ký "Abraço" bằng tiếng Bồ Đào Nha — những thứ này không phải trang trí. Chúng là sự khác biệt giữa "được dịch" và "được bản địa hóa." Không có style guide, bạn nhận được nội dung đúng ngữ pháp nhưng đọc như văn bản chính quyền.

2. Agent song song là bội số lực lượng — và bội số rủi ro. Khi 30 agent thực thi đúng, bạn hoàn thành một ngôn ngữ trong một tiếng. Khi 30 agent thực thi cùng một sai lầm, bạn nhận 350 bài bị rút gọn và phải làm lại toàn bộ.

3. QA không phải tùy chọn ở quy mô lớn. Bạn không thể tự mình xem lại 4.437 bài đã dịch. Nhưng bạn có thể tự động hóa các kiểm tra cấu trúc để bắt các lỗi phổ biến nhất: file thiếu, frontmatter hỏng, URL bị viết lại, lời ký sai, nội dung bị rút gọn.

4. Phần khó nhất không phải dịch thuật — mà là giọng văn. Bất kỳ LLM nào cũng có thể dịch văn bản. Làm cho nó nghe như người đã viết bản gốc — duy trì sự ấm áp, sự bình dị, sự tò mò trí tuệ — qua 9 ngôn ngữ và 17 năm phong cách viết không ngừng thay đổi, điều đó đòi hỏi hướng dẫn rõ ràng và tinh chỉnh lặp đi lặp lại.

5. Giới hạn sử dụng là ràng buộc thực sự. Ngay cả ở tier cao nhất, các phiên agent song song mở rộng sẽ đụng giới hạn. Hãy lập kế hoạch cho các gián đoạn. Cấu trúc công việc để bạn có thể tiếp tục từ chỗ dừng lại.

6. Kiểm tra với người đọc thực. Tôi có thể tự QA các bản dịch tiếng Việt. Với tiếng Hàn hay tiếng Nhật, tôi dựa vào kiểm tra cấu trúc và tin tưởng vào model. Đó là khoảng trống đã biết. Nếu bạn nghiêm túc về chất lượng trong các ngôn ngữ bạn không biết, hãy để người đọc bản ngữ kiểm tra ngẫu nhiên một mẫu.


Có Đáng Không?

Blog của tôi giờ đây tiếp cận độc giả bằng tiếng mẹ đẻ của họ qua 11 locale. Một chuyên gia marketing người Việt tại TP. Hồ Chí Minh có thể đọc phân tích năm 2011 của tôi về thị trường tìm kiếm Singapore bằng tiếng Việt. Một nhà nghiên cứu AI người Nhật có thể đọc các bài viết năm 2024 của tôi về việc xây dựng Sydney bằng tiếng Nhật. Người nói tiếng Quảng Đông ở Hong Kong nhận được nội dung nghe như được viết cho họ, không phải được dịch để họ hiểu.

Mọi bản dịch có hoàn hảo không? Không. Dịch máy ở quy mô này có những góc cạnh còn thô. Một số ẩn dụ không chạm đến nơi. Một số tham chiếu văn hóa cần bản địa hóa vượt ra ngoài sự thay thế từ đối từ.

Nhưng phương án thay thế là có 493 bài chỉ bằng tiếng Anh, tiếp cận khoảng 20% người dùng internet thế giới. Giờ đây nó tiếp cận hơn 60%.

Bốn ngày. 3,9 triệu từ. Hạ tầng đã được thiết lập. Mỗi bài mới tôi viết bằng tiếng Anh sẽ được dịch sang 10 ngôn ngữ như một phần của quy trình triển khai.

Câu hỏi thực sự không phải là liệu bản dịch AI có hoàn hảo không. Mà là liệu sự hoàn hảo có đang là kẻ thù của sự tiếp cận không.

Thân mến, Chandler

Đọc tiếp

Hành trình
Kết nối
Ngôn ngữ
Tùy chọn