翻訳キュー: バッチ処理システム
この記事では、AI APIの使用を最適化するために翻訳をキューに入れてバッチ処理する方法について説明します。
問題: オンデマンド翻訳はコストが高い
オンデマンドでコンテンツを翻訳することには問題があります:
-
遅い: 各翻訳に1〜2秒かかる
-
高コスト: リクエストごとにAPIコストが発生
-
冗長: 同じテキストが何度も翻訳される
-
ブロッキング: ユーザーが翻訳を待つ
より良いアプローチが必要です。
解決策: キューとバッチ
キュー: 翻訳リクエストを収集する
バッチ: 複数の翻訳をまとめて処理する
キャッシュ: 結果を保存して再利用する
スケジュール: キューを定期的に処理する(リアルタイムではない)
キュー構造
キューファイル
場所: ディスク上のJSONファイル
フォーマット: 翻訳リクエストの配列
フィールド:
-
text: 翻訳する英語テキスト -
target_lang: 言語コード(hi、de、frなど) -
context: テキストが表示される場所(product、query、article) -
priority: 高/通常/低
キューへの追加
翻訳が欠けている場合:
queue_translation(text, target_lang, context="product")
重複排除: すでにキューに入っているか確認する
バリデーション: 無効な値を拒否する
バッチ処理
スクリプト
場所: scripts/web/process_translation_queue.py
スケジュール: cronで6時間ごとに実行
ロックファイル: 同時実行を防ぐ
処理フロー
1. キューの読み込み: すべての保留中のリクエストを読み取る
2. 言語別にグループ化: 同じ言語のリクエストをまとめる
3. 重複排除: バッチ内の重複を削除する
4. キャッシュの確認: すでに翻訳済みのテキストをスキップする
5. バッチ翻訳: DeepSeek APIに送信する
6. 結果の解析: レスポンスから翻訳を抽出する
7. キャッシュへの保存: フレーズテーブルに保存する
8. キューのクリア: 処理済みのリクエストを削除する
バッチ翻訳
API呼び出し
モデル: DeepSeek-V3(Together.ai経由)
システムプロンプト: キャッシュ済み(言語内のすべてのバッチで同じ)
ユーザープロンプト: 可変(バッチ固有)
フォーマット: 番号付きリスト
例:
Translate these 10 texts:
1. Mini PC
2. Thin Client
3. Compact Desktop
...
レスポンス:
1. मिनी पीसी
2. थिन क्लाइंट
3. कॉम्पैक्ट डेस्कटॉप
...
解析
行番号で翻訳を抽出する:
-
番号プレフィックスを削除する(
1.、2.など) -
位置で元のテキストと照合する
-
数が一致することを検証する
エラー処理
API障害: フォールバックAPIで再試行する
解析失敗: 元のテキストを返す
部分成功: 成功した翻訳を保存し、失敗したものを再キューに入れる
キャッシュ戦略
フレーズテーブル
場所: 言語ごとのJSONファイル
フォーマット: {"English": "Translation"}
読み込み: 起動時に一度読み込まれる
利点: 高速なルックアップ、API呼び出し不要
キャッシュヒット率
初回実行: 低い(すべて新しい)
以降の実行: 高い(ほとんどのテキストがキャッシュ済み)
利点: APIコストの削減
保持ルール
翻訳中に以下を保持します:
ブランド名: Thinvent®、Intel®、AMD®
HTMLタグ: <p>、<br>、<strong>
URL: https://www.thinvent.in
SKU: Treo-N100-8-256
数値: 8GB、256GB、4 cores
実装: システムプロンプト内の正規表現パターン
言語検出
翻訳する前に、すでに翻訳されているか確認する:
方法: 文字セット分析
ヒンディー語: デーヴァナーガリー文字
中国語: CJK文字
アラビア語: アラビア文字
利点: 不要な翻訳をスキップする
優先度処理
高優先度: 製品名、機能(最初に処理)
通常優先度: 説明、記事(次に処理)
低優先度: 古いコンテンツ、ほとんど閲覧されないもの(最後に処理)
利点: 重要なコンテンツが最初に翻訳される
スケジューリング
Cronジョブ
頻度: 6時間ごと
コマンド: python3 scripts/web/process_translation_queue.py
ロックファイル: /tmp/process_translation_queue.lock
利点: 自動処理、手動介入不要
週次タスク
記事: 新しい記事を毎週翻訳する
Babel文字列: テンプレート翻訳を毎週更新する
スクリプト: scripts/web/translate_articles_weekly.sh
モニタリング
キューサイズ
保留中のリクエストを追跡する:
-
総リクエスト数
-
言語ごとのリクエスト数
-
最も古いリクエストの経過時間
アラート: キューが大きくなりすぎた場合
翻訳統計
処理を追跡する:
-
バッチごとの翻訳数
-
API成功率
-
キャッシュヒット率
-
処理時間
コスト追跡
API使用状況を監視する:
-
1日あたりのリクエスト数
-
リクエストあたりのトークン数
-
言語ごとのコスト
参考資料
関連記事
まとめ
翻訳キューは効率的なバッチ処理を可能にします:
キュー:
-
翻訳リクエストを収集する
-
バッチ内で重複排除する
-
優先度処理
-
バリデーションとフィルタリング
バッチ処理:
-
言語別にグループ化する
-
DeepSeek APIに送信する
-
番号付きレスポンスを解析する
-
フレーズテーブルに保存する
キャッシュ:
-
翻訳前にキャッシュを確認する
-
高いキャッシュヒット率
-
APIコストの削減
スケジューリング:
-
cronで6時間ごと
-
ロックファイルが同時実行を防ぐ
-
週次の記事翻訳
保持:
-
ブランド名
-
HTMLタグ
-
URLとSKU
このアプローチは、バッチ処理とキャッシュを通じてAPIコストを削減し、翻訳品質を向上させます。