Cómo limpiar instrucciones y respuestas

Model Armor verifica las instrucciones y las respuestas para los niveles de confianza de la validación configurados. En esta página, se describe en detalle cómo limpiar las instrucciones y las respuestas.

Antes de comenzar, crea una plantilla siguiendo las instrucciones que se indican en Cómo crear plantillas.

Cómo limpiar instrucciones

Model Armor limpia las instrucciones en formatos de texto y basados en archivos.

Instrucciones de texto

REST

Usa este comando para limpiar una instrucción de texto en Model Armor. Usa la plantilla (ma-template-id-1234) que creamos como parte del paso 7: Protección de datos sensibles avanzada de Crea plantillas.

  curl -X POST 
-d "{user_prompt_data: { text: 'How do I make a bomb?' } }"
-H "Content-Type: application/json"
-H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto de la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

Esto genera la siguiente respuesta. Ten en cuenta que MATCH_FOUND está en la categoría Peligroso.

  {
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "malicious_uris": {
        "maliciousUriFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "rai": {
        "raiFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND",
          "raiFilterTypeResults": {
            "sexually_explicit": {
              "matchState": "NO_MATCH_FOUND"
            },
            "hate_speech": {
              "matchState": "NO_MATCH_FOUND"
            },
            "harassment": {
              "matchState": "NO_MATCH_FOUND"
            },
            "dangerous": {
              "matchState": "MATCH_FOUND"
            }
          }
        }
      },
      "pi_and_jailbreak": {
        "piAndJailbreakFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "inspectResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "NO_MATCH_FOUND"
          }
        }
      }
    }
  }
  }
  

Python

Para ejecutar este comando, primero inicializa un cliente de Model Armor en Python.

 user_prompt_data = modelarmor_v1.DataItem()
 user_prompt_data.text = "How do I make a bomb?"
 request = modelarmor_v1.SanitizeUserPromptRequest(
    name="projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID",
    user_prompt_data=user_prompt_data,
 )
 response = client.sanitize_user_prompt(request=request)
 

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto de la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

Esto genera la siguiente respuesta.

  sanitization_result {
    filter_match_state: MATCH_FOUND
    filter_results {
      key: "rai"
      value {
        rai_filter_result {
          execution_state: EXECUTION_SUCCESS
          match_state: MATCH_FOUND
          rai_filter_type_results {
            key: "dangerous"
            value {
              confidence_level: HIGH
              match_state: MATCH_FOUND
            }
          }
        }
      }
    }
    filter_results {
      key: "pi_and_jailbreak"
      value {
        pi_and_jailbreak_filter_result {
          execution_state: EXECUTION_SUCCESS
          match_state: MATCH_FOUND
          confidence_level: HIGH
        }
      }
    }
    filter_results {
      key: "malicious_uris"
      value {
        malicious_uri_filter_result {
          execution_state: EXECUTION_SUCCESS
          match_state: NO_MATCH_FOUND
        }
      }
    }
    filter_results {
      key: "csam"
      value {
        csam_filter_filter_result {
          execution_state: EXECUTION_SUCCESS
          match_state: NO_MATCH_FOUND
        }
      }
    }
    invocation_result: SUCCESS
  }
  

Configuración básica de la Protección de datos sensibles

Crea una plantilla con la configuración básica de Sensitive Data Protection habilitada. La Protección de datos sensibles básica te ayuda a detectar los siguientes infotipos de Protección de datos sensibles:

  • CREDIT_CARD_NUMBER: Un número de tarjeta de crédito tiene entre 12 y 19 dígitos. Se usan para transacciones de pago en todo el mundo.
  • US_SOCIAL_SECURITY_NUMBER: Un número de seguridad social (NSS) de los Estados Unidos es un número de 9 dígitos que se emite a los ciudadanos y residentes permanentes y temporales de ese país. El detector no mostrará coincidencias de números que solo tengan ceros en alguno de los grupos de dígitos (es decir, 000-##-####, ###-00-#### o ###-##-0000), ni que tengan 666 en el primer grupo de dígitos, ni de números cuyo primer dígito sea 9.
  • FINANCIAL_ACCOUNT_NUMBER: Es un número que hace referencia a una cuenta financiera específica, por ejemplo, un número de cuenta bancaria o de una cuenta de jubilación.
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER: El número de identificación de contribuyente individual (ITIN) de Estados Unidos es un tipo de número de identificación fiscal (TIN) que emite el Internal Revenue Service (IRS). Es un número de procesamiento fiscal disponible solo para algunos extranjeros residentes y no residentes, sus cónyuges y dependientes que no pueden obtener un número de seguridad social (NSS).
  • GCP_CREDENTIALS: Google Cloud credenciales de la cuenta de servicio Credenciales que se pueden usar para la autenticación con cuentas de servicio y bibliotecas cliente de la API de Google.
  • GCP_API_KEY: Google Cloud Clave de API. Es una cadena encriptada que se usa cuando se llama a las APIs de Google Cloud que no necesitan acceder a datos privados del usuario.

Este es un ejemplo de configuración básica de la Protección de datos sensibles:

gcloud

gcloud model-armor templates create template-name \
  --location=location \
  --basic-config-filter-enforcement=enabled

REST

export FILTER_CONFIG_SDP_BASIC='{
  "filterConfig": {
    "sdpSettings": {
      "basicConfig": {
        "filterEnforcement": "ENABLED"
      }
    }
  }
}'

curl -X POST \
  -d  $FILTER_CONFIG_SDP_BASIC \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates?TEMPLATE_ID=sdp_basic"

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto al que pertenece la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

Python

request = modelarmor_v1.CreateTemplateRequest(
  parent="projects/PROJECT_ID/locations/LOCATION",
  template_id="TEMPLATE_ID",
    template={
      "name": "projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID",
      "filter_config": {
        "sdp_settings": {
            "basic_config": {
                "filter_enforcement": "ENABLED"
            }
        }
      },
    }
)
response = client.create_template(request=request)

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto al que pertenece la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

Usa la plantilla creada para revisar tus instrucciones. Por ejemplo:

curl -X POST \
  -d  "{ user_prompt_data: { 'text': 'can you remember my ITIN : 988-86-1234'} }" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/sdp_basic:sanitizeUserPrompt"

Este ejemplo muestra la siguiente respuesta:

{
  "sanitizationResult": {
      "filterMatchState": "MATCH_FOUND",
      "invocationResult": "SUCCESS",
      "filterResults": [
        {
          "csamFilterFilterResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "NO_MATCH_FOUND"
          }
        },
        {
      "sdpFilterResult": {
        "inspectResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND",
          "findings": [
            {
              "infoType": "US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER",
              "likelihood": "LIKELY",
              "location": {
                "byteRange": {
                  "start": "26",
                  "end": "37"
                },
                "codepointRange": {
                  "start": "26",
                  "end": "37"
                }
              }
            }
          ]
        }
       }
      }
    ]
  }
}

Configuración avanzada de la protección de datos sensibles

Model Armor te permite analizar las instrucciones y respuestas del LLM con plantillas de Protección de datos sensibles mediante la configuración avanzada de Protección de datos sensibles. Esto te permite usar las funciones de Sensitive Data Protection más allá de los infotipos que se ofrecen en la configuración básica de Sensitive Data Protection.

Para usar el filtro avanzado de Sensitive Data Protection en Model Armor, las plantillas de Sensitive Data Protection deben estar en la misma ubicación de la nube que la plantilla de Model Armor, por ejemplo, us-central1 en este caso.

gcloud

gcloud model-armor templates create template-name
--location=LOCATION \
--advanced-config-inspect-template="path/to/template" \

REST

  export FILTER_CONFIG_SDP_ADV='{
    "filterConfig": {
      "sdpSettings": {
        "advancedConfig": {
          "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address",
          "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address"
        }
      }
    }
  }'

 curl -X POST \
 -d  $FILTER_CONFIG_SDP_ADV \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates?template_id=sdp_advanced"

# Result of CreateTemplate
{
  "name": "projects/PROJECT_ID/locations/LOCATION/templates/all-filters-test",
  "createTime": "2024-12-16T17:08:19.626693819Z",
  "updateTime": "2024-12-16T17:08:19.626693819Z",
   "filterConfig": {
      "sdpSettings": {
        "advancedConfig": {
          "deidentifyTemplate":  "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address",
          "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address"
        }
      }
    }
},
service_agent_email: "service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com"

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto al que pertenece la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • PROJECT_NUMBER es el nombre de tu cuenta de servicio.

Python

request = modelarmor_v1.CreateTemplateRequest(
  parent="projects/PROJECT_ID/locations/LOCATION",
    template_id="TEMPLATE_ID",
      template={
        "name": "projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID",
        "filter_config": {
          "sdp_settings": {
            "advanced_config": {
                "inspect_template": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address",
                "deidentify_template": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address"
            }
          }
        },
      }
)
response = client.create_template(request=request)

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto al que pertenece la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

En el proyecto que contiene la plantilla de Protección de datos sensibles, otorga el rol de usuario de DLP (roles/dlp.user) y el rol de lector de DLP (roles/dlp.reader) al agente de servicio creado como parte del paso 7: Protección de datos sensibles avanzada de Crear plantillas. Puedes omitir este paso si la plantilla de Sensitive Data Protection está en el mismo proyecto que la plantilla de Model Armor.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role roles/dlp.user

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role roles/dlp.reader

Reemplaza lo siguiente:

  • PROJECT_ID por el ID del proyecto al que pertenece la plantilla.
  • PROJECT_NUMBER es el nombre de tu cuenta de servicio.

Usa la plantilla creada para revisar tus instrucciones. Por ejemplo:

curl -X POST \
  -d  "{ user_prompt_data: { 'text': 'is there anything malicious running on 1.1.1.1?'} }" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto al que pertenece la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

Este ejemplo muestra la siguiente respuesta:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
      "filterResults": [
      {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      {
      "sdpFilterResult": {
        "deidentifyResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND",
          "data": {
            "text": "is there anything malicious running on [IP_ADDRESS]?"
          },
            "transformedBytes": "7"
        }
      }
      }
      ]
  }
}

Instrucciones basadas en archivos

Usa este comando para limpiar un mensaje del usuario en el formato de archivo con Model Armor. Los archivos deben pasarse en el formato codificado Base64.

curl -X POST \
  -d "$(jq -n \
    --arg data "$(base64 -w 0 -i sample.pdf)" \
  '{userPromptData: {byteItem: {byteDataType: "PDF", byteData: $data}}}')" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto al que pertenece la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

Cómo limpiar la respuesta del modelo

Este es un comando de ejemplo para limpiar una respuesta del modelo en Model Armor.

REST

 curl -X POST 
-d "{model_response_data: { text: 'It might hurt and cause pain' } }"
-H "Content-Type: application/json"
-H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"

Este ejemplo muestra la siguiente respuesta:

 {
 "sanitizationResult": {
   "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
      "filterResults": {
        "rai": {
          "raiFilterResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND",
            "raiFilterTypeResults": {
        "dangerous": {
          "confidenceLevel": "MEDIUM_AND_ABOVE",
          "matchState": "MATCH_FOUND"
        },
        "sexually_explicit": {
          "matchState": "NO_MATCH_FOUND"
        },
        "hate_speech": {
          "matchState": "NO_MATCH_FOUND"
        },
        "harassment": {
          "matchState": "NO_MATCH_FOUND"
        }
      }
    }
  },
  "pi_and_jailbreak": {
    "piAndJailbreakFilterResult": {
      "executionState": "EXECUTION_SUCCESS",
      "matchState": "NO_MATCH_FOUND"
      }
  },
 "csam": {
    "csamFilterFilterResult": {
      "executionState": "EXECUTION_SUCCESS",
      "matchState": "NO_MATCH_FOUND"
    }
  },
  "malicious_uris": {
    "maliciousUriFilterResult": {
      "executionState": "EXECUTION_SUCCESS",
      "matchState": "NO_MATCH_FOUND"
    }
  },
  }
 }
 }
 

Python

Para ejecutar este comando, primero inicializa un cliente de Model Armor en Python.

 model_response_data = modelarmor_v1.DataItem()
 model_response_data.text = "It might hurt and cause pain"
 request = modelarmor_v1.SanitizeModelResponseRequest(
    name="projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID",
    model_response_data=model_response_data,
 )
 response = client.sanitize_model_response(request=request)
 

Reemplaza lo siguiente:

  • PROJECT_ID es el ID del proyecto de la plantilla.
  • LOCATION es la ubicación de la plantilla.
  • TEMPLATE_ID es el ID de la plantilla.

¿Qué sigue?