前言

這次的 NMIXX 歌詞翻譯想要多放”羅馬拼音”、“中、“日”、“英”四個語言
想要藉由 LLM 一次翻譯完畢
但發現整筆 json 直接丟給 LLM 的品質不佳
為了解決一次性輸入大量資料
決定改由 N 8 N 來處理切片翻譯
除了自行建立 workflow 處理外
這次也有嘗試使用 agent mode 去處理 (IDE, CLI 都行),效果也是不錯的
但 N 8 N 來處理可以讓輸出格式更加穩定

Workflow

輸入->資料前處理 (切 batch) -> 送 LLM -> 資料後處理 (合併資料) -> 存 Google Drive

資料結構

在設計系統時
有把歌曲 import/export to json 做出來
使得要透過 LLVM 處理這些資訊輕鬆很多

{
  "id": "nmixx-home",
  "video_id": "WY9DAofy0QI",
  "title": "HOME",
  "artist": "NMIXX",
  "album": "expérgo",
  "createdAt": "2025-10-18T22:14:19.296Z",
  "updatedAt": "2025-10-19T17:37:21.805Z",
  "lines": [
    {
      "startMs": 5410,
      "endMs": 11690,
      "text": {
        "ko": "끝을 알리는 sirens 잠시 멈춰 (Yuh)"
      },
      "id": "line-1"
    },
	...
  ],
  "annotations": [],
  "meta": {
    "durationMs": 164000,
    "langs": [
      "ko",
      "romaji",
      "en",
      "ja",
      "zh-Hant"
    ]
  }
}

資料前處理

這邊要做的很簡單
就是把歌詞部分從 json 提出
切成多個片段
透過片段翻譯,減少幻覺,提升翻譯品質
因為翻譯不需要太強大的模型能力,這裡是使用 Gemini flash 模型,

AI Agent

這邊有做的是提供 system prompt + Structured Output Parser
這裡有待優化的地方
偶爾會出現 format Error 導致翻譯鏈中止
看設定還有很多地方可以避免錯誤

SYSTEM PROMPT

你將收到一個完整的 JSON 物件,結構如下:

{json tamplate}

請嚴格遵守以下規則:

1. **翻譯來源:**
   只處理每一行中的 `lines.<index>.text.ko`(韓文欄位)。

   * 若 `ko` 欄含英文或專有名詞,需合理保留或音譯。
   * 不改動其他欄位(例如:`id`、`時間戳`、`meta` 等)。

2. **輸出內容:**
   在原 JSON 結構內填入以下四種翻譯結果:

   * `romaji`: 韓文羅馬拼音,以 **常見羅馬化規則**。

     * 單字間用 **`-`** 分隔,例如 `안녕하세요` → `an-nyeong-ha-se-yo`。
   * `zh-Hant`: 自然口語的繁體中文翻譯。
   * `en`: 自然英文翻譯。
   * `ja`: 自然日文翻譯。
   * 若行中含英文,英文部分原樣保留(但整行仍需完整轉寫)。

3. **格式要求:**

   * 保留 `\n`,避免多餘空白或尾端無意義換行。
   * 不新增或刪除任何鍵;所有語言鍵都必須存在,即使為空字串。
   * 輸出結構必須與輸入完全一致,只更新翻譯欄位內容。
   * 不得輸出解釋、附註或其他文字,只輸出 JSON。

4. **專有名詞固定翻譯對照:**

   | ko  | 翻譯(各語言中一致使用) |
   | --- | ------------ |
   | 엔믹스 | NMIXX        |
   | 엔써  | NSWER        |
   | 릴리  | Lily         |
   | 해원  | Haewon       |
   | 설윤  | Sullyoon     |
   | 배이  | Bae          |
   | 지우  | Jiwoo        |
   | 규진  | Kyujin       |

5. **最終輸出格式:**
   請直接輸出完整 JSON,**不加任何解說或包裝**。

Structured Output Parser

{
  "batch": [
    {
      "startMs": 230.352,
      "endMs": 1151.224,
      "text": {
        "ko": "안녕하세요.",
        "romaji": "annyeonghaseyo.",
        "zh-Hant": "大家好。",
        "en": "Hello.",
        "ja": "こんにちは。"
      },
      "id": "line-1"
    }
  ]
}

資料後處理

合併多組資料
存入 Google Drive
就能透過 import json 匯入編輯模式了