GPTsとAzure AI Translatorでドキュメント翻訳システムを作ってみた

AzureのAI TranslatorとGPTsを使って、簡単にドキュメントを多言語に翻訳する方法を紹介します。

Azure AI Translatorを使うと、ドキュメントのレイアウトを変更せずに多言語に変換できます。また、GPTsを使ってAzureのリソースと連携させることで、さらに便利に利用できます。

この記事では、Azure AI TranslatorやAzure Web Appsのデプロイ、GPTsの設定方法について説明します。

Azure AI Translatorとは?

Azure AI Translatorは、Microsoftが提供するクラウドベースのAI翻訳サービスです。

元のドキュメントの見た目やデータ形式を保ちながら、複数の言語に文書ファイルを翻訳できるドキュメント翻訳機能があります。

ドキュメント翻訳には2つの方法があります。

1つは「非同期バッチ翻訳」です。これは複数のドキュメントや大きなファイルを一度に翻訳する方法で、Azureのストレージを使ってファイルを保存します。

もう1つは「同期単一ファイル翻訳」です。これは1つのファイルだけをすぐに翻訳する方法で、翻訳結果が直接返されます。この場合、特別なストレージは必要ありません。

この記事では、「同期単一ファイル翻訳」を使用します。

https://learn.microsoft.com/ja-jp/azure/ai-services/translator/document-translation/overview

システムの動作結果

この記事で紹介するGPTsを使用した結果です。英語の添付ファイルの内容を日本語に変換できています。

元の文章はこちらです。

翻訳結果はこのようになりました。

実際に添付したファイルはこちらです。

https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/Translator/document-translation-sample.docx

システムの連携図

GPTsとAzureのリソースは下記のように連携します。Azure Web Appsはファイルを転送する為に使用します。

作業概要

構築作業は以下の手順で行います。

  1. Azure AI Translatorをデプロイ
  2. Visual Studio 2022でソースコードを作成
  3. Azure Web Appsをデプロイ
  4. GPTsを作成

作業手順

Azure AI Translatorをデプロイ

まずは、Azure AI Translatorを使うために、Azureポータルでリソースを作成します。

Azureポータルにアクセス

Azureポータルにサインインします。

リソースを作成

左のメニューから「リソースの作成」をクリックし、「AI + Machine Learning」カテゴリからTranslator Textを選択します。

設定を入力

Translatorの設定画面でリソースグループ、名前、リージョン、価格レベルを設定します。

※ この記事を執筆した時点では、下記の制約があります。価格レベルはS1以上のプランを選択してください。

https://learn.microsoft.com/ja-jp/azure/ai-services/translator/document-translation/how-to-guides/use-rest-api-programmatically?tabs=csharp

デプロイの確認

設定を確認し、「作成」をクリックします。リソースが作成されたら、APIキーとエンドポイントを確認します。

Visual Studio 2022でソースコードを作成

ソースコードは下記に掲載しています。

https://github.com/mkabuki/DocumentTranslation

DocumentTranslationController.csが、GPTsとAI Translatorの連携処理を行います。 https://github.com/mkabuki/DocumentTranslation/blob/main/DocumentTranslation/Controllers/DocumentTranslationController.cs

今回は、英語のドキュメントを日本語に変換するように設定しています。下記の箇所を修正する事で、任意の言語に翻訳できます。

string sourceLanguage = "en";
string targetLanguage = "ja";

Azure Web Appsをデプロイ

Visual Studio 2022の発行を使用してデプロイします。

Azure Web Appsは無料プランでも利用は可能です。

デプロイしたリソースに、下記の環境変数を追加します。

subscriptionKey = _configuration["TRANSLATOR_TEXT_SUBSCRIPTION_KEY"];
endpoint = _configuration["TRANSLATOR_TEXT_ENDPOINT"];
region = _configuration["TRANSLATOR_TEXT_REGION"];

Translator TextのAPIキー、リージョン、エンドポイントの内容を追加します。

GPTsを作成

任意のGPTsを作成し、アクションの箇所に下記を設定します。urlの箇所にAzure Web AppsのURLを設定してください。

"url": "https://***************.azurewebsites.net"

クリックして展開 - GPTsのアクションに設定する内容

{
  "openapi": "3.1.0",
  "info": {
    "title": "Document Translation API",
    "version": "1.0.0",
    "description": "API for translating documents from English to Japanese using Azure Translator."
  },
  "servers": [
    {
      "url": "https://***************.azurewebsites.net"
    }
  ],
  "paths": {
    "/DocumentTranslation/TranslateDocument": {
      "post": {
        "summary": "Translate an uploaded document from English to Japanese",
        "operationId": "TranslateDocument",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/openaiFileIdRefs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful translation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/openaiFileResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "$ref": "#/components/schemas/ErrorResponse"
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "$ref": "#/components/schemas/ErrorResponse"
              }
            }
          }
        },
        "tags": [
          "DocumentTranslation"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "openaiFileIdRefs": {
        "type": "object",
        "properties": {
          "openaiFileIdRefs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "mime_type",
                "download_link"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The unique identifier of the file"
                },
                "name": {
                  "type": "string",
                  "description": "The name of the file"
                },
                "mime_type": {
                  "type": "string",
                  "description": "The MIME type of the file"
                },
                "download_link": {
                  "type": "string",
                  "description": "The download link for the file"
                }
              }
            }
          }
        }
      },
      "openaiFileResponse": {
        "type": "object",
        "properties": {
          "openaiFileResponse": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "mime_type",
                "content"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The name of the file"
                },
                "mime_type": {
                  "type": "string",
                  "description": "The MIME type of the file"
                },
                "content": {
                  "type": "string",
                  "format": "byte",
                  "description": "The base64 encoded contents of the file"
                }
              }
            }
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "Error message"
          },
          "details": {
            "type": "string",
            "description": "Detailed error information"
          }
        }
      }
    }
  }
}

まとめ

AzureのAI TranslatorとGPTsを活用したドキュメント翻訳システムの構築方法についてご紹介しました。このシステムを使用することで、複数の言語のドキュメントを翻訳することが可能になります。

また、Copilot Studio Agentsリリースにより、今回のGPTsを活用して実現した機能と同様のことが可能になると期待できます。引き続き、最新の情報を楽しみにしていてください!

blogs.microsoft.com

執筆担当者プロフィール
株木 誠

株木 誠(日本ビジネスシステムズ株式会社)

先端技術部の株木です。 Azure OpenAI Service を活用するアプリ開発を担当しています。

担当記事一覧