Manage custom text libraries

更新时间:
复制 MD 格式

Use AI Guardrails SDK for .NET to create and manage custom text libraries for text anti-spam scenarios. Text libraries let you define terms and patterns that control how content is classified — as blocked, allowed, or flagged for review.

Library types and categories

Text libraries are classified along two dimensions.

By content type:

TypeLibType valueDescription
Term librarytextKeywordMatches exact or near-exact keywords
Text pattern librarysimilarTextMatches text based on similarity patterns

By purpose:

CategoryCategory valueEffect
BlacklistBLACKContent matching entries is blocked
WhitelistWHITEContent matching entries is allowed
Review listREVIEWContent matching entries is flagged for manual review

Prerequisites

Before you begin, ensure that you have:

  • Installed the .NET dependencies using the required .NET version. See Install .NET dependencies.

  • Set your AccessKey ID and AccessKey secret as environment variables:

    • ALIBABA_CLOUD_ACCESS_KEY_ID

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET

Important

Use the exact .NET version specified in the installation topic. Using an unsupported version causes subsequent API calls to fail.

Query text libraries

DescribeKeywordLibRequest returns all text libraries associated with your account — including those used for text anti-spam, image ad moderation, and audio anti-spam. Use the LibType, ResourceType, and Source fields to filter the results.

Query term libraries:

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            DescribeKeywordLibRequest request = new DescribeKeywordLibRequest();
            request.ServiceModule = "open_api";
            try
            {
                DescribeKeywordLibResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));

                List<DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib> allLibs = response.KeywordLibList;
                List<DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib> termLibs = new List<DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib>();

                foreach (DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib lib in allLibs)
                {
                    // Filter custom term libraries: LibType=textKeyword, ResourceType=TEXT, Source=MANUAL
                    if ("textKeyword".Equals(lib.LibType) && "TEXT".Equals(lib.ResourceType) && "MANUAL".Equals(lib.Source))
                    {
                        termLibs.Add(lib);
                    }
                    // Filter feedback-based term libraries: LibType=textKeyword, ResourceType=TEXT, Source=FEEDBACK
                    if ("textKeyword".Equals(lib.LibType) && "TEXT".Equals(lib.ResourceType) && "FEEDBACK".Equals(lib.Source))
                    {
                        termLibs.Add(lib);
                    }
                }
                Console.WriteLine(JsonConvert.SerializeObject(termLibs));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Query text pattern libraries:

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            DescribeKeywordLibRequest request = new DescribeKeywordLibRequest();
            request.ServiceModule = "open_api";
            try
            {
                DescribeKeywordLibResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));

                List<DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib> allLibs = response.KeywordLibList;
                List<DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib> patternLibs = new List<DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib>();

                foreach (DescribeKeywordLibResponse.DescribeKeywordLib_KeywordLib lib in allLibs)
                {
                    // Filter custom text pattern libraries: LibType=similarText, ResourceType=TEXT, Source=MANUAL
                    if ("similarText".Equals(lib.LibType) && "TEXT".Equals(lib.ResourceType) && "MANUAL".Equals(lib.Source))
                    {
                        patternLibs.Add(lib);
                    }
                    // Filter feedback-based text pattern libraries: LibType=similarText, ResourceType=TEXT, Source=FEEDBACK
                    if ("similarText".Equals(lib.LibType) && "TEXT".Equals(lib.ResourceType) && "FEEDBACK".Equals(lib.Source))
                    {
                        patternLibs.Add(lib);
                    }
                }
                Console.WriteLine(JsonConvert.SerializeObject(patternLibs));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

For the full list of query parameters, see Get a list of text libraries.

Create a text library

Use CreateKeywordLibRequest to create a term library or text pattern library. Set ResourceType to TEXT for text anti-spam use cases.

Create a term library:

using System;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            CreateKeywordLibRequest request = new CreateKeywordLibRequest();
            request.ServiceModule = "open_api";
            request.Name = "Term library for testing";
            request.ResourceType = "TEXT";      // For text anti-spam
            request.LibType = "textKeyword";    // Term library
            request.Category = "BLACK";         // Blacklist; also supports WHITE and REVIEW
            try
            {
                CreateKeywordLibResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Create a text pattern library:

using System;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            CreateKeywordLibRequest request = new CreateKeywordLibRequest();
            request.ServiceModule = "open_api";
            request.Name = "Text pattern library for testing";
            request.ResourceType = "TEXT";      // For text anti-spam
            request.LibType = "similarText";    // Text pattern library
            request.Category = "BLACK";         // Blacklist; also supports WHITE and REVIEW
            try
            {
                CreateKeywordLibResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Update a text library

Use UpdateKeywordLibRequest to rename a text library or change the business scenarios it applies to.

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            UpdateKeywordLibRequest request = new UpdateKeywordLibRequest();
            request.Id = <text-library-id>;                  // ID of the text library to update
            request.Name = "<new-library-name>";             // New name for the library
            // Specify the business scenarios this library applies to
            request.BizTypes = JsonConvert.SerializeObject(new List<string> { "comment", "title" });
            try
            {
                UpdateKeywordLibResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Replace the following placeholders with actual values:

PlaceholderDescription
<text-library-id>The ID of the text library to update
<new-library-name>The new name for the text library

Delete a text library

Important

Deleting a text library permanently deletes all text entries in it. Feedback-based text libraries cannot be deleted.

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            DeleteKeywordLibRequest request = new DeleteKeywordLibRequest();
            request.Id = <text-library-id>;    // ID of the text library to delete
            try
            {
                DeleteKeywordLibResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Replace <text-library-id> with the ID of the text library to delete.

Search for text entries

By default, DescribeKeywordRequest returns all text entries in a library, paginated. Set the Keyword parameter to filter results using fuzzy search.

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            DescribeKeywordRequest request = new DescribeKeywordRequest();
            request.KeywordLibId = <text-library-id>;          // ID of the library to search
            request.PageSize = 10;
            request.CurrentPage = 1;
            request.Keyword = "<search-term>";                 // Optional: fuzzy search term
            try
            {
                DescribeKeywordResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Replace the following placeholders with actual values:

PlaceholderDescription
<text-library-id>The ID of the text library to search
<search-term>The term to search for in fuzzy mode (optional)

Add text entries

Use CreateKeywordRequest to add one or more text entries to a library.

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            CreateKeywordRequest request = new CreateKeywordRequest();
            request.KeywordLibId = <text-library-id>;    // ID of the target text library
            // Specify the text entries to add
            request.Keywords = JsonConvert.SerializeObject(new List<string> { "Text_1", "Text_2" });
            try
            {
                CreateKeywordResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Replace <text-library-id> with the ID of the text library to add entries to.

Remove text entries

Use DeleteKeywordRequest to remove specific text entries from a library by their IDs.

using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20170823;
using System.Collections.Generic;

namespace csharp_sdk_sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Load credentials from environment variables
            DefaultProfile profile = DefaultProfile.GetProfile(
                    "cn-shanghai",
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);

            DeleteKeywordRequest request = new DeleteKeywordRequest();
            request.KeywordLibId = "<text-library-id>";    // ID of the text library
            // Specify the IDs of the text entries to remove
            request.Ids = JsonConvert.SerializeObject(new List<int> { <text-entry-id-1>, <text-entry-id-2> });
            try
            {
                DeleteKeywordResponse response = client.GetAcsResponse(request);
                Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
    }
}

Replace the following placeholders with actual values:

PlaceholderDescription
<text-library-id>The ID of the text library
<text-entry-id-1>, <text-entry-id-2>The IDs of the text entries to remove

What's next

  • To apply your text libraries in content moderation requests, specify the library when submitting text anti-spam tasks using the SDK.

  • For the full API parameter reference, see Get a list of text libraries.