Compartir a través de


Conceptos clave y consideraciones para crear soluciones de IA generativas

Los modelos de lenguaje grande (LLM) son increíbles, pero tienen limitaciones. Como desarrollador, debe comprender esas limitaciones, qué son capaces de hacer los LLM "tal cual" y cómo modificarlos para obtener los mejores resultados para las soluciones de IA generativa que crea. En este artículo se identifican varios desafíos y factores limitantes de los LLM. Explica las formas comunes de superar los desafíos y tomar el control del proceso de generación de contenido independientemente del tipo de características de IA generativas que compile en la aplicación.

Desafíos de ingeniería al trabajar con LLM

En la lista siguiente se resumen los desafíos o limitaciones más significativos que se deben tener en cuenta al trabajar con LLM:

  • límite de conocimiento: debido al alto costo de entrenar un LLM, el cuerpo de conocimiento de un LLM se limita a los datos con los que fue entrenado en un momento dado. Sin complementos u otros alojamientos, un LLM no tiene acceso a información en tiempo real y no puede acceder a datos privados.

  • Alucinación: un LLM usa probabilidades estadísticas y algo de aleatoriedad para generar información. Los mecanismos están implementados para mantener las respuestas generadas alineadas con la intención de los humanos en las preguntas que se hacen y la información en la que se ha entrenado un LLM, pero es posible que un LLM cree respuestas que no sean precisas.

  • transparencia: También, dada la manera en que se entrena un LLM, ya no tiene acceso al conocimiento fundamental sobre el que fue entrenado. Incluso si lo hizo, no hay ninguna garantía de que la información fuera veraz y fundamentada para comenzar. Además, no hay ningún paso de comprobación para asegurarse de que la respuesta generada es precisa.

  • No hay conocimiento específico del dominio: similar al límite de conocimiento, si tiene información privada como documentos internos de la empresa, el LLM no se entrenó con esta información. No tiene conocimiento de datos específicos del dominio.

¿Qué puede hacer para mitigar los posibles desafíos o problemas con los LLMs y obtener los mejores resultados posibles para ayudar a sus usuarios y su organización? Empiece por comprender las formas en que puede complementar dónde obtiene un LLM sus datos.

Dónde obtienen su información los LLM

Un buen punto de partida para obtener los mejores resultados de un LLM es comprender dónde o cómo obtienen su información. Las siguientes categorías representan diferentes enfoques sobre cómo interactúan los LLM con diversos orígenes de información para generar respuestas.

Diagrama que muestra tres tipos diferentes de generación por recuperación: generación sin recuperación, generación aumentada por recuperación y generación centrada en la recuperación.

  • Generación sin recuperación desactivada (ROG): los LLM tradicionales usan este modelo. El modelo genera respuestas basadas únicamente en el conocimiento en el que se entrenó, sin tener acceso ni recuperar ninguna información externa durante el proceso de generación. El conocimiento del modelo es estático y limitado a lo que se incluyó en sus datos de entrenamiento hasta la fecha límite. Además de la escritura creativa, puede responder a preguntas sobre la información que está disponible fácilmente en Internet.

  • Generación aumentada por recuperación (RAG): Combina las capacidades generativas de los LLM con la habilidad de recuperar información de bases de datos externas o documentos en tiempo real. El modelo consulta un origen externo para buscar información relevante. A continuación, usa la información para formar su respuesta. Este enfoque permite que el modelo proporcione información más precisa y actualizada de la que proporciona con sus conocimientos previamente entrenados. Los casos de uso incluyen la comprobación de hechos, la respuesta a preguntas basadas en datos en tiempo real o la respuesta a preguntas basadas en datos privados y específicos del dominio.

  • generación centrada en la recuperación (RCG): pone aún más énfasis en el contenido recuperado externamente, a menudo estructurando respuestas en torno a la información extraída de orígenes externos. El modelo podría incorporar directamente grandes segmentos de texto recuperado en sus salidas, editarlos o anotarlos para ajustarse a la consulta del usuario. Este enfoque se puede ver como un híbrido entre métodos generativos y basados en recuperación, donde el equilibrio podría favorecer en gran medida la información recuperada sobre las propias funcionalidades generativas del modelo. Los casos de uso incluyen el resumen de un documento más largo, la asistencia para la investigación para proporcionar comparaciones y exploraciones temáticas en varios documentos similares, y la compilación o intercalación de diferentes fuentes de material en una salida combinada.

Un buen ejemplo de ROG es ChatGPT. Por el contrario, Copilot (a través de Bing) amplía un LLM utilizando orígenes externos de noticias (y proporciona vínculos a esos orígenes).

A primera vista, RAG y RCG aparecen similares porque ambos implican la integración de información externa en el proceso de generación de lenguajes. Sin embargo, difieren en cómo priorizan y usan información recuperada en el proceso de generación.

En un sistema RAG, la recuperación externa de datos se usa para aumentar las funcionalidades generativas de un modelo de lenguaje previamente entrenado. La información recuperada proporciona más contexto o datos específicos que usa el modelo para informar a sus respuestas. En un sistema RAG, el aspecto generativo del modelo de lenguaje sigue siendo fundamental para la respuesta. Los datos recuperados actúan como un elemento de apoyo para mejorar la precisión o profundidad.

Un sistema RCG pone un énfasis más fuerte en la propia información recuperada. En un sistema RCG, los datos recuperados suelen ser la pieza central de la respuesta, y el rol del modelo generativo consiste principalmente en refinar, dar formato o mejorar ligeramente el texto recuperado. Este enfoque se usa especialmente cuando la precisión y la relevancia directa de la información son primordiales y se requiere menos síntesis o extrapolación creativas.

Los mecanismos para la recuperación externa de datos que potencian tanto RAG como RCG se describen en artículos sobre cómo almacenar incrustaciones vectorizadas de documentos frente a ajustar un LLM, las dos estrategias predominantes para complementar los conocimientos disponibles para el LLM basándose en su entrenamiento inicial.

Comprender las diferencias entre los modelos de recuperación puede ayudarle a elegir el enfoque adecuado para aplicaciones específicas. Ayuda a equilibrar la necesidad de síntesis creativa frente a precisión y fidelidad al material de origen.

Factores que afectan a cómo funciona la inferencia

Dado que es probable que esté familiarizado con la interfaz de usuario basada en web de ChatGPT, comprender cómo funciona para responder a preguntas puede ayudarle a comprender los conceptos que son fundamentales al crear características de inteligencia artificial generativas en sus propias aplicaciones.

Cuando un usuario chatea con ChatGPT, el diseño de la interfaz de usuario le ofrece la ilusión de un chat continuo que conserva el estado a lo largo de varias interacciones entre el usuario y el LLM. En realidad, para una sesión de chat determinada, todas las solicitudes y todas las respuestas de LLM (también denominadas finalizaciones) se envían con cada solicitud nueva. A medida que crece la conversación, le envías cada vez más texto al LLM para procesar. Con cada solicitud nueva, se envían todas las solicitudes y respuestas anteriores. ChatGPT usa todo el contexto de la sesión de chat, y no solo el aviso actual, cuando redacta una respuesta a la solicitud actual. Toda la sesión de chat se denomina ventana de contexto .

Una ventana de contexto tiene un límite de longitud que varía según la versión de ChatGPT con la que trabaje. Cualquier parte de la conversación de chat que supere el límite de longitud de la ventana de contexto se omite cuando ChatGPT redacta una respuesta a la solicitud más reciente.

Las conversaciones largas pueden parecer una buena idea al principio, pero las ventanas de contexto largas pueden afectar a la cantidad de computación necesaria para procesar el mensaje y generar un resultado. El tamaño de las ventanas de contexto afecta a la latencia de la respuesta y a cuánto cuesta OpenAI procesar la solicitud.

¿Qué es el límite de ventanas de contexto de ChatGPT? Es decir, ¿con cuántas palabras puede trabajar ChatGPT?

El límite de la ventana de contexto depende del modelo, la versión y la edición de LLM con los que esté trabajando. Además, las longitudes de contexto se miden en tokens, no en palabras. Los tokens son las unidades de texto más pequeñas que el modelo puede comprender y generar. Estas unidades pueden ser palabras, partes de palabras (como sílabas o tallos) o incluso caracteres individuales. Los tokens están en el corazón del procesamiento de lenguaje natural (NLP).

El uso de tokens afecta a dos consideraciones importantes para los desarrolladores:

  • Límite máximo de ventanas de contexto
  • El precio por solicitud y finalización

¿Qué es la tokenización?

Tokenización es el proceso de convertir texto en tokens. Es un paso fundamental para preparar los datos para el entrenamiento o la inferencia (el proceso de redacción de finalizaciones basadas en solicitudes) con un LLM. El proceso implica varios pasos, incluida la división de texto complejo en partes manejables (tokens), que el modelo puede procesar. Este proceso puede ser sencillo, como dividir texto por espacios y signos de puntuación, o más complejos, que implican algoritmos sofisticados para controlar diferentes lenguajes, morfologías (la estructura de palabras) y sintaxis (la disposición de palabras). Los investigadores y desarrolladores de LLM deciden el método de tokenización en función de lo que intentan lograr.

En la página de OpenAI sobre el tokenizer se explica más sobre la tokenización. La página incluso tiene una calculadora que ilustra cómo se divide una oración o párrafo en tokens.

Como indica la nota de la parte inferior de la página Tokenizer de OpenAI, en textos en inglés típicos, un token equivale a unos cuatro caracteres. En promedio, 100 tokens son aproximadamente iguales a 75 palabras o tres cuartos de una palabra por token.

La página Tokenizer de OpenAI también habla sobre tiktoken, un paquete para Python y JavaScript que puede usar para calcular mediante programación cuántos tokens se necesitan para enviar un aviso específico a la API de OpenAI.

El uso de tokens afecta a la facturación

Cada API de Azure OpenAI tiene una metodología de facturación diferente. Para procesar y generar texto con la API de finalizaciones de chat, se le facturará en función del número de tokens que envíe como solicitud y el número de tokens que se generan como resultado (finalización).

Cada modelo LLM (por ejemplo, GPT-3.5, GPT-3.5 Turbo o GPT-4) normalmente tiene un precio diferente, que refleja la cantidad de cálculo necesario para procesar y generar tokens. Muchas veces, el precio se presenta como "precio por 1000 tokens" o "precio por 1 millón de tokens".

Este modelo de precios tiene un efecto significativo sobre cómo diseñar las interacciones del usuario y la cantidad de preprocesamiento y posprocesamiento que agregue.

Avisos del sistema frente a solicitudes de usuario

Hasta este punto, la discusión se ha centrado únicamente en solicitudes de usuario. Un mensaje de usuario es el tipo de mensaje que compone el intercambio entre un usuario y ChatGPT.

OpenAI introdujo la solicitud del sistema (también llamada instrucciones personalizadas). Un aviso del sistema es un conjunto general de instrucciones que define y agrega a todas las conversaciones de chat. Considera esto como un conjunto de meta instrucciones que deseas que el LLM observe siempre cada vez que inicies una nueva sesión de chat. Por ejemplo, puede establecer el mensaje del sistema en "responder siempre en la forma poética de haiku". Desde ese momento, cada nueva solicitud a ChatGPT da como resultado un haiku que contiene la respuesta.

Aunque "responder en forma de haiku" no es un ejemplo útil, ilustra la idea de que puede influir en la respuesta de un LLM al modificar su solicitud original.

¿Por qué desea modificar el mensaje del usuario? Si va a crear una característica o aplicación de inteligencia artificial generativa para un público profesional, que puede incluir empleados de la empresa, clientes y asociados, sin duda desea agregar medidas de seguridad para limitar el ámbito de los temas o dominios que puede responder.

Pero modificar las indicaciones del usuario es solo un método para mejorar la experiencia de generación de texto.

Métodos para mejorar la experiencia de generación de texto para los usuarios en ChatGPT

Para mejorar los resultados de la generación de texto, los desarrolladores se limitan a mejorar la solicitud y hay muchas técnicas de ingeniería de solicitudes que pueden ayudar. Sin embargo, si va a crear su propia aplicación de IA generativa, hay varias maneras de mejorar la experiencia de generación de texto para los usuarios y puede experimentar con la implementación de todas ellas:

  • Modifique mediante programación las solicitudes del usuario.
  • Implemente una canalización de inferencia.
  • Generación aumentada por recuperación (tratada en otros artículos).
  • Ajuste preciso (descrito en otros artículos).

Modificación de solicitudes de usuario mediante programación

Para agregar una solicitud del sistema a una conversación de usuario, no use una API especial. Solo tiene que añadir instrucciones a la solicitud según sea necesario.

Pero puede usar algunas técnicas para mejorar las indicaciones del usuario:

  • Preparación contextual: diseñe solicitudes del sistema que establezcan explícitamente el contexto de la conversación dentro del dominio. Este enfoque implica proporcionar una breve descripción o un conjunto de instrucciones al principio de cada interacción. Las instrucciones guían la inteligencia artificial para permanecer dentro del dominio del problema.
  • guía basada en ejemplo: en el mensaje inicial, incluya ejemplos de los tipos de preguntas y respuestas que son relevantes para su dominio. Este enfoque ayuda a la inteligencia artificial a comprender qué tipo de respuestas se esperan.

Puede usar cualquier técnica de ingeniería rápida. Si puede hacerlo mediante programación, puede mejorar la solicitud del usuario en su nombre.

La limitación para este enfoque es que cuanto más largo sea el aviso, mayor será el costo de cada llamada al LLM. Incluso así, es probable que este enfoque sea el enfoque menos costoso que se describe en este artículo.

Implementación de una canalización de inferencia

El siguiente paso más allá de modificar el mensaje del usuario mediante programación es crear una canalización de inferencia completa.

Una canalización de inferencia es un proceso integral que "limpia" la entrada sin procesar (como texto o una imagen) antes de usarla para realizar la solicitud principal (preprocesamiento) o comprueba la finalización para asegurarse de que satisface las necesidades del usuario antes de mostrarla (postprocesamiento).

El preprocesamiento puede implicar la comprobación de palabras clave, la puntuación de relevancia o la transformación de la consulta para ajustarse mejor al lenguaje de dominio esperado. Por ejemplo, puede analizar el mensaje inicial que envía el usuario. Comience preguntando al LLM si el mensaje tiene sentido, si está dentro de los límites de lo que está dispuesto a aceptar, si se basa en una premisa defectuosa, o si necesita volver a escribirse para evitar ciertos sesgos. Si el LLM analiza la solicitud y encuentra problemas, puede ir un paso más allá. Puede pedir al LLM que vuelva a escribir la solicitud para mejorar potencialmente la respuesta.

El posprocesamiento puede implicar validar la relevancia y la idoneidad de la respuesta en el dominio. Puede incluir la eliminación o marcación de respuestas que no se ajustan a los requisitos de dominio. Por ejemplo, es posible que quiera inspeccionar la finalización proporcionada por el LLM para asegurarse de que cumple los requisitos de calidad y seguridad. Puede pedir al LLM que evalúe la respuesta para ver si cumple de hecho los requisitos a los que le ha pedido que cumpla. Si no es así, puede pedir al LLM que modifique la finalización. Repita estos pasos hasta que tenga un resultado satisfactorio.

Hay una advertencia para agregar pasos de preprocesamiento: cada vez que agrega una llamada a un LLM en la canalización de inferencia, aumenta la latencia general (tiempo para responder) y el costo de cada interacción con el usuario. Como desarrollador de software experimentado, es probable que ya conozca estos tipos de inconvenientes que afectan al presupuesto, el rendimiento y la eficacia de un sistema de software.

Para obtener información sobre los pasos específicos que se deben seguir para crear una canalización de inferencia, consulte Creación de un sistema avanzado de generación aumentada de recuperación.

Otros factores que influyen en las finalizaciones

Más allá de modificar mediante programación la solicitud, crear una canalización de inferencia y otras técnicas, se describen más detalles en Aumento de un modelo de lenguaje de gran tamaño con la generación aumentada por recuperación y el ajuste. Además, puede modificar los parámetros al realizar llamadas a la API de Azure OpenAI.

Para revisar los parámetros obligatorios y opcionales que pueden afectar a varios aspectos de la finalización, consulte la Documentación del punto de conexión de chat. Si usa un SDK, consulte la documentación del SDK para el lenguaje que usa. Puede experimentar con los parámetros de Área de juegos.

  • Temperature: controle la aleatoriedad de la salida que genera el modelo. En cero, el modelo se convierte en determinista, seleccionando de forma coherente el siguiente token más probable de sus datos de entrenamiento. A una temperatura de 1, el modelo se equilibra entre elegir tokens de alta probabilidad e introducir aleatoriedad en la salida.

  • Max Tokens: controla la longitud máxima de la respuesta. Establecer un límite superior o inferior puede afectar a los detalles y el ámbito del contenido generado.

  • Top P (muestreo del núcleo): se usa con Temperature para controlar la aleatoriedad de la respuesta. Top P limita la inteligencia artificial para tener en cuenta solo el porcentaje superior de masa de probabilidad (P) cuando genera cada token. Los valores más bajos conducen al texto más centrado y predecible. Los valores más altos permiten más diversidad.

  • Frequency Penalty: disminuye la probabilidad de que el modelo repita la misma línea o frase. Aumentar este valor ayuda a evitar la redundancia en el texto generado.

  • Presence Penalty: anima al modelo a introducir nuevos conceptos y términos en la finalización. Presence Penalty es útil para generar salidas más diversas y creativas.

  • Stop Sequences: puede especificar una o varias secuencias para indicar a la API que deje de generar más tokens. Store Sequences son útiles para controlar la estructura de la salida, como terminar una finalización al final de una frase o párrafo.

  • Logit Bias: le permite modificar la probabilidad de que los tokens especificados aparezcan en la finalización. Logit Bias se puede usar para guiar la finalización en una determinada dirección o para suprimir contenido específico.

Medidas de seguridad de Microsoft OpenAI

Además de mantener las respuestas del LLM limitadas a temas o dominios específicos, es probable que también le preocupe qué tipo de preguntas están haciendo sus usuarios al LLM. Es importante tener en cuenta los tipos de respuestas que genera.

En primer lugar, las llamadas API a Microsoft OpenAI Services filtran automáticamente el contenido que la API encuentra potencialmente ofensivo e le informa de ello en diversas categorías de filtrado.

Puede usar directamente La API de moderación de OpenAI directamente para comprobar cualquier contenido potencialmente dañino.

Después, puede usar Azure AI Content Safety para ayudar con la moderación de texto, la moderación de imágenes, la detección de riesgos de jailbreak y la detección de materiales protegidos. Esto combina una experiencia de configuración, configuración e informes del portal con el código que puede agregar a la aplicación para identificar contenido perjudicial.

Consideraciones finales para el diseño de aplicaciones

Comprender la tokenización, las estrategias de precios, las ventanas de contexto y cómo la implementación de mejoras programáticas afecta a la manera en que diseña su sistema de IA generativa para mejorar la experiencia de generación de texto de los usuarios.

Esta es una breve lista de aspectos que se deben tener en cuenta y otros aspectos de este artículo que podrían afectar a las decisiones de diseño de aplicaciones:

  • Evalúe la necesidad de usar el modelo de inteligencia artificial más reciente con respecto a las consideraciones de costos. Los modelos que son menos costosos pueden ser suficientes para las necesidades de la aplicación. Equilibre el rendimiento con restricciones presupuestarias.
  • Considere la posibilidad de optimizar la longitud de la ventana de contexto para administrar los costos sin afectar significativamente a la experiencia del usuario. El recorte de partes innecesarias de la conversación podría reducir las tarifas de procesamiento al tiempo que se mantienen las interacciones de calidad.
  • Evalúe cómo la tokenización y la granularidad de las entradas y salidas afectan al rendimiento. Comprender cómo el LLM elegido controla la tokenización puede ayudarle a optimizar la eficacia de las llamadas API, lo que podría reducir los costos y mejorar los tiempos de respuesta.

Si desea empezar a experimentar con la creación de una solución de inteligencia artificial generativa inmediatamente, se recomienda echar un vistazo a Introducción al chat mediante su propio ejemplo de datos para Python. El tutorial también está disponible en .NET, Javay javaScript.