翻訳キュー: バッチ処理システム

この記事では、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コストを削減し、翻訳品質を向上させます。


← ドキュメントインデックスに戻る