文本审核增强版通用服务SDK及接入指南

本文介绍文本审核增强版SDK接入的方式。

步骤一:开通服务

访问开通服务页面,开通文本审核增强版服务。

开通文本增强版服务后,默认付费方式是按量后付费,且按照实际用量结算当日费用,不调用服务不收费。接口接入使用后系统会按使用量自动出账。您也可以购买按量抵扣资源包,资源包相较于后付费存在一定阶梯折扣,适合使用量级可预期和较大的用户。

步骤二:为RAM用户授权

在接入SDK或者API之前,您需要为RAM用户授权。您可以为阿里云账号和RAM用户创建一个访问密钥(AccessKey)。在调用阿里云API时您需要使用AccessKey完成身份验证。获取方式,请参见获取AccessKey

  1. 使用RAM管理员登录RAM控制台

  2. 创建RAM用户。

    具体操作,请参见创建RAM用户

  3. RAM用户授权系统策略权限:AliyunYundunGreenWebFullAccess

    具体操作,请参见RAM用户授权

    完成以上配置后,您可以使用RAM用户调用内容安全API。

步骤三:安装并接入SDK

目前支持的接入地域如下:

地域

外网接入地址

内网接入地址

华东2(上海)

green-cip.cn-shanghai.aliyuncs.com

green-cip-vpc.cn-shanghai.aliyuncs.com

华北2(北京)

green-cip.cn-beijing.aliyuncs.com

green-cip-vpc.cn-beijing.aliyuncs.com

华东1(杭州)

green-cip.cn-hangzhou.aliyuncs.com

green-cip-vpc.cn-hangzhou.aliyuncs.com

华南1(深圳)

green-cip.cn-shenzhen.aliyuncs.com

green-cip-vpc.cn-shenzhen.aliyuncs.com

西南1(成都)

green-cip.cn-chengdu.aliyuncs.com

暂无

新加坡

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

暂无

伦敦

green-cip.eu-west-1.aliyuncs.com

暂无

说明

如果需要其他语言的SDK示例代码,您可以通过OpenAPI开发者门户在线调试工具调试API接口,该工具会自动生成相应APISDK调用示例代码。

阿里云SDK代码通过定义ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量来创建默认的访问凭证。调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。您在接入SDK代码示例之前,请先配置环境变量。具体操作,请参见身份验证配置

SDK分为两个版本服务,如果您是新接入文本审核增强版,推荐您优先使用文本审核PLUS服务

文本审核增强版通用服务

SDK对应接口为文本审核增强版通用服务API文本审核增强版多语言服务

Java SDK

支持Java 1.8及以上版本。

原始代码,请参见Java SDK源码或者Java SDK源码(OSS路径)

pom.xml中加入相应依赖,就可以在Maven工程中使用SDK。

  1. dependencies中添加如下依赖:

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

  2. 接入Java SDK。

    代码示例

    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拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
             * 常见获取环境变量方式:
             * 方式一:
             *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方式二:
             *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            config.setAccessKeyId("建议从环境变量中获取RAM用户AccessKey ID");
            config.setAccessKeySecret("建议从环境变量中获取RAM用户AccessKey Secret");
            //接入区域和地址请根据实际情况修改
            config.setRegionId("cn-shanghai");
            config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
            //读取时超时时间,单位毫秒(ms)。
            config.setReadTimeout(6000);
            //连接时超时时间,单位毫秒(ms)。
            config.setConnectTimeout(3000);
            //设置http代理。
            //config.setHttpProxy("http://10.10.xx.xx:xxxx");
            //设置https代理。
            //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
            // 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能
            Client client = new Client(config);
    
            // 创建RuntimeObject实例并设置运行参数。
            RuntimeOptions runtime = new RuntimeOptions();
            runtime.readTimeout = 10000;
            runtime.connectTimeout = 10000;
    
            //检测参数构造
            JSONObject serviceParameters = new JSONObject();
            serviceParameters.put("content", "input text");
    
            if (serviceParameters.get("content") == null || serviceParameters.getString("content").trim().length() == 0) {
                System.out.println("text moderation content is empty");
                return;
            }
    
            TextModerationRequest textModerationRequest = new TextModerationRequest();
            /*
            文本检测service:内容安全控制台文本增强版规则配置的serviceCode,示例:chat_detection
            */
            textModerationRequest.setService("service code");
            textModerationRequest.setServiceParameters(serviceParameters.toJSONString());
            try {
                // 调用方法获取检测结果。
                TextModerationResponse response = client.textModerationWithOptions(textModerationRequest, runtime);
    
                // 自动路由。
                if (response != null) {
                    // 服务端错误,区域切换到cn-beijing。
                    if (500 == response.getStatusCode() || (response.getBody() != null && 500 == (response.getBody().getCode()))) {
                        // 接入区域和地址请根据实际情况修改。
                        config.setRegionId("cn-beijing");
                        config.setEndpoint("green-cip.cn-beijing.aliyuncs.com");
                        client = new Client(config);
                        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("text moderation not success. code:" + code);
                        }
                    } else {
                        System.out.println("response not success. status:" + response.getStatusCode());
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Python SDK

支持Python 3.6及以上版本。

原始代码,请参见Python SDK源码

支持Python 3.6及以上版本。

  1. 执行如下命令引入相关依赖。

    pip install alibabacloud_green20220302==2.22.0

  2. 接入Python SDK。

    代码示例

    # coding=utf-8
    
    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
    import json
    import uuid
    
    
    class TextAutoRoute:
    
        @staticmethod
        def main() -> None:
            service_parameters = {
                'content': 'input text',
                'dataId': str(uuid.uuid1())
            }
            if service_parameters.get("content") is None or len(service_parameters.get("content").strip()) == 0:
                print("text moderation content is empty")
                return
            text_moderation_request = models.TextModerationRequest(
                # 文本检测service:内容安全控制台文本增强版规则配置的serviceCode,示例:chat_detection
                service = 'service code',
                service_parameters = json.dumps(service_parameters)
            )
            config = Config(
                # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
                # 强烈建议不要把AccessKey IDAccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
                # 常见获取环境变量方式:
                # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                access_key_id='建议从环境变量中获取RAM用户AccessKey ID',
                access_key_secret='建议从环境变量中获取RAM用户AccessKey Secret',
                # 连接时超时时间,单位毫秒(ms)。
                connect_timeout=3000,
                # 读取时超时时间,单位毫秒(ms)。
                read_timeout=6000,
                # 接入区域和地址请根据实际情况修改。
                region_id='cn-shanghai',
                endpoint='green-cip.cn-shanghai.aliyuncs.com'
            )
            # 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
            client = Client(config)
    
            # 创建RuntimeObject实例并设置运行参数。
            runtime = util_models.RuntimeOptions()
            runtime.read_timeout = 10000
            runtime.connect_timeout = 10000
            try:
                response = client.text_moderation_with_options(text_moderation_request, runtime)
                # 自动路由
                if UtilClient.equal_number(500, response.status_code) or not response or not response.body or 200 != response.body.code:
                    # 服务端错误,区域切换到cn-beijing
                    config.region_id = 'cn-beijing'
                    config.endpoint = 'green-cip.cn-beijing.aliyuncs.com'
                    client = Client(config)
                    response = client.text_moderation_with_options(text_moderation_request, runtime)
    
                if response.status_code == 200:
                    # 调用成功。
                    # 获取审核结果。
                    result = response.body
                    print('response success. result:{}'.format(result))
                    if result.code == 200:
                        resultData = result.data
                        print('labels:{}, reason:{}'.format(resultData.labels, resultData.reason))
                else:
                    print('response not success. status:{} ,result:{}'.format(response.status_code, response))
            except Exception as err:
                print(err)
    
    
    if __name__ == '__main__':
        TextAutoRoute.main()
    

PHP SDK

支持PHP 5.6及以上版本。

原始代码,请参见PHP SDK源码

  1. 执行如下命令引入相关依赖。

    composer require alibabacloud/green-20220302 2.22.0

  2. 接入PHP SDK。

    代码示例

    <?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();
    /*
    文本检测service:内容安全控制台文本增强版规则配置的serviceCode,示例:chat_detection
    */
    $request->service = "service code";
    // 待检测数据。
    $arr = array('content' => 'input text');
    $request->serviceParameters = json_encode($arr);
    if (empty($arr) || empty(trim($arr["content"]))) {
        echo "text moderation content is empty";
        return;
    }
    $config = new Config([
        /**
         * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
         * 强烈建议不要把AccessKey IDAccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
         * 常见获取环境变量方式:
         * 获取RAM用户AccessKey ID:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         * 获取RAM用户AccessKey Secret:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        "accessKeyId" => '建议从环境变量中获取RAM用户AccessKey ID',
        "accessKeySecret" => '建议从环境变量中获取RAM用户AccessKey Secret',
        // 设置HTTP代理。
        // "httpProxy" => "http://10.10.xx.xx:xxxx",
        // 设置HTTPS代理。
        // "httpsProxy" => "https://10.10.xx.xx:xxxx",
        "endpoint" => "green-cip.cn-shanghai.aliyuncs.com",
        "regionId" => "cn-shanghai"
    
    ]);
    // 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
    $client = new Green($config);
    
    // 创建RuntimeObject实例并设置运行参数。
    $runtime = new RuntimeOptions([]);
    $runtime->readTimeout = 10000;
    $runtime->connectTimeout = 10000;
    
    try {
        // 调用接口,获取检测结果。
        $response = $client->textModerationWithOptions($request, $runtime);
        // 自动路由。
        if (Utils::equalNumber(500, $response->statusCode) || Utils::equalNumber(500, $response->body->code)) {
            //服务端错误,区域切换到cn-beijing
            $config->endpoint = "green-cip.cn-beijing.aliyuncs.com";
            $config->regionId = "cn-beijing";
            $client = new Green($config);
            $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());
    }

Go SDK

  1. 执行如下命令引入相关依赖。

    go get github.com/alibabacloud-go/green-20220302/v2

  2. 接入Go SDK。

    代码示例

    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"
    )
    
    func main() {
    	config := &openapi.Config{
    		// 您的AccessKey ID
    		AccessKeyId: tea.String("建议从环境变量中获取RAM用户AccessKey ID"),
    		// 您的AccessKey Secret
    		AccessKeySecret: tea.String("建议从环境变量中获取RAM用户AccessKey Secret"),
    		// 访问的 Endpoint
    		Endpoint: tea.String("green-cip.cn-shanghai.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("nickname_detection"),
    		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("response success. response:" + textModerationResponse.String())
    		if tea.IntValue(tea.ToInt(textModerationResponse.Code)) == 200 {
    			textModerationResponseData := textModerationResponse.Data
    			fmt.Println("response reason:" + tea.StringValue(textModerationResponseData.Reason))
    			fmt.Println("response labels:" + tea.StringValue(textModerationResponseData.Labels))
    		}
    	} else {
    		fmt.Println("response not success. status:" + tea.ToString(statusCode))
    	}
    }

Node.js SDK

  1. 执行如下命令引入相关依赖。

    npm install @alicloud/green20220302@2.22.0

  2. 接入Node.js SDK。

    代码示例

    const Green20220302 = require('@alicloud/green20220302');
    const OpenApi = require('@alicloud/openapi-client');
    const Util = require('@alicloud/tea-util');
    // 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
    // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
    class Client {
        static createClient() {
            const config = new OpenApi.Config({
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], 
                endpoint: `green-cip.cn-shanghai.aliyuncs.com`,
            });
            return new Green20220302.default(config);
        }
    
        static async main() {
            const client = Client.createClient();
            // 构造请求对象
            const textModerationRequest = new Green20220302.TextModerationRequest({
                // 文本检测增强版service,参考:https://help.aliyun.com/document_detail/434034.html#section-dwo-e3u-4em 。
                "service": "nickname_detection",
                // 待检测文本内容。
                "serviceParameters": JSON.stringify({
                    "content": "测试文本"})
                });
            // 创建运行时配置对象
            const runtime = new Util.RuntimeOptions();
            try {
                // 发起请求并获取响应
                const response = await client.textModerationWithOptions(textModerationRequest, runtime);
                console.log(JSON.stringify(response.body));
            } catch (error) {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                // 错误 message
                console.log('Error occurred:', error.message);
            }
        }
    }
    
    Client.main();

C# SDK

  1. 执行如下命令引入相关依赖。

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

  2. 接入C# SDK。

    代码示例

    // This file is auto-generated, don't edit it. Thanks.
    
    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();
                /*
                文本检测service:内容安全控制台文本增强版规则配置的serviceCode,示例:chat_detection
                */
                textModerationRequest.Service = "service code";
                Dictionary<string, object> task = new Dictionary<string, object>();
                // 待检测文本内容。
                task.Add("content", "input text");
                if (!task.ContainsKey("content") || Convert.ToString(task["content"]).Trim() == string.Empty)
                {
                    Console.WriteLine("text moderation content is empty");
                    return;
                }
                textModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
    
    
                // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的STS方式。
                AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                {
                    /**
                     * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
                     * 强烈建议不要把AccessKey IDAccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
                     * 常见获取环境变量方式:
                     * 获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                     * 获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                     */
                     AccessKeyId = "建议从环境变量中获取RAM用户AccessKey ID",
                     AccessKeySecret = "建议从环境变量中获取RAM用户AccessKey Secret",
                    // 设置HTTP代理。
                    // HttpProxy = "http://xx.xx.xx.xx:xxxx",
                    // 设置HTTPS代理。
                    // HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                    // 访问的域名。
                    Endpoint = "green-cip.cn-shanghai.aliyuncs.com",
                };
                // 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
                AlibabaCloud.SDK.Green20220302.Client client = new AlibabaCloud.SDK.Green20220302.Client(config);
    
                // 创建RuntimeObject实例并设置运行参数。
                AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                runtime.ReadTimeout = 10000;
                runtime.ConnectTimeout = 10000;
                try
                {
                    // 调用API获取检测结果。
                    AlibabaCloud.SDK.Green20220302.Models.TextModerationResponse response =
                    client.TextModerationWithOptions(textModerationRequest, runtime);
                    // 自动路由,服务端错误,区域切换至cn-beijing。
                    if (response is null || response.Body is null || AlibabaCloud.TeaUtil.Common.EqualNumber(500, AlibabaCloud.TeaUtil.Common.AssertAsNumber(response.StatusCode)) || AlibabaCloud.TeaUtil.Common.EqualString("500", Convert.ToString(response.Body.Code)))
                    {
                        config.Endpoint = "green-cip.cn-beijing.aliyuncs.com";
                        client = new AlibabaCloud.SDK.Green20220302.Client(config);
                        response = client.TextModerationWithOptions(textModerationRequest, runtime);
                    }
    
                    Console.WriteLine(response.Body.RequestId);
                    Console.WriteLine(JsonConvert.SerializeObject(response.Body));
                }
                catch (Exception _err)
                {
                    Console.WriteLine(_err);
                }
    
            }
        }
    }
                            

如果您在使用过程中出现问题,可以请加入钉群(钉群号:35573806),联系产品技术专家进行咨询。