すべてのプロダクト
Search
ドキュメントセンター

AI Guardrails:テキストモデレーション強化版 2.0 SDK および連携ガイド

最終更新日:Apr 01, 2026

本ガイドでは、テキストモデレーション 2.0 サービスの有効化、アクセス権限の設定、および TextModeration API オペレーションを呼び出すための SDK の連携手順について説明します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • Alibaba Cloud アカウント

  • AliyunYundunGreenWebFullAccess システムポリシーを持つ RAM ユーザー(下記の手順 2を参照)

  • AccessKey ID および AccessKey Secret を環境変数として保存済み(「環境変数を設定する」を参照)

手順 1:サービスの有効化

サービスの有効化ページから、テキストモデレーション 2.0 サービスを有効化します。

有効化後は、課金方法がデフォルトで従量課金となります。実際の使用量に基づき、毎日課金されます。サービスは、API オペレーションの利用状況に応じて自動的に請求書を生成します。サービスを利用しなかった場合、課金されません。

手順 2:RAM ユーザーへの権限付与

Content Moderation API を呼び出すには、RAM ユーザーに必要な権限を付与する必要があります。

  1. RAM 管理者として、RAM コンソール にログインします。

  2. RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。

  3. RAM ユーザーに AliyunYundunGreenWebFullAccess システムポリシーを付与します。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

環境変数の設定

アプリケーション内に認証情報をハードコードせずに済むよう、AccessKey ペアを環境変数として保存します。

Linux / macOS

set ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id>
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret>

Windows(コマンドプロンプト)

set ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id>
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret>

<your-access-key-id> および <your-access-key-secret> を、ご利用の RAM ユーザーの AccessKey ID および AccessKey Secret に置き換えてください。

重要

絶対に AccessKey ペアをソースコード内にハードコードしたり、リポジトリにコミットしたりしないでください。認証情報を渡すには、環境変数または Security Token Service (STS) トークンを使用してください。詳細については、「認証情報の設定」をご参照ください。

手順 3:SDK のインストールおよび連携

サポート対象リージョン

リージョンパブリックエンドポイントVPC エンドポイント
シンガポールgreen-cip.ap-southeast-1.aliyuncs.comgreen-cip-vpc.ap-southeast-1.aliyuncs.com
米国 (バージニア)green-cip.us-east-1.aliyuncs.comgreen-cip-vpc.us-east-1.aliyuncs.com
米国 (シリコンバレー)green-cip.us-west-1.aliyuncs.comN/A
イギリス (ロンドン)green-cip.eu-west-1.aliyuncs.comN/A
その他の言語での SDK サンプルについては、OpenAPI Explorer を使用して、API オペレーションのデバッグおよび SDK コードの自動生成を行ってください。

以降のすべてのサンプルでは、認証に環境変数を使用し、同期モデレーションリクエストを送信するために TextModerationWithOptions(または各言語における同等の関数)を呼び出します。応答には、検出されたコンテンツカテゴリを示す labels フィールドと、その説明を示す reason フィールドが含まれます。

Java SDK

要件: Java 1.8 以降

ソースコード: GitHub または Maven Central

1. 依存関係を pom.xml に追加します。

以下の内容を <dependencies> セクションに追加します。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>green20220302</artifactId>
  <version>2.2.11</version>
</dependency>

2. API を呼び出します。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.TextModerationRequest;
import com.aliyun.green20220302.models.TextModerationResponse;
import com.aliyun.green20220302.models.TextModerationResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

public class TextAutoRoute {
    public static void main(String[] args) throws Exception {
        Config config = new Config();
        // ソースコードを公開すると、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。セキュリティを高めるために、より安全な方法(例:Security Token Service (STS) トークン)による権限付与を推奨します。詳細については、関連ドキュメントをご参照ください。
        // ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // 必要に応じてリージョンおよびエンドポイントを変更します。
        config.setRegionId("ap-southeast-1");
        config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
        // 読み取りおよび接続タイムアウト(ミリ秒単位)を設定します。
        config.setReadTimeout(6000);
        config.setConnectTimeout(3000);

        // パフォーマンス向上のため、冗長な接続を回避するためにクライアントインスタンスを再利用することを強く推奨します。
        Client client = new Client(config);

        // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
        RuntimeOptions runtime = new RuntimeOptions();
        runtime.readTimeout = 10000;
        runtime.connectTimeout = 10000;

        // サービスパラメーターを構築します。
        JSONObject serviceParameters = new JSONObject();
        serviceParameters.put("content", "検出対象のテキスト");

        if (serviceParameters.get("content") == null || serviceParameters.getString("content").trim().length() == 0) {
            System.out.println("テキストモデレーションのコンテンツが空です");
            return;
        }

        TextModerationRequest textModerationRequest = new TextModerationRequest();
        // 必要に応じてサービスを設定します。
        textModerationRequest.setService("text_moderation_service");
        textModerationRequest.setServiceParameters(serviceParameters.toJSONString());
        try {
            // 検出結果を取得するメソッドを呼び出します。
            TextModerationResponse response = client.textModerationWithOptions(textModerationRequest, runtime);

            // 検出結果を出力します。
            if (response != null) {
                if (response.getStatusCode() == 200) {
                    TextModerationResponseBody result = response.getBody();
                    System.out.println(JSON.toJSONString(result));
                    Integer code = result.getCode();
                    if (code != null && code == 200) {
                    TextModerationResponseBody.TextModerationResponseBodyData data = result.getData();
                    System.out.println("labels = [" + data.getLabels() + "]");
                    System.out.println("reason = [" + data.getReason() + "]");
                } else {
                    System.out.println("テキストモデレーションに失敗しました。コード:" + code);
                }
                } else {
                    System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                }
                }
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
}

期待される出力(リクエストが成功し、違反が検出されなかった場合):

{"code":200,"data":{"labels":"","reason":""},"requestId":"...","message":"OK"}
labels = []
reason = []

Python SDK

要件: Python 3.6 以降

ソースコード: PyPI

1. パッケージをインストールします。

pip install alibabacloud_green20220302==2.2.11

2. API を呼び出します。

# coding=utf-8
import os
import json
import uuid

from alibabacloud_green20220302.client import Client
from alibabacloud_green20220302 import models
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_tea_util import models as util_models


class TextAutoRoute:

    @staticmethod
    def main() -> None:
        service_parameters = {
            'content': '検出対象のテキスト',
            'dataId': str(uuid.uuid1())
        }
        if service_parameters.get("content") is None or len(service_parameters.get("content").strip()) == 0:
            print("テキストモデレーションのコンテンツが空です")
            return

        text_moderation_request = models.TextModerationRequest(
            # 必要に応じてサービスを設定します。
            service='テキストモデレーションサービス',
            service_parameters=json.dumps(service_parameters)
        )

        # 環境変数から認証情報を読み込みます。
        config = Config(
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
            # 接続および読み取りタイムアウト期間(ミリ秒単位)を設定します。
            connect_timeout=3000,
            read_timeout=6000,
            # 必要に応じてリージョンおよびエンドポイントを変更します。
            region_id='ap-southeast-1',
            endpoint='green-cip.ap-southeast-1.aliyuncs.com'
        )

        # 複数の接続を生成しないよう、クライアントインスタンスを再利用します。
        client = Client(config)

        # 実行時レベルのタイムアウト期間(ミリ秒単位)を設定します。
        runtime = util_models.RuntimeOptions()
        runtime.read_timeout = 10000
        runtime.connect_timeout = 10000

        try:
            response = client.text_moderation_with_options(text_moderation_request, runtime)

            if response.status_code == 200:
                result = response.body
                print('応答成功。結果:{}'.format(result))
                if result.code == 200:
                    result_data = result.data
                    print('labels:{}、reason:{}'.format(result_data.labels, result_data.reason))
            else:
                print('応答に失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
        except Exception as err:
            print(err)


if __name__ == '__main__':
    TextAutoRoute.main()

期待される出力(リクエストが成功し、違反が検出されなかった場合):

response success. result:...
labels:, reason:

PHP SDK

要件: PHP 5.6 以降

ソースコード: Packagist

1. パッケージをインストールします。

composer require alibabacloud/green-20220302 2.2.10

2. API を呼び出します。

<?php

  require('vendor/autoload.php');

use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\SDK\Green\V20220302\Green;
use AlibabaCloud\SDK\Green\V20220302\Models\TextModerationRequest;


$request = new TextModerationRequest();
// 必要に応じてサービスを設定します。
$request->service = "text_moderation_service";
$arr = array('content' => '検出対象のテキスト');
$request->serviceParameters = json_encode($arr);
if (empty($arr) || empty(trim($arr["content"]))) {
  echo "テキストモデレーションのコンテンツが空です";
  return;
}
$config = new Config([
                     // ソースコードを公開すると、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。セキュリティを高めるために、より安全な方法(例:STS トークン)による権限付与を推奨します。詳細については、関連ドキュメントをご参照ください。
                     // ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                     "accessKeyId" => getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
                     "accessKeySecret" => getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
                     // 必要に応じてリージョンおよびエンドポイントを変更します。
                     "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
                     "regionId" => "ap-southeast-1"

                     ]);
// パフォーマンス向上のため、冗長な接続を回避するためにクライアントインスタンスを再利用することを強く推奨します。
$client = new Green($config);

// RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
$runtime = new RuntimeOptions([]);
$runtime->readTimeout = 10000;
$runtime->connectTimeout = 10000;

try {
  // 検出結果を取得するメソッドを呼び出します。
  $response = $client->textModerationWithOptions($request, $runtime);
  // 検出結果を出力します。
  print_r($response->body);
} catch (Exception $e) {
  var_dump($e->getMessage());
  var_dump($e->getErrorInfo());
  var_dump($e->getLastException());
  var_dump($e->getLastRequest());
}

期待される出力(リクエストが成功し、違反が検出されなかった場合):

AlibabaCloud\SDK\Green\V20220302\Models\TextModerationResponseBody Object
(
    [code] => 200
    [data] => AlibabaCloud\SDK\Green\V20220302\Models\TextModerationResponseBodyData Object
        (
            [labels] =>
            [reason] =>
        )
    [message] => OK
    [requestId] => ...
)

Go SDK

1. SDK をクローンします。

git clone --branch v2.2.11 https://github.com/alibabacloud-go/green-20220302/v2

2. API を呼び出します。

package main

import (
    "encoding/json"
    "fmt"
    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    green "github.com/alibabacloud-go/green-20220302/v2/client"
    "github.com/alibabacloud-go/tea/tea"
    "net/http"
    "os"
)

func main() {
    config := &openapi.Config{
        // 環境変数から認証情報を読み込みます。
        AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
        // 必要に応じてエンドポイントを変更します。
        Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
        /**
         * サーバー側のエンドツーエンド処理タイムアウトは 10 秒です。
         * ReadTimeout をサーバー側の処理時間より短く設定すると、クライアントは ReadTimeout エラーを受け取ります。
         */
        ConnectTimeout: tea.Int(3000),
        ReadTimeout:    tea.Int(6000),
    }
    client, _err := green.NewClient(config)
    if _err != nil {
        panic(_err)
    }

    serviceParameters, _ := json.Marshal(
        map[string]interface{}{
            "content": "モデレーション対象のテキスト",
        },
    )
    request := green.TextModerationRequest{
        Service:           tea.String("テキストモデレーションサービス"),
        ServiceParameters: tea.String(string(serviceParameters)),
    }
    result, _err := client.TextModeration(&request)
    if _err != nil {
        panic(_err)
    }
    statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
    if statusCode == http.StatusOK {
        textModerationResponse := result.Body
        fmt.Println("応答成功。応答:" + textModerationResponse.String())
        if tea.IntValue(tea.ToInt(textModerationResponse.Code)) == 200 {
            textModerationResponseData := textModerationResponse.Data
            fmt.Println("応答 reason:" + tea.StringValue(textModerationResponseData.Reason))
            fmt.Println("応答 labels:" + tea.StringValue(textModerationResponseData.Labels))
        }
    } else {
        fmt.Println("応答に失敗しました。ステータス:" + tea.ToString(statusCode))
    }
}

期待される出力(リクエストが成功し、違反が検出されなかった場合):

response success. response:...
response reason:
response labels:

Node.js SDK

1. パッケージをインストールします。

npm install @alicloud/green20220302@2.2.10

2. API を呼び出します。

const RPCClient = require("@alicloud/pop-core");

async function main() {
    // 複数の接続を生成しないよう、クライアントインスタンスを再利用します。
    var client = new RPCClient({
        // 環境変数から認証情報を読み込みます。
        accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
        // 必要に応じてエンドポイントを変更します。
        endpoint: "https://green-cip.ap-southeast-1.aliyuncs.com",
        apiVersion: '2022-03-02'
    });

    var params = {
        // 必要に応じてサービスを設定します。
        "Service": "テキストモデレーションサービス",
        "ServiceParameters": JSON.stringify({
            "content": "検出対象のテキスト",
        })
    };

    var serviceParameters = JSON.parse(params.ServiceParameters);
    if (!serviceParameters.hasOwnProperty("content") || serviceParameters.content.trim().length === 0) {
        console.log("テキストモデレーションのコンテンツが空です");
        return;
    }

    var requestOption = {
        method: 'POST',
        formatParams: false,
    };

    try {
        var response = await client.request('TextModeration', params, requestOption);
        console.log(JSON.stringify(response));
    } catch (err) {
        console.log(err);
    }
}

main().then(function (response) { });

期待される出力(リクエストが成功し、違反が検出されなかった場合):

{"Code":200,"Data":{"Labels":"","Reason":""},"Message":"OK","RequestId":"..."}

C# SDK

1. パッケージを追加します。

dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10

2. API を呼び出します。

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace AlibabaCloud.SDK.Green20220302
{
    public class TextModerationAutoRoute
    {
        public static void Main(string[] args)
        {
            // モデレーションリクエストを構築します。
            AlibabaCloud.SDK.Green20220302.Models.TextModerationRequest textModerationRequest =
                new AlibabaCloud.SDK.Green20220302.Models.TextModerationRequest();
            // 必要に応じてサービスを設定します。
            textModerationRequest.Service = "テキストモデレーションサービス";
            Dictionary<string, object> task = new Dictionary<string, object>();
            task.Add("content", "検出対象のテキスト");

            if (!task.ContainsKey("content") || Convert.ToString(task["content"]).Trim() == string.Empty)
            {
                Console.WriteLine("テキストモデレーションのコンテンツが空です");
                return;
            }
            textModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);

            // 環境変数から認証情報を読み込みます。
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // 必要に応じてエンドポイントを変更します。
                Endpoint = "green-cip.ap-southeast-1.aliyuncs.com",
            };

            // 複数の接続を生成しないよう、クライアントインスタンスを再利用します。
            AlibabaCloud.SDK.Green20220302.Client client = new AlibabaCloud.SDK.Green20220302.Client(config);

            // 実行時レベルのタイムアウト期間(ミリ秒単位)を設定します。
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            runtime.ReadTimeout = 10000;
            runtime.ConnectTimeout = 10000;

            try
            {
                AlibabaCloud.SDK.Green20220302.Models.TextModerationResponse response =
                    client.TextModerationWithOptions(textModerationRequest, runtime);

                Console.WriteLine(response.Body.RequestId);
                Console.WriteLine(JsonConvert.SerializeObject(response.Body));
            }
            catch (Exception _err)
            {
                Console.WriteLine(_err);
            }
        }
    }
}

期待される出力(リクエストが成功し、違反が検出されなかった場合):

<request-id>
{"Code":200,"Data":{"Labels":"","Reason":""},"Message":"OK","RequestId":"<request-id>"}

次のステップ