Video Summary and Transcription
La charla de hoy discute la aplicación de GenreBI en aplicaciones, utilizando Docker para hacer que ChatGPT funcione en cualquier máquina, desafíos con las respuestas JSON, pruebas de modelos de IA, manejo de problemas de API de IA y respuestas, conteo de tokens y límites de tasa, descubriendo limitaciones y adoptando un enfoque reactivo, la fiabilidad y los desafíos de las API de IA, y el uso de GPT y AI Copilot en el desarrollo de software.
1. Introducción a GenreBI en Apps
Hoy, quiero hablar sobre GenreBI en nuestras aplicaciones como una característica del producto. Discutiremos su aplicación en bases de código y la importancia de la calidad. Comprender el flujo de una aplicación y sus dependencias, específicamente las limitaciones de los modelos de OpenAI, es crucial para una mejor toma de decisiones y la calidad general del producto.
Genial. Así que hoy quiero hablar un poco sobre GenreBI en nuestras aplicaciones como una especie de característica del producto. Un poco diferente a la charla anterior que dio Olga, que fue bastante impresionante, usas GenreBI para escribir pruebas. En este caso, queremos hablar un poco sobre el otro lado de donde se podría aplicar GenreBI en tu base de código, que esencialmente se filtra en tu prueba, ¿verdad? Dicho esto, quiero cubrir brevemente nuestra compañía, en la que trabajo actualmente, Severity, he estado aquí durante aproximadamente un año. Hacemos un montón de cosas de IA. Nuestra misión final es tomar mejores decisiones, desde el existencial humano, vamos a tomar mejores decisiones donde podamos. Pero, por supuesto, eso es algo a gran escala. Así que realmente queremos centrarnos ahora en tomar mejores decisiones en los equipos de producto. Ingenieros, gente de producto, ese tipo de cosas. Así que si eso suena interesante, ve a este sitio web. Si no, eso también está bien. Eso es más contexto de, hemos estado trabajando con esto durante aproximadamente un año. Y con eso, por supuesto, hay muchas cosas de GenreBI que hemos estado utilizando. Y eso es solo un poco de contexto aquí en lo que voy a compartir hoy, porque realmente hay muchas cosas geniales que puedes hacer con la IA, pero hay muchas cosas extrañas cuando realmente pones la IA en las bases de código e intentas hacer que las cosas funcionen desde una perspectiva de producto. Entonces, dicho esto, la calidad es muy importante. Hay muchos aspectos de la calidad en las bases de código. Testing es un aspecto de muchos aspectos. Hay muchas formas diferentes de probar. No entraremos en eso porque creo que todos tenemos una buena idea de lo que son esas cosas. Unidad, hay manual testing, testing automatizado, y mil cosas más. Ahora, otro aspecto importante de la calidad es esta idea de planificar o diseñar el flujo de una aplicación. Entender eso, es muy clave. Comprender cómo los usuarios fluirán a través de tu aplicación, entender dónde las cosas pueden fallar, ese tipo de cosas. Entonces, también voy a tocar un poco sobre eso hoy. Y luego este tercero es entender las dependencias, específicamente sus comportamientos y limitaciones. Entonces, cuando empiezas a usar la IA en tu aplicación como una característica del producto, tienes que entender realmente esas dependencias. En este caso específico, el case study que estoy compartiendo hoy con el material muy es que estamos usando los modelos de OpenAI. Y con eso, es muy crítico entender que los modelos de OpenAI son muy buenos en ciertas cosas, pero muy malos en otras cosas. Y entonces, cuanto mejor entendamos las limitaciones, en general podremos dar mejor calidad, porque al final del día, ya sea pruebas, ya sea diseñar cosas, la calidad es realmente lo que estamos tratando de resolver. Y entonces, dicho esto, esto en realidad puede aplicarse a otros LLMs, otros modelos por ahí, pero específicamente, hemos estado usando OpenAI, y por lo tanto estos ejemplos serán en OpenAI
2. Uso de Docker para hacer que ChatGPT funcione en cualquier máquina
Una de las características de Verity era la capacidad de crear y generar documentos. También teníamos un código de ejemplo que demostraba el uso de ChatGPT. Sin embargo, no había una API de ChatGPT para bases de código, lo cual era una gran desventaja. Para solucionar esto, se nos ocurrió la idea de usar Docker para hacer que funcione en cualquier máquina. Vamos a explorar este concepto más a fondo.
formato. Así que, dicho esto, una de las características de Verity que construimos temprano, antes de que saliera ChatGPD, era esta idea de crear un documento, generar o redactar un documento, y eso funcionó bastante bien. Permíteme pasar al siguiente. Así que, código de ejemplo aquí. Yo solo voy a cubrir brevemente esto para ver si funciona bien. Oh, mira eso. Genial. Increíble. Entonces, importación típica de SDK aquí arriba, y luego tenemos una llamada de completions. Eso es esencialmente cómo OpenAI realmente llamará a la IA. Y luego aquí tenemos este prompt aquí. Esto es esencialmente lo que verías en cualquier tipo de cosa de ChatGPT, donde escribes algún tipo de comando, algún tipo de prompt. Eso se cubre aquí. Así que, dicho esto, tenemos este ejemplo aquí. Y por supuesto, si lo ejecutas, tendrías algo como local host es mi servidor, ¿cuál es el tuyo?, para completar las rosas son rojas, las violetas son azules. Lo siento, siento que esto está en el camino. Permíteme subir más aquí, y así sucesivamente, ¿verdad? Y entonces, como dije, así que si vas al playground en ChatGPT, misma idea allí. Así que, esas son las dos cosas que son iguales allí.
Así que, dicho esto, si retrocedemos a noviembre de 2022, salió ChatGPT. Fue un gran revuelo. Todos estaban como, tan emocionados. Oh, ChatGPT, va a revolucionar el mundo, todas esas cosas buenas. Y creo que en su mayor parte tenían razón. Y entonces, una desventaja, sin embargo, con ese anuncio fue que no había una API de ChatGPT para que las bases de código realmente usaran cosas geniales de IA, al menos no todavía. Y eso fue un gran bajón. Y entonces, sabes, pensando en este playground donde podrías escribir cualquier prompt y generar lo que diablos quieras, no teníamos eso en la base de código, ¿verdad? Y entonces, tuvimos esta idea genial. ¿Alguien aquí ha usado Docker? Así que, Docker es una idea bastante genial, ¿verdad? Y este es uno de mis memes favoritos sobre Docker. Es como, bueno, funciona en mi máquina. ¿Y si encontramos una forma de hacer que funcione en no mi máquina? Y entonces, vamos a tomar esto. Así que, esto es algo que intentamos.
3. Uso de Puppeteer y GPT-3
Usamos Puppeteer para alojar nuestra aplicación en una instancia EC2 en la nube y exponer una API. Sin embargo, nos encontramos con problemas como Captcha y limitaciones de inicio de sesión. Aunque fue un buen experimento para probar la API de chat2PD, no era confiable para el código de producción. Más tarde, obtuvimos GPT-3, pero descubrimos una distinción entre el lenguaje natural y JSON. Vamos a explorar algunos ejemplos utilizando la API de completions de chat y la función askAI.
Entonces, tenemos esencialmente la ventana del navegador. Usamos Puppeteer. Y decimos, oye, vamos a lanzar eso en una instancia EC2. Vamos a alojar eso en la cloud. Vamos a lanzar Node.js allí y exponer una API. Y así, antes de que saliera la API de chat2PD, pudimos usar la API, por así decirlo, en nuestra aplicación. Y por supuesto, nada saldrá mal porque esa es la mejor idea, ¿verdad? No tanto, ¿verdad? Entonces, algunas cosas con las que nos encontramos es que aparentemente cuando no tienes a un humano cocinando cosas alrededor de los sitios web se dan cuenta. Entonces, Captcha fue un problema. Lo eludimos con algunas cosas interesantes que aprendí sobre Captcha. No entraré en eso. Pero otra cosa con la que nos encontramos es el inicio de sesión. Entonces, después de unos 15 minutos, por supuesto, la cosa se cerraría. Y entonces, cuando golpeas la API de nuevo, por supuesto, fallarías. Eso no fue muy bueno. Y por supuesto, hay algunas limitaciones con la cuenta que estamos usando. No puedes tener tantas solicitudes o lo que sea. Y entonces, en resumen, con este experimento, la pregunta es como, ¿fue algo bueno? ¿Fue algo malo? Diría que fue bueno en que nos ayudó a probar la API de chat2PD, por así decirlo, antes de que saliera. Pero es malo en que probablemente nunca usaríamos esto en el código de producción porque simplemente no era muy confiable, ese tipo de cosas. Entonces, en resumen, fue un buen experimento, pero seguimos adelante, ¿verdad? Y entonces, por supuesto, unos meses después, chat2PD salió con APIs y obtuvimos GPT-3. Y estábamos muy emocionados. Es bastante impresionante. Aprendimos muy temprano, muy rápidamente, que hay una distinción entre el lenguaje natural, en el que los LLMs, la IA es muy buena, y JSON, en el que la IA es sorprendentemente no muy buena. Y entonces, vamos a repasar algunos ejemplos aquí. Entonces, en este caso, configuramos nuestro código aquí. Decimos GPT. En este caso, en realidad comenzamos con 3, pero solo haremos 3.5 para este escenario aquí. Entonces, esto es solo una función auxiliar aquí. Pero en última instancia, esto está utilizando la API de completions de chat aquí. Y luego con eso, llamamos a esa misma función. Entonces, déjame volver allí para aclarar eso. Entonces, askAI es el nombre de la función aquí.
4. Trabajando con Respuestas JSON
Teníamos varias necesidades de devolver JSON para diversos fines. Le preguntamos a la IA e intentamos analizar los resultados en JSON. Las respuestas iniciales no eran JSON válidos. Hicimos varios intentos para obtener respuestas JSON válidas, y finalmente descubrimos que proporcionar ejemplos mejoraba los resultados. Sin embargo, aún no funcionaba de manera confiable, y tuvimos que esperar a GPT-4, que mejoró la tasa de éxito a alrededor del 80%.
Entonces, en la siguiente diapositiva, vamos a usar eso aquí. Así que, tenemos un prompt aquí. Así que, teníamos varias necesidades de devolver JSON para diversos fines. En el caso de este ejemplo específico, simplifiqué algunas cosas. Pero solo finge que sea lo que sea, como, hey, devuelve cinco chistes geniales en JSON, sea cual sea el prompt, finge que está aquí. Pero en última instancia, le preguntamos a la IA, e intentamos analizar los resultados en JSON. Así que, veamos cómo fue eso. Entonces, esta es la respuesta cruda para ese código. Y si te das cuenta, esto aquí no es exactamente JSON. Eso es solo un tipo de lenguaje humano, que no es el mejor, porque si analizas eso en JSON, vas a lanzar un error, y sucederán cosas malas, ¿verdad? Entonces, volvemos y decimos, hey, agreguemos esto. Devuelve solo el valor JSON formateado. Y luego devuelve esto. Y es como, está bien, eso es genial, pero eso tampoco es JSON válido. Como, está bien, gracias por nada. Entonces, volvemos y alteramos el prompt de nuevo. Sin otras palabras. Como, por favor, solo devuelve JSON es la idea, ¿verdad? Y lo hizo, y está genial, excepto que quiero devolver un array JSON, que es ligeramente diferente a un objeto con una propiedad de un array que tiene un array en él. Así que, no se analizó muy bien. Entonces, por esa razón, oh, eso apesta. Así que, lo intentamos de nuevo. Hacemos algunas otras cosas. Finalmente, nos damos cuenta de que, hey, si tienes ejemplos, en realidad funciona mucho mejor. Entonces, vamos y damos un ejemplo, y ahora empieza a funcionar, y estamos todos contentos con eso. ¡Woohoo! Pero por supuesto, con cualquier cosa, a veces no funciona alrededor del 60% del tiempo, que no es un número muy grande. Y entonces, volvemos a la pizarra, y decimos, está bien, eso apesta. No podemos usar esto de manera confiable todavía. Al menos no de la manera que queríamos. Y entonces, por supuesto, unos meses después, sale GPT-4, y eso es bastante impresionante. Así que, conectamos GPT-4 en el modelo, y resulta que funciona alrededor del 80% del tiempo, que es una cantidad positiva, un saldo positivo allí, pero no es el 100%. Así que, estamos como,
5. Desafíos de Pruebas con Modelos de IA Dinámicos
GPT-4 es mejor con JSON, pero más lento y costoso. Nos enfrentamos a desafíos con respuestas JSON inválidas y exploramos la idea de llamar a la API varias veces. Las pruebas de integración son un enfoque común, pero se eligió la prueba de contrato con una API simulada para evitar problemas de costos y latencia. Sin embargo, la naturaleza dinámica de los modelos de IA dificulta su prueba. La naturaleza no determinista de los modelos de IA y la necesidad de pruebas de contrato dinámicas impulsadas por el consumidor plantean desafíos.
Bueno, eso es un poco extraño. ¿Qué más podemos hacer aquí? Así que, pensamos en cosas. GPT-4 es mejor con JSON, pero es más lento. Cuesta un poco más. Y por supuesto, porque todavía devuelve JSON inválido, nos estamos rascando la cabeza, como, ¿llamamos a esto una y otra vez, como 20 veces hasta que devuelva un JSON válido? Quizás. Y probamos eso un poco, para peor. Pero quiero pensar en cómo probar algunas de estas cosas, ¿verdad? Entonces, un patrón típico aquí es la integración testing. Todos conocemos esta idea de tener nuestro código de producción, que golpea algún tipo de API, en este caso, la API de OpenAI, y normalmente tienes algún tipo de entradas y alguna respuesta. Tus pruebas normalmente utilizan el código de producción para hacer esencialmente la misma idea, ¿verdad? Y luego está este enfoque alternativo, la prueba de contrato testing. Un gran beneficio aquí, específicamente cuando estás golpeando la API de OpenAI, es que hay algunas limitaciones por las que realmente estás pagando por uso. Y entonces, si fueras a ejecutar un conjunto de pruebas, por ejemplo, golpeando la API de OpenAI en vivo, vas a incurrir en muchos costos, potencialmente. Y por supuesto, hay algunas latencias adicionales allí. Y esa es una razón por la que elegimos decir, oye, construyamos algunas cosas de API simulada a través de la prueba de contrato testing. Y entonces, la idea allí es que, cuando ejecutas pruebas, en realidad estás ejecutando el contrato, lo que funciona bastante bien para la mayoría de las API que he usado. Pero un hecho interesante es que tenemos esta nueva cosa interesante, esencialmente un nuevo paradigma con la IA, con algunos de estos LLMs, estos grandes modelos de lenguaje que existen. Sí, tenemos estos contratos más estándar de la API a la que estamos golpeando. Entonces, tenemos la entrada aquí, también tenemos la respuesta. Pero además de eso, tenemos estas piezas más dinámicas, donde dependiendo de lo que ponga en este prompt, este contenido puede verse completamente diferente. Y eso es un nuevo paradigma, al menos para mí para entender. Y entonces, con eso dicho, otro ángulo interesante aquí es que decimos, oye, el prompt es cuál es un montón de números sumados, la salida es eso. Eso funciona bastante bien. Ejecutemos exactamente lo mismo otra vez. Y vemos que la salida es un poco diferente. Eso podría ser problemático cuando estás ejecutando una prueba que tal vez está buscando ciertas cosas. Ejecútalo de nuevo, otra cosa, y así sucesivamente. Entonces, vemos que la naturaleza no determinista de la IA que estamos usando va a hacer que sea realmente difícil probar algunas de estas cosas. Y entonces, tenemos que pensar en qué más podemos hacer allí? Y por supuesto, con cualquier modelo de IA, hay esta pregunta de que realmente no sabes lo que vas a obtener. Hay muchas formas de resolver eso. Pero en resumen, la forma en que pienso en testing algunas de estas cosas de IA es la prueba de contrato dinámica impulsada por el consumidor testing. Entonces, para lo que vale, busca eso si no estás seguro exactamente de qué se trata. Pero en esencia, podemos probar ciertos casos de prueba, pero otros
6. Pruebas de Modelos de IA
Al probar modelos de IA, es importante evitar esperar resultados consistentes. En cambio, necesitamos considerar si vale la pena tener una prueba que puede ser inestable debido a la naturaleza de los modelos de IA.
unos, tal vez no tanto. Entonces, en este caso, queremos probar que devuelve el formato correcto, luego ir y hacer algo. Y a la inversa, si es el formato incorrecto, ir a hacer algo más. Cosas que quieres evitar cuando estás probando estos tipos de modelos de IA es evitar decir que esto siempre va a devolver exactamente el mismo valor, porque no lo hará. Hay, por supuesto, formas de aumentar las posibilidades allí, pero en resumen, no vas a obtener eso de manera consistente yendo allí cada vez. Entonces, tienes que debatir un poco, ¿vale la pena tener una prueba que va a ser muy inestable debido al modelo de IA y demás? Entonces, con eso dicho, pensamos en esta idea de, oye, ¿qué tal si pudiéramos darle a la IA un mejor conjunto de funciones definidas específicamente para el problema de JSON? Y resulta que esa misma semana de la que estábamos hablando, salieron con esto
7. Uso de Funciones y Exploración de Alternativas a JSON
La opción de usar funciones en la aplicación para llamar a la IA y la utilización de la función de chat fueron significativas. Añadimos funciones y vimos buenos resultados con JSON válido. Sin embargo, JSON no siempre es consistente, por lo que exploramos alternativas como markdown y el análisis simple. Actualmente, el análisis simple es nuestra opción preferida.
función llamando a la API. Entonces, muchas de las características de las que estoy hablando hoy, podrías simplemente buscar en la documentación de la API de OpenAI. Hay muchos detalles interesantes allí. Pero esencialmente, lo que esta opción nos dio es la idea de, oye, tenemos una aplicación, mostremos a la IA, aquí hay una lista de funciones que podríamos llamar, y la IA decidirá cuándo llamar a esas. Y eso es una idea interesante. Y la característica que añadimos allí que utilizó eso fue esta idea de un chat. Así que, vamos y venimos, similar a chatGBT, pero en algún momento, tenemos un botón como crear un nuevo documento, por ejemplo, o cualquier función que pueda haber en tu aplicación. Fuimos capaces de utilizar la IA para usar eso a través de esa característica. Y eso fue algo bastante impresionante. Y la idea allí es, bueno, si llamó a una función, la función tenía un argumento que era de tipo de JSON, probablemente devolverá JSON, era la gran esperanza, ¿verdad? Y así, lo hicimos. Fue bastante bueno. Así que, repasamos el código. Esencialmente añadimos las funciones aquí abajo. Decimos que es de tipo JSON y así sucesivamente. Y por supuesto, obtenemos algunos buenos resultados. Y en general, funciona bastante bien. Así que, vemos que hay un JSON válido allí. Y celebramos. Y es todo diversión ¿verdad? Y así, pensamos en esto, pensamos en la consistencia, en lo que respecta a los contratos de la API a través de ese ejemplo anterior, versus lo muy inconsistente, lo que sea que esté en tu indicación, ese tipo de cosas. Las llamadas de funciones caen en algún lugar intermedio allí, en mi mente, donde en su mayor parte, es bastante consistente. Pero tienes algunas cosas raras dependiendo de lo que pongas allí. Así que, en resumen, la llamada de funciones aumentó nuestro número al 85%. Estábamos muy contentos. Y por supuesto, 85 todavía no es muy bueno. Así que, surgió la pregunta, ¿necesitamos incluso JSON? JSON es agradable de usar cuando estás analizando cosas. Pero ¿y si tal vez hay algunas alternativas? Y por supuesto, probamos markdown. Markdown es bastante bueno. Dependiendo de tu uso caso, eso puede o no ser un beneficio allí. Pero realmente, volviendo al análisis simple, el análisis de saltos de línea, ese tipo de cosas, pareció funcionar muy bien porque hay menos posibilidades de que la IA realmente estropee las cosas. Así que, por lo que vale, esa es nuestra opción preferida actualmente. Y por supuesto, dar ejemplos de salidas, eso siempre es un gran beneficio allí.
8. Manejo de la API de IA y gestión de respuestas
Aumentamos nuestro número al 90%, pero aún no llegamos al 100%. La API de IA puede devolver un estado 200 pero fallar por varias razones, incluyendo un formato incorrecto, respuestas excesivamente largas, respuestas cortadas o incluso cadenas vacías. Al usar modelos de IA en aplicaciones, considera implementar estrategias de reintento y utilizar el argumento 'end' para especificar múltiples versiones de la respuesta. Sin embargo, esto puede resultar en un mayor uso de tokens. Para manejar respuestas largas, ajusta las indicaciones de la API para ser más específicas y proporciona ejemplos. A veces, solicitar un número específico de respuestas puede dar resultados inesperados.
Entonces, con eso dicho, aumentamos nuestro número al 90%. Celebramos, pero aún no llegamos al 100%. Así que, quiero hablar brevemente sobre algunas de estas otras cosas que hemos aprendido al tratar con la API de IA. Entonces, lo primero es que muchas veces la IA devolverá un estado 200 pero fallará por una serie de razones, incluyendo un formato incorrecto. Tal vez devuelva una respuesta que es 20 veces más larga de lo que esperabas. Y por supuesto, también está el hecho de que devuelve una respuesta. Simplemente se corta a mitad de frase y se rinde. Y es como, bueno, ¿qué demonios? ¿Qué está pasando ahí? Y por supuesto, uno de mis favoritos, a veces simplemente devuelve una cadena vacía y simplemente dices, oh, eso no fue muy útil. Así que, bueno. Eso está bien. Entonces, formas de reintentar. Así que, cuando estás usando algunos de estos modelos en tus aplicaciones, piensa en las estrategias de reintento. En este caso, el reintento exponencial es típicamente lo que yo recomendaría. Hay un puñado de bibliotecas allí para que las uses si quieres. Otra cosa en la API de OpenAI es este argumento 'end'. Así que, esto básicamente nos permite decir hey, si la primera versión que devuelve es mala, podrías especificar, quiero que devuelva 20 versiones de esto, y con la misma cantidad de latencia, devolverá 20 versiones diferentes. Así que, si la primera es mala, pasa a la siguiente. Si esa es mala, pasa a la siguiente y tienes, en este caso, 20 oportunidades diferentes de que sea buena, lo cual idealmente no tendrías que hacer. Pero jugamos con eso y en algunos casos funcionó bastante bien. Así que, estamos bien con eso. Y por supuesto, la desventaja es que usamos más tokens. Entonces, cubriendo las respuestas realmente largas aquí. Así que, hay algunos argumentos adicionales de la API en eso. Así que, si quieres buscar los tokens máximos, busca el stop. Pero en última instancia, encontramos que para detener el tren desbocado, queremos ajustar nuestras indicaciones de la API para ser mucho más específicas, dar ejemplos de eso. Así que, también, mi favorito aquí es a veces decimos, hey, devuelve cinco respuestas. Creo que mi récord fue decir, hey, devolví cinco respuestas y obtuvimos 42 respuestas de vuelta.
9. Contando Tokens y Manejando Límites de Tasa
Los modelos de ChatGPT a veces devuelven más de lo esperado. Los tokens se utilizan para contar créditos y tienen limitaciones. Contar tokens nos ayuda a evitar alcanzar los límites. Otras estrategias incluyen enviar menos contexto, utilizar diferentes versiones del modelo, dividir en fragmentos y encadenar solicitudes. Para evitar demasiadas solicitudes, verifica las cabeceras para los límites de tasa. Con estas estrategias, logramos un 99% de éxito, aceptando que los errores son normales y los modelos mejorarán con el tiempo.
Y estás como, no sé si sabes contar. ¿Qué está pasando? Así que, para nosotros, los modelos de chatqbt a veces devuelven un poco más de lo que esperas. Así que, otra cosa con la que nos encontramos aquí es cuando la solicitud era demasiado grande, quiero hablar muy brevemente sobre los tokens. ¿Alguien ha jugado con tokens aquí? ¿Tokens de IA? Así que, un puñado de personas. Así que, la forma en que esencialmente cuentan los créditos que estás utilizando allí es a través de tokens. Así que, en resumen, estos tokens son parte de, están integrados en el modelo. Bajan a las incrustaciones, las llaman, que es efectivamente una representación numérica de cada uno de estos tokens. Y por supuesto, aproximadamente cuatro caracteres en inglés son alrededor de un token. Hay un montón de detalles en eso. No entraré en eso demasiado. Pero solo sepan que empezamos a contar tokens porque hay limitaciones cuando usas algunos de estos modelos. Lo llaman la ventana de contexto allí. Y así, pudimos contar nuestros tokens antes de que realmente alcanzáramos los límites, ese tipo de cosas. Y eso pareció funcionar muy bien.
Otras cosas para probar, envía menos contexto, vuelve a las versiones de la ventana de contexto más grande de el modelo. Así que, hay como GPT-4, 16K, versus 32K, ese tipo de cosas. Podrías dividir las cosas. Y por supuesto, encadenar solicitudes, todas esas cosas ayudan a asegurar que estamos devolviendo las respuestas que queremos. Y luego solo quiero tocar brevemente este punto. Esto parece suceder con prácticamente cualquiera con quien hable que haya utilizado la API de OpenAI. Es como, hey, hay demasiadas solicitudes. Lo clave allí es que si te encuentras con eso, revisa las cabeceras. Y estas cabeceras aquí te dirán esencialmente si estás alcanzando un límite de tasa o no. Así que, muy útil allí. Me llevó un poco de tiempo averiguar eso. Y así que, en resumen, con todo esto, pudimos llevar nuestro porcentaje de éxito hasta el 99%. Y decimos que el 99 es genial. Hay muchas cosas adicionales que probablemente podríamos probar, pero las aplicaciones arrojan errores todo el tiempo. Eso está perfectamente bien, y tenemos cierto grado de errores en eso. Y así que, estamos bien con eso,
Descubriendo Limitaciones y Enfoque Reactivo
Y finalmente, vamos a llegar al 100%. Estamos contentos con los resultados porque se pueden hacer muchas cosas geniales con la IA. Todd, ¿cómo lograste eludir los CAPTCHA? Existen servicios a los que puedes pagar para que las personas eludan manualmente los CAPTCHA. Esta pregunta pregunta, ¿cómo descubriste las limitaciones como el CAPTCHA? Golpeamos la API a través de la aplicación, y luego, cuando ocurre un error, vamos a verificar el servidor. ¿Hubo un punto en el que simplemente dijiste, sabes qué? Hay demasiados compromisos reactivos aquí. Vamos a dejarlo por ahora. Sirvió para ayudarnos a entender lo que podríamos hacer con él.
sabiendo, por supuesto, que con el tiempo, los modelos van a mejorar. Y finalmente, vamos a llegar al 100%. Estamos en el punto en el que es como, ¿queremos pasar tiempo adicional tratando de descifrar esto, o estamos bien donde estamos? Y así, eso es esencialmente donde lo dejamos y donde estamos actualmente. Y así, estamos contentos con los resultados porque se pueden hacer muchas cosas geniales con la IA. Y así, con eso dicho, gracias a todos por escuchar. Y si tienen preguntas, háganmelo saber.
Todd, ¿cómo lograste eludir los CAPTCHA? Sí. Entonces, hay... Sabías que venía, ¿verdad? Entonces, hipotéticamente, hay servicios a los que puedes pagar para que las personas eludan los CAPTCHA, que, hipotéticamente, estoy bastante seguro de que es solo una empresa, alguna compañía en algún lugar que tiene personas en computadoras que simplemente están presionando los botones de CAPTCHA, hipotéticamente. Entonces, no respaldaría tal cosa, pero... Nunca. Pero eso es algo que probablemente existe. Entonces, buena pregunta. Sí, pero potencialmente, tal vez en algún mundo, es posible.
Sí, es como teóricamente posible. Entonces, esta pregunta es bastante interesante. Al principio de tu charla, hablaste sobre ese primer experimento de construir una API de chat GPT. Y esta pregunta pregunta, ¿cómo descubriste esas limitaciones como el CAPTCHA, como diste algunos otros ejemplos? Sí. ¿O simplemente tenías que ser completamente reactivo cuando se rompía? Básicamente... Golpeamos la API a través de la aplicación, y luego, cuando ocurre un error, vamos a verificar el servidor. Y vemos, oh, es porque esto no está funcionando. Y así, fue muy reactivo como, no sabíamos que esto sería un problema. Pero tiene sentido que sería un problema, y ahora tenemos que ir a descifrarlo de alguna manera, ¿verdad?
¿Hubo un punto, y creo que lo describiste en tu charla, que lo hubo. ¿Hubo un punto en el que simplemente dijiste, sabes qué? Hay demasiados compromisos reactivos aquí. Vamos a dejarlo por ahora. Sí. Sirvió para ayudarnos a entender lo que podríamos hacer con él. Pero sí, definitivamente no es algo que pondríamos frente a los usuarios, porque simplemente no era bueno. Entonces... Hizo lo que tenía que hacer.
Fiabilidad y Desafíos de las APIs de IA
La API ahora admite respuestas en formato JSON, pero el formato puede no coincidir con el esquema deseado. La naturaleza no determinista de las APIs de IA puede llevar a compromisos en el código y las pruebas. En algunos casos, puede ser necesario cambiar fundamentalmente la estructura de datos esperada. Las instrucciones personalizadas pueden ser útiles para controlar la salida de la IA. En general, aunque hay desafíos, la IA es impresionante y ofrece soluciones únicas.
Sí. Fue más un ejercicio de aprendizaje, ¿verdad? En tu charla, mencionaste que la... creo que es la API de open AI, no la API de ChatGPT, pero la API ahora admite respuestas en formato JSON. ¿Qué tan confiable es el formato de la respuesta que se devuelve?
Sí. Así que hicieron ese soporte para el formato como JSON, esencialmente. La única cosa a tener en cuenta es que devolverá un JSON válido, lo que significa que si lo analizas con JSON, lo analizará con éxito. Sin embargo, no necesariamente coincidirá con el esquema que quieras de cualquiera que sea la forma del JSON. Y entonces todavía tienes que ir y hacer algo de ingeniería de indicaciones e incluir, ya sabes, uno o dos ejemplos de cómo se ve un JSON válido en el formato que quiero. Pero sí, definitivamente ayuda con al menos el problema base de que no puedes analizar esto en absoluto.
Interesante. Y luego supongo que puedes probar contra la estructura de eso. Sí. Sí. Aquí hay una pregunta realmente interesante, que también me pregunto, ¿el estado actual de estas APIs de IA realmente nos hace comprometer la forma en que escribiríamos el código para manejar el hecho de que son tan no deterministas? ¿Y es eso un problema? Sí, siento que eso es un problema, pero también hay una especie de esperanza para el futuro de que, eventualmente los modelos mejorarán. Eventualmente tendremos menos compromisos, pero definitivamente el año pasado mientras trabajaba en esto, se siente como si hubiera un montón de cosas extra que si estuvieras simplemente diciendo como una API normal, nunca tendrías que hacer todas estas cosas extrañas. Pero porque es no determinista, porque el modelo es muy creativo y dado que hay formas de ajustar eso y hacerlo menos creativo. En algunos casos no puedes hacer eso porque de lo que quieres obtener del modelo. Básicamente tienes que comprometerte y añadir un esfuerzo adicional en el código o en la prueba para verificar si está funcionando o no.
Aunque diste un ejemplo, que personalmente me pareció salvaje, donde estás como, ¿necesita ser incluso JSON? Y eso es simplemente, para mí, alucinante. Sería como, vamos a cambiar fundamentalmente la estructura de los data, los data que estamos esperando de vuelta porque no se puede confiar en que sea JSON. Y para algunas personas, simplemente dirían, bueno, entonces es un no starter ahora mismo.
Sí. Y cuando te desesperas lo suficiente, empiezas a hacer esas preguntas de, ¿cuáles son otras formas en las que podríamos resolver esto? Porque una vez más, la IA es bastante impresionante, pero esencialmente domesticarla o controlarla a veces es un poco más difícil, ¿verdad? ¿Has encontrado cosas como instrucciones personalizadas que ayudan o todavía no realmente?
Sí, definitivamente. En la indicación que pasamos, es muy personalizada específicamente para lo que queremos obtener. Así que probablemente tenemos como 80 indicaciones diferentes en nuestro código que son únicas para lo que estamos tratando de hacer allí. Y es como, sí, un caso de uso muy específico y parece funcionar bastante bien. Así que. Interesante. Genial. Esta, creo que es una pregunta meta aquí. ¿Usaste la IA para escribir el código para llamar a la IA? ¿Fue útil para ayudarte a empezar? Siento que eso es como dos preguntas separadas, pero una pregunta meta.
Uso de GPT y AI Copilot
He utilizado GPT para Playground 3.52 y AI Copilot en mi VS Code. Aunque AI Copilot es útil para tareas básicas y repetitivas, se queda corto en situaciones más complejas. Incluso para tareas repetitivas, es necesaria la validación. He experimentado problemas al traducir un horario de conferencia a múltiples zonas horarias, resultando en horarios incorrectos para los oradores. A pesar de validar una parte del horario, resultó ser un desastre.
Así que he usado mucho GPT para, supongo, Playground 3.52 para escribir algo de código, basado en la conversación anterior con la sesión anterior, hay algunas cosas que querrías mejorar allí. Actualmente uso AI Copilot en mi VS Code. Parece ser muy útil, probablemente el 50% del tiempo puedes confiar en él, pero las otras veces no es muy bueno. Así que mi actual mejor pensamiento allí es que en general ayuda con muchas cosas pequeñas. Y mientras esté haciendo cosas muy básicas y repetitivas como, hey, declara esto cinco veces diferentes basado en esta otra variable, cosas así, hace un muy buen trabajo, pero otras cosas cuando es un poco más involucrado, no mucho. Y ahí es donde debatirías basado en la conversación anterior de, ¿vale la pena, realmente me está ahorrando tiempo? Sí o no. Es una bolsa mixta, pero espero que en el futuro sea mejor. Así que empecemos a usarlo. Empecemos a dar retroalimentación y esperemos que las cosas mejoren. Incluso para esas tareas repetitivas, todavía es necesaria la validation. Ven y pregúntame durante el almuerzo sobre la traducción de un horario de conferencia a tres zonas horarias. Y a medida que avanzaba el día, los horarios se volvían incorrectos. E invité a los oradores en las horas equivocadas del día. A veces ni siquiera las horas equivocadas, los minutos equivocados. Simplemente, lo inventaba a medida que pasaba el tiempo. Y yo validé el primer 20% y dije, parece bien. No fue suficiente, un desastre absoluto. Así que puedo contarte esa historia y más para ayudar durante el almuerzo. Esta es una pregunta realmente interesante. Así que el testing de contratos te obliga a validar el contrato contra una API, pero con la naturaleza no determinista de los grandes modelos de lenguaje, ¿cómo puedes hacer eso? Sí. Y eso es como, fue como un golpe mental. Todavía no comprendo del todo la mejor manera de hacer eso, pero tienes por un lado, tienes cierto grado de contrato que se mantiene igual, pero en el lado dinámico es como, no lo sé. Eso parece una de esas áreas en las que vamos a ser mejores a medida que pase el tiempo. Mucha gente está intentando resolver eso. Pienso en los científicos de data y los ingenieros de machine learning con los que he hablado en los últimos años, y en algún momento eso se va a fusionar con el más clásico software de testing, el ámbito de la ingeniería de software. Ya lo está haciendo. Y creo que una vez que descubran, hay muchas formas de probar la corrección de los modelos que estás construyendo. Pero en este caso, cuando básicamente estamos confiando en un modelo de terceros, no puedes entrar en algunos de esos detalles, pero diría que si puedes, ahí es realmente donde está el núcleo del valor añadido en las pruebas y verificaciones en el modelo en sí. Así que si puedes controlar el modelo, eso es genial. Pero si no puedes, que en nuestro caso, si estamos usando open AI, no puedes realmente controlarlo. Así que te quedas con esta extraña sensación de, no sé exactamente la mejor manera, pero creo que con el tiempo, vamos a descubrir eso un poco más porque al final se reduce a si el modelo tiene problemas, ese equipo que mantiene el modelo debería ser el que solucione los problemas. Pero en algunos casos, debido a lo que estamos usando, no es tan sencillo como eso. Al menos es más sencillo que la API de ChatGPT al principio. Por favor, únanse a mí en darle a Todd un gran aplauso por una charla verdaderamente interesante. Gracias.
Comments