Modelos de chat

Los modelos de chat son una variante de los modelos de lenguaje. Aunque utilizan modelos de lenguaje (LLM) a nivel subyacente, sus interfaces públicas son algo diferentes. En lugar de exponer una API para "texto de entrada, texto de salida", utilizan una interfaz que recibe "mensajes de chat" como entrada y salida. Todo el proceso de interacción de los modelos de chat es similar al proceso de intercambio de mensajes de chat.

Empezando con Modelos de Chat

Este capítulo se basa en el modelo de OpenAI.

Configuración

Por defecto, LangChain no tiene las dependencias del modelo instaladas. Primero, instala el paquete de Python de OpenAI:

pip install langchain-openai

Para acceder a la API se requiere una clave de API, la cual puede configurarse a través de variables de entorno. El siguiente ejemplo muestra cómo configurarla en un entorno Linux:

export OPENAI_API_KEY="..."

Si prefieres no configurar variables de entorno, puedes pasar la clave directamente a través del parámetro nombrado openai_api_key al inicializar la clase OpenAI LLM:

from langchain_openai import ChatOpenAI

chat = ChatOpenAI(openai_api_key="...")

Alternativamente, puedes inicializarlo sin ningún parámetro:

from langchain_openai import ChatOpenAI
chat = ChatOpenAI()

Mensajes

La interfaz del modelo de chat se basa en mensajes en lugar de texto sin procesar. Los tipos de mensajes admitidos por LangChain actualmente incluyen AIMessage, HumanMessage, SystemMessage, FunctionMessage y ChatMessage, donde ChatMessage requiere un parámetro de rol arbitrario. En la mayoría de los casos, solo trabajarás con HumanMessage, AIMessage y SystemMessage.

LCEL

El modelo de chat implementa la interfaz Runnable, con métodos como invoke, ainvoke, stream, astream, batch, abatch, astream_log, por lo que el modelo de chat también se puede utilizar para expresiones en el Lenguaje de Expresión de LangChain (LCEL).

El modelo de chat acepta una lista List[BaseMessage] como entrada, o puede aceptar objetos que puedan convertirse en mensajes, incluyendo str (convertido a HumanMessage) y PromptValue.

from langchain_core.messages import HumanMessage, SystemMessage

mensajes = [
    SystemMessage(content="Eres un asistente servicial"),
    HumanMessage(content="¿Cuál es el propósito de la regularización del modelo?"),
]

Llamando al modelo con un array de mensajes:

chat.invoke(mensajes)

Ejemplo del mensaje devuelto:

AIMessage(content="El contenido de la respuesta de la IA... detalles omitidos...")

Transmitiendo la salida de la respuesta de la IA:

for trozo in chat.stream(mensajes):
    print(trozo.content, end="", flush=True)