翻訳キュー:バッチ処理システム
この記事では、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経由)
システムプロンプト: キャッシュ済み(言語ごとに全バッチで同じ)
ユーザープロンプト: 可変(バッチ固有)
形式: 番号付きリスト
例:
以下の10のテキストを翻訳してください:
1. Mini PC
2. Thin Client
3. Compact Desktop
...
レスポンス:
1. मिनी पीसी
2. थिन क्लाइंट
3. कॉम्पैक्ट डेस्कटॉप
...
解析
行番号で翻訳を抽出:
-
数字の接頭辞 (
1.,2., など) を削除 -
位置で元のテキストと照合
-
カウントが一致するか検証
エラー処理
API失敗: フォールバックAPIで再試行
解析失敗: 元のテキストを返す
部分成功: 成功した翻訳を保存、失敗したものは再キュー
キャッシュ戦略
フレーズテーブル
場所: 言語ごとのJSONファイル
形式: {"英語": "翻訳"}
読み込み: 起動時に一度読み込み
利点: 高速なルックアップ、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コストを削減し、翻訳品質を向上させます。