En este tutorial, trabajamos con Laya, el motor de decisiones de código abierto de Convai Innovations que se convirtió en uno de los repositorios de aprendizaje automático más destacados de septiembre de 2026. Laya es un modelo del Sistema 1 no autorregresivo: en lugar de generar texto, un codificador de 421 millones de parámetros lee un fragmento de texto y un conjunto de preguntas mecanografiadas, elige entre etiquetas, una puntuación en una escala o un sí/no, y devuelve una probabilidad para cada opción en una sola pasada hacia adelante sin ningún indicador de salida. Su argumento es la velocidad y las probabilidades calibradas, la respuesta abierta al lenguaje Jev de TypeSafe. En lugar de repetir los ejemplos del README, ponemos esas promesas de trabajar en datos reales etiquetados con respuestas conocidas, el dominio bancario del conjunto de datos de intenciones del CLINC150, y medimos lo que realmente obtiene un router de producción: precisión cero frente a un clasificador capacitado, cuánto importan la redacción y el orden de las opciones, qué tan honestas son las probabilidades de envío, qué temperatura se ajusta a las correcciones de datos de validación y qué rompe silenciosamente, una puerta de abstención ajustada a un error presupuesto, tráfico fuera del alcance, una pregunta de sí/no que la temperatura no puede reparar, y salidas mecanografiadas de un esquema pydántico.


sistema de importación
tiempo de importación
importar json
importar advertencias
rastreo de importación
subproceso de importación
importar urllib.request
 
RESULTADOS = {}
 
 
def banner (título):
 imprimir (»\n"+ «=» * 78)
 imprimir (título)
 imprimir («=» * 78)
 
 
sección def (nombre):
 def wrap (fn):
 def run (*a, **kw):
 banner (nombre)
 prueba:
 salida = fn (*a, **kw)
 RESULTS [name] = out si isinstance (out, str) sino «ok»
 volver a salir
 excepto la excepción como e:
 RESULTADOS [nombre] = f"Omitido/FALLIDO -> {type (e). __nombre__}: {e}»
 print (f»\n[!] {name} no se completó: {type (e). __name__}: {e}»)
 traceback.print_exc (límite = 3)
 devuelve Ninguno
 volver a correr
 envoltura de devolución
 
 
pancarta («1). Instala Laya y carga el checkpoint en inglés en su versión revisada (»)
subprocess.run ([sys.executable, «-m», «pip», «install», «-q», «laya==0.3.27"], check=True)
 
importar numpy como np
importar pandas como pdf
importar antorcha
importar laya
desde laya.calibrate importar records_from_label
desde laya.evals importa selective_accuracy, aurc
desde laya.common importa temp_bucket
 
DEVICE = «cuda» si torch.cuda.is_available () sino «cpu»
# laya.load () sigue la rama principal del Hub, a menos que se indique lo contrario. El paquete envía la confirmación
# sus autores revisaron para cada punto de control; fijarlo con un alfiler mantiene el peso fijo de este cuaderno.
REVISIÓN = laya.pinned_revisions ["convaiinnovations/laya"]
con warnings.catch_warnings (record=true) como detectado:
 warnings.simplefilter («siempre»)
 agent = laya.load («convaiinnovations/laya», device=dispositivo, revision=revisión)
# En CUDA, Laya se transmite automáticamente a fp16/bf16. Al apagarlo, todos los dispositivos se mantienen en fp32, por lo que una GPU funciona
# reproduce los números de CPU impresos a continuación dentro del ruido de punto flotante.
agent.amp_enabled = Falso
ENVIADO = (list (agent.temperature), dict (agent.temperature_by_options))
 
n_params = sum (p.numel () para p en agent.model.parameters ())
print (f» laya {laya. __version__} | antorcha {antorcha. __version__} | dispositivo {DISPOSITIVO}, fp32")
print (f)» checkpoint convaiinnovations/laya @ {REVISION [:7]} | {n_params/ 1e6: .0f} Mis parámetros»
 f» | max_len {agent.cfg ['max_len']}, head_max_len {agent.cfg ['head_max_len']}»)
print (»\nLas temperaturas vienen incluidas en el punto de control (probabilidades = softmax (logits/T)):»)
para qt, nombre en enumerate (["choice», «score», «noul"]):
 print (f» {name:7s} type-level T = {SHIPPED [0] [qt] :.3f}»)
para un cubo, t está clasificado (ENVIADO [1] .items ()):
 print (f» {bucket:12s} T = {t: .3f}»)
porque estamos atrapados:
 si «temperatura» está en str (w.message):
 print (»\nAdvertencia en el momento de la carga:\n"+ str (w.message) .replace («; «, «;\n«))
print (»\nT > 1 suaviza las probabilidades y T < 1 las agudiza. Recuerda la opción: más de 11 filas: la»)
print (» checkpoint envía 0,10 puntos allí, que el cargador fija a 0,5, por lo que cualquier pregunta que elija con»)
print (» 11 o más opciones agudiza las probabilidades en 2 veces. El paso 6 mide lo que cuesta.»
)

Instalamos el paquete publicado, versión 0.3.27, y cargamos el punto de control en inglés. Aquí hay dos opciones para que la ejecución sea reproducible. De forma predeterminada, laya.load sigue la rama principal de Hugging Face, por lo que fijamos la revisión que revisaron los propios autores de la biblioteca, y la expone como LAYA.PINNED_REVISIONS. Y en CUDA, Laya emite automáticamente con una precisión media, por lo que la apagamos para mantener todos los dispositivos en fp32 y permitir que una GPU reproduzca los números de CPU que se muestran aquí. Al imprimir las temperaturas suministradas por el punto de control obtenemos el primer resultado antes de cualquier predicción: la entrada para las preguntas de elección con once o más opciones es 0.10, fuera del rango válido, por lo que el cargador lo fija a 0.5 y nos avisa. Una temperatura inferior a 1 aumenta las probabilidades, por lo que cada respuesta a una pregunta con tantas opciones tendrá el doble de certeza que

el modelo original.
= «Hola, el mes de marzo nos facturaron dos veces. Por favor, reembolsa el duplicado hoy mismo o cancelaremos nuestro plan.»
CLASIFICACIÓN = {
 «department»: {"type»: «choice», «instructions»: «¿Qué departamento debe gestionar esto?» ,
 «criteria»: {"billing»: «facturas, pagos, reembolsos»,
 «technical»: «errores, interrupciones, errores del sistema»,
 «otro»: «todo lo demás"}},
 «urgencia»: {"type»: «score», «instructions»: «¿Qué tan urgente es esto?» ,
 «criterios»: ["no urgente», «pronto», «bloqueo"]},
 «churn_risk»: {"type»: «noul», «instructions»: «¿El usuario amenaza con cancelar o marcharse?"} ,
}
 
 
@section («2. Un pase adelante, tres preguntas mecanografiadas, cero fichas de resultado»)
def first_decision ():
 r = agent.predict (TICKET, TRIAGE)
 a = r ["responde"]
 d, u, c = un ["departamento"], una ["urgencia"], un ["riesgo_abandono"]
 print (f» state: {TICKET! (r}\n«)
 print (f» departamento (elección) -> {d ['elección']! r} probabilidades {d ['probabilidades']}»)
 print (f» urgencia (puntuación) -> {u ['puntuación'] :.2f} con probabilidades de nivel 0.2 {u ['probabilidades']}»)
 print (f» churn_risk (nulo) -> P (sí) = {c ['nulo'] :.3f}»)
 print (»\nDos campos de confianza, dos cantidades diferentes:»)
 para qid, y en a.items ():
 print (f» {qid:11s} answer_confidence {ans ['answer_confidence'] :.3f} confidence {ans ['confidence'] :.3f}»)
 print (» answer_confidence es la probabilidad de la respuesta reportada, max (p): el número que»)
 print (» la calibración, la puerta de abstención y todas las métricas siguientes que se utilizan. La confianza es 1: normalizada»)
 print (» entropía), cuya escala depende del número de opciones. No lo pongas como límite»).
 print (f»\nuso: {r ['uso']}»)
 print (» output_tokens siempre es 0: Laya puntúa las opciones que recibe y nunca genera texto.»)
 return f "{d ['choice']}/urgent {u ['score'] :.2f}/P (churn) {c ['noul'] :.2f} en una sola pasada»
 
 
first_decision ()

Una llamada para predecir responde a tres preguntas mecanografiadas sobre un ticket de soporte en un solo pase: el departamento como opción, la urgencia como puntuación de 0 a 2 y el riesgo de abandono como sí/no. El resultado contiene una probabilidad para cada opción y dos campos de confianza que son fáciles de confundir. answer_confidence es la probabilidad de la respuesta reportada y es la cantidad que utilizan la calibración, la puerta de abstención y todas las métricas que aparecen más adelante en este tutorial. La confianza es uno menos la entropía normalizada, cuya escala depende del número de opciones que tenga una pregunta. El bloque de uso muestra cero señales de salida, porque Laya puntúa las opciones que se le dan y nunca

genera texto.

¿Tiene un proyecto de software o plataforma SaaS en mente?

Hable directamente con nuestros arquitectos de software en SoftAndino. Le brindamos asesoría técnica y cotización inmediata sin compromiso.