本ガイドでは、テキストモデレーション 2.0 サービスの有効化、アクセス権限の設定、および TextModeration API オペレーションを呼び出すための SDK の連携手順について説明します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
手順 1:サービスの有効化
サービスの有効化ページから、テキストモデレーション 2.0 サービスを有効化します。
有効化後は、課金方法がデフォルトで従量課金となります。実際の使用量に基づき、毎日課金されます。サービスは、API オペレーションの利用状況に応じて自動的に請求書を生成します。サービスを利用しなかった場合、課金されません。
手順 2:RAM ユーザーへの権限付与
Content Moderation API を呼び出すには、RAM ユーザーに必要な権限を付与する必要があります。
RAM 管理者として、RAM コンソール にログインします。
RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。
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.com | green-cip-vpc.ap-southeast-1.aliyuncs.com |
| 米国 (バージニア) | green-cip.us-east-1.aliyuncs.com | green-cip-vpc.us-east-1.aliyuncs.com |
| 米国 (シリコンバレー) | green-cip.us-west-1.aliyuncs.com | N/A |
| イギリス (ロンドン) | green-cip.eu-west-1.aliyuncs.com | N/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.112. 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.102. 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/v22. 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.102. 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.102. 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>"}次のステップ
テキストモデレーション強化版 2.0 多言語サービス API —
TextModerationの完全な API リファレンス認証情報の設定 — STS トークンまたは他の認証情報プロバイダーを本番ワークロードで使用
OpenAPI Explorer — API オペレーションのデバッグおよび SDK コードのオンライン生成