Esto es parte de una serie en curso: véase el primer post aquí.
aquíPrincipio II de la IA: Carga rápidamente (si realmente tienes que)
¿Quieres que tu chatbot comience a discutir las letras de Taylor Swift en lugar de proporcionar soporte técnico? eso es lo que nuestro chatbot hizo cuando violamos el principio anterior.
Dónde almacenar Prompts
¿Estás almacenando tus prompts con el resto del código? o descargándolos de otra fuente? Tal vez una combinación de ambas?
Opción A - Almacenar Prompts en Git
La primera pregunta que debes preguntar es: ¿Hay una razón inmediata para almacenar las prompts separadamente de tu código? Si no, deje las prompts en Git con el resto de la base de código, donde pertenecen.
Volviendo al Principio #1: Los prompts son Código. Almacenar partes de su base de código fuera de Git es posible y a veces necesario, pero no trivial. No tome la decisión de mover los prompts ligeramente.
Prompts son CódigoOpción B - Load Prompts desde una plataforma controlada por la versión
¿Qué pasa si algunos de sus prompts necesitan ser editados por no ingenieros? Esto podría ocurrir si se necesita experiencia en dominio profundo en un área.
En este caso, necesitarás cargar la prompt en tiempo de ejecución desde una fuente controlada por la versión.He visto que Confluence y Google Docs se usan con éxito para este propósito.
Cuando planifique la lógica de carga rápida, no subestime la cantidad de esfuerzo en agregar esta integración.Deberá manejar una variedad de condiciones de error y escenarios para tener confianza en su aplicación.Los permisos de acceso deben configurarse y mantenerse, y la prueba automática y el seguimiento adicional deben extenderse para detectar errores lo antes posible.
Aquí están algunos de los escenarios que debes planificar para:
- La aplicación no puede cargar prompts en tiempo de ejecución. ¿Utilizas la implementación? ¿Convertir a una versión de copia de seguridad de la prompt?
- La sintaxis de prompt se vuelve inválida después de un cambio y devuelve estructuras de datos inutilizables. Las pruebas automatizadas no detectaron el problema porque las prompts no se cargaron durante la ejecución de la prueba. ¿Qué tipo de infraestructura de prueba y monitorización adicional se necesita para detectar esto y minimizar el impacto del cliente?
- Prompt necesita ser rollado de inmediato. ¿Esto requiere una nueva implementación de código? O ¿está construyendo un UI separado para la implementación de prompt?
- Syntax
- La aplicación no puede cargar prompts en el tiempo de ejecución. ¿Usted mata la implementación?
- La sintaxis de prompt se invalida después de un cambio y devuelve estructuras de datos inutilizables. Las pruebas automatizadas no detectaron el problema porque las prompt no se cargaron durante la ejecución de la prueba. ¿Qué tipo de infraestructura de pruebas adicionales y monitoreo es necesario agregar para detectar esto y minimizar el impacto del cliente?
- Prompt necesita ser rollado de inmediato. ¿Esto requiere una nueva implementación de código? o ¿está construyendo una interfaz de usuario separada para la implementación inmediata?
- La sintaxis añadida al documento por plataformas como Confluence puede infiltrarse en el prompt de tiempo de ejecución, afectando negativamente su rendimiento.
Todos estos problemas son 100% solucionables.Pero es fácil caer en el patrón de pensar que cargar un prompt de un Google Doc es una operación trivial que no afectará a la arquitectura de la aplicación de una manera profunda.Como he mostrado anteriormente, cargar un prompt externo es un negocio serio a abordar con cuidado para aplicaciones de alta fiabilidad.
Opción C - Prompts de carga desde una plataforma no controlada por versiones
Esta es una mala idea, y te lo arrepentirás.La fuente de verdad para los prompts necesita ser controlada por versiones, tener la API adecuada y controles de acceso.
Opción D - Enfoque híbrido
El enfoque híbrido combina almacenar algunos prompts directamente dentro de su base de código y cargar otros de fuentes externas controladas por versiones.
Considere adoptar un enfoque híbrido en condiciones tales como:
- Uso mixto: Algunos prompts requieren actualizaciones frecuentes por parte de expertos en dominios no codificadores, por lo que el cargamiento externo es práctico, mientras que otros son cambiados sólo por ingenieros.
- Gestión de riesgos: Los prompts críticos (por ejemplo, guardrails) deben residir en el repositorio principal para una fiabilidad máxima.
- Flexibilidad de evaluación: Los prompts destinados a la evaluación de estilo ML pueden ser gestionados externamente para simplificar su integración con un marco de evaluación.
- Uso mixto: Algunos prompts requieren actualizaciones frecuentes por parte de expertos en dominios no codificadores, haciendo práctico el cargamiento externo, mientras que otros solo son cambiados por ingenieros. Uso mixto
- Gestión de riesgos: Los prompts críticos (por ejemplo, guardrails) deben residir en el repositorio principal para una fiabilidad máxima. Los prompts menos críticos, en particular aquellos que se someten a ajustes frecuentes, pueden vivir de forma segura externamente.Gestión de riesgos
- Flexibilidad en la evaluación: Los prospectos destinados a la evaluación de estilo ML se pueden gestionar externamente para simplificar su integración con un marco de evaluación. Flexibilidad de evaluación
- Sólo los prompts cuya funcionalidad imita explícitamente los modelos de aprendizaje automático (por ejemplo, tareas de clasificación o puntuación) deben ser evaluados externamente.
- Mantened la mayoría de los prompts de lógica empresarial dentro de la base de código principal, empleando enfoques de prueba automatizados tradicionales similares a las técnicas de prueba de unidades en lugar de las técnicas de validación de ML.
- Donde se justifica la evaluación externa, aislad solo esos prompts, cuando sea posible.
- Sólo deben evaluarse externamente los prompts cuya funcionalidad imite explícitamente modelos de aprendizaje automático (por ejemplo, tareas de clasificación o puntuación). Mantenga la mayoría de las promesas de lógica empresarial dentro de la base de código principal, empleando enfoques de pruebas automatizadas tradicionales similares a las pruebas de unidades en lugar de técnicas de validación de ML.
- Donde la evaluación externa es justificada, aislemos sólo aquellas promesas, cuando sea posible.
- No se realizaron verificaciones de que los prompt se habían cargado con éxito. Debería haber habido un error lanzado en el tiempo de carga de prompt, ya que la aplicación no podía funcionar sin que se cargaran los prompt.
- El prompt fue cargado externamente con el resto de los prompt. Esa es una prompt que no debería cargarse de esta manera.
- No se realizaron verificaciones de que los prompts se habían cargado con éxito.Debería haber habido un error lanzado en el tiempo de carga prompt, ya que la aplicación no podía funcionar sin que se cargaran los prompts.
- La prompt de guardarela se cargó externamente con el resto de las prompt. Esa es una prompt que no debería cargarse de esta manera. Debería haber sido mantenida en Git como la última línea de defensa.
Guardrail Prompts
Los prompts de Guardrail (también conocidos como prompts de censura) se especializan en escanear las respuestas antes de llegar a los usuarios, asegurando las salidas adecuadas, seguras y conformes.Los guardrails sirven como un mecanismo de protección, especialmente en las aplicaciones donde las interacciones de los usuarios suponen riesgos legales o éticos significativos.
No cargue prompts de guardrail de un documento externo - esto añade un riesgo innecesario significativo. O los guarda en Git con su código o use una herramienta de terceros dedicada, como Fiddle Guardrails. La lógica de Guardrail no cambia muy a menudo, por lo que este enfoque no te ralentizará tanto.
Fiddle Guardrails
El uso de guardrails es un principio propio, para ser discutido en mucho más detalle en un post futuro.Es un gran patrón que mejora la seguridad de su aplicación y le ayuda a dormir mejor por la noche.
Loading Prompts para una evaluación más fácil
Los equipos a menudo cargan prompts externamente para integrarlos con motores de evaluación, como ML Flow. La suposición subyacente detrás de esta práctica es que los prompts son similares a los modelos ML y necesitan una evaluación estadística separada.Flujo de ML
Este enfoque a veces es válido —por ejemplo, en los prompts de clasificación diseñados para comportarse como modelos ML. Pero la mayoría de los prompts son fundamentalmente diferentes: como se describe en el Principio #1: LLM Prompts Are Code. Los prompts típicos son más similares a la lógica de la aplicación que a los modelos ML. Son más adecuados para la evaluación del tipo Pass-Fail junto con el código circundante, en lugar de un enfoque de evaluación estadística.
LLM Prompts Are Code
Los motores de evaluación externos no te ayudarán con la mayoría de las indicaciones. En su lugar, debes usar pruebas automatizadas impulsadas por la IA, similares a las pruebas de unidades tradicionales.
Considere las siguientes prácticas:
Estudio de casos
El problema central con los prompts de carga es la disponibilidad - qué debe hacer si el prompt no se carga cuando lo espera.
Esto es lo que nos sucedió en el ejemplo de Taylor Swift. Ninguna de las prompts para una aplicación de soporte técnico se cargó como resultado de un problema de credenciales de Confluence, incluido el prompt de guardrail. Esto de alguna manera no desencadenó errores de tiempo de ejecución y el bot comenzó a responder sin ninguna instrucción o entrada (desde que la cadena de formatación de entrada era parte de la prompt). Y con qué quiere hablar el LLM de OpenAI en ausencia de entrada? Resulta —las letras de 'I Want to Break Free' de Queen y varias canciones de Taylor Swift. Afortunadamente, esto fue capturado y corregido casi de inmediato, y los usuarios disfrutaron de la discusión musical —al menos eso es lo que me digo a mí mismo.
Por qué ocurrió este incidente? se cometieron dos errores:
Después del incidente, el prompt de guardia fue re-migrado a Git y se agregó la lógica de excepción para evitar la implementación si un prompt no se cargó o era inválido.
Conclusión
En este post, examiné las consideraciones clave en torno al almacenamiento rápido y la carga dentro de las aplicaciones de IA. La práctica predeterminada es almacenar sus prompts junto a su código en repositorios controlados por versiones.Sólo desvíe de esto cuando haya una razón convincente, como la edición frecuente por no ingenieros o requisitos de evaluación específicos.
Cuando los prompts deben cargarse externamente, elija fuentes fiables y estrictamente controladas por la versión, añadiendo pruebas y monitoreo para la resiliencia.Los prompts Guardrail, dado su papel crítico en la seguridad de la aplicación, deben permanecer en su base de código para evitar riesgos graves de fiabilidad.
La mayoría de las prompts están más cerca de codificar que de los modelos ML, por lo que solo utilice herramientas de estilo ML donde las necesite.No almacene todas sus prompts externamente sólo para simplificar la integración con una herramienta de evaluación para algunos de ellos.
Si te ha gustado este post, sigue la serie para obtener más información.