Política SanitizeUserPrompt

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Descripción general

La política SanitizeUserPrompt protege a las aplicaciones de IA del contenido dañino, ya que limpia las instrucciones del usuario que se envían a los modelos de IA generativa. La política usa Model Armor para evaluar las instrucciones del usuario en busca de contenido dañino, lo que habilita la protección nativa para las cargas de trabajo de IA con Apigee. Model Armor es un Google Cloud servicio que ofrece medidas de seguridad y protección de la IA para mitigar los riesgos asociados con los modelos de lenguaje grande (LLM).

Esta política se usa junto con la política SanitizeModelResponse.

Esta política es una política extensible, y el uso de esta política puede tener implicaciones de costo o uso, según tu licencia de Apigee. Para obtener información sobre los tipos de políticas y sus implicaciones de uso, consulta Tipos de políticas.

Antes de comenzar

Antes de usar la política SanitizeUserPrompt, debes completar las siguientes tareas:

  • Crea una plantilla de Model Armor. Debes completar este paso antes de crear una política de SanitizeUserPrompt.
  • Establece el extremo de API para el servicio de Model Armor.
  • Crea una política de SanitizeModelResponse. Esta tarea se debe completar antes de implementar la política SanitizeUserPrompt.

Roles obligatorios

Para obtener los permisos que necesitas para aplicar y usar la política SanitizeUserPrompt, pídele a tu administrador que te otorgue los siguientes roles de IAM en la cuenta de servicio que usas para implementar proxies de Apigee:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Habilita las APIs

Enable the Model Armor API.

Enable the API

Elemento <SanitizeUserPrompt>

Define una política SanitizeUserPrompt.

Valor predeterminado Consulta la pestaña Política predeterminada, a continuación
¿Es obligatorio? Obligatorio
Tipo Objeto complejo
Elemento principal N/A
Elementos secundarios <DisplayName>
<IgnoreUnresolvedVariables>
<TemplateName>
<UserPromptSource>

El elemento <SanitizeUserPrompt> usa la siguiente sintaxis:

Sintaxis

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</SanitizeUserPrompt>

Política predeterminada

En el siguiente ejemplo, se muestra la configuración predeterminada cuando agregas una política de SanitizeUserPrompt a tu flujo de solicitudes en la IU de Apigee:

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</SanitizeUserPrompt>

Cuando insertas una nueva política SanitizeUserPrompt con la IU de Apigee, la plantilla contiene stubs para todas las operaciones posibles. Consulta la información que aparece a continuación sobre los elementos obligatorios.

Este elemento tiene los siguientes atributos que son comunes a todas las políticas:

Atributo Predeterminada (obligatorio) Descripción
name N/A Obligatorio

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

continueOnError falso Opcional Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas. Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle. También consulta:
enabled true Opcional Configúralo como true para aplicar la política. Configúralo como false para desactivar la política. La política no se aplicará, incluso si permanece conectada a un flujo.
async   falso Obsoleta Este atributo dejó de estar disponible.

En la siguiente tabla, se proporciona una descripción de alto nivel de los elementos secundarios de <SanitizeUserPrompt>:

Elemento secundario ¿Es obligatorio? Descripción
<DisplayName> Opcional El nombre de la política.

<IgnoreUnresolvedVariables> Opcional Especifica si el procesamiento se detiene si la variable utilizada para el nombre de la plantilla o la carga útil de Model Armor no se resuelve.
<ModelArmor> Obligatorio Contiene la información necesaria para especificar la plantilla de Model Armor.
<UserPromptSource> Opcional Es la ubicación de la carga útil para que se extraiga el texto de la instrucción del usuario. Solo se admiten valores de texto de cadena.

Este campo admite la sintaxis de plantillas de mensajes de Apigee, incluido el uso de variables o funciones de ruta de acceso JSON.

Por ejemplo:

{jsonpath('$.input.prompt.text',request.content,false)}

Ejemplo

En esta sección, se proporciona un ejemplo del uso de <SanitizeUserPrompt>.

En este ejemplo, se usan todos los valores predeterminados para la detección de modelos y la extracción de instrucciones:

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
</SanitizeUserPrompt>

Referencia del elemento secundario

En esta sección, se describen los elementos secundarios de <SanitizeUserPrompt>.

<DisplayName>

Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

El elemento <DisplayName> es común a todas las políticas.

Valor predeterminado N/A
¿Es obligatorio? Opcional. Si omites <DisplayName>, se usa el valor del atributo name de la política.
Tipo String
Elemento principal <PolicyElement>
Elementos secundarios Ninguno

El elemento <DisplayName> usa la siguiente sintaxis:

Sintaxis

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Ejemplo

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

El elemento <DisplayName> no tiene atributos ni elementos secundarios.

<IgnoreUnresolvedVariables>

Determina si el procesamiento se detiene cuando una variable no se resuelve. Configúralo como true para ignorar las variables sin resolver y continuar con el procesamiento.

Valor predeterminado Falso
¿Es obligatorio? Opcional
Tipo Booleano
Elemento principal <SanitizeUserPrompt>
Elementos secundarios Ninguno

<ModelArmor>

Contiene la información necesaria para especificar la plantilla de Model Armor.

Valor predeterminado N/A
¿Es obligatorio? Obligatorio
Tipo String
Elemento principal
Elementos secundarios <TemplateName>

El elemento <ModelArmor> usa la siguiente sintaxis:

Sintaxis

<ModelArmor>
  <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
</ModelArmor>

Ejemplo

En este ejemplo, se usan variables de flujo de Apigee para completar la información requerida.

<ModelArmor>
  <TemplateName>projects/{organization.name}/locations/{system.region.name}/templates/{id}</TemplateName>
</ModelArmor>

En la siguiente tabla, se proporciona una descripción de alto nivel de los elementos secundarios de <ModelArmor>.

Elemento secundario ¿Es obligatorio? Descripción
<TemplateName> Obligatorio String

La plantilla de Model Armor que se usa para limpiar la solicitud del usuario.

Este valor se puede crear como plantilla con las siguientes variables de flujo de Apigee:

projects/{organization.name}/locations/{system.region.name}/templates/{id}

<UserPromptSource>

Es la ubicación de la carga útil para que se extraiga el texto de la instrucción del usuario. Este campo admite la sintaxis de la plantilla de mensajes de Apigee, incluido el uso de variables o funciones de ruta de acceso JSON. Por ejemplo:

{jsonpath('$.input.prompt.text',request.content,false)}
Valor predeterminado {jsonPath($.contents[-1].parts[-1].text,request.content,true)}
¿Es obligatorio? Opcional
Tipo String
Elemento principal <SanitizeUserPrompt>
Elementos secundarios Ninguno

Variables de flujo

Las variables de flujo se pueden usar para configurar el comportamiento del entorno de ejecución dinámico de las políticas y los flujos, según los encabezados HTTP, el contenido del mensaje, o el contexto disponible en el flujo. Para obtener más información sobre las variables de flujo, consulta Referencia de variables de flujo.

La política puede establecer estas variables de solo lectura durante la ejecución.

Nombre de la variable Descripción
SanitizeUserPrompt.POLICY_NAME.templateUsed Especifica qué plantilla de armadura de modelo se usa. Por ejemplo: projects/myproject/locations/us-west1/templates/mytemplate
SanitizeUserPrompt.POLICY_NAME.userPrompt Especifica el contenido de la instrucción que se usa para la llamada a Model Armor para limpiar el contenido.
SanitizeUserPrompt.POLICY_NAME.modelResponse Especifica el contenido de la respuesta del LLM que se usa para la llamada a Model Armor para limpiar el contenido.
SanitizeUserPrompt.POLICY_NAME.responseFromModelArmor Especifica la respuesta JSON de Model Armor.
SanitizeUserPrompt.POLICY_NAME.filterMatchState Especifica si se encontró una coincidencia con el filtro. Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.invocationResult Es un campo que indica el resultado de la invocación, independientemente del estado de coincidencia. Puede tener lo siguiente:
  • ÉXITO: Todos los filtros se ejecutaron correctamente.
  • PARTIAL: Se omitieron algunos filtros o no se pudieron ejecutar.
  • ERROR: Se omitieron todos los filtros o no se pudo ejecutar.
SanitizeUserPrompt.POLICY_NAME.raiFilterResult.executionState Resultado de la ejecución del filtro de RAI. Los valores válidos incluyen EXECUTION_SUCCESS y EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.raiFilterResult.matchState Estado de coincidencia del filtro de RAI Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.inspectResult.executionState Estado de ejecución del resultado de la inspección del filtro de SDP. Los valores válidos incluyen EXECUTION_SUCCESS y EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.inspectResult.matchState Estado de coincidencia del resultado de la inspección del filtro de SDP. Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState Filtro de SDP para identificar el estado de ejecución del resultado. Los valores válidos incluyen EXECUTION_SUCCESS y EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState Filtro de SDP para identificar el estado de coincidencia de resultados. Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.piAndJailbreakFilterResult.executionState Estado de ejecución de los resultados del filtro de inyección de instrucciones y jailbreak. Los valores válidos incluyen EXECUTION_SUCCESS y EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.piAndJailbreakFilterResult.matchState Los resultados de los filtros de inyección de instrucciones y jailbreak coinciden con el estado. Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.csamFilterFilterResult.executionState Estado de ejecución del filtro de CSAM Los valores válidos incluyen EXECUTION_SUCCESS y EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.csamFilterFilterResult.matchState Estado de coincidencia del filtro de CSAM Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.maliciousUriFilterResult.executionState Es el estado de ejecución del filtro de URI malicioso. Los valores válidos incluyen EXECUTION_SUCCESS y EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.maliciousUriFilterResult.matchState Estado de coincidencia del filtro de URI malicioso Los valores válidos incluyen MATCH_FOUND y NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorCode Código de error anulado personalizado si está presente en la respuesta de Model Armor.
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorMessage Código de error anulado personalizado si está presente en la respuesta de Model Armor.
SanitizeUserPrompt.POLICY_NAME.csamFilterMatched/code> Es un valor booleano que indica si el filtro de CSAM coincide.
SanitizeUserPrompt.POLICY_NAME.maliciousURIs Es la lista adjunta de URIs maliciosos que detectó el filtro de URIs maliciosos.
SanitizeUserPrompt.POLICY_NAME.maliciousURIsDetected Es un valor booleano que indica si el filtro de URI malicioso coincide.
SanitizeUserPrompt.POLICY_NAME.matchesFound Es un valor booleano que indica si alguno de los filtros coincide.
SanitizeUserPrompt.POLICY_NAME.promptInjectionDetected Es un valor booleano que indica si el filtro de inserción de instrucciones coincide.
SanitizeUserPrompt.POLICY_NAME.promptInjectionConfidence Es el nivel de confianza de la detección de inyección de instrucciones.
SanitizeUserPrompt.POLICY_NAME.raiMatchesFound Es un valor booleano que indica si el filtro de RAI coincidió.
SanitizeUserPrompt.POLICY_NAME.requestSentToModelArmor Es un valor booleano que indica si se envió una solicitud a Model Armor.
SanitizeUserPrompt.POLICY_NAME.sanitizeOperation Especifica la operación que realiza la política. Los valores válidos incluyen SANITIZE_USER_PROMPT y SANITIZE_MODEL_RESPONSE.

Referencia de errores

En esta sección, se describen los códigos de falla y los mensajes de error que se muestran, y las variables de falla que establece Apigee específicas para la política SanitizeUserPrompt. Esta información es importante para saber si estás desarrollando reglas de fallas con el propósito de manejar fallas. Para obtener más información, consulta Lo que necesitas saber sobre los errores de políticas y Controla fallas.

Errores de entorno de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de falla Estado de HTTP Causa
steps.sanitize.user.prompt.response.FilterMatched 400 Este error se produce si el mensaje del usuario no pasa la verificación de la plantilla de Model Armor.
steps.sanitize.user.prompt.SanitizationResponseParsingFailed 500 Este error se produce si no se puede analizar la respuesta de Model Armor.
steps.sanitize.user.prompt.FailedToExtractUserPrompt 500 Este error se produce si falló la extracción automática de la solicitud del usuario para el valor predeterminado.
steps.sanitize.user.prompt.InternalError 500 Este error ocurre si hay un error interno del servidor.
steps.sanitize.modelarmor.ModelArmorTemplateNameExtractionFailed 500 Este error se produce si no se puede resolver el nombre de la plantilla.
steps.sanitize.modelarmor.AuthenticationFailure 500 Este error se produce si la cuenta de servicio no tiene permiso para llamar a la API de Model Armor.
steps.sanitize.modelarmor.ModelArmorAPIFailed 500 Este error ocurre si la API de Model Armor arroja un error.
steps.sanitize.modelarmor.ModelArmorCalloutError 500 Este error ocurre si falla la llamada a la API de Model Armor.
steps.sanitize.modelarmor.ServiceUnavailable 500 Este error se produce si el servicio de Model Armor no está disponible.

Errores en la implementación

Estos errores pueden generarse cuando implementas un proxy que contiene esta política.

Nombre del error Causa
The ModelArmor/TemplateName element is required. Ocurre si no está presente el elemento <TemplateName> en <ModelArmor>.
The TemplateName element value is required. Ocurre si el valor de <TemplateName> está vacío.

Variables con fallas

Estas variables se configuran cuando esta política activa un error en el entorno de ejecución. Para obtener más información, consulta Qué debes saber sobre los errores de la política.

Variables Donde Ejemplo
fault.name="FAULT_NAME" FAULT_NAME es el nombre de la falla, como se indica en la tabla de Errores del entorno de ejecución anterior. El nombre de la falla es la última parte del código de la falla. fault.name Matches "UnresolvedVariable"
SanitizeUserPrompt.POLICY_NAME.failed POLICY_NAME es el nombre especificado por el usuario de la política que generó la falla. SanitizeUserPrompt.sanitize-prompt.failed = true

Ejemplo de respuesta de error

{
  "fault": {
    "faultstring": "SanitizeUserPrompt[sanitize-prompt]: unable to resolve variable [variable_name]",
    "detail": {
      "errorcode": "steps.sanitizeuserprompt.UnresolvedVariable"
    }
  }
}

Ejemplo de regla de falla

<FaultRule name="SanitizeUserPrompt Faults">
    <Step>
        <Name>SUP-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(sanitizeuserprompt.failed = true)</Condition>
</FaultRule>

Códigos de error y mensajes de error de la plantilla de Model Armor

La plantilla de Model Armor admite la anulación de los códigos de error y los mensajes de error que arrojan las solicitudes de la API de la política SanitizeUserPrompt. Si el usuario establece las anulaciones, los códigos de error y los mensajes de error de Model Armor propagarán las variables de flujo.

Por ejemplo, una respuesta con códigos y mensajes de error de Model Armor podría verse de la siguiente manera:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "filterResults": {...},
    "sanitizationMetadata": {
      "errorCode": "890",
      "errorMessage": "get out"
      },
    "invocationResult": "SUCCESS"
  }
}

Esquemas

Un esquema XML (.xsd) define cada tipo de política. Como referencia, los esquemas de políticas están disponibles en GitHub.