Compartir a través de


Conceptos y consideraciones importantes para los desarrolladores que crean soluciones de IA generativas

Los modelos de lenguaje grande (LLM) son increíbles, pero incluso tienen sus limitaciones. Los desarrolladores deben comprender esas limitaciones, qué LLM son capaces de "lista para usar" y cómo ajustarlas para obtener los mejores resultados para las soluciones de inteligencia artificial generativas que están creando. En este artículo se identifican varios desafíos y factores de limitación, y se explican formas comunes de superar esos desafíos y tomar el control del proceso de generación de contenido independientemente del tipo de características de IA generativas que se compilan en la aplicación.

Desafíos de ingeniería al trabajar con LLM

Los desafíos o limitaciones más significativos que se deben tener en cuenta al trabajar con VM:

  • Corte de conocimiento: debido al alto costo de entrenar un LLM, su cuerpo de conocimiento se limita a lo que se entrenaron en un momento dado. Sin complementos ni otros alojamientos, no tienen acceso a información en tiempo real ni tienen acceso a datos privados.

  • Alucinación : un LLM usa probabilidades estadísticas y una pequeña aleatoriedad para generar información. Existen mecanismos para mantener las respuestas generadas alineadas con la intención humana en las preguntas que se hacen y la información en la que se han entrenado, pero es posible que creen respuestas que no sean precisas.

  • Transparencia : de nuevo, debido a la forma en que se entrenan los modelos, ya no tienen acceso a los conocimientos fundamentales en los que se entrenaron. Y aunque lo hicieran, no hay ninguna garantía de que la información fuera veraz y fundamentada en primer lugar. Además, no hay ningún paso de comprobación para asegurarse de que la respuesta generada es precisa.

  • Ningún conocimiento específico del dominio: similar al "corte de conocimiento, si tiene información privada como documentos de empresa solo internos, el LLM no se entrenó en esta información y, por lo tanto, no tiene ningún conocimiento específico del dominio.

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

Descripción de dónde obtienen sus 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 en el que se muestran tres tipos diferentes de generación de recuperación con la generación de recuperación desactivada en la parte superior correlacionada con el conocimiento más entrenado, después la generación aumentada por recuperación y, a continuación, la generación centrada en la recuperación en la parte inferior correlacionada con el conocimiento más recuperado.

  • Generación de recuperación desactivada (ROG): esta es la forma en que funcionan las LLM tradicionales, donde 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, 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 disponible en gran medida en Internet.

  • Generación aumentada de recuperación (RAG): combina las funcionalidades generativas de LAS VM con la capacidad de recuperar información de bases de datos externas o documentos en tiempo real. El modelo consulta un origen externo para encontrar información relevante, que después usa para informar a su respuesta. Este enfoque permite que el modelo proporcione información más precisa y actualizada de la que podría de 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 datos privados 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 capturada 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 generación de recuperación desactivada (ROG) es ChatGPT. Por el contrario, si es necesario, Copilot (a través de Bing) amplía el LLM mediante fuentes externas de fuentes de noticias (y proporcionando vínculos a esos orígenes).

A primera vista, el sonido de generación aumentada de recuperación (RAG) y generación centrada en recuperación (RCG) son similares porque ambos implican la integración de información externa en el proceso de generación de lenguaje. Sin embargo, difieren en cómo priorizan y utilizan la información recuperada dentro del proceso de generación.

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

Por otro lado, los sistemas RCG ponen un énfasis más fuerte en la propia información recuperada. En estos sistemas, los datos recuperados suelen ser la pieza central de la respuesta, con el rol del modelo generativo principalmente para 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 RAG y RCG se describen en artículos sobre cómo almacenar incrustaciones vectorizadas de documentos frente a ajustar un LLM, los dos enfoques frecuentes para complementar los conocimientos disponibles para el LLM en función de su entrenamiento inicial.

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

Descripción de factores que influyen en el funcionamiento de 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 serán fundamentales al crear características de IA generativas en sus propias aplicaciones.

Cuando un usuario chatea con ChatGPT, el diseño de la interfaz de usuario ofrece la ilusión de una sesión de chat de larga duración que mantiene el estado a lo largo de varios intercambios de ida y vuelta entre usted y LLM. En realidad, para una sesión de chat determinada, todas las solicitudes y todas las respuestas de LLM (también conocidas como finalizaciones) se envían con cada solicitud nueva. Por lo tanto, a medida que crece la conversación, se envía cada vez más texto al LLM para procesar, todas las indicaciones y finalizaciones anteriores. ChatGPT usa todo el contexto de la sesión de chat, no solo el aviso actual, al redactar una respuesta a la solicitud actual. Toda la sesión de chat se denomina ventana de contexto.

Hay un límite de longitud de ventana de contexto en función de 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 omitirá al redactar 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 cálculo necesario para procesar el mensaje y redactar una finalización. Esto afecta a la latencia de la respuesta y cuánto cuesta OpenAI procesar la solicitud.

¿Qué es el límite de ventanas de contexto de ChatGPT? O bien, ¿cuántas palabras pueden trabajar con 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 petición y finalización

¿Qué es la tokenización?

"Tokenización" es el proceso de conversión de 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. OpenAI tiene una página útil que explica más sobre la tokenización e incluso tiene una calculadora que ilustra cómo se divide una frase o párrafo en tokens.

Como la nota de la parte inferior de la página Tokenizer de OpenAI indica que, en textos en inglés típicos, un token equivale a unos cuatro caracteres. Esto significa que, 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 le permite calcular mediante programación cuántos tokens usará para un mensaje determinado enviado 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, gpt-4, etc.) suele tener 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 millón de tokens".

Este modelo de precios tiene un impacto significativo en cómo diseña las interacciones del usuario y la cantidad de procesamiento previo y posterior que agregue.

Solicitudes del sistema frente a las solicitudes del usuario

Hasta este punto, la discusión se ha centrado únicamente en "avisos de usuario" – las indicaciones que componen el intercambio entre un usuario y ChatGPT.

OpenAI introdujo el "símbolo del sistema" (también conocido como "instrucciones personalizadas"), que es un conjunto de instrucciones sobre arco que define y se agrega a todas las conversaciones de chat. Piense en él como un conjunto de instrucciones meta que desea que llM observe siempre cada vez que inicie 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 haiku" no es un ejemplo útil, ilustra la idea de que puede influir en la finalización de un LLM en el mensaje modificando el propio mensaje.

¿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 querrá agregar medidas de seguridad para limitar el ámbito de los temas o dominios a los que puede responder.

Pero modificar el mensaje del usuario es solo un método para mejorar la experiencia de generación de texto para los usuarios.

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 simplemente el mensaje y hay muchas técnicas de ingeniería rápidas 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:

  • Modificación mediante programación de las solicitudes del usuario
  • Implementación de una canalización de inferencia
  • Generación aumentada de recuperación (que se describe en otros artículos)
  • Ajuste preciso (descrito en otros artículos)

Modificación de solicitudes de usuario mediante programación

Desde una perspectiva mediante programación, no hay ninguna API especial para agregar una solicitud del sistema a las conversaciones de los usuarios. Simplemente anexa las instrucciones al símbolo del sistema según sea necesario. Sin embargo, hay algunas técnicas para mejorar las solicitudes del usuario:

  • Priming contextual: crea mensajes del sistema que establecen explícitamente el contexto de la conversación en el dominio deseado. Esto implica proporcionar una breve descripción o un conjunto de instrucciones al principio de cada interacción, lo que guía a la inteligencia artificial para permanecer dentro del dominio del problema.
  • Guía basada en ejemplos: incluya ejemplos de los tipos de preguntas y respuestas que son relevantes para su dominio en el mensaje inicial. Esto ayuda a la inteligencia artificial a comprender el tipo de respuestas esperadas.

Además, se pueden aplicar todas las técnicas de ingeniería rápida. Si puede realizar esta acción mediante programación de alguna manera, puede mejorar la solicitud del usuario en su nombre.

La advertencia a este enfoque es que cuanto más tiempo sea la solicitud, más costosa será cada llamada al LLM. Incluso así, es probable que esto sea lo más económico de los enfoques que se discutirán.

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 el proceso de un extremo a otro que toma la entrada sin procesar (como texto o imágenes) y "lo limpia" antes de usarlo para realizar la solicitud principal (preprocesamiento) o para comprobar la finalización para asegurarse de que cumple las necesidades del usuario antes de mostrarla al usuario (posprocesamiento).

El preprocesamiento podría 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, podría analizar la solicitud inicial enviada por el usuario y comenzar 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 un entorno local defectuoso o debe volver a escribirse para evitar ciertos sesgos. Si LLM analiza el mensaje y encuentra problemas, puede seguir un paso más: pida al LLM que vuelva a escribir la solicitud para mejorar la respuesta.

El procesamiento posterior podría implicar validar la relevancia y la idoneidad de la respuesta en el dominio. Esto 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, de hecho, cumple los requisitos a los que le ha pedido que cumpla. Si no es así, puede pedir al LLM que modifique la finalización y repita esto 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 ventajas y desventajas que deben realizarse por el liderazgo que afectan al presupuesto, el rendimiento y la eficacia del sistema de software.

El artículo Creación de sistemas avanzados de generación aumentada de recuperación profundiza en los pasos específicos de la creación de una canalización de inferencia.

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 grande con generación aumentada de recuperación y ajuste fino. Además, hay parámetros que se pueden modificar al realizar llamadas a la API de Azure OpenAI.

En la documentación del punto de conexión de chat se enumeran los parámetros obligatorios y opcionales que se deben pasar que pueden afectar a varios aspectos de la finalización. Si usa un SDK en su lugar, consulte la documentación del SDK para obtener el idioma que prefiera. Si desea experimentar con los parámetros, puede hacerlo en el área de juegos.

  • Temperatura: controle la aleatoriedad de la salida generada por 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.

  • Tokens máximos: 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 de núcleo): se usa con la temperatura para controlar la aleatoriedad de la respuesta. La P superior limita la inteligencia artificial para tener en cuenta solo el porcentaje P superior de la masa de probabilidad al generar cada token. Los valores más bajos conducen a texto más centrado y predecible, mientras que los valores más altos permiten más diversidad.

  • Penalización de frecuencia: 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.

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

  • Secuencias de detención: puede especificar una o varias secuencias para indicar a la API que deje de generar más tokens. Las secuencias de almacén son útiles para controlar la estructura de la salida, como finalizar una finalización al final de una frase o párrafo.

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

Descripción de las medidas de seguridad de Microsoft OpenAI

Además de mantener las respuestas de LLM enlazadas a temas o dominios específicos, es probable que también se preocupe por los tipos de preguntas que los usuarios están haciendo del 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 encuentra potencialmente ofensivo e informa esto de nuevo a través de muchas categorías de filtrado.

Puede usar la API de moderación de OpenAI directamente para comprobar explícitamente cualquier contenido potencialmente dañino.

En segundo lugar, puede usar La seguridad del contenido de Azure AI 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 que podrían influir en las decisiones de diseño de la aplicación

Comprender la tokenización, los precios, las ventanas de contexto y la implementación de mejoras mediante programación para mejorar la experiencia de generación de texto de los usuarios afecta a la forma en que diseña el sistema de ia generativa. Esta es una breve lista de aspectos que se deben tener en cuenta y otros aspectos de este artículo que afectan 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 menos costosos pueden ser suficientes para las necesidades de la aplicación, lo que equilibra 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 IA generativa inmediatamente, se recomienda echar un vistazo a Introducción al chat con su propio ejemplo de datos para Python. También hay versiones del tutorial disponibles en .NET, Java y JavaScript.