¿Inyección de prompts para LLMs de contexto largo como alternativa a RAG?

¿Es factible inyectar documentos de tamaño mediano (por ejemplo, hasta 100 KB) en el contexto de una sesión de bot de Persona de IA de Discourse a través del prompt del sistema?

CASO DE USO
Una Persona de IA personalizada vinculada a un LLM privado como Llama3-8b en una instancia de AWS donde el costo es por hora, no por token. Es decir, el número de tokens de solicitud/respuesta no importa y el servidor tiene una potencia CUDA considerable, por lo que el rendimiento es bueno. Es decir, ¿RAG podría ser opcional?

(Caso de uso alternativo: LLM Gemini.1.5, donde no hay cargo por las llamadas a la API)

OBJETIVO
Reducir las partes móviles en el pipeline y mejorar la precisión al evitar la recuperación de similitud.

EXPERIMENTO
Prueba informal de Persona de IA con Gemini 1.5 Pro donde se insertó un documento de texto de ~20k tokens en el prompt del sistema.

Hice varias preguntas cuyas respuestas sabía que solo estaban en el artículo. Respondió correctamente a todas las preguntas. ¿Entonces asumo que leyó los 20k tokens del prompt y los analizó para cada pregunta?

En casos donde las sesiones y el contenido del contexto no son demasiado grandes, ¿hay desventajas en este enfoque?

Muchas gracias..



NOTA AL PIE - Eliminar contexto del prompt a mitad de sesión
Cuando eliminé el contenido de inyección del prompt a mitad de sesión y continué haciendo preguntas, Gemini siguió respondiendo correctamente, pero después de varias preguntas no pudo encontrar el contexto y falló. Como era de esperar, Gemini 1.5 puede mantener el contexto a lo largo de múltiples turnos de conversación en una sesión, pero no indefinidamente.

¡Se agradecen todos los pensamientos, comentarios y orientación!

1 me gusta

Sí, tenemos lógica de truncamiento que depende de la cantidad de tokens que permite el llm, establecimos el umbral bastante alto para los modelos gemini 1.5 (en 800 k)

Debería funcionar, pero cada interacción puede ser muy cara.

En general, he descubierto que limitar el contexto ayuda a los modelos a mantenerse más enfocados, pero a largo plazo (dentro de 2-5 años)… rag puede ser inútil y simplemente tendremos tantos tokens y enfoque que no importará.

3 Me gusta

A pesar de mis preguntas sobre el relleno de indicaciones… Realmente me encanta RAG.

En mi opinión, el trabajo que están haciendo con los motores de incrustación de grandes ligas es potente y útil en este momento… pero también estoy de acuerdo en que RAG… puede estar condenado.

Como dijo Sam Altman en una entrevista reciente… ¡cuidado con los modelos de negocio y los planes de proyecto que se interponen en el camino del LLM! ¡¡Los aplastaremos!! ..o algo parecido..

Así que, en última instancia… tal vez querremos simplemente darle nuestras cosas al LLM sin muchos pipelines de preprocesamiento que son de baja dimensión (entrada) luego de alta dimensión (incrustación) luego de baja dimensión (indicación) luego de alta dimensión (inferencia de transformador) luego de baja dimensión (salida)… ¡Bob es tu tío!

Aquí hay algo de contexto sobre RAG versus contexto largo que acabo de encontrar… aún no lo he escuchado todo, pero parece relevante, tal vez… (no estoy afiliado a nadie en este video :-))

ADDENDUM

Pude ver ese video sobre Gradient long-context LLama3. Nos recuerda que el contexto incluye todo lo que está en juego.

  • Entrada del usuario
  • Salida del LLM
  • Tokens de control
  • Instrucciones del sistema

… a medida que la ventana se desliza, se van quedando cosas fuera. Pero mencionaron que puede haber una “protección” del prompt del sistema en sesiones donde la ventana de contexto se llena.

También están los problemas del “tamaño máximo de entrada” y la “longitud de secuencia” original con la que se entrenó el modelo, que pueden entrar en juego.

A continuación, un ejemplo de cómo funciona el relleno de prompts de contexto largo.

En general, parece factible crear un equipo de personas de IA de Discourse que cada una tenga un gran trozo de contenido especializado o base de código para consultar (¡teniendo en cuenta la advertencia sobre el alto costo cuando se paga por token!).

Pero, ¿no es esto solo una versión “estática” (realmente ineficiente y) de RAG?

Todo lo que RAG hace de manera diferente a este enfoque es seleccionar e incluir fragmentos de contenido relevantes en lugar de incluir todo el contenido.

2 Me gusta

Buen punto, sin duda… no hay una respuesta sencilla en mi opinión.

Supongo que esto depende del caso de uso.

RAG funciona bien para algunas aplicaciones, pero para otros casos objetivo bastante deterministas (por ejemplo, preguntas y respuestas de clientes, pagos, medicina, etc.), yo y otros hemos tenido problemas para obtener una buena precisión con la búsqueda vectorial RAG durante el último año. Es decir, el bot omitirá cosas o inventará cosas (bajo recall, baja precisión en términos de IR), lo cual está bien documentado por Stanford, Google, etc.

Entonces surge la pregunta… ¿por qué lanzar un montón de fragmentos al LLM si se le puede dar todo el corpus? Al menos con la inyección de contexto, cuando el LLM no es preciso, tienes menos cosas que ajustar.

Ok, no va a funcionar para vastas bibliotecas de documentos/código… pero para bases de contenido pequeñas y moderadas parece funcionar muy bien hasta ahora… estoy trabajando en un proyecto que está probando formalmente esto. ¡Más pronto… gracias!

PD. → Para hacer las cosas aún más interesantes… he tenido buena suerte con la inyección de contexto + ajuste fino… ¡y hay enfoques emergentes que combinan RAG e inyección de contexto! … etc. etc.

también ver:

ADDENDUM 2

Aquí hay una prueba de Q/R con un documento técnico (~20k tokens) puesto en contexto mediante inyección de prompt vs RAG. (el contenido y la configuración fueron lo más similares posible. LLM = Gemini-1.5-Pro)..

ANÁLISIS:
RAG es inconsistente… a veces encuentra la respuesta, a veces no.


:github_check: Éxito de inyección de prompt:


:x: Fallo de RAG:


Rastreo de solicitud de RAG:

Logré que RAG respondiera preguntas de la carga de archivos al principio del documento, y con persuasión, puede que mire el medio y el final… así que no es un fracaso total… pero es inconsistente… consistentemente, o más difícil de trabajar en mi opinión : )

Aquí tienes el archivo de prueba en caso de que alguien quiera juguetear con él:

El archivo contiene estas ‘agujas’ de BME haystack que están garantizadas para ser únicas, es decir, no presentes en copias externas del artículo en Internet.

Inicio:

Corrector: Felonius Monko

Medio:

Nota del editor: La serie de estabilidad de Goldich fue descubierta por Maurice Goldrch. Si bien el orden original de potencial de meteorización mineral de Goldich era cualitativo, trabajos posteriores de Michal Kowalski y J. Donald Rimstidt lo situaron en la serie en términos cuantitativos. Gracias al Dr. Gomez Pyle de NMU por esta aclaración.

Fin:

Dang, S. et al. Estructuras de crio-EM del canal de cloruro activado por calcio TMEM16A. Nature 552, 426429 (2017).

Equatics-paper1-with-unique-haystack-needles-v116.txt (71.8 KB)

¡Todos los comentarios, críticas y orientación son apreciados! En adelante, realizaré la prueba con más LLM y modelos de incrustación, etc.

NOTA AL PIE:\n\nPude volver a ejecutar la prueba anterior con GPT4o (contexto de 128k), asegurándome de usar configuraciones de tokens/fragmentos grandes. Sin embargo, sigue siendo muy inestable para mi caso de uso de preguntas y respuestas de mi libro blanco (se pierde en el medio, se pierde al final, etc.). Aquí están mis configuraciones si alguien quiere duplicar y refinar. Me encantaría si pudiéramos encontrar las configuraciones adecuadas para este caso:\n\n|PERSONA PERSONALIZADA DE IA||\n|—|—|\n|||\n|¿Habilitado?|Sí|\n|Prioridad|Sí|\n|Permitir chat|Sí|\n|Permitir menciones|Sí|\n|Visión habilitada|No|\n|||\n|Nombre|Rag Testing Bot 3|\n|Descripción|Probar RAG vs inyección de prompt de contexto largo|\n|Modelo de lenguaje predeterminado|GPT-4o-custom|\n|Usuario| Rag_Testing_Bot_bot|\n|Comandos habilitados|Categorías, Leer, Resumen|\n|Grupos permitidos|trust_level_4|\n|||\n|Prompt del sistema|Responde de la manera más completa posible a partir del contexto proporcionado sobre la investigación de eliminación de carbono de Equatic en el archivo adjunto. No inventes contenido. No uses contenido externo a esta sesión. Enfócate en el contenido proporcionado y crea respuestas a partir de él de la manera más precisa y completa posible. |\n|||\n|Publicaciones máximas de contexto|50|\n|Temperatura|0.1|\n|Top P|1|\n|||\n| ||\n|Cargas| Equatics-paper1-with-unique-haystack-needles-v116.txt|\n|||\n|Tokens de fragmento de carga|1024|\n|Tokens de superposición de fragmento de carga|10|\n|Fragmentos de conversación de búsqueda|10|\n|Modelo de lenguaje para el consolidado de preguntas|GPT-4o-custom|\n|||\n|BOT PERSONALIZADO ||\n|||\n|Nombre a mostrar|GPT-4o-custom|\n|||\n|Nombre del modelo|gpt-4o|\n|||\n|Servicio que aloja el modelo|OpenAI|\n|URL del servicio que aloja el modelo|https://api.openai.com/v1/chat/completions|\n|Clave API del servicio que aloja el modelo|D20230943sdf_fake_Qqxo2exWa91|\n|||\n|Tokenizador|OpenAITokenizer|\n|Número de tokens para el prompt|30000|