Manage custom text libraries

Updated at:

Use the AI Guardrails SDK for Python to create and manage custom text libraries for text anti-spam scenarios. Custom libraries let you supplement the default moderation rules with terms and patterns specific to your application.

With the SDK, you can:

  • Query existing term libraries and text pattern libraries

  • Create, modify, and delete text libraries

  • Add, search, and remove text entries within a library

Prerequisites

Before you begin, make sure you have:

Key concepts

Text libraries are classified along two dimensions:

DimensionTypes
By content typeTerm library (LibType: textKeyword) — matches exact keywords; Text pattern library (LibType: similarText) — matches text patterns
By purposeBlacklist — blocks matching content; Whitelist — allows matching content; Review list — flags content for manual review
By sourceCustom (Source: MANUAL) — libraries you create and manage; Feedback-based (Source: FEEDBACK) — libraries built from moderation feedback

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

Query text libraries

All query examples use DescribeKeywordLibRequest and filter the results by LibType, ResourceType, and Source.

Query term libraries

# coding=utf-8
import json
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import DescribeKeywordLibRequest

# Reuse the client across requests to improve performance.
clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

# Create a new request object for each request.
request = DescribeKeywordLibRequest.DescribeKeywordLibRequest()
request.set_ServiceModule("open_api")
response = clt.do_action_with_exception(request)

result = json.loads(response)
all_libs = result["KeywordLibList"]
term_libs = []

for lib in all_libs:
    lib_type = lib["LibType"]
    resource_type = lib["ResourceType"]
    source = lib["Source"]

    # Custom term libraries for text anti-spam
    if lib_type == "textKeyword" and resource_type == "TEXT" and source == "MANUAL":
        term_libs.append(lib)

    # Feedback-based term libraries for text anti-spam
    if lib_type == "textKeyword" and resource_type == "TEXT" and source == "FEEDBACK":
        term_libs.append(lib)

print(json.dumps(term_libs))

Query text pattern libraries

# coding=utf-8
import json
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import DescribeKeywordLibRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = DescribeKeywordLibRequest.DescribeKeywordLibRequest()
request.set_ServiceModule("open_api")
response = clt.do_action_with_exception(request)

result = json.loads(response)
all_libs = result["KeywordLibList"]
pattern_libs = []

for lib in all_libs:
    lib_type = lib["LibType"]
    resource_type = lib["ResourceType"]
    source = lib["Source"]

    # Custom text pattern libraries for text anti-spam
    if lib_type == "similarText" and resource_type == "TEXT" and source == "MANUAL":
        pattern_libs.append(lib)

    # Feedback-based text pattern libraries for text anti-spam
    if lib_type == "similarText" and resource_type == "TEXT" and source == "FEEDBACK":
        pattern_libs.append(lib)

print(json.dumps(pattern_libs))

Create a text library

Create a term library

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import CreateKeywordLibRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = CreateKeywordLibRequest.CreateKeywordLibRequest()
request.set_ServiceModule("open_api")
request.set_Name("Term library for testing")
request.set_ResourceType("TEXT")      # Text anti-spam use case
request.set_LibType("textKeyword")    # Term library
request.set_Category("BLACK")         # Blacklist
response = clt.do_action_with_exception(request)
print(response)

Create a text pattern library

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import CreateKeywordLibRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = CreateKeywordLibRequest.CreateKeywordLibRequest()
request.set_ServiceModule("open_api")
request.set_Name("Text pattern library for testing")
request.set_ResourceType("TEXT")      # Text anti-spam use case
request.set_LibType("similarText")    # Text pattern library
request.set_Category("BLACK")         # Blacklist
response = clt.do_action_with_exception(request)
print(response)

Modify a text library

Update the name and business scenario of an existing text library using UpdateKeywordLibRequest.

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import UpdateKeywordLibRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = UpdateKeywordLibRequest.UpdateKeywordLibRequest()
request.set_Id(7534001)
request.set_Name('New name of the text library')
response = clt.do_action_with_exception(request)
print(response)

Delete a text library

Important

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

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import DeleteKeywordLibRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = DeleteKeywordLibRequest.DeleteKeywordLibRequest()
request.set_Id(3353)
response = clt.do_action_with_exception(request)
print(response)

Search for text entries

By default, the call returns all text entries in the specified library, paginated. Set the Keyword parameter to search for matching entries in fuzzy mode.

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import DescribeKeywordRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = DescribeKeywordRequest.DescribeKeywordRequest()
request.set_KeywordLibId("2693")
request.set_PageSize(10)
request.set_CurrentPage(1)
response = clt.do_action_with_exception(request)
print(response)

Add text entries

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import CreateKeywordRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = CreateKeywordRequest.CreateKeywordRequest()
request.set_KeywordLibId(2693)
request.set_Keywords("['How do you do', 'Perfect']")
response = clt.do_action_with_exception(request)
print(response)

Remove text entries

# coding=utf-8
import os
from aliyunsdkcore import client
from aliyunsdkcore.profile import region_provider
from aliyunsdkgreen.request.v20170823 import DeleteKeywordRequest

clt = client.AcsClient(
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    "cn-shanghai"
)
region_provider.modify_point('Green', 'cn-shanghai', 'green.cn-shanghai.aliyuncs.com')

request = DeleteKeywordRequest.DeleteKeywordRequest()
request.set_KeywordLibId(2693)
request.set_Ids("[1,2]")
response = clt.do_action_with_exception(request)
print(response)

What's next