テキスト候補を生成する

Text Suggestions API は、Product Studio API の生成 AI ツールを活用して、商品名と商品説明を生成して最適化します。顧客エンゲージメントとコンバージョンを改善し、商品情報の管理と更新のプロセスを効率化できます。Product Studio API の機能は、小売業のパフォーマンスを最適化するのに役立ちます。

API を使用して生成できるもの

Text Suggestions API を使用すると、次のことができます。

  • 商品画像や商品属性に基づいて提案される商品タイトルと説明文。
  • 商品の SEO 最適化されたタイトル
  • 商品にカスタム形式のタイトルを設定する
  • 商品フィードの商品説明

説明のトーンを指定して、すべての商品リスティングで一貫性を保つこともできます。

クイックスタート

GenerateProductTextSuggestions メソッドは、商品情報を使用して商品のタイトルと説明を生成または最適化できます。

この API は次のものを受け取ります。

  • 商品属性(JSON 辞書): 商品属性({"title": "White Tee", "brand": "MyBrand", "size": "XL"} など)を含む JSON オブジェクト
  • 商品画像: 商品画像を指す URI({"uri": "https://my-store.com/img/1.png"} など)
  • タイトルの書式設定オプション: タイトルの生成をカスタマイズするためのパラメータ。次のものがあります。
    • attribute_separator: 属性間の区切り文字を指定します。
    • target_language: 出力言語を設定します。
    • attribute_order: 生成されたタイトルの属性の順序を定義します。
  • データラベル付けの例: 説明からタイトルを生成する方法の例をご覧ください。
  • ワークフロー ID(output_spec.workflow_id: output_spec オブジェクト内の workflow_id フィールドは、テキスト生成のタイプを決定します。
    • title: 商品のタイトルを生成または最適化します。
    • description: 商品説明を生成または最適化します。
    • tide: 商品のタイトルと商品説明の両方を生成または最適化します。

以下は、API を使用してさまざまな商品データ入力からタイトルや説明、またはその両方を生成または最適化する例です。また、一般的なエラーと問題とその解決策も紹介します。

最適化されたタイトルの生成

この例では、最適なタイトルを生成する方法を示します。

リクエスト

リクエストの本文には、タイトルの最適化に使用する商品情報が含まれます。リクエストの構造の例を次に示します。

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "title": "Nike Mens shoes",
         "description": "Give strength to your step with the Nike Air Zoom Pegasus 38 shoe for Men with shoe size 12. Ensuring the fit is loved by the runners. This shoes comes in Blue color.",
         "brand": "Nike"
      }
   },
   "output_spec": {
      "workflow_id": "title"
   }
}

レスポンス

次のようなレスポンスが返されます。

{
  "title": {
    "text": "Nike Mens shoes Air Zoom Pegasus 38 Running Shoes, Blue, Size 12"
  },
  "metadata": {
    "metadata": {
      "attributes": {
        "color": "Blue",
        "size": "12",
        "product": "Running shoes",
        "model": "Air Zoom Pegasus 38"
      },
    }
  }
}

画像のみからタイトルを生成する

この例では、商品画像を提供して最適なタイトルを生成する方法を示します。

リクエスト

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_image":{
         "uri": "https://cdn.shopify.com/s/files/1/0653/5879/0892/products/1672082339438_550x825.jpg?v=1672082415"
      }
   },
   "output_spec": {
      "workflow_id": "title",
      "attribute_separator": "-"
   }
}

レスポンス

{
  "title": {
    "text": "Rustic Ceramic & Leather Leaves Necklace"
  },
  "metadata": {
    "metadata": {
      "attributes": {
        "material": "Rustic Ceramic & Leather",
        "pattern": "Leaves",
        "product": "Necklace"
      },
    }
  }
}

説明からタイトルを生成する

この例では、商品説明を入力して最適なタイトルを生成する方法を示します。

リクエスト

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "description": "selling size 12 nike dunks. oh they are red by the way!"
      }
   },
   "output_spec": {
      "workflow_id": "title",
   }
}

レスポンス

{
  "title": {
    "text": "Nike Dunks Red Size 12"
  },
  "metadata": {
    "metadata": {
      "attributes": {
        "brand": "Nike",
        "color": "Red",
        "size": "12",
        "product": "Dunks"
      },
    }
  }
}

タイトルと説明文からタイトルを最適化する(カスタム例を含む)

この例では、AI に識別させたい商品属性と、出力での属性の順序を明示的にラベル付けしています。

リクエスト

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "title": "Volumizing & Lengthening Mascara - Dark Brown",
         "description": "This high-impact mascara delivers both voluptuous volume and dramatic length without clumping or smudging.",
         "brand": "Luxe Beauty"
      }
   },
   "output_spec": {
      "workflow_id": "title"
   }
   "title_examples": [
    {
      "product_info": {
        "title": "Lash Paradise Volumizing & Lengthening Mascara - Waterproof - Blackest Black",
        "colour": "Black"
      },
      "title_format": "product",
      "category": "mascara",
      "final_product_info": {
        "product": "Mascara",
        "brand": "Lash Paradise",
        "mascara_type": "Volumizing & Lengthening",
        "colour": "Blackest Black",
        "waterproof": "Waterproof",
      }
    },
    {
      "product_info": {
        "title": "Hypnose Drama Instant Full Body Volume Mascara - Black",
        "colour": "Black"
      },
      "title_format": "product",
      "category": "mascara",
      "final_product_info": {
        "product": "Mascara",
        "brand": "Hypnose",
        "sub_brand": "Drama",
        "mascara_type": "Full Body Volume",
        "colour": "Black",
        "eye_lash_type": "All lash types"
      }
    }
  ]
}

レスポンス

{
  "title": {
    "text": "Luxe Beauty Dark Brown Volumizing & Lengthening Mascara"
  },
  "metadata": {
    "metadata": {
      "attributes": {
        "brand": "Luxe Beauty",
        "colour": "Dark Brown",
        "mascara_type": "Volumizing & Lengthening",
        "product": "Mascara"
      },
    }
  }
}

タイトルから説明文を生成する

この例では、商品名を提供し、対応する商品説明を生成するよう API にリクエストする方法を示します。

リクエスト

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "title": "Rustic Ceramic & Leather Leaves Necklace",
      }
   },
   "output_spec": {
      "workflow_id": "description"
   }
}

レスポンス

{
  "description": {
    "text": "Rustic Ceramic & Leather Leaves Necklace is a beautiful necklace made from high-quality ceramic and leather. It features a unique design that is sure to turn heads.
"
  },
}

商品属性(ブランドや色など)からタイトルと説明を生成する

この例では、商品属性を指定して最適な商品名と商品説明を生成する方法を示します。

リクエスト

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "brand": "Mr. Beast",
         "color": "purple",
      },
      "product_image":{
         "uri": "https://mrbeast.store/cdn/shop/files/0015dlv_0000_327.jpg?v=1702754475&width=500"
       }
   },
   "output_spec": {
      "workflow_id": "description"
   }
}

レスポンス

{
  "title": {
    "text": "Pajamas - Mr. Beast | Purple"
  },
  "description": {
    "text": "Slip into the ultimate comfort and style with these Mr. Beast pajamas in a vibrant shade of purple. Crafted from the softest materials, these pajamas will envelop you in a cozy embrace, ensuring a restful night's sleep. The shorts feature a relaxed fit, allowing for easy movement, while the top boasts a classic design with a comfortable neckline. Whether you're lounging at home or drifting off to dreamland, these Mr. Beast pajamas are the perfect choice for a peaceful and stylish slumber."
  },
}

ターゲット言語のサポート

このフィールドは、API レスポンスで生成される説明テキストの言語を指定します。target_languageoutput_spec パラメータの一部として追加できます。

{
    "output_spec": {
        "target_language": "language"
    }
}

値の例:

"korean" (Korean)
"english" (English)
"spanish" (Spanish)
"french" (French)

リクエストの例

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "title": "Granos de café negro",
         "description": "Los granos de café negro en California",
         "brand": "Parfums de Paris",
         "scent": "Floral",
      },
      "product_image":{
         "uri": "https://mrbeast.store/cdn/shop/files/0015dlv_0000_327.jpg?v=1702754475&width=500"
       }
   },
   "output_spec": {
      "workflow_id": "description",
      "target_language": "japanese",
      "attribute_order": ["scent", "product"],
      "tone": "playful",
   }
}

レスポンス

{
  "description": {
    "text": "カリフォルニアの黒いコーヒー豆は、あなたの鼻をくすぐる、甘く、フローラルな香りです。この香りは、コーヒー豆の豊かな香りと、ジャスミンとバラの繊細な花の香りをブレンドしたものです。カリフォルニアの黒いコーヒー豆は、あなたの家を居心地の良いカフェに変え、あなたをリラックスした気分にさせてくれるでしょう。この香りは、コーヒー好きにも、フローラルな香り好きにも最適です。カリフォルニアの黒いコーヒー豆で、あなたの家を幸せな香りで満たしましょう!."
  },
}

説明生成のトーンのパーソナライズ

ブランドを確立し、オンライン ストアを他と差別化するために、生成された説明のトーンをパーソナライズできます。Text API には次の 2 つのオプションがあります。

  • 事前定義されたトーンの選択: トーンのリストから選択して、新しい説明を生成できます。リストには次のトーン スタイルが含まれます。
    • デフォルト: シンプルでわかりやすく、エレガント。
    • 遊び心がある: 陽気で、肯定的な言葉、ユーモア(ジョーク、ダジャレ)、誇張(皮肉、嫌味、絵文字は使用しない)を使用している。
    • フォーマル: 標準的な英語、正しい文法、完全な文、スラングや短縮形は使用しない。
    • 説得力がある: 論理的で簡潔、読者を説得するための議論主導型。
    • 会話調: 親しみやすく、わかりやすい日常的な言葉を使用します。
  • ブランド固有のトーン: ブランドのトーンで既存の説明文やその他のテキスト アセットを提供できます。生成 AI モデルは、テキストのトーンを分析し、次の側面に従って「ライティング スタイル記述子」を生成します。
    • フォーマル度(フォーマル、カジュアルなど)
    • 冗長性(簡潔、非常に冗長など)
    • トーン(プロフェッショナル、有益、ポジティブ、説得力があるなど)
    • 文の構造(「接続詞が少ない単純な文」など)
    • 最も頻繁に使用される単語とフレーズ

クライアント ライブラリ

リクエストを送信するには、クライアント ライブラリを使用することをおすすめします。クライアント ライブラリは、Maven プロジェクトにインストールできるように共有します。

コードサンプル

認証方法を選択し、手順に沿ってこれらのコードサンプルを設定します。以下は、テキスト候補の生成に使用できるサンプルです。

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.productstudio.v1alpha.GenerateProductTextSuggestionsRequest;
import com.google.shopping.merchant.productstudio.v1alpha.GenerateProductTextSuggestionsResponse;
import com.google.shopping.merchant.productstudio.v1alpha.OutputSpec;
import com.google.shopping.merchant.productstudio.v1alpha.ProductInfo;
import com.google.shopping.merchant.productstudio.v1alpha.TextSuggestionsServiceClient;
import com.google.shopping.merchant.productstudio.v1alpha.TextSuggestionsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to generate product text suggestions. */
public class GenerateProductTextSuggestionsSample {

  private static String getName(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static void generateProductTextSuggestions(Config config) throws Exception {
    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    TextSuggestionsServiceSettings textSuggestionsServiceSettings =
        TextSuggestionsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name = getName(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (TextSuggestionsServiceClient textSuggestionsServiceClient =
        TextSuggestionsServiceClient.create(textSuggestionsServiceSettings)) {

      ProductInfo productInfo =
          ProductInfo.newBuilder()
              .putProductAttributes("title", "Mens shirt")
              .putProductAttributes("description", "A blue shirt for men in size S")
              .build();

      OutputSpec outputSpec = OutputSpec.newBuilder().setWorkflowId("title").build();

      GenerateProductTextSuggestionsRequest request =
          GenerateProductTextSuggestionsRequest.newBuilder()
              .setName(name)
              .setProductInfo(productInfo)
              .setOutputSpec(outputSpec)
              .build();

      System.out.println("Sending GenerateProductTextSuggestions request: " + name);
      GenerateProductTextSuggestionsResponse response =
          textSuggestionsServiceClient.generateProductTextSuggestions(request);
      System.out.println("Generated product text suggestions response below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occured: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    generateProductTextSuggestions(config);
  }
}

一般的なエラーと問題

ここでは、よくある落とし穴とその解決策をいくつかご紹介します。

テキスト候補を生成するには商品情報が必要です

次のエラー メッセージが表示された場合

Error message:
"error": {
    "code": 400,
    "message": "[product_info] Product info is required to generate text suggestions.",
    "status": "INVALID_ARGUMENT",
 ...
}

リクエスト本文に product_info を追加し、product_attributes または product_image の少なくとも 1 つを正しく入力します。

たとえば、次の投稿はエラーになります。

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "output_spec": {
      "workflow_id": "title"
   }
}

テキスト候補を生成するには、product_info のフィールドを少なくとも 1 つ指定する必要があります

このエラー

{
  "error": {
    "code": 400,
    "message": "[product_info.product_attributes] At least one field of product_info is required to generate text suggestions.",
    "status": "INVALID_ARGUMENT",
 ...
}

は、リクエスト本文に少なくとも 1 つの product_info フィールドを含める必要があることを示します。

たとえば、これを投稿するとエラーが発生します。

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
   },
   "output_spec": {
      "workflow_id": "title"
   }
}

代わりに、次のようなものを使用してください。

   "product_info": {
        "product_attributes": {
         "description": "Selling size 12 Nike dunks. Oh they are red by the way!"
      }
   }

または

"product_info": {
    "product_image":{
        "uri": "https://cdn.shopify.com/s/files/1/0653/5879/0892/products/1672082339438_550x825.jpg?v=1672082415"
    }
}

各 title_example で(何か)が必要です

次の 4 つの例のようなエラー

{
  "error": {
    "code": 400,
    "message": "[title_examples.product_info] At least one field of product_info is required in each title_example.",
    "status": "INVALID_ARGUMENT",
 ...
}

または

{
  ...
    "message": "[title_examples.category] Category is required in each title_example.",
  ...
}

または

{
  ...
    "message": "[title_examples.title_format] Title format is required in each title_example.",
  ...
}

または

{
  ...
    "message": "[title_examples.final_product_info] At least one field of final_product_info is required in each title_example.",
  ...
}

必須のサブフィールドが入力されていないことを示します。

たとえば、次のリクエストではエラーが発生します。

POST
https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
    "product_info": {
        "product_attributes": {
            "description": "selling size 12 nike dunks. oh they are red by the way!"
        }
    },
    "output_spec": {
        "workflow_id": "title"
    },
    "title_examples": []
}

この問題を解決するには、リクエストで指定された各 title_example について、次のすべてのサブフィールドに入力します。

  • product_info
  • category
  • title_format
  • final_product_info

有効な例を次に示します。

{
   "product_info": {
      "product_attributes": {
         "title": "Volumizing & Lengthening Mascara - Dark Brown",
         "description": "This high-impact mascara delivers both voluptuous volume and dramatic length without clumping or smudging.",
      }
   },
   "output_spec": {
      "workflow_id": "title"
   },
   "title_examples": [
    {
      "product_info": {
        "title": "Lash Paradise Volumizing & Lengthening Mascara - Waterproof - Blackest Black",
        "colour": "Black"
      },
      "title_format": "product",
      "category": "mascara",
      "final_product_info": {
        "product": "Mascara",
        "brand": "Lash Paradise",
        "mascara_type": "Volumizing & Lengthening",
        "colour": "Blackest Black",
        "waterproof": "Waterproof",
      }
    }
  ]
}

サポートされていない workflow_id

このタイプのエラー

{
  "error": {
    "code": 400,
    "message": "[\u003ceye3 title='/ProductStudioTextGenerationService.GenerateProductText, INVALID_ARGUMENT'/\u003e APPLICATION_ERROR; ... ;Unsupported workflow_id: attributes. Supported workflows are: [\"title\", \"description\", \"tide\"];AppErrorCode=3;StartTimeMs=1740696804045;unknown;ResFormat=uncompressed;ServerTimeSec=0.005976589;LogBytes=256;Non-FailFast;EffSecLevel=none;ReqFormat=uncompressed;ReqID=4d1786f59faa3ea7;GlobalID=0;Server=[2002:a05:6e16:618:b0:2c2:7cfc:bebd]:14001] Invalid value",
    "status": "INVALID_ARGUMENT",
 ...
}

のようなリクエストの結果として返されます。

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "title": "Volumizing & Lengthening Mascara - Dark Brown",
         "description": "This high-impact mascara delivers both voluptuous volume and dramatic length without clumping or smudging.",
   },
   "output_spec": {
      "workflow_id": "attributes"
   }
}

リクエストで workflow_id が「attributes」に設定されていますが、このフィールドでは次のいずれか 1 つの値のみがサポートされています。

  • title: 商品のタイトルを生成または最適化します。
  • 説明: 商品説明を生成または最適化します。
  • tide: 商品のタイトルと説明の両方を生成または最適化します。

サポートされていないトーン

「サポートされていないトーン」エラー(例:

{
  "error": {
    "code": 400,
    "message": "[\u003ceye3 title='/ProductStudioTextGenerationService.GenerateProductText, INVALID_ARGUMENT'/\u003e APPLICATION_ERROR; ... ; Unsupported tone: 'asdf'. Supported tones are: [\"default\", \"playful\", \"formal\", \"persuasive\", \"conversational\"];AppErrorCode=3;StartTimeMs=1740697325058;unknown;ResFormat=uncompressed;ServerTimeSec=7.45346E-4;LogBytes=256;Non-FailFast;EffSecLevel=none;ReqFormat=uncompressed;ReqID=f7d9bbbc73a1d342;GlobalID=0;Server=[2002:a05:6918:3486:b0:2bc:ccd4:79e6]:14001] Invalid value",
    "status": "INVALID_ARGUMENT",
 ...
}

リクエストの結果として返されます。

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}:generateProductTextSuggestions

{
   "product_info": {
      "product_attributes": {
         "title": "Volumizing & Lengthening Mascara - Dark Brown",
         "description": "This high-impact mascara delivers both voluptuous volume and dramatic length without clumping or smudging.",
   },
   "output_spec": {
      "workflow_id": "description"
      "tone": "cheerful"
   }
}

tone は「cheerful」に設定されていますが、このフィールドは次の値のいずれか 1 つのみをサポートします。

  • default: シンプルでわかりやすく、エレガント。
  • 遊び心がある: 軽快で、ポジティブな言葉、ユーモア(ジョーク、ダジャレ)、誇張(皮肉、嫌味、絵文字は使用しない)を使用している。
  • formal: 標準的な英語、正しい文法、完全な文、スラングや短縮形は使用しない。
  • 説得力がある: 読者を説得するために、論理的で簡潔な議論が展開されている。
  • 会話調: 親しみやすく、わかりやすい日常的な言葉。