---
title: Moderação
slug: 2kbU-moderacao
createdAt: 2024-09-02T19:27:31.629Z
---

Aqui está a tradução da documentação para o português:

***

**Moderação de Conteúdo Personalizada**

Além dos tipos de moderação de conteúdo integrados ao sistema, o Paragraph também suporta regras de moderação de conteúdo definidas pelo usuário. Esse método é adequado para desenvolvedores que personalizam suas próprias implantações privadas. Por exemplo, em um serviço interno de atendimento ao cliente de uma empresa, pode ser necessário que os usuários, ao realizar consultas, ou os agentes de atendimento ao cliente, ao responder, não apenas evitem palavras relacionadas à violência, sexo e atividades ilegais, mas também evitem termos específicos proibidos pela empresa ou que violem a lógica de moderação estabelecida internamente. Os desenvolvedores podem estender as regras de moderação de conteúdo personalizadas em nível de código em uma implantação privada do Paragraph.

**Início Rápido**
Aqui está um exemplo de como estender um tipo de moderação de conteúdo para Serviço em Nuvem, com os seguintes passos:

**1.Inicializar o Diretório**
Para adicionar um tipo personalizado "Serviço em Nuvem", crie os diretórios e arquivos relevantes em `api/core/moderation`.

```text
.
└── api
    └── core
        └── moderation
            └── cloud_service
                ├── __init__.py
                ├── cloud_service.py
                └── schema.json
```

**2.Adicionar Especificações de Componentes de Frontend**
O arquivo `schema.json` define as especificações dos componentes de frontend. Para detalhes, consulte Extensão Baseada em Código.

```json
{
    "label": {
        "en-US": "Cloud Service"
    },
    "form_schema": [
        {
            "type": "select",
            "label": {
                "en-US": "Cloud Provider"
            },
            "variable": "cloud_provider",
            "required": true,
            "options": [
                {
                    "label": {
                        "en-US": "AWS"
                    },
                    "value": "AWS"
                },
                {
                    "label": {
                        "en-US": "Google Cloud"
                    },
                    "value": "GoogleCloud"
                },
                {
                    "label": {
                        "en-US": "Azure Cloud"
                    },
                    "value": "Azure"
                }
            ],
            "default": "GoogleCloud",
            "placeholder": ""
        },
        {
            "type": "text-input",
            "label": {
                "en-US": "API Endpoint",
            },
            "variable": "api_endpoint",
            "required": true,
            "max_length": 100,
            "default": "",
            "placeholder": "https://api.example.com"
        },
        {
            "type": "paragraph",
            "label": {
                "en-US": "API Key",
            },
            "variable": "api_keys",
            "required": true,
            "default": "",
            "placeholder": "Cole sua chave de API aqui"
        }
    ]
}
```

**3.Adicionar Classe de Implementação**
Template de código `cloud_service.py`, onde você pode implementar a lógica de negócios específica.

:::hint{type="warning"}
Nota: O nome da variável da classe deve ser o mesmo que o nome do tipo personalizado, correspondendo ao nome do diretório e do arquivo, e deve ser único.
:::

```python
from core.moderation.base import Moderation, ModerationAction, ModerationInputsResult, ModerationOutputsResult

class CloudServiceModeration(Moderation):
    """
    O nome do tipo personalizado deve ser único, mantendo o mesmo nome do diretório e do arquivo.
    """
    name: str = "cloud_service"

    @classmethod
    def validate_config(cls, tenant_id: str, config: dict) -> None:
        """
        Validação do schema.json. Será chamado quando o usuário salvar a configuração.

        Exemplo:
            config = {
                "cloud_provider": "GoogleCloud",
                "api_endpoint": "https://api.example.com",
                "api_keys": "123456",
                "inputs_config": {
                    "enabled": True,
                    "preset_response": "Seu conteúdo viola nossa política de uso. Por favor, revise e tente novamente."
                },
                "outputs_config": {
                    "enabled": True,
                    "preset_response": "Seu conteúdo viola nossa política de uso. Por favor, revise e tente novamente."
                }
            }

        :param tenant_id: id do workspace
        :param config: variáveis do formulário de configuração
        :return:
        """

        cls._validate_inputs_and_outputs_config(config, True)

        if not config.get("cloud_provider"):
            raise ValueError("cloud_provider é obrigatório")

        if not config.get("api_endpoint"):
            raise ValueError("api_endpoint é obrigatório")

        if not config.get("api_keys"):
            raise ValueError("api_keys é obrigatório")

    def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInputsResult:
        """
        Moderação para entradas.

        :param inputs: entradas do usuário
        :param query: a consulta do aplicativo de chat, caso seja um app de completude, ficará vazio
        :return: o resultado da moderação
        """
        flagged = False
        preset_response = ""

        if self.config['inputs_config']['enabled']:
            preset_response = self.config['inputs_config']['preset_response']

            if query:
                inputs['query__'] = query
            flagged = self._is_violated(inputs)

        return ModerationInputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response)

    def moderation_for_outputs(self, text: str) -> ModerationOutputsResult:
        """
        Moderação para saídas.

        :param text: o texto da resposta do LLM
        :return: o resultado da moderação
        """
        flagged = False
        preset_response = ""

        if self.config['outputs_config']['enabled']:
            preset_response = self.config['outputs_config']['preset_response']

            flagged = self._is_violated({'text': text})

        return ModerationOutputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response)

    def _is_violated(self, inputs: dict):
        """
        A principal lógica da moderação.

        :param inputs:
        :return: o resultado da moderação
        """
        return False
```

**4.Depurar a Extensão**
Neste ponto, você pode selecionar o tipo de extensão de moderação de conteúdo "Serviço em Nuvem" personalizado para depuração na interface de orquestração do aplicativo do Paragraph.

**Template de Classe de Implementação**

```python
from core.moderation.base import Moderation, ModerationAction, ModerationInputsResult, ModerationOutputsResult

class CloudServiceModeration(Moderation):
    """
    O nome do tipo personalizado deve ser único, mantendo o mesmo nome do diretório e do arquivo.
    """
    name: str = "cloud_service"

    @classmethod
    def validate_config(cls, tenant_id: str, config: dict) -> None:
        """
        Validação do schema.json. Será chamado quando o usuário salvar a configuração.
        
        :param tenant_id: id do workspace
        :param config: variáveis do formulário de configuração
        :return:
        """
        cls._validate_inputs_and_outputs_config(config, True)
        
        # implemente sua própria lógica aqui

    def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInputsResult:
        """
        Moderação para entradas.

        :param inputs: entradas do usuário
        :param query: a consulta do aplicativo de chat, caso seja um app de completude, ficará vazio
        :return: o resultado da moderação
        """
        flagged = False
        preset_response = ""
        
        # implemente sua própria lógica aqui
        
        return ModerationInputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response)

    def moderation_for_outputs(self, text: str) -> ModerationOutputsResult:
        """
        Moderação para saídas.

        :param text: o texto da resposta do LLM
        :return: o resultado da moderação
        """
        flagged = False
        preset_response = ""
        
        # implemente sua própria lógica aqui

        return ModerationOutputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response)
```

**Introdução Detalhada ao Desenvolvimento de Classe de Implementação**

- `validate_config`: O método de validação do formulário `schema.json` é chamado quando o usuário clica em "Publicar" para salvar a configuração.
- Parâmetros de formulário `config`:
  - `{{variable}}`: Variável personalizada do formulário.
- `moderation_for_inputs`: Função de validação de entradas.
  - `inputs`: Valores passados pelo usuário final.
  - `query`: O conteúdo de entrada atual do usuário final em uma conversa, um parâmetro fixo para aplicativos de conversação.
  - `ModerationInputsResult`: Resultados da moderação de entradas.
- `moderation_for_outputs`: Função de validação de saídas.
  - `text`: Conteúdo da resposta do modelo.
  - `ModerationOutputsResult`: Resultados da moderação de saídas.

***

