AI 輸出『用戶』『調用』?一個指令轉成台灣用語

🌏 Read this article in English


⚡ 3 秒重點

  • LLM 訓練資料來自各地中文,輸出用語自然混合
  • 台灣讀者看到「用戶」「調用」「軟體」會出戲
  • zhtw fix 一個指令自動轉換成台灣習慣用語
  • 支援 CLI、Python 整合、LangChain、批次處理

你的 README 讓同事「出戲」了

你用 AI 生成了一份專案 README。

內容很完整——安裝步驟、API 說明、範例程式碼都有。你很滿意,準備 commit。

然後台灣同事 Slack 你:「欸,『用戶需要先調用這個介面』是什麼意思?可以改成台灣的說法嗎?」

你打開檔案一看:

## 安裝說明

使用者需要先安裝相依性:

npm install

然後呼叫 API 取得資料...

不只這個檔案。你用 AI 生成的 400 個檔案,全都是這種混合用語。

手動改?會改到天荒地老。


為什麼 LLM 會輸出混合用語?

這不是 AI 的 bug,是訓練資料的特性。

Key Insight: LLM 的中文訓練資料來自各地——大陸、台灣、香港、新加坡。模型學會了「中文」,但沒有學會「哪裡的中文」。

即使你在 prompt 寫「請用繁體中文回答」,模型理解的是字形(繁體字),不是用語習慣(台灣說法)。

所以你會得到:

  • 繁體字 ✅
  • 但用語是「用戶」「調用」「軟體」❌
你寫的 prompt AI 理解的 你期待的
請用繁體中文 用繁體字形 用台灣用語
請用台灣繁體 可能有幫助,但不穩定 用台灣用語

不同 LLM 的狀況也不同。根據我的觀察:

LLM 混合用語程度 備註
ChatGPT 中等 有時會自動調整
Claude 較輕 但仍會出現
Gemini 較重 大陸用語較多

Key Insight: 與其期待 AI 完美輸出台灣用語,不如接受「後處理」是必要步驟。就像程式碼要 lint,AI 輸出也要在地化。


解法:一個指令完成在地化

zhtw 是我開發的命令列工具,專門處理這個問題。

pip install zhtw

# 轉換單一檔案
zhtw fix README.md

# 轉換整個目錄
zhtw fix docs/

# 從 stdin 讀取(適合 pipe)
echo "使用者需要呼叫介面" | zhtw fix -
# 輸出:使用者需要呼叫介面

轉換範例

原本 轉換後
使用者 使用者
呼叫 呼叫
軟體 軟體
伺服器 伺服器
資料庫 資料庫
程式碼 程式碼
影片 影片
資訊 資訊

不只是簡繁轉換,是用語習慣的轉換。


整合到你的工作流程

方式 1:CLI 單次處理

最簡單的用法,適合一次性處理:

# 處理單一檔案
zhtw fix ai-generated-doc.md

# 處理整個資料夾
zhtw fix ./docs/

# 預覽變更(不修改檔案)
zhtw check ./docs/

方式 2:Python 整合

在你的 Python 程式中,對 LLM 輸出做後處理:

import subprocess

def localize_to_taiwan(text: str) -> str:
    """將文字轉換成台灣用語"""
    result = subprocess.run(
        ['zhtw', 'fix', '-'],
        input=text,
        capture_output=True,
        text=True
    )
    return result.stdout if result.returncode == 0 else text

搭配 OpenAI

from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "解釋什麼是 API Gateway"}
    ]
)

# LLM 輸出 → 台灣在地化
content = response.choices[0].message.content
localized = localize_to_taiwan(content)
print(localized)

搭配 Anthropic

from anthropic import Anthropic

client = Anthropic()
message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "解釋什麼是 API Gateway"}
    ]
)

# LLM 輸出 → 台灣在地化
content = message.content[0].text
localized = localize_to_taiwan(content)
print(localized)

方式 3:LangChain OutputParser

如果你用 LangChain,可以包裝成 OutputParser:

from langchain.schema import BaseOutputParser
import subprocess

class TaiwanLocalizer(BaseOutputParser):
    """將 LLM 輸出轉換成台灣用語"""

    def parse(self, text: str) -> str:
        result = subprocess.run(
            ['zhtw', 'fix', '-'],
            input=text,
            capture_output=True,
            text=True
        )
        return result.stdout.strip() if result.returncode == 0 else text

    @property
    def _type(self) -> str:
        return "taiwan_localizer"

# 使用方式
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate

llm = ChatAnthropic(model="claude-sonnet-4-20250514")
localizer = TaiwanLocalizer()

prompt = ChatPromptTemplate.from_template("解釋 {topic}")
chain = prompt | llm | localizer

result = chain.invoke({"topic": "微服務架構"})
print(result)

方式 4:批次處理腳本

處理大量 AI 生成的檔案:

# 處理所有 Markdown 檔案
find ./generated-docs -name "*.md" -exec zhtw fix {} \;

# 處理所有 Python docstring(先提取再處理)
zhtw fix ./src/**/*.py

# 搭配 git,只處理變更的檔案
git diff --name-only | grep '\.md$' | xargs zhtw fix

實際效果對比

範例 1:README.md

轉換前

## 安裝說明

使用者需要先安裝相依性,然後呼叫初始化函式。

### 設定資料庫

在 `config.js` 中設定資料庫連線資訊:

轉換後

## 安裝說明

使用者需要先安裝依賴,然後呼叫初始化函數。

### 設定資料庫

在 `config.js` 中設定資料庫連線資訊:

範例 2:API 文件

轉換前

該介面回傳使用者資訊。呼叫時需要傳遞 token 參數。
如果請求失敗,伺服器會回傳錯誤程式碼。

轉換後

該介面回傳使用者資訊。呼叫時需要傳遞 token 參數。
如果請求失敗,伺服器會回傳錯誤代碼。

範例 3:程式碼註解

轉換前

def get_user_data(user_id):
    """取得使用者資料

    呼叫此函式前,請確保資料庫連線正常。
    """
    pass

轉換後

def get_user_data(user_id):
    """取得使用者資料

    呼叫此函數前,請確保資料庫連線正常。
    """
    pass

進階設定

檢查模式(不修改檔案)

想先看看哪些地方會被轉換?

zhtw check ./docs/

輸出會顯示:

  • 哪些檔案有需要轉換的用語
  • 具體是哪些詞彙
  • 不會修改任何檔案

保守模式

擔心誤轉換?用保守模式只處理高信心的詞彙:

zhtw fix --conservative ./docs/

什麼時候該用這個工具?

場景 建議
AI 生成的 README、文件 ✅ 建議使用
AI 生成的程式碼註解 ✅ 建議使用
AI 對話內容要分享給台灣讀者 ✅ 建議使用
翻譯大陸技術文章 ✅ 建議使用
原本就是台灣人寫的內容 ❌ 不需要
目標讀者是大陸用戶 ❌ 不需要

Key Insight: 這不是「簡體 vs 繁體」的問題,是「內容要符合目標讀者習慣」的在地化需求。就像英文內容要考慮 US English 還是 UK English。


結論

LLM 訓練資料來自各地中文,輸出混合用語是常態,不是 bug。

與其每次手動修改,不如把在地化變成工作流程的一部分:

# 安裝
pip install zhtw

# 使用
zhtw fix your-ai-generated-file.md

三秒鐘,讓你的 AI 輸出說台灣話。


Sources

zhtw 工具

  • zhtw GitHub Repository | Archive

    命令列工具,將簡體中文用語轉換為台灣繁體用語。支援 CLI、Python API、批次處理。

LLM 中文輸出研究

Leave a Comment