Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Mejores prácticas de la política de razonamiento automatizado
Esta página consolida las mejores prácticas para crear y mantener políticas de razonamiento automatizado. Lea esta información antes de crear su primera política y consúltela cuando solucione problemas. Para conocer los fundamentos conceptuales de estas prácticas, consulteConceptos de comprobación de razonamiento automatizado. Para obtener instrucciones de step-by-step creación, consulteCreación de una política de razonamiento automatizado.
Comience de forma sencilla e itere
El error más común al crear una política de razonamiento automatizado es intentar capturar todo un documento complejo de una sola pasada. En su lugar, comience con un subconjunto específico de sus reglas y vaya desarrollándolas de forma gradual.
-
Elija una sección única y bien definida de su documento fuente (por ejemplo, si desea obtener una licencia parental de un manual de recursos humanos).
-
Crea una política a partir de esa sección y revisa las reglas y variables extraídas.
-
Escribe pruebas que cubran los escenarios clave de esa sección.
-
Corrija cualquier problema antes de añadir más contenido.
-
Utilice la creación iterativa de políticas para combinar secciones adicionales de una en una. Para obtener más información, consulte Elaboración iterativa de políticas.
Este enfoque tiene dos ventajas: facilita el aislamiento de los problemas (ya sabe qué sección introdujo un problema) y permite gestionar la política durante el desarrollo. Una política con 10 reglas bien probadas es más útil que una con 100 reglas no probadas.
Procese previamente los documentos con un LLM
En el caso de documentos extensos, que contengan prosa narrativa o que combinen contenido relacionado con reglas y no reglamentarias (como exenciones de responsabilidad legales o antecedentes organizacionales), someta el documento a un LLM antes de subirlo a Automated Reasoning Checks. Pídale al LLM que extraiga el contenido según las reglas explícitas de «si luego». Este paso previo al procesamiento mejora significativamente la calidad de la política extraída, ya que las comprobaciones de razonamiento automatizadas funcionan mejor con declaraciones claras y declarativas que con texto no estructurado.
Al escribir su solicitud de preprocesamiento, incluya las siguientes instrucciones para el LLM:
-
Extraiga las reglas en formato «si» y luego, con condiciones y consecuencias claras.
-
Conserve todas las condiciones, los operadores lógicos (AND, OR, NOT), los cuantificadores («como mínimo», «como máximo») y las cláusulas de excepción («a menos que», «excepto cuando»).
-
Añada reglas de cordura para establecer restricciones de sentido común, como «el saldo de la cuenta no puede ser negativo» o «la calificación crediticia debe estar entre 300 y 850», lo que se traduce en reglas de límites en su política (consulte). Validación de los intervalos de valores numéricos
importante
Revise siempre el resultado del LLM comparándolo con el documento original antes de usarlo como texto fuente. LLMs puede alucinar con reglas que no aparecen en la fuente, malinterpretar las condiciones o descartar excepciones importantes. El paso previo al procesamiento es un punto de partida, no un sustituto de la revisión humana.
Para obtener plantillas de solicitudes detalladas y un flujo de trabajo step-by-step previo al procesamiento, consulte. (Opcional) Utilice un LLM para reescribir los documentos como reglas lógicas
Utilice las implicaciones (=>) para estructurar las reglas
El formato sif-then (que utiliza el operador de => implicación) es el patrón de redacción de reglas más importante. Todas las reglas que expresan una relación condicional deben usar este formato.
| Bueno: Implicación | Malo: simple afirmación |
|---|---|
(=> (and isFullTime (> tenureMonths 12)) eligibleForParentalLeave) |
eligibleForParentalLeave |
(=> (> loanAmount 500000) requiresCosigner) |
requiresCosigner |
Las afirmaciones simples (reglas sin una estructura de «si entonces») crean axiomas, es decir, afirmaciones que siempre son ciertas. Esta afirmación eligibleForParentalLeave indica que Automated Reasoning comprueba que el derecho a la licencia parental siempre es válido, independientemente de las condiciones. Cualquier entrada que diga que el usuario no es elegible se devolvería IMPOSSIBLE porque contradice este axioma.
Las afirmaciones simples son apropiadas solo para condiciones de límite que siempre deberían cumplirse, como:
;; Account balance can never be negative (>= accountBalance 0) ;; Interest rate is always between 0 and 1 (and (>= interestRate 0) (<= interestRate 1))
Si encuentra afirmaciones simples en la política extraída, reescríbalas como condicionales o elimínelas. Para obtener más información sobre cómo revisar la política extraída, consulte. Revise la política extraída
Escriba descripciones completas de las variables
Las descripciones de las variables son el factor principal de la precisión de la traducción. Cuando las comprobaciones de razonamiento automatizadas traducen el lenguaje natural a una lógica formal, utilizan descripciones de variables para determinar qué variables corresponden a los conceptos mencionados en el texto. Las descripciones vagas o incompletas son la principal causa de TRANSLATION_AMBIGUOUS los resultados.
Una buena descripción de las variables debe responder a cuatro preguntas:
-
¿Qué representa esta variable? Explica el concepto en un lenguaje sencillo.
-
¿Qué unidad o formato utiliza? Especifique las unidades (meses, dólares, porcentaje como decimal) y cualquier regla de conversión.
-
¿Cómo podrían referirse los usuarios a este concepto? Incluye sinónimos, frases alternativas y formas comunes en las que los usuarios expresan este concepto en un lenguaje cotidiano.
-
¿Cuáles son las condiciones límite? Describa los casos límite, los valores predeterminados y el significado de la variable cuando se establece en valores específicos.
Ejemplo: antes y después
| Vago (provoca errores de traducción) | Detallado (se traduce de forma fiable) |
|---|---|
tenureMonths: «Cuánto tiempo ha trabajado el empleado». |
tenureMonths: «El número de meses completos que el empleado ha estado empleado de forma continua. Cuando los usuarios mencionen años de servicio, conviértalos en meses (por ejemplo, 2 años = 24 meses). Establézcalo en 0 para los nuevos empleados que aún no hayan completado su primer mes». |
isFullTime: «Estado a tiempo completo». |
isFullTime: «Si el empleado trabaja a tiempo completo (verdadero) o a tiempo parcial (falso). Se establece en verdadero cuando los usuarios mencionan que trabaja «a tiempo completo», que trabaja «a jornada completa» o que trabaja más de 40 horas a la semana. Se establece en falso cuando los usuarios mencionan trabajar «a tiempo parcial», trabajar «horas reducidas» o trabajar menos de 40 horas a la semana». |
interestRate: «El tipo de interés». |
interestRate: «La tasa de interés anual expresada como un valor decimal, donde 0,05 significa el 5% y 0,15 significa el 15%. Cuando los usuarios mencionen un porcentaje como el '5%', conviértalo a la forma decimal (0,05)». |
Utilice valores booleanos para los estados no exclusivos
Al modelar estados que pueden coexistir, utilice variables booleanas independientes en lugar de una sola enumeración. Una persona puede ser tanto un veterano como un profesor. El uso de una enumeración customerType = {VETERAN, TEACHER} obliga a elegir entre ellas, lo que crea una contradicción lógica cuando ambas se aplican.
| Bueno: separe los booleanos | Malo: enumeración para estados no exclusivos |
|---|---|
|
|
Problema: Un cliente que es a la vez un veterano y un profesor no puede ser representado. |
Reserve las enumeraciones para categorías que realmente se excluyan mutuamente y en las que solo se pueda aplicar un valor a la vez, por ejemplo leaveType = {PARENTAL, MEDICAL, BEREAVEMENT} (un empleado solo puede solicitar un tipo de licencia a la vez). Para obtener más información sobre los tipos personalizados, consulteTipos personalizados (enumeraciones).
Especifique las unidades y los formatos en las descripciones de las variables
La ambigüedad acerca de las unidades es una fuente común de errores de traducción. Si un usuario dice «Hace 2 años que trabajo aquí» y tu variable estenureMonths, es necesario que la traducción sepa cómo convertir los años en meses. Si la descripción de la variable no especifica la unidad, la traducción puede asignar tenureMonths = 2 en lugar detenureMonths = 24.
Especifique siempre:
-
La unidad de medida (meses, días, dólares, porcentaje).
-
El formato (decimal frente a porcentaje, formato de fecha, moneda).
-
Reglas de conversión para expresiones alternativas comunes (por ejemplo, «2 años = 24 meses»).
Ejemplos:
-
loanAmount: «El importe total del préstamo en dólares estadounidenses. Cuando los usuarios mencionen cantidades en miles (por ejemplo, «500 000»), conviértalas en el número completo (500 000)». -
submissionDate: «El número de días transcurridos desde la fecha límite en la que se realizó la presentación. Un valor de 0 significa que el envío se realizó a tiempo. Los valores positivos indican envíos tardíos».
Validación de los intervalos de valores numéricos
Para las variables numéricas, añada reglas de límite que restrinjan el rango válido. Esto evita escenarios lógicamente imposibles y ayuda a que las comprobaciones de razonamiento automatizadas produzcan resultados más significativos.
;; Account balance cannot be negative (>= accountBalance 0) ;; Interest rate must be between 0 and 1 (0% to 100%) (and (>= interestRate 0) (<= interestRate 1)) ;; Credit score ranges from 300 to 850 (and (>= creditScore 300) (<= creditScore 850)) ;; Tenure in months cannot be negative (>= tenureMonths 0)
Sin estas reglas límite, las comprobaciones de razonamiento automatizadas podrían considerar escenarios con saldos de cuenta negativos o puntajes crediticios superiores a 1000, lo que no tiene sentido en su ámbito. Las reglas de límites son uno de los pocos casos en los que las afirmaciones simples (reglas que no tienen el formato de «si luego») son apropiadas.
Utilice variables intermedias para la abstracción
Cuando varias reglas comparten una condición común, extraiga esa condición en una variable booleana intermedia. Esto simplifica las reglas y facilita el mantenimiento de la política.
Ejemplo: niveles de membresía
En lugar de repetir la condición de membresía en todas las reglas de prestaciones:
;; Without intermediate variable (repetitive) (=> (and (> purchaseTotal 1000) (> accountAge 12)) eligibleForFreeShipping) (=> (and (> purchaseTotal 1000) (> accountAge 12)) eligibleForPrioritySupport) (=> (and (> purchaseTotal 1000) (> accountAge 12)) eligibleForEarlyAccess)
Defina una variable intermedia y haga referencia a ella:
;; With intermediate variable (cleaner) (=> (and (> purchaseTotal 1000) (> accountAge 12)) isPremiumMember) (=> isPremiumMember eligibleForFreeShipping) (=> isPremiumMember eligibleForPrioritySupport) (=> isPremiumMember eligibleForEarlyAccess)
Este patrón facilita la actualización posterior de los criterios de pertenencia; solo es necesario cambiar una regla en lugar de tres.
Usa enumeraciones para la categorización
Cuando una variable represente una categoría con un conjunto fijo de valores que se excluyen mutuamente, utilice un tipo personalizado (enumeración) en lugar de varios booleanos o una cadena. Las enumeraciones restringen los valores posibles y aclaran las reglas.
| Bueno: Enum | Evite: múltiples booleanos para estados exclusivos |
|---|---|
|
Tipo: Variable: Regla: |
Problema: nada impide que varios valores booleanos sean verdaderos simultáneamente. |
sugerencia
Incluye un NONE valor OTHER o en tu enumeración si es posible que la entrada no coincida con ninguna de las categorías definidas. Esto evita problemas de traducción cuando la entrada no se ajusta perfectamente a uno de los valores definidos.
Mantenga la lógica declarativa, no procedimental
Las políticas de razonamiento automatizado describen lo que es cierto, no cómo calcularlo. Evite escribir reglas que parezcan código con pasos secuenciales o lógica de precedencia.
| Bueno: declarativo | Evitar: pensamiento procedimental |
|---|---|
|
«Si el empleado trabaja a tiempo completo y tiene más de 12 meses en el cargo, entonces tiene derecho a la licencia parental». Esto pone de manifiesto un hecho sobre la relación entre las condiciones y los resultados. |
«Primero verifique si el empleado trabaja a tiempo completo. En caso afirmativo, compruebe la tenencia. Si la tenencia es superior a 12 meses, establezca la elegibilidad como verdadera». Esto describe un procedimiento, no una relación lógica. |
Del mismo modo, evite codificar la precedencia o la prioridad entre las reglas. En la lógica formal, todas las reglas se aplican simultáneamente. Si necesita expresar que una condición prevalece sobre otra, codifíquela explícitamente en las condiciones de la regla:
;; GOOD: Explicit exception handling ;; General rule: full-time employees with 12+ months get parental leave (=> (and isFullTime (> tenureMonths 12) (not isOnProbation)) eligibleForParentalLeave) ;; BAD: Trying to encode precedence ;; "Rule 1 takes priority over Rule 2" — this concept doesn't exist ;; in formal logic. Instead, combine the conditions into a single rule.
Convenciones de nomenclatura
La nomenclatura coherente facilita la lectura, el mantenimiento y la depuración de las políticas. Siga estas convenciones:
-
Variables booleanas: utilice el prefijo
isohas. Por ejemplo,isFullTime,hasDirectDeposit,isEligibleForLeave. -
Variables numéricas: incluya la unidad en el nombre. Por ejemplo,
tenureMonths,loanAmountUSD,creditScore. -
Tipos de enumeración: se utiliza PascalCase para los nombres de los tipos y UPPER_SNAKE_CASE para los valores. Por ejemplo:
LeaveType = {PARENTAL, MEDICAL, BEREAVEMENT}. -
Variables: utilice CamelCase. Por ejemplo,
tenureMonths,isFullTime,leaveType.
Evite las abreviaturas que puedan resultar ambiguas. tenureMonthsUtilícelas en lugar de tenMo y isFullTime en lugar deft. Los nombres claros ayudan tanto a los revisores humanos como al proceso de traducción.
Antipatrones comunes
Los siguientes patrones suelen provocar problemas en las políticas de razonamiento automatizado. Si encuentra resultados inesperados en las pruebas, compruebe si su póliza contiene alguno de estos antipatrones.
Axiomas en lugar de implicaciones
Como se describe enUtilice las implicaciones (=>) para estructurar las reglas, las afirmaciones simples crean axiomas que siempre son ciertos. Este es el antipatrón más común y el más dañino: hace que categorías enteras de entradas regresen. IMPOSSIBLE
Síntoma: pruebas que deberían volver VALID o que, en IMPOSSIBLE su lugar, deberían INVALID volver.
Solución: busca afirmaciones simples en tus reglas y rescríbelas como implicaciones, o elimínalas si no representan condiciones límite.
Variables superpuestas
Tener dos variables que representan conceptos iguales o similares (por ejemplo, tenureMonths ymonthsOfService) confunde el proceso de traducción. Las comprobaciones de razonamiento automatizadas no pueden determinar qué variable usar para un concepto determinado, lo que provoca traducciones y TRANSLATION_AMBIGUOUS resultados inconsistentes.
Síntoma: las pruebas se obtienen TRANSLATION_AMBIGUOUS incluso con un texto de entrada claro e inequívoco.
Solución: fusiona las variables superpuestas en una sola variable con una descripción completa. Actualice todas las reglas que hacen referencia a la variable eliminada.
Políticas demasiado complejas
Las políticas con demasiadas variables, condiciones muy arraigadas o aritmética no lineal pueden superar los límites de procesamiento y arrojar resultados. TOO_COMPLEX
Síntoma: las pruebas regresan TOO_COMPLEX o se agota el tiempo de espera.
Solución: simplifica la política. Elimine las variables no utilizadas, divida las reglas complejas en reglas más simples utilizando variables intermedias y evite la aritmética no lineal (exponentes, números irracionales). Si su dominio es realmente complejo, considere la posibilidad de dividirlo en varias políticas específicas.
Reglas contradictorias
Las reglas que se contradicen entre sí imposibilitan que las comprobaciones de razonamiento automatizadas lleguen a una conclusión. Por ejemplo, una norma establece que los empleados a tiempo completo tienen derecho a una licencia, mientras que otra dice que los empleados de su primer año no lo son, sin especificar qué ocurre con los empleados a tiempo completo durante su primer año.
Síntoma: en IMPOSSIBLE las pruebas se obtienen datos que implican normas contradictorias.
Solución: compruebe el informe de calidad para ver si hay reglas contradictorias. Resuelva los conflictos fusionando las reglas en una sola regla con condiciones explícitas o eliminando una de las reglas en conflicto. Para obtener más información, consulte Revise la política extraída.
Variables no utilizadas
Las variables a las que ninguna regla hace referencia añaden ruido al proceso de traducción. La traducción puede asignar valores a las variables no utilizadas, desperdiciando la capacidad de procesamiento y provocando posibles TRANSLATION_AMBIGUOUS resultados cuando la variable no utilizada compite con una variable activa similar.
Síntoma: TRANSLATION_AMBIGUOUS resultados inesperados o traducciones que asignan valores a variables que no afectan a ninguna regla.
Corrección: elimina las variables no utilizadas. En la consola, busca indicadores de advertencia junto a las variables. A través de la API, consulte el informe de calidad de GetAutomatedReasoningPolicyBuildWorkflowResultAssets con--asset-type QUALITY_REPORT.
Faltan valores de enumeración
Si la enumeración no incluye un valor para todas las categorías posibles que puedan mencionar los usuarios, la traducción podría fallar o producir resultados inesperados si la entrada no coincide con ningún valor definido.
Síntoma: las pruebas se devuelven TRANSLATION_AMBIGUOUS o NO_TRANSLATIONS cuando la entrada menciona una categoría que no está en la enumeración.
Solución: añade un NONE valor OTHER o a tu enumeración para gestionar las entradas que no coincidan con las categorías definidas. Actualiza las descripciones de los valores de enumeración para aclarar cuándo se aplica cada valor.