Cómo garantizar la confiabilidad en las aplicaciones LLM

han entrado en el mundo de la informática a un ritmo récord. Los LLM son modelos poderosos capaces de realizar efectivamente una amplia variedad de tareas. Sin embargo, las salidas LLM son estocásticas, lo que las hace poco confiables. En este artículo, discuto cómo puede garantizar la confiabilidad en sus aplicaciones LLM al solicitar adecuadamente el modelo y manejar la salida.

Esta infografía destaca el contenido de este artículo. Discutiré principalmente garantizar la consistencia del resultado y los errores de manejo. Imagen de Chatgpt.

También puedes leer mis artículos en Asistir a Nvidia GTC París 2025 y Creación de poderosos incrustaciones para el aprendizaje automático.

Tabla de contenido

Motivación

Mi motivación para este artículo es que estoy desarrollando constantemente nuevas aplicaciones usando LLM. Los LLM son herramientas generalizadas que se pueden aplicar a la mayoría de las tareas dependientes del texto, como clasificación, resumen, extracción de información y mucho más. Además, el aumento de los modelos de lenguaje de visión también nos permite manejar imágenes similares a la forma en que manejamos el texto.

A menudo encuentro el problema de que mis aplicaciones LLM son inconsistentes. A veces, el LLM no responde en el formato deseado, o no puedo analizar adecuadamente la respuesta de LLM. Este es un gran problema cuando trabaja en una configuración de producción y depende totalmente de la consistencia en su aplicación. Por lo tanto, discutiré las técnicas que utilizo para garantizar la confiabilidad para mis aplicaciones en un entorno de producción.

Garantizar la consistencia del resultado

Etiquetas de marcado

Para garantizar la consistencia de salida, utilizo una técnica donde mi LLM responde en etiquetas de marcado. Yo uso un mensaje de sistema como:

prompt = f"""
Classify the text into "Cat" or "Dog"

Provide your response in <answer> </answer> tags

"""

Y el modelo casi siempre responderá con:

<answer>Cat</answer>

or 

<answer>Dog</answer>

Ahora puede analizar fácilmente la respuesta utilizando el siguiente código:

def _parse_response(response: str):
    return response.split("<answer>")[1].split("</answer>")[0]

La razón por la que usar etiquetas de marcado funciona tan bien es que así es como se entrena el modelo para comportarse. Cuando OpenAi, Qwen, Google y otros entrenan estos modelos, usan etiquetas de marcado. Por lo tanto, los modelos son súper efectivos para utilizar estas etiquetas y, en casi todos los casos, se adherirán al formato de respuesta esperado.

Por ejemplo, con los modelos de razonamiento, que han estado en aumento últimamente, los modelos primero piensan en las etiquetas … , y luego proporcionan su respuesta al usuario.


Además, también trato de usar tantas etiquetas de marcado como sea posible en otra parte de mis indicaciones. Por ejemplo, si estoy proporcionando algunos ejemplos de disparos a mi modelo, haré algo como:

prompt = f"""
Classify the text into "Cat" or "Dog"

Provide your response in <answer> </answer> tags

<example>
This is an image showing a cat -> <answer>Cat</answer>
</example>
<example>
This is an image showing a dog -> <answer>Dog</answer>
</example>
"""

Hago dos cosas que ayudan al modelo a realizar aquí:

  1. Proporciono ejemplos en etiquetas .
  2. En mis ejemplos, me aseguro de adherirme a mi propio formato de respuesta esperado, utilizando el

Usando etiquetas de marcado, puede garantizar un alto nivel de consistencia de salida de su LLM

Validación de salida

Pydantico es una herramienta que puede usar para garantizar y validar la salida de sus LLM. Puede definir tipos y validar que la salida del modelo se adhiere al tipo que esperamos. Por ejemplo, puede seguir el ejemplo a continuación, basado en Este artículo:

from pydantic import BaseModel
from openai import OpenAI

client = OpenAI()


class Profile(BaseModel):
    name: str
    email: str
    phone: str

resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": "Return the `name`, `email`, and `phone` of user {user} in a json object."
        },
    ]
)

Profile.model_validate_json(resp.choices[0].message.content)

Como puede ver, solicitamos a GPT que responda con un objeto JSON, y luego ejecutamos Pydantic para garantizar que la respuesta sea como esperamos.


También me gustaría tener en cuenta que a veces es más fácil simplemente crear su propia función de validación de salida. En el último ejemplo, los únicos requisitos para el objeto de respuesta son esencialmente que el REl objeto ESPONDE contiene el nombre de las teclas, el correo electrónico y el teléfono, y que todos ellos son del tipo de cadena. Puede validar esto en Python con una función:

def validate_output(output: str):
    assert "name" in output and isinstance(output["name"], str)
    assert "email" in output and isinstance(output["email"], str)
    assert "phone" in output and isinstance(output["phone"], str)

Con esto, no tiene que instalar ningún paquete, y en muchos casos, es más fácil de configurar.

Ajuste el indicador del sistema

También puede hacer varios otros ajustes a su sistema de sistema para garantizar una salida más confiable. Siempre recomiendo hacer que su aviso sea lo más estructurado posible, usando:

  • Etiquetas de marcado como se mencionó anteriormente
  • Listas, como la que estoy escribiendo aquí

En general, también debe garantizar instrucciones claras. Puede usar lo siguiente para garantizar la calidad de su aviso

Si le dio el aviso a otro humano, eso nunca había visto la tarea antes, y sin conocimiento previo de la tarea. ¿El humano podría realizar la tarea de manera efectiva?

Si no puede hacer que un humano haga la tarea, generalmente no puede esperar que una IA lo haga (al menos por ahora).

Errores de manejo

Los errores son inevitables cuando se trata de LLM. Si realiza suficientes llamadas API, es casi seguro que a veces la respuesta no estará en su formato deseado u otro problema.

En estos escenarios, es importante que tenga una aplicación robusta equipada para manejar dichos errores. Utilizo las siguientes técnicas para manejar los errores:

  • Mecanismo de reintento
  • Aumentar la temperatura
  • Tener Backup LLMS

Ahora, déjenme elaborar en cada punto.

Mecanismo de reintento de retroceso exponencial

Es importante tener un mecanismo de reintento, considerando que pueden ocurrir muchos problemas al hacer una llamada API. Es posible que encuentre problemas como la limitación de la velocidad, el formato de salida incorrecto o una respuesta lenta. En estos escenarios, debe asegurarse de envolver la llamada LLM en una captura de prueba y volver a intentarlo. Por lo general, también es inteligente usar un retroceso exponencial, especialmente para errores de limitación de tarifas. La razón de esto es asegurarse de esperar lo suficiente para evitar más problemas de limitación de tarifas.

Aumento de temperatura

También a veces recomiendo aumentar un poco la temperatura. Si establece la temperatura en 0, le dice al modelo que actúe de forma determinista. Sin embargo, a veces esto puede tener un efecto negativo.

Por ejemplo, si tiene un ejemplo de entrada donde el modelo no respondió en el formato de salida adecuado. Si vuelve a intentar esto usando una temperatura de 0, es probable que experimente el mismo problema. Por lo tanto, le recomiendo que establezca la temperatura un poco más alta, por ejemplo 0.1, para garantizar un poco de estocasidad en el modelo, al tiempo que garantiza que sus salidas sean relativamente deterministas.

Esta es la misma lógica que usan muchos agentes: una temperatura más alta.

Necesitan evitar estar en un bucle. Tener una temperatura más alta puede ayudarlos a evitar errores repetitivos.

Copia de seguridad LLMS

Otro método poderoso para lidiar con los errores es tener LLM de respaldo. Recomiendo usar una cadena de proveedores de LLM para todas sus llamadas de API. Por ejemplo, primero intentas Opadaisi eso falla, usas Géminisy si eso falla, puedes usar Tirar.

Esto garantiza la confiabilidad en caso de problemas específicos del proveedor. Estos podrían ser problemas como:

  • El servidor está inactivo (por ejemplo, si la API de OpenAI no está disponible por un período de tiempo)
  • Filtrado (a veces, un proveedor de LLM se negará a responder a su solicitud si cree que su solicitud está violando las políticas de jailbreak o la moderación de contenido)

En general, es simplemente una buena práctica no depender completamente de un proveedor.

Conclusión

En este artículo, he discutido cómo puede garantizar la confiabilidad en su aplicación LLM. Las aplicaciones LLM son inherentemente estocásticas porque no puede controlar directamente la salida de un LLM. Por lo tanto, es importante asegurarse de que tenga políticas adecuadas, tanto para minimizar los errores que ocurren como para manejar los errores cuando ocurren.

He discutido los siguientes enfoques para minimizar los errores y manejar errores:

  • Etiquetas de marcado
  • Validación de salida
  • Ajuste el indicador del sistema
  • Mecanismo de reintento
  • Aumentar la temperatura
  • Tener Backup LLMS

Si combina estas técnicas en su aplicación, puede lograr una aplicación LLM poderosa y robusta.

👉 Sígueme en sociales:

🧑‍💻 Ponerse en contacto
🌐 Blog personal
🔗 LinkedIn
🐦 X / Twitter
✍️ Medio
🧵 Trapos