IA a pedido: IA sin servidor

Rate this content
Bookmark

En este masterclass, discutiremos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque de IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que le permitirá almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.

163 min
14 Feb, 2024

Comments

Sign in or register to post your comment.
  • Volodymyr Huzar
    Volodymyr Huzar
    Maersk
    It was nice workshop but it's sad that it cannot be reproducible without a special Cloudflare account which was available only during an online session

Video Summary and Transcription

El masterclass explora la intersección de la arquitectura sin servidor y la IA, discutiendo los conceptos básicos, beneficios, escalabilidad y desafíos de la arquitectura sin servidor. También profundiza en los componentes de la arquitectura de IA, las bases de datos vectoriales y el uso del contexto en las consultas. El masterclass demuestra el proceso de construcción utilizando HonoJS y Linkchain, configurando Cloudflare Workers y Wrangler, y cargando datos en una base de datos vectorial. También cubre la creación de un chatbot con Cloudflare Workers AI y el uso de tokens de API y variables de entorno. El masterclass concluye con información sobre precios y recomendaciones para preguntas adicionales.

Available in English

1. Introducción a Serverless y AI

Short description:

¡Bienvenidos al masterclass! Soy Nathan Visidor de CloudFlare y hoy exploraremos la intersección de serverless y AI. Cubriremos los conceptos básicos de serverless y AI, discutiremos cómo pueden trabajar juntos y tendremos un ejercicio práctico. El masterclass está programado para durar tres horas y haremos pausas. Para participar, necesitarás una gorra de pensamiento, un editor para programar en JavaScript, Node instalado y una cuenta gratuita en CloudFlare. Completa el formulario que proporciono para acceder a la cuenta compartida. ¡Empecemos!

Bienvenidos, bienvenidos a todos. Y gracias por unirse a nosotros. Y en caso de que nadie te lo haya dicho aún, feliz Día de San Valentín, si eso es lo tuyo, y celébralo dondequiera que estés. Estamos felices de tenerte hoy, y vamos a divertirnos un poco con el tema del Día de San Valentín aquí. Podemos ver desde el principio que nuestro pequeño amigo robot nos está dando un poco de amor de entrada. Así que sí, nuevamente, gracias por unirte. Si estás buscando el masterclass o curso sobre AI bajo demanda, entonces estás en el lugar correcto. Y comencemos esta fiesta. Una breve introducción sobre quién soy y qué hago y por qué deberías prestar atención a lo que digo en primer lugar. Mi nombre es Nathan Visidor. Soy uno de los ingenieros aquí en CloudFlare, que trabaja en nuestro espacio de AI, en realidad. Estoy trabajando en la base de datos vectorial que tenemos. Y si no sabes qué es eso, hablaremos un poco más sobre eso en unos minutos aquí. Pero sí, llevo un poco más de cuatro años en CloudFlare. He tenido una variedad de roles en la empresa, trabajando, más recientemente, en AI, pero antes de eso, en nuestras ofertas de serverless, y antes de eso, en un rol más tradicional en el backend, donde lidiábamos con cosas como clústeres Kafka, que procesan, sabes, un par de terabytes, un par de billones de mensajes todos los días, servicios de notificación de alertas, ese tipo de herramientas internas. Estamos felices de tenerte. Y sí, hablemos un poco sobre qué esperar aquí para comenzar a establecer el escenario o darte el plan de estudios básico, por así decirlo. Entonces, esto es, básicamente lo que vamos a hacer para comenzar es revisar algunas diapositivas. Definitivamente quiero que esto sea interactivo. Y nuevamente, lo veremos en un minuto aquí. No quiero estar hablando solo. Haremos de esto más un diálogo. Pero sí, repasaremos algunos conceptos básicos para establecer el escenario de lo que vamos a hacer, ya sabes, en la parte más práctica de todo esto. Y una vez que hayamos hecho eso, nos adentraremos en la parte práctica en vivo de esto. Y todos ustedes podrán construir algo por su cuenta para probar esto en el mundo real. Esto es cómo se ve más o menos nuestra agenda. Los puntos principales que vamos a cubrir son, primero, vamos a hablar sobre qué es serverless. Probablemente haya varios de ustedes que ya estén familiarizados con los conceptos allí. Pero solo una breve introducción para las personas que no están tan familiarizadas o que nunca lo han usado antes. Hablaremos sobre AI, que imagino que más personas no están familiarizadas. Pero sí, saltaremos eso y haremos un poco de encuesta aquí en un segundo para ver cómo se ve eso. Y luego veremos cómo se ve unir esos conceptos en cómo serverless y AI pueden trabajar juntos. Y no es algo fácil de lograr. Pero creo que al final de esto discutiremos qué... Oh, hola, Christina espectadores de todo el mundo aquí. Sí, hablaremos sobre cómo somos capaces de combinar estos dos conceptos en algo que funcione juntos. Y luego nos pondremos manos a la obra y realmente nos pondremos prácticos. Entonces, espero que hoy, el resultado sea, nuevamente, uno, si no has aprendido sobre los bloques de construcción de una aplicación de arquitectura de AI, te llevarás eso. Pero lo más importante, para el meollo de esta charla es cómo vamos a poder realmente aplicar algunos de los conceptos de serverless a la arquitectura tradicional de AI, y la búsqueda semántica y serverless específicamente. Entonces, nuevamente, si no estás familiarizado con la búsqueda semántica, lo cubriremos en la sección de AI de nuestros conceptos básicos aquí. Pero esto es lo que espero que saques de lo que vamos a hablar aquí, en las próximas tres horas. Y sí, tal vez sea bueno mencionarlo. Entonces, es un buen punto de transición, este masterclass está programado para durar tres horas. Es mucho tiempo, vamos a estar aquí bastante tiempo. Así que, definitivamente, por tu bien y por el mío, definitivamente seré consciente del tiempo. Y, ya sabes, tenemos un par de descansos incorporados para asegurarnos de que podamos estirarnos, usar las instalaciones y tal vez tomar algo para comer. Porque, definitivamente, queremos mantenernos hidratados, saludables y alimentados y todas esas cosas también. Aquí hay algunas cosas que vamos a necesitar para que este masterclass sea un éxito. Definitivamente queremos que tengas tu gorra de pensamiento puesta para que puedas estar en una actitud de aprendizaje y en un espíritu de aprendizaje para entender lo que estamos enseñando. Y para la parte en vivo, definitivamente vamos a necesitar algún editor que podamos usar para hacer la programación en vivo. Vamos a estar programando en JavaScript. Si no lo entiendes completamente, estos conceptos no son exclusivos de JavaScript en absoluto. Es solo que hace las cosas un poco más fáciles. Y sí, también vamos a necesitar una cuenta de CloudFlare lo siento, vamos a necesitar Node instalado porque vamos a estar programando en JavaScript y una cuenta de CloudFlare. Veo una pregunta, ¿qué tipo de cuenta necesitamos? Es una gran pregunta. Todo lo que necesitas es una cuenta gratuita. Y hay un formulario que voy a darte en un segundo también. Eso me dará la información que necesito para agregarte a una necesitamos algunos privilegios especiales para que esto funcione. Entonces, si vas aquí y creas una cuenta y completas este formulario de Google con la dirección de correo electrónico que usaste para crear la cuenta, entonces puedo agregarte a una cuenta compartida que todos vamos a usar para este ejercicio y tendrás los privilegios que necesitas para que esto funcione. Permíteme copiar y pegar eso también en el chat porque probablemente sea más fácil para todos seguirlo. Pero el código QR está ahí si puedes escanearlo también. Puedes trabajar en eso en segundo plano. No tiene que suceder ahora mismo. Tenemos un poco de tiempo para cubrir bastante antes de llegar allí. Pero si puedes tener todas estas cosas listas para cuando lleguemos a la parte interactiva, realmente ayudará a acelerar las cosas aquí. Y me di cuenta de que lo envié como un mensaje directo.

2. Comprendiendo Serverless y sus Beneficios

Short description:

Comencemos con una encuesta para entender el trasfondo de todos. Parece que la mayoría de las personas se sienten cómodas con JavaScript, lo cual es genial para lo que estamos haciendo. No muchos están utilizando actualmente Serverless, pero eso es esperado. Las personas tienen una actitud positiva hacia la IA. Ahora, adentrémonos en Serverless. Es un término controvertido, pero desde la perspectiva del cliente, se refiere a implementaciones sin infraestructura que son altamente distribuidas. A menudo se basa en microservicios y funciones como servicio. Los beneficios incluyen facilidad de implementación y escalabilidad. AWS Lambda es una plataforma Serverless popular.

Permítanme intentarlo de nuevo. Ahí vamos. Excelente. Genial. Así que comencemos aquí. Y nuevamente, quiero animarlos. Este es, nuevamente, un masterclass de tres horas de duración. Así que están 100% invitados a hacer preguntas. No estoy tan familiarizado con Zoom, pero supongo que es como levantar la mano o algo así. Quiero que esto sea interactivo. Estamos teniendo un diálogo aquí. Y tal vez sea un buen momento para comenzar con una rápida encuesta. Me gustaría saber un poco sobre los antecedentes de todos ustedes. Estoy lanzando una encuesta. No estoy seguro exactamente cómo aparecerá en su pantalla, pero deberían poder ver algunas preguntas que dan una idea general de cuál es su brecha de conocimiento actual. Veamos. Veamos qué dice la gente. Vaya, tenemos suerte. Muchas personas se sienten cómodas con JavaScript aquí. Eso es excelente para lo que estamos tratando de hacer. Nada de esto es exclusivo de JavaScript. Es simplemente la pila con la que vamos a trabajar hoy. Lo bueno es que incluso algunas de las APIs que estamos utilizando son bastante independientes del lenguaje, especialmente en el espacio de la IA. Python parece ser uno de los estándares de facto, al menos para prototipos y cosas por el estilo. Definitivamente hay opciones allí. Pero parece que todos se sienten bastante cómodos con JavaScript. Me encanta ver eso. Sí, esto va a ser interesante, creo, porque me doy cuenta de que esta es la conferencia de DevOps y Serverless está tratando de abstraer muchas de esas tareas de operaciones, pero no de una manera negativa en absoluto. Parece que la mayoría de las personas no están utilizando actualmente Serverless. Y eso es honestamente lo que esperaba, especialmente en esta conferencia. No tengo una opinión a favor o en contra, pero creo, creo, que es la herramienta adecuada para el trabajo adecuado. Una de esas situaciones. Las personas tienen una actitud bastante positiva hacia la IA. No los culparía en absoluto si no la tuvieran. Definitivamente hay conversaciones que se pueden tener en ambos lados. Pero hay, nuevamente, un momento y un lugar, y vale la pena. Esta es una conferencia de IA, o taller de IA. Así que supuse que las personas tendrían una actitud un poco más positiva hacia ella. Pero pero no voy a abogar en un sentido u otro, ustedes pueden decidir eso por ustedes mismos. Y creo que está bien para mí. Lo dejaremos así. Esto es un Sí, esto es bueno, ahora sabemos cuál es la similitud común y cuáles son los antecedentes de las personas. Esto establecerá un poco el escenario de a dónde vamos a llegar aquí. Adentrémonos en Serverless. Sí, eso sería increíble. ¿Qué es Serverless? Y resulta que esto es bastante controvertido. Es difícil llegar a una definición aquí. Le pregunté a algunos compañeros de trabajo, les mostré estas diapositivas y ellos tenían sus propias opiniones. Y supongo que también depende un poco de si estás viendo desde el punto de vista de la plataforma o del cliente. Pero al menos en mi opinión, esta definición parece encajar, donde básicamente es, ya sabes, implementaciones sin infraestructura de cualquier aplicación que estés tratando de lanzar casi siempre de manera altamente distribuida. Puse `sin infraestructura` entre asteriscos y le di el viejo... Dar el viejo Oh, claro, lo que sea que digas aquí con un gif de Jennifer Lawrence, porque, ya sabes, sin infraestructura, eso es...es una mentira. Al final del día, siempre es la computadora de otra persona en la que estás ejecutando. Pero es sin infraestructura desde el punto de vista del cliente. Casi siempre es algún micro o micro runtime que se ejecuta en una plataforma como servicio. Que también se ejecuta en la red que esa plataforma posee. Destaco el `micro` aquí, especialmente porque es divertido decir runtime, suena como algo de moda. Pero muchas veces estás ejecutando microservicios en estas implementaciones serverless. Así que realmente estás haciendo función como servicio, que es lo que más a menudo se utiliza cuando te diriges a una implementación de estilo serverless. ¿Por qué querrías hacer algo así? Esa es una buena pregunta. Especialmente la parte de abstraer. Bueno, creo que uno de los beneficios definitivos es la facilidad de implementación. Podemos mostrar un diagrama de cómo se ve tradicionalmente, especialmente una implementación de IA. Es un poco complicado. En general, serverless elimina una gran parte de la carga cognitiva, simplemente al hacer que la implementación sea generalmente una operación de una sola línea o una operación de un solo comando en la terminal para implementar y poner en marcha las cosas. La escalabilidad está integrada en la definición de serverless, especialmente en la parte de la red distribuida. Realmente te aseguras de...lo siento, estoy arruinando los nombres aquí. Patrón de nueva función como servicio de Lambda de AWS, eso es exactamente. Sí, AWS Lambda es una plataforma Serverless muy popular para ejecutar

3. Escalabilidad, Latencia y Desafíos de Serverless

Short description:

Serverless es escalable, sin estado y basado en el uso, lo que lo hace más económico para un uso poco frecuente. También proporciona baja latencia y puede ser complejo de configurar, con algunos desafíos y problemas.

mirando allí. Pero sí, nuevamente, muy escalable, incorporado en la naturaleza de las redes en las que estás ejecutando. Y el hecho de que esto sea tanto en contra también es un problema. Pero las cosas son están diseñadas para ser sin estado, al menos de forma predeterminada. A menudo es más económico, lo cual va de la mano con el hecho de que se basa en el uso. El uso basado es realmente uno de los principales puntos de venta de todo esto. Entonces, en lugar de tener algo ejecutándose las 24 horas del día, los 7 días de la semana, si solo lo estás utilizando de forma poco frecuente, no tienes que pagar por ello. Básicamente, obtienes serverless nuevamente, ya que cada ejecución individual es su propia unidad, puedes construir sobre el número total de ejecuciones, lo que puede resultar más económico, especialmente para proyectos más pequeños o de pasatiempo, donde las personas tienen cargas de trabajo atípicas. Esa es una gran parte del rompecabezas. Lo otro, lo otro interesante, ya sabes, el bono adicional aquí es que las cosas tienen baja latencia, porque generalmente se ejecutan en una red de borde o al menos de manera distribuida, se ejecutan más cerca del usuario final, lo que significa que la latencia entre las conexiones es mucho más rápida que tener que hacer un viaje de ida y vuelta a, digamos, un centro de datos completo en otro lugar al que estás intentando acceder. Pero sí, definitivamente cumple con su función. Sí, veo que hay comentarios sobre que AWS Lambda no es muy fácil. Sí, los ecosistemas que los rodean pueden ser complicados. Supongo que la invocación en sí misma es, por lo general, bastante simple, pero hombre, he trabajado bastante con AWS yo mismo y tratar de configurar las cosas puede ser bastante engorroso. No estás equivocado.

4. Casos de Uso de Serverless y Arquitectura de IA

Short description:

Los casos de uso de serverless incluyen escalabilidad, manejo de tráfico impredecible y evitar la gestión de servidores. Los inicios en frío y la necesidad de un modelo mental diferente son desafíos. La memoria compartida y las limitaciones de recursos son consideraciones. El gasto y la dificultad de autohospedaje son factores. Ahora pasemos a la IA y exploremos su arquitectura y componentes.

Genial. ¿Alguien más quiere compartir sus experiencias o, o, o, ya sabes, dar pros o contras, eso también es bienvenido, definitivamente estamos activos aquí. Tengo que ver dónde están mis problemas. Oh, ahí está. Ahí está mi diapositiva de problemas. De acuerdo, después de estos casos. Así que los casos de uso para serverless o, ya sabes, aplicaciones sin estado. Esto es, ya sabes, nuevamente, no tiene que ser sin estado. Pero es el caso base predeterminado de la mayoría de los entornos de ejecución de serverless. Entonces, si no te importa cómo se ven las cosas, o si realmente quieres un lienzo en blanco entre ejecuciones, definitivamente no es una mala idea considerar una arquitectura de implementación serverless. Aplicaciones que requieren escalabilidad. Nuevamente, esto viene incluido. Debido a lo anterior. Y al hecho de que generalmente se ejecutan en algún tipo de entorno aislado. Para Lambda, generalmente son como contenedores de Docker. Para CloudFlare, son como aislamientos de nodos, pero algún tipo de runtime aislado. Y esas ejecuciones individuales realmente ayudan con la escalabilidad. El tráfico impredecible también puede ser beneficioso. Ya sabes, si eres, nuevamente, personal de DevOps, estoy seguro de que estás familiarizado con esto, pero tener que configurar HBAs, o algún tipo de balanceadores de carga y escaladores automáticos y cosas así para para el tráfico que, ya sabes, sigue alguna especie de curva sinusoidal, puede ser molesto, por decirlo de alguna manera. Entonces, con serverless, no tienes que preocuparte por eso. Nuevamente, se basa en el uso, pero también es infinitamente escalable, hasta los límites del proveedor, pero no tienes que preocuparte por todas esas cosas con serverless. Y luego, hay personas que simplemente odian tener que gestionar servidores. Ya sabes, aquí estamos hablando específicamente de IA y ML. Muchos de los expertos en ML con los que he interactuado en el pasado, tienden a estar más enfocados en la investigación y no tienen tanto conocimiento en la arquitectura de servidores y cosas así. Con la configuración serverless, nuevamente, no tienes que preocuparte por lo que acabamos de mencionar, configurar HBAs y balanceadores de carga y cosas muy complicadas, ya sabes, disculpa por manejar lo que esencialmente es una función de indicación, todo eso ya está hecho por nosotros. Mencioné que estaba buscando esto, nuevamente, no es una lista de viñetas, definitivamente hay problemas con serverless. Y siempre vale la pena hablar de ellos cuando estamos viendo qué estamos tratando de hacer aquí. Los inicios en frío son un problema. Especialmente si tu entorno aislado en el que se ejecutan es algo tan pesado como un contenedor de Docker, eventualmente tienes que cargar tus cosas en la memoria y hacerlas activas. Entonces, especialmente en una red distribuida donde se ejecutan en diferentes nodos, los inicios en frío, ya sabes, si solo sucedieran una vez, estaría bien. Pero si estás ejecutando en una red distribuida, como 300 ubicaciones diferentes, eso son 300 inicios en frío diferentes, si estás ejecutando, obtienes cada uno de esos diferentes nodos por ahí. Entonces es algo en lo que tienes que empezar a pensar un poco más, cómo mantener las cosas livianas y lidiar con los inicios en frío. También requiere un modelo mental diferente. Por lo general, piensas en una aplicación y a veces suceden cosas sin más. Y cuando tienes que pensar sin estado, definitivamente requiere un poco de proceso de navegación diferente y atravesar algunas de esas decisiones arquitectónicas que suceden en otros lugares. Sí, el tiempo de espera en la puerta de enlace de AWS puede ser bastante corto. Definitivamente me ha pasado con lambdas. Y nuevamente, hablé de los inicios en frío, eso puede ser especialmente molesto. Así que es un buen punto ahí. Creo que ya hemos mencionado esto un par de veces, pero no hay memoria compartida, persistencia de estado. Hay un asterisco aquí también. Esto es nuevamente el caso base predeterminado, puedes agregar capas a las lambdas, o entornos de ejecución serverless para agregar estas funcionalidades externamente, pero entonces, ya no estás aislado solo en tu aplicación, tienes una dependencia de algún sistema externo o, lo más probable, un runtime específico del proveedor. Entonces, sí, podemos solucionar estas cosas, pero no siempre es lo más limpio del mundo. Las limitaciones de recursos también entran en juego un poco. Pero por lo general, no te permitirán ejecutar infinitamente un programa serverless. Si ejecutas tu runtime serverless, ya sabes, 24/7, básicamente has construido un servidor regular que se ejecuta en otro lugar. Entonces, la mayoría de las veces tienen limitaciones al respecto, para asegurarse de que no estés obstaculizando la red. Así que también es algo a considerar. Y sí, el gasto es algo en lo que también hay que pensar, porque, ya que se basa en el uso de recursos, sí, si se ejecuta durante mucho tiempo, puede ser muy costoso. El autohospedaje también es difícil. Es un poco más difícil hacer esto internamente, porque, ya sabes, generalmente quieres hacer esto de manera altamente distribuida, como hablamos antes. Y eso requiere, hay, hay, hay, creo que hay un par de soluciones disponibles para el autohospedaje de algunas soluciones rápidas, pero generalmente también requiere que tengas presencia en un montón de diferentes vcs o algo así, lo que significa que en realidad es más mantenimiento porque ahora tienes una ventaja de red distribuida de metales y nodos, tal vez no sea lo más divertido del mundo. Ya hicimos esto antes, dijimos que era como un 50-50. Pero me gusta ver eso. Genial. Oh, sí. Nuevamente, quiero que esto sea interactivo. Cualquier pensamiento final que tengan sobre serverless antes de pasar a la IA. Si no, podemos seguir adelante. Pero este es su evento. Así que sí, esperaremos aquí unos 30 segundos para ver si alguien tiene algún pensamiento final. Bien. Creo que estamos bien. Luego pasaremos a la IA. Más Jennifer Lawrence. Eso es divertido. No sé si todos ustedes han visto Hot Ones. Pero ella, ella es

5. Componentes de la Arquitectura de IA

Short description:

La arquitectura de IA comprende modelos, embeddings y bases de datos vectoriales. Los modelos reconocen patrones y hacen predicciones basadas en parámetros entrenados. Los embeddings capturan características y propiedades, permitiendo la búsqueda de similitud. Word2Vec es un modelo de embedding popular que mapea términos relacionados en un espacio vectorial. Se pueden identificar agrupaciones de temas relacionados dentro del espacio.

viendo cómo come las alitas y es un gran episodio. Pero de todos modos, sí, la IA en todos lados, todos están hablando de ello en estos días. Pero, ¿qué es en realidad, sabes qué comprende cuando hablamos de IA, como la arquitectura y cuáles son los componentes que se utilizan en algunas de estas cosas? Eso es lo que estamos a punto de explorar. Ya hemos visto esto también. Así que no necesitamos preocuparnos por esto, pero revisemos. Entonces sí, uno de los grandes componentes en la IA es el modelo en el que estás interesado en entrenar o, perdón, debería decir, ejecutar. Los modelos son muy, muy fundamentales ya que son la mayor parte de la lógica computacional. Y reconocen, como puedes ver aquí, reconocen patrones y hacen predicciones. Por lo general, un modelo es un conjunto de parámetros publicados que han sido entrenados con un conjunto de datos masivo. Es una lista precalculada de varios parámetros diferentes que se consideran importantes y característicos. Y luego usaremos eso más adelante para hacer nuestra búsqueda de similitud y cosas así. Entonces, nuevamente, reconocen patrones, lo usamos para, para luego analizar los datos entrenados históricamente y hacer predicciones. Los embeddings son otra pieza importante del rompecabezas aquí. Tengo una definición técnica muy detallada aquí arriba, que es un montón de palabras sin sentido. Pero mencionamos que los modelos, una de las cosas que los modelos intentan hacer es capturar características y parámetros para poder utilizarlos como métrica para buscar similitudes más adelante. Entonces, básicamente, un embedding es cada propiedad dentro del modelo que tiene un valor para cada una de las características que utilizamos como importantes en el modelo. Creo que la versión simplificada lo explica un poco mejor. También usamos la palabra dimensionalidad aquí. Tenemos, daremos un ejemplo de esto en un segundo. Así que debería tener más sentido. Pero básicamente es solo una matriz de números enormes. Y su longitud se basa en la dimensionalidad. La dimensionalidad se refiere a nuestras características y propiedades. Básicamente, es el número total de ellas. Y eso indica la relevancia de ese punto de datos en particular. Y lo necesitamos cuando hacemos consultas e insertamos datos para empezar a mapear cómo se ve el estado del mundo dentro de la mente del o del espacio de ML. Pero creo que este ejemplo visual ayuda un poco más. Así que digamos que estamos utilizando uno de los modelos de embedding populares o, sí, sí. Generadores de embeddings populares, uno de los originales se llama Word2Vec. Y básicamente traduce palabras a una representación vectorial de dichas palabras. Así que aquí tienes un ejemplo. Esto es básicamente un mapeo 2D de matrices de vectores o, sí, un mapeo 2D de matrices de vectores en un espacio que podemos ver un poco más. Y podemos ver que básicamente lo que el modelo ha hecho al generar estos es agrupar términos relacionados, así que va a hacer eso de forma automática. Pero los términos relacionados se agrupan juntos. Y empezamos a ver algunos grupos que se forman dentro de nuestro espacio de temas relacionados. A veces puede que no lo haga al 100% o puede ser un poco vago y caer en múltiples grupos donde vemos como verde aquí, lo que significa que el color indica dónde creemos que se encuentra algo. Pero sí, la idea es que empezamos a buscar agrupaciones aquí en estos puntos y podemos usarlos como, cuando entramos en el mundo de la cuantización, se llaman centroides. Pero buscamos básicamente conceptos similares para poder luego mapear también las entradas futuras a ese mismo espacio.

6. Bases de Datos Vectoriales

Short description:

Una base de datos vectorial almacena embeddings y permite la búsqueda de similitud. Está altamente optimizada para este caso de uso. Los complementos como pgVector permiten el uso de bases de datos tradicionales para el almacenamiento de vectores. Sin embargo, la opción predeterminada es una base de datos vectorial especializada.

Genial. Entonces, tenemos modelos, tenemos embeddings. La siguiente pieza importante del rompecabezas es una base de datos vectorial. Y una base de datos vectorial toma los embeddings que provienen de lo que acabamos de ver, que son, nuevamente, estas largas y extensas matrices de números decimales que representan similitudes. Y luego los almacena en su almacén de datos para que podamos usarlos más adelante para realizar consultas, básicamente.

Estas bases de datos están altamente optimizadas para nuestro caso de uso aquí. Y específicamente, la mayoría de ellas tienen, ya sabes, en una base de datos SQL típica, estás, estás, estás realizando, ya sabes, igualdad y tienes algunos operadores de comparación que pueden ser un gran rango de cosas. Típicamente, cuando se trata de bases de datos vectoriales, la pieza más importante del rompecabezas es la búsqueda de similitud. Por lo tanto, muchas de ellas, realmente, eso es lo principal que implementan, la capacidad de devolver, tal vez hayas escuchado antes `Top K`, si estás familiarizado con esto, pero devolver los mejores resultados de tu motor de almacenamiento.

También puedes estar preguntando, como, ya sabes, ¿puedo, puedo usar una base de datos Postgres para esto? ¿O una base de datos MySQL para esto? Y la respuesta es sí, con un asterisco junto a ella, con otro asterisco. Por defecto, la respuesta probablemente sea no. Se vuelve muy, muy costoso computacionalmente intentar recuperar, ya sabes, una matriz JSON de números decimales y luego realizar el cálculo localmente. Pero existen complementos para, para Postgres, como pgVector. No conozco un equivalente para MySQL, pero estoy seguro de que, estoy seguro de que existe uno. Pero básicamente, hay algunos complementos que puedes usar para utilizar incluso algunos de los estilos más tradicionales, como los SGBD, para este tipo de cosas. Si estás, si estás alojando, como autoalojamiento o algo por el estilo.

7. Pesos de Dimensiones y Búsqueda de Videos

Short description:

Las dimensiones en los modelos pueden tener diferentes pesos. La búsqueda de similitud se puede utilizar para imágenes y videos. Las bases de datos vectoriales están optimizadas para el cálculo de distancias. Se pueden utilizar métricas de distancia como la distancia euclidiana y la distancia del coseno para calcular la similitud.

Pero la principal optimización aquí es, nuevamente, ver aquí, creo que Jan, Jan está insinuando eso. ¿Todas las dimensiones tienen la misma importancia? ¿Qué dimensiones tienen diferentes pesos? Sí, todas tienen, todas tienen la misma importancia en su mayoría, en realidad, no, lo siento, depende de tu modelo, depende de tu modelo. Hay modelos ponderados donde, donde puedes, ya sabes, decir que esto es más importante que esto. La mayoría de las veces, no tendrás que preocuparte por eso. La mayoría de las veces, no, vas a utilizar un modelo que ya ha sido proporcionado a menos que estés haciendo un autoentrenamiento, lo cual también puedes hacer, pero depende de tu caso de uso allí. Pero podrías tener una versión ponderada de los vectores también. Sí. ¿Se puede utilizar la búsqueda de similitud para imágenes y videos? Sí, se puede. Hay, hay solo, hay como Word2Vec, también hay, como, un transformador IMG2Vec que generará búsquedas de similitud para imágenes. Para videos, estoy seguro de que algo existe. No lo sé de memoria, pero si se puede codificar en bytes o representar de esa manera, casi siempre hay alguna forma de, de, de hacer un embedding para esas cosas. La verdadera conclusión aquí con estas bases de datos vectoriales es que están optimizadas para realizar cálculos de distancia en todo el espacio vectorial. Entonces, cuando estás, cuando estás configurando tu, tu, tu índice o un índice en tu database vectorial, generalmente le indicas una métrica que te interesa utilizar para calcular la distancia. La mayoría de las veces, eso es como una distancia euclidiana o una distancia del coseno o algo similar. Sin embargo, hay bastantes opciones disponibles. Así que, ya sabes, no se limita solo a esas. Pero puedes utilizar esas distancias, métricas de distancia para calcular qué tan lejos estás de, ya sabes, un valor esperado y utilizar eso como referencia para, para, ya sabes, lo que estás devolviendo de esto. Así que puedes utilizar esa información, en cierto modo.

8. Añadiendo Contexto y Consultas

Short description:

Una búsqueda de similitud encuentra un vector coincidente en la base de datos vectorial. El aprendizaje activo constantemente aumenta los modelos con nuevos datos. Retrieval Augmented Generation (RAG) agrega contexto a los modelos. La tokenización descompone los datos de entrada en piezas más pequeñas llamadas tokens. El generador de embeddings convierte los tokens en valores numéricos que representan vectores. Los embeddings se almacenan en la base de datos vectorial para la búsqueda de similitud. El proceso implica agregar información a la tienda y realizar consultas para obtener embeddings relevantes. RAG combina la información de la consulta con el contexto para generar respuestas. El proceso puede ser complejo, pero las visualizaciones ayudan a comprenderlo.

Es por eso, ya sabes, esta imagen encaja aquí. Estás, estás pasando en, tienes algo original aquí, que estaba en tu base de datos vectorial, y estás pasando, estás buscando, ya sabes, estás haciendo una búsqueda de similitud en una operación de estilo de consulta, va a encontrar esa coincidencia y sabrá que ese vector es el que estamos, interesados en usar. Y probablemente también encontrará algunos otros similares. Si el tamaño de tu contexto es grande. Sí. Así que tuve que incluir esto. Tienes que decirlo correctamente, ¿verdad? El círculo de lay-i's. La operación constante y el flujo de información en estos diferentes componentes es básicamente cómo funciona el entrenamiento activo, o incluso simplemente la reentrenamiento de modelos antiguos. Entonces, tenemos nuestro modelo original, o tal vez lo estamos creando por primera vez. Simplemente lo estamos precediendo con datos originales, pero tenemos un modelo en el que estamos, estamos usando los nuevos datos entrantes para aumentar continuamente ese modelo. Miramos los nuevos datos que llegan y es un paso llamado, creo que se llama atención, donde dices, ¿vale la pena mantener esta nueva información o usarla como información de entrenamiento futura? Y puedes usar, usar el ciclo de modelo a entrada, almacenar datos, ya sabes, relevancia, relevancia o si vale la pena mantenerlo, lo cual puede ser un paso manual pero se convierte en este círculo, creo que puedes, puedes usar esa información para mejorar aún más tu modelo. Entonces, básicamente puedes refinar con el tiempo y alimentar nueva información en este proceso a través de una operación normal de, de estas diferentes piezas del rompecabezas aquí. Y nuevamente, eso es lo que se llama aprendizaje activo. Creo que el aprendizaje es un poco más difícil porque requiere un poco de bucle de retroalimentación. Pero también puedes, ya sabes, alimentar esas cosas de nuevo en versiones antiguas de cosas también. O lo siento, como, los modelos base o los que se publican públicamente, ya no están en aprendizaje activo, porque, ya sabes, son públicos y cosas así. Pero estos modelos están cambiando constantemente con el tiempo y se están reentrenando con nuevos datos. Solo que a un ritmo mucho más lento que un sistema de aprendizaje activo real. Genial. Y ahora, esto es algo que, ya sabes, vamos a construir una aplicación RAG aquí en un momento. Pero tal vez valga la pena hablar sobre qué es realmente RAG. Entonces, RAG significa Retrieval Augmented Generation. Y se parece mucho a lo que acabamos de hablar en ese círculo de vida, vida. Entonces, tenemos, ya sabes, si estamos usando un modelo base para hacer nuestra inicial, ya sabes, generación de embeddings y cosas así, eso funciona, ya sabes, hasta que tengamos nueva información de que, por lo general, puede haber intentado usar chat GTP, y dice, Oh, lo siento, mi fecha límite fue, ya sabes, no sé qué fecha es hoy en día, pero digamos, 17 de julio de 2023. Así que no tengo nueva información desde entonces. A veces, la información que está actualmente en tu modelo no es suficiente y realmente quieres darle más contexto. Para que tenga información que no tenía previamente. Este es el verdadero punto de venta de Retrieval Augmented Generation. Y son dos puntos importantes. La generación de texto, ya sabes, la generación de texto, eso no es exclusivo de los RAGs necesariamente, eso sucede con cualquier modelo. Pero cualquier cosa que haga recuperación de información es realmente donde los RAGs entran en juego. Y a veces a esta información de recuperación se le llama contexto. Entonces, cuando pensamos en dónde podríamos usar algo que también tenga información contextual relevante para las cosas que queremos, a menudo se utiliza para, ya sabes, responder a preguntas o basado en una solicitud, motores de recomendación, ya sabes, se puede adaptar a una tienda específica, o ya sabes, estoy seguro de que Amazon usa mucho esto para su tipo de configuración. Resumen de documentos, si realmente estás usando el RAG para obtener información de documentos, puedes usarlos como fuentes de contexto para resumir. Y nuevamente, cualquier cosa que necesite acceso a información local que pueda no estar presente en el modelo original. Así que sé que nos estamos adentrando en los detalles aquí, pero prometí que iba a mostrar cómo se ven los embeddings y cosas así. Aquí está, ya sabes, digamos que queremos agregar información a un modelo existente que estamos usando. Y no sabe, ya sabes, qué suelen comprarse las personas en el Día de San Valentín. Entonces, lo que he hecho aquí es, ya sabes, le doy una entrada y digo que los regalos tradicionales en el Día de San Valentín incluyen, y, ya sabes, hablo de flores y, ya sabes, animales de peluche, lo que sea que te guste. Y eso lo alimentaríamos a nuestro LLM, nuestro modelo. Aquí le di, como, este es un ejemplo, no tiene que ser este, pero ya sabes, es lo que tenemos aquí. Ahora, ese LLM, este tokenizador vive dentro del LLM. Pero hay un paso en el proceso llamado tokenización, donde estamos descomponiendo la entrada en, no es la forma de decirlo, tokens, que son este concepto un poco nebuloso en IA y ML. Pero básicamente, es una forma, está tratando de, como, segmentar tus datos de entrada en piezas más pequeñas que luego puede usar para generar los embeddings. Entonces, depende un poco del modelo que uses cómo funciona este tokenizador, pero está tratando de encontrar qué piezas de información aquí se pueden descomponer en un embedding que luego se puede almacenar. Entonces, en este caso, fui a OpenAI y escribí esto, y tienen, como, un tokenizador en línea. Este sería el recuento de tokens para lo que esto parece. Y creo que la guía general que dan es que, como, aproximadamente cuatro caracteres se supone que es un token, pero podemos ver aquí que es bastante variado. Así que, nuevamente, dado esto, no tienes que preocuparte demasiado por esto. Todo esto sucede un poco detrás de escena. Pero pensé que valía la pena mencionarlo, al menos, ya que estamos un poco adentrándonos en los detalles aquí. De esos tokens que se generan, luego los pasamos al generador de embeddings, y esto es lo que convierte los tokens en valores numéricos que representan los vectores. Y, nuevamente, estamos diciendo que los vectores representan la relatividad de cada punto particular dentro de este conjunto de dimensionalidad que tenemos aquí, que, nuevamente, se entrena con todos los parámetros y características que reunimos del propio modelo. Estos valores numéricos generalmente están entre 1 y 0, aunque no tienen que estarlo. Ayuda un poco para algunas de las métricas de distancia si están entre 1 y 0. Entonces, a veces es posible que desees normalizarlos, muchas veces los modelos los normalizarán por ti. A veces puede que tengas que hacerlo tú mismo si te importa la métrica de distancia que necesita estar entre 1 y 0, pero, nuevamente, no tendrás que preocuparte demasiado por esa parte. Todo esto sucede automáticamente. Y estos embeddings se almacenan en la base de datos vectorial, de la que acabamos de hablar, y eventualmente, esto es como una tienda de contexto, y cada una de las filas aquí tiene esta matriz de valores numéricos de n dimensiones. Entonces, nuevamente, todo el proceso por el que estamos trabajando aquí es que queremos tomar esta información y almacenarla en la base de datos vectorial para poder usarla más adelante en la búsqueda de similitud. Entonces, este es el proceso de agregar información a nuestra tienda. La consulta utiliza un tipo bastante similar de configuración aquí, donde consultamos, nuevamente, generamos nuestro embedding, y luego ese embedding va a la base de datos vectorial y encuentra los k principales, dependiendo de lo que hayamos establecido para ese valor, basado en nuestro espacio de dimensionalidad aquí.

9. Uso de Contexto en LLM

Short description:

El LLM combina la información de la consulta con el contexto para generar una respuesta. Puede ser difícil de seguir, pero las visualizaciones pueden ayudar. Siéntete libre de hacer preguntas. Pronto haremos un descanso.

Y usamos eso, nuevamente, como contexto en el LLM que realiza la ampliación de, básicamente, combina la información de la consulta que llega con el contexto que ha salido de la tienda aquí, y luego podemos usar eso para hacer la generación real dentro de nuestro LLM y obtener la respuesta de eso. ¿Preguntas, comentarios? Sé que hay mucho sucediendo aquí. Puede ser un poco difícil de seguir, así que espero que estas visualizaciones ayuden un poco. Pero, nuevamente, sé que muchos de estos conceptos pueden no ser, ya sabes, tan familiares para ti, así que, sí, no dudes si es un poco confuso. Y siempre podemos volver sobre ello más tarde. Genial. Y vamos a hacer un descanso aquí en un momento, así que no te preocupes aquí.

10. Serverless AI y Bases de Datos Vectoriales

Short description:

La IA sin servidor se está convirtiendo en una nueva tendencia, con empresas que ofrecen IA sin servidor debido a las ventajas de la arquitectura sin servidor. Las implementaciones tradicionales pueden ser complejas y costosas, requiriendo múltiples componentes y servidores en funcionamiento constante. Sin embargo, al centrarnos en la parte de consulta del ciclo y utilizar modelos predefinidos, podemos hacer que la consulta sea sin servidor. Las operaciones de inserción y consulta son cruciales, y con la implementación de LLM y vector DB de manera sin servidor, podemos lograr el éxito. Los modelos sin servidor funcionan bien para aplicaciones relativamente estáticas, y aunque pueden ser pesados de cargar, mantener el modelo activo en la red puede superar este desafío. Además, existen diversas ofertas de bases de datos vectoriales sin servidor, como Vectorize y Pinecone, que actualizan constantemente sus servicios.

Genial. Ahora, otra IA sin servidor. Ya sabes, esa sin servidor. La IA es una novedad. La arquitectura sin servidor ya no es la novedad de moda en estos días. Es una antigua novedad. Pero juntas, siento que están volviendo a ser la nueva novedad. He visto varias empresas diferentes lanzar ofertas de IA sin servidor recientemente debido a las ventajas de la arquitectura sin servidor que acabamos de mencionar un poco antes. Pero tal vez tenga sentido hablar sobre cómo se ve una implementación tradicional y luego lo fácil que puede ser con la arquitectura sin servidor, ya sabes, si estás utilizando una oferta alojada. Entonces, en realidad, hay una base de datos vectorial de código abierto muy buena llamada Milvus. Y Milvus te proporciona este bonito diagrama donde explican cómo se ve realmente alojar algunas de las cosas. Milvus hace muchas cosas muy buenas por ti, como cambiar entre cálculos basados en CPU y basados en GPU de esos vectores, y también realiza algunas consultas de metadatos altamente optimizadas. Por lo tanto, puedes realizar una búsqueda híbrida y cosas así. Pero como podemos ver, es una configuración bastante complicada aquí. Tenemos balanceadores de carga con proxies para diferentes colas de mensajes, múltiples nodos para almacenar los metadatos en un contenedor ETCD. Y un montón de nodos que deben ejecutarse para que esto sea de alta disponibilidad, y luego almacenamiento de objetos para almacenar los archivos en sí. Nuevamente, una configuración bastante complicada para algo. Tal vez no insuperable en absoluto. Pero estás ejecutando, mira todos estos servidores aquí. Estás ejecutando mucho para obtener, incluso para obtener un Hola Mundo, al menos en un nivel empresarial o de alta disponibilidad para este tipo de configuración aquí. Nuevamente, es un gran producto. No lo estoy criticando en absoluto. Pero muestra cómo se ve desde un punto de vista tradicional.

Y nuevamente, ya hemos hablado de esto. Pero hay una gran cantidad de componentes y todo siempre está en funcionamiento. Por lo tanto, puedes imaginar que algo con tantas piezas del rompecabezas puede ser bastante costoso. Estamos ejecutando esto las 24 horas del día, los 7 días de la semana. Y sí, todavía tenemos que pensar en la distribución si eso es importante para nosotros, porque todavía tenemos un poco de configuración de alta disponibilidad que se propone allí. Pero eso sigue ejecutándose en VCs, que no están tan cerca como las cosas de borde. Y nuevamente, no importa si estás utilizando un proveedor, siempre habrá algo en ejecución con una arquitectura tradicional. Entonces, pensemos en cómo se vería hacer esto sin servidor. Pero sí, hablamos un poco sobre el círculo. Nuevamente, esto vuelve a ser como el ciclo de la vida. Tenemos entrenamiento, estimación, consulta, etiquetado. Todo fluye entre sí con el tiempo. Pero para la gran mayoría de las cosas, si esto no es aprendizaje activo, este es un ciclo de aprendizaje activo, del que hemos hablado. Pero si estamos bien con un aprendizaje pasivo y como un RAG, entonces pasamos casi el 95% de nuestro tiempo solo en esta parte de consulta del ciclo. No tenemos que preocuparnos tanto por el entrenamiento, la estimación y el etiquetado. Especialmente si estamos utilizando un modelo predefinido. Como ellos se encargan del entrenamiento y el etiquetado, e incluso de la estimación por nosotros. Solo nos preocupa la consulta. Entonces, si podemos hacer que esa parte de consulta sea sin servidor, estaremos bastante bien.

Entonces, hay dos operaciones pequeñas que son importantes para nosotros. Está la inserción, y esto, nuevamente, está en el contexto de una aplicación de generación aumentada de recuperación. Pero la inserción y la consulta son las piezas realmente interesantes aquí, porque esto es lo que va a ser el 95, incluso yo, probablemente incluso el 99% de nuestras operaciones. De vez en cuando, actualizaremos el modelo, pero no tengo que hacer eso demasiado. Entonces, sabemos lo que tenemos. Hablamos de los tokenizadores y las incrustaciones y nuestro LLM y RVDB, pero estos son realmente los únicos componentes necesarios para admitir estas dos operaciones aquí, esta consulta y esta inserción. Entonces, si podemos, nuevamente, implementar ese LLM y esa vector DB de manera sin servidor, estaremos en el negocio. En cuanto a los modelos sin servidor, nuevamente, si queremos algo que se ejecute sin servidor, realmente no vamos a querer estar en un ciclo de aprendizaje activo aquí. Vamos a querer algo que sea relativamente estático. Eso generalmente está bien. Nuevamente, especialmente para cosas predefinidas, como eso no cambia con mucha frecuencia. Entonces, si tienes, digamos, un serverless algo, como eso no cambia con mucha frecuencia en absoluto. Y puedes complementarlo con los aspectos de RAG porque puedes agregar a tu contexto mientras mantienes tu modelo estático. Uno de los desafíos es que estos modelos son bastante pesados. La mayoría del tiempo son bastante pesados. Por lo tanto, pueden ser pesados. Son pesados de cargar para tener los recursos disponibles para nosotros. Y nuevamente, como mencioné, realmente no podemos hacer aprendizaje activo, pero podemos hacerlo con RAG. Entonces, realmente, la única desventaja importante aquí es que las cosas son pesadas de cargar. Pero si podemos mantener ese modelo activo en la red, lo cual es especialmente útil para usar cosas predefinidas que no tenemos que entrenar personalmente y tener modelos personalizados en ejecución para todos, podemos hacer un buen caso aquí para hacer las cosas sin servidor. En cuanto a las bases de datos vectoriales sin servidor, en realidad hay bastantes ofertas de esas también. Por lo tanto, estas siempre están cambiando porque constantemente, tal vez no constantemente, pero a menudo agregamos nueva información al contexto de RAG para que pueda obtener toda la información que necesita para tomar decisiones informadas más adelante. Y hay una serie de ofertas reales, nuevamente, como ofertas sin servidor. Vectorize es una de ellas. Esto es en lo que trabajo. Trabajo en Vectorize. Hago esto día a día. Pinecone es otro jugador en el espacio que acaba de lanzar

11. Construyendo con HonoJS y Linkchain

Short description:

Tenemos las herramientas y componentes necesarios para avanzar con la construcción. Tomemos un descanso antes de ponernos manos a la obra. Utilizaremos HonoJS, un framework optimizado para entornos sin servidor, y Linkchain, un ecosistema que abstrae las complejidades de construir aplicaciones basadas en LLVM. Utilizaremos un repositorio llamado Bard of Love como base para nuestras operaciones, donde construiremos una aplicación que genera poemas de amor. Clonemos el repositorio y empecemos.

Una base de datos vectorial sin servidor. Nuevamente, todo basado en el uso. Y LanceDB es una versión de código abierto de todo esto. Se ejecuta en, incluso es agnóstico a la plataforma en la nube, lo cual es genial. Admite GCS, AWS, S3. Son como almacenes de objetos remotos y tienen algunos formatos de archivo personalizados que hacen que sea agradable trabajar con ellos. Pero con estas dos piezas, creo que podemos avanzar aquí porque ahora tenemos todos los casos cubiertos y todos los componentes que necesitamos para construir realmente. Sí, volviendo a la consulta, bueno, está en una página diferente. Pero sí, volviendo a la operación de consulta, ahora tenemos la capacidad de fluir a través de todo ese proceso si tenemos esas herramientas disponibles. Así que estamos a punto de hacerlo. Pero primero, creo que es bueno. Tomemos un descanso. Sé que probablemente haré dos. Así que sí, hagamos una pausa de 10 minutos, ocupémonos de los asuntos y luego, cuando regresemos, comenzaremos a poner manos a la obra en poco tiempo. Además, si aún no has completado ese formulario con tus credenciales de cinco banderas, si pudieras hacerlo, sería increíble. Probablemente tenga que resolverlo o resolverlo, pero también aprovecharé este descanso. Y debería estar en el historial del chat si lo estás buscando. Pero sí, suena bien. Estírate, prepárate para lo bueno Ahora que sabemos un poco más lo que estamos haciendo, hagámoslo de verdad.

Es hora de ponerse en marcha. Muy rápido, solo una breve introducción a dos herramientas principales que utilizaremos para hacer esto posible. No es súper importante, pero hay un par de formas diferentes de hacer esto. Pero una de las cosas que comenzamos a usar, una que me gusta mucho aquí cuando trabajamos en aplicaciones serverless, es un pequeño framework llamado HonoJS. Está optimizado para este tipo de entornos de microservicios serverless. Y nuevamente, también es agradable, no te ata a un proveedor específico. Tienes, veamos aquí. Empezando. Sí. Sí. Puedes ver aquí, tal vez no puedas verlo porque no está ampliado, estoy seguro, pero puedes ver aquí, tiene soporte para cosas de Cloudflare, Fastly, Versell, Elanda, Superbase. Así que es bastante agradable. Es como una especie de agnosticismo de plataforma donde realmente ejecutas estas cosas. Así que usaremos Hono, que básicamente será nuestro framework de enrutamiento y también hará algunas cosas de middleware por nosotros. Sí, eso es súper importante. Hay otras formas de hacerlo, pero últimamente me ha gustado mucho eso. También usaré Linkchain. No estoy seguro si estás familiarizado con esto, pero no estoy 100% seguro. Imagino que la mayoría de los demás, muchos que no lo están. Linkchain es este ecosistema. Es casi un ecosistema completo en este momento, que básicamente quita gran parte de la complejidad de construir aplicaciones basadas en LLVM, no solo serverless. En eso, la cadena, el encadenamiento es donde realmente, ya sabes, ahí es donde obtiene su nombre de, la capacidad de combinar o encadenar diferentes operaciones dentro de una sola ejecución. Pero también ha crecido para convertirse en esta cosa que abstrae. Y veamos si lo tengo aquí. Sí, lo tengo. Los bloques de construcción de la IA es como lo llama uno de mis compañeros de trabajo. Es muy parecido a Hono, en el sentido de que te permite hacer versiones agnósticas de la plataforma de rags y cualquier operación de LLVM. Entonces, es bastante agradable en el sentido de que tiene enlaces para cosas como las cosas de Cloudflare que usaremos hoy. Pero también puedes usarlo en muchos otros servicios diferentes también, con cambios mínimos en el código. Por lo tanto, nada de lo que estamos haciendo aquí intenta ser como, ya sabes, encerrarte en un proveedor o algo así. Estamos utilizando muchas herramientas y frameworks para asegurarnos de tener, ya sabes, un verdadero enfoque serverless, la capacidad de moverse sin demasiados obstáculos.

Así que tengo para nosotros un repositorio que tiene algo de código de inicio. No quiero complicarnos con cosas como CSS y cosas así. Y te animo a que visites esta URL, clones este repositorio y esto es lo que usaremos como base de muchas de nuestras operaciones aquí. También puedes ver que se llama Bard of Love. Estamos tratando de aprovechar el Día de San Valentín un poco y construiremos una aplicación que nos dé, le proporcionaremos algunos poemas de amor originales y le pediremos que nos los devuelva si puede. Pero también es capaz de crear sus propios poemas de amor si es necesario. Así que, y veremos exactamente cómo funciona como parte de este ejercicio aquí. Pero voy a seguirte, de hecho. Haremos esto de manera interactiva para que puedas hacer lo mismo que yo. Un clonado. Ya lo tengo aquí mismo. Así que vamos a Bard of Love y luego tenemos que entrar en ese directorio. Y yo uso VS Code, el editor que prefieras. Hazlo así. No tienes que confiar en mí, pero te animo a hacerlo. Solo déjame organizar bien mis escritorios. No, quiero que serverless AI esté después. Ahí vamos. Ampliar. Si echas un vistazo a este proyecto, puedes ver que ya hay algunas cosas configuradas para nosotros aquí. Creo que aproximadamente la mitad de ustedes ha usado Cloudflare Workers antes.

12. Configuración de Cloudflare Workers y Wrangler

Short description:

Cloudflare Workers es un ecosistema sin servidor que ejecuta aislamientos de nodos, proporcionando una alternativa más rápida a las plataformas sin servidor tradicionales. Cloudflare Workers utiliza aislamientos de V8 y admite JS. El proyecto se configura con prettier y TypeScript es opcional. Utilizaremos Hono y LangChain como herramientas externas. Se ha configurado una aplicación de chat estilo AOL Instant Messenger. Utilizaremos una cuenta compartida en Cloudflare para el proyecto. Para comenzar a realizar cambios a través de la CLI, necesitamos obtener un token de servicio e iniciar sesión con Wrangler. Utilizaremos el archivo de configuración Wrangler.toml para el proyecto.

Entonces, Cloudflare Workers es el ecosistema sin servidor que Cloudflare tiene para ejecutar este tipo de aplicaciones. Un poco diferente a las plataformas sin servidor tradicionales en el sentido de que esto ejecuta aislamientos de nodos. Creo que Cloud también lo hace en estos días. Pero en lugar de contenedores Docker reales, esto se ejecuta como un aislamiento de V8, que es como una pequeña capa sobre grupos C y nodo para hacer esto, con suerte, incluso un poco más rápido. Pero una de las piezas del rompecabezas con Cloudflare Workers es, ya sabes, al final todo es JS. Podemos ver aquí que estamos configurados aquí. Y el archivo readme te da una introducción a las tecnologías que se utilizan y lo que estamos haciendo aquí.

Tenemos cosas como prettier configuradas para nosotros. Y si echamos un vistazo al paquete, también tengo TypeScript configurado en esto. No es necesario que uses TypeScript. Utilizo los tipos en JS para que sea un poco más agradable, pero no te sientas obligado, eres bienvenido. El puro JavaScript funcionará perfectamente aquí también. Así que no sientas que tienes que hacer eso por nosotros. Pero puede ser agradable, siempre es agradable tener, en mi opinión, cuando puedes hacer un poco de tipado. Aquí vemos nuestro Hono y LangChain, que mencionamos antes, para obtener esas dos herramientas externas y poner esto en marcha. Oops. También en assets, la carpeta de activos, nuevamente, no tienes que preocuparte demasiado por CSS y cosas así. Así que tengo algo configurado para nosotros aquí. En realidad, no puedo llevarme todo el crédito por esto. Mi compañero de trabajo tuvo la brillante idea de crear esta aplicación de chat estilo AOL Instant Messenger. Así que felicitaciones a él por configurar gran parte de este trabajo. Pero es interesante. De hecho, le pidió a GPT que le diera un código para renderizar básicamente un diálogo estilo AOL Instant Messenger, y lo hizo por él. Así que estamos utilizando IA para hacer un taller de IA. ¿Qué te parece eso? Muy bien. Lo que hice durante el descanso es agregarlos a todos a una cuenta especial en Cloudflare que tiene los permisos necesarios para realizar este proyecto. Así que si ahora te diriges a dash.cloudflare.com, voy a iniciar sesión yo mismo. Divertido. Las viejas VPN corporativas hacen que esto funcione, así que déjame hacer esto rápidamente. Genial. Estoy conectado. En cuentas, ahora deberías ver devops.js AI workshop shared. Esta es la cuenta que usaremos para hacer que todo esto suceda. Y tiene algunos permisos, básicamente los permisos necesarios para la oferta de IA y el ecosistema de Cloudflare Workers para permitirnos hacer todo esto. Si no estás familiarizado con el panel de Cloudflare, esto es lo que parece cuando, nuevamente, solo tienes que hacer clic en esa cuenta, el devops workshop shared. En realidad, ni siquiera necesitaremos estar en este panel tanto. Pero para futuras referencias, aquí a la izquierda, workers y pages es donde vivirán los trabajadores reales, nuestras diferentes aplicaciones. Puedo ver que ya he hecho esto una vez, pero hagámoslo de nuevo juntos.

En primer lugar, necesitamos obtener un... Vamos a tener que obtener un token de servicio para Cloudflare para permitirnos comenzar a realizar cambios a través de la CLI. Es un poco más fácil hacerlo aquí que en el panel. Siempre es agradable usar un IDE y cosas así cuando puedes. Si lo haces, lo siento, debería haber dicho esto primero también, primero debes hacer NPMI, si aún no lo has hecho, para instalar todos los paquetes necesarios. Una vez que hayas hecho eso, Wrangler se instalará como una dependencia de desarrollo, y puedes usarlo aquí, mpx, para comenzar a interactuar con Wrangler, el paquete Wrangler que has instalado como parte de esto aquí. Lo primero que vamos a hacer es mpx Wrangler login. Esto nos dará una clave para esa cuenta. Si lo haces, debería aparecer una ventana en tu navegador. Sea lo que sea que esté abierto. Básicamente, te dará un montón de cambios de permisos y alcances que permitirán que la CLI de Wrangler realice cambios por nosotros. Está bien aceptarlo. Puedes leerlos todos si quieres, pero al final vamos a deshacernos de esta cuenta de todos modos, así que está bien de cualquier manera. Una vez que hagas eso, iniciarás sesión y puedes verificar eso si ejecutas mpx Wrangler whoami, eso te dará una ventana como esta, y deberíamos tener estos alcances aquí, que nos permitirán hacer los cambios de IA y todas esas cosas buenas. Si estás siguiendo, deberíamos haber iniciado sesión con Wrangler. Deberíamos estar listos para comenzar. Cuando estamos haciendo una implementación en workers, hay este archivo Wrangler.toml, que es nuestro archivo de configuración para el proyecto. Todos estamos usando una cuenta compartida para esto, por lo que tenemos el potencial de pisar los pies de las personas.

13. Iniciar sesión y configurar Wrangler

Short description:

Para iniciar sesión, completa el formulario y crea una cuenta de Cloudflare. Wrangler es una herramienta de Cloudflare para interactuar con workers y Cloudflare Pages. Completa el formulario utilizando el correo electrónico que utilizaste para registrarte. Obtendrás acceso a una cuenta privilegiada de Cloudflare. Actualiza los nombres en el archivo de configuración para que sean únicos. Guarda el archivo y pasa al siguiente paso en la terminal. Si encuentras problemas al iniciar sesión, es difícil solucionarlos en este momento.

Disculpas. ¿Cómo inicio sesión? Oh, sí, claro. Permíteme poner enlaces aquí. Volveré a poner esto, porque queremos bash. Así es como inicias sesión, y si no has completado el formulario para darme tu dirección de correo electrónico, crearás una cuenta, pero si no has completado el formulario para darme tu dirección de correo electrónico, entonces aún no verás esta cuenta en la lista. En este punto, solo puedes mostrar tu ID de cuenta, o bueno, probablemente no quieras mostrar tu correo electrónico. Solo avísame que has completado el formulario nuevamente y lo verificaré. Pero, sí, ¿qué es Wrangler? Wrangler es la CLI que interactúa, es específica de Cloudflare, por lo que es una herramienta de Cloudflare. La contraseña debe ser la que utilizas para la cuenta que creaste. Así que necesitarás crear una cuenta si aún no lo has hecho. Simplemente haz clic en el botón de registro y, sí, y luego aquí necesito, necesito mantener esto, mantener esta ventana aquí arriba. Enviar enlace, nuevamente, una vez que, una vez que hayas completado el registro, simplemente coloca tu correo electrónico que utilizaste aquí, y te agregaré. Pero sí, Wrangler es una herramienta de Cloudflare que ayuda a interactuar con workers, y también con esta cosa llamada Cloudflare Pages, que es una especie de versión de activo estático de workers. Es solo una pequeña y agradable, ya sabes, piénsalo como el CLI de AWS, esencialmente, y es eso sobre la implementación específica de workers aquí. Genial. Tal vez les daremos un segundo para ponerse al día, ya que se están registrando. Sí. Genial, Karthik. Si aún no lo has hecho, asegúrate de completar este formulario, y debería verse así, oops, debería verse como el formulario de Google del taller de DevOps JS. Y asegúrate de poner el correo electrónico que utilizaste para registrarte aquí, para que pueda, puedo agregarte a la cuenta que estamos utilizando. Y, oh, veo dos respuestas nuevas. Perfecto. Bien. Nos vemos, chicos. Así que déjame agregarlos. Y sí, todos ustedes están obteniendo acceso a una cuenta privilegiada de Cloudflare, si aún no lo han hecho. Así que, tal vez, les daré un poco de tiempo para explorar después, si quieren ver, ya saben, ver a qué tienen permiso, porque es una, no es, es una cuenta de Cloudflare bastante privilegiada para estas cosas. Así que, simplemente los agrego a los grupos correctos aquí. Creo que eso debería estar bien. Gracias a todos por ser buenos deportistas aquí. Es un poco, un poco desafiante hacer este tipo de cosas virtualmente. Pero sí, los agregué a ambos. Y parece que fue exitoso. Así que ahora tenemos más personas aquí. Nuevamente, solo copio y pego los comandos para que no los perdamos en ningún lugar. Oh, no creo que los vea. Formateo, pero lo averiguaremos. Oh, bueno, entiendes la idea. Y ahora, bueno, creo que deberíamos estar bastante bien para continuar aquí. Este regular Toml, nuevamente, es nuestro archivo de configuración. Y como todos estamos usando una cuenta compartida, queremos que los nombres de las cosas sean diferentes. Puedes ver aquí, como usé mi primer, inicial, apellido, parte de amor para el nombre del worker. Si todos ustedes pueden hacer algo único. Tu nombre sería genial. Tal vez lo mismo, primera inicial, apellido. Pero, vas a querer cambiar este valor a algo único. Y luego, lo que uses para eso, usaría el mismo valor aquí en este índice vectorizado. Así que haré Nathan demo, solo para seguir adelante. Y, nuevamente, sé que no nos estamos enfocando en el código todavía. Pero esto es solo la configuración inicial para que podamos. Cuando realmente hagamos esto funcionar, luego comenzaremos a revisar el código un poco más. Si todos ustedes han hecho eso, perfecto. Simplemente guarda ese archivo. No es necesario hacer nada más aún. Bien. El siguiente paso es volver a nuestra terminal. Y vamos a Sin codificar. No estoy muy seguro de lo que eso significa. Creo que es un código de error de conflicto. Oh, oh, sí, sí, sí. ¿En el inicio de sesión? Sí, siempre y cuando puedas ver esto, entonces deberías estar bien. Puede que veas una pequeña barra en la parte inferior que dice algo. Es solo porque estamos usando una cuenta compartida que es un poco única aquí. Veo que alguien ya ha avanzado y ha implementado su zona. Me encanta eso. Genial. Pero no pasa de la pantalla de inicio de sesión. Pero no pasa de la pantalla de inicio de sesión.

14. Configuración de la base de datos vectorial e implementación de la aplicación

Short description:

Cambiamos Wrangler para que nos dé un nombre personalizado y creamos un enlace de índice vectorizado. Creamos una base de datos vectorial utilizando el nombre de nuestro archivo Wrangler toml. Ahora podemos implementar nuestra aplicación, pero aún no funcionará. Incluimos poemas de amor en el repositorio para nosotros.

Bueno, eso es un poco desafortunado. Es un poco difícil solucionarlo en este momento. De acuerdo. Interesante. En realidad no veo a Owen, um, tengo 20 personas allí. Solo estoy echando un vistazo rápido a esto para Owen. Oh, veamos aquí. No te veo en esta cuenta. Permíteme intentarlo una vez más. Entonces, ahora, te tengo en la cuenta, Owen. Puede valer la pena ver si puedes iniciar sesión ahora. Veremos. Veremos cómo va eso. De lo contrario, lo siento. Tal vez solo tenga que pedirte que sigas el proceso. No quiero retrasar demasiado las cosas. Ah, de acuerdo. Ahí vamos. Entendido. Bueno, si quieres usar un correo electrónico diferente, puedes hacerlo. Solo avísame. Sí, sí, sí. Genial. De acuerdo. Entonces, sí, volvamos a lo que estamos tratando de hacer aquí. Um, entonces, lo que hicimos fue cambiar nuestro Wrangler para que nos dé un nombre personalizado. También notarás aquí que queremos, estamos creando, ya sabes, un enlace de índice vectorizado. Esto, esto, esto es, nuevamente, hablamos de bases de datos vectoriales. Vectorizado es el vector database que vamos a usar aquí. Y esto es algo que necesitamos crear fuera de nuestro código, pero aquí en la terminal. Entonces, si miras ese README, verás que hay un paso para crear una base de datos vector database. Nuevamente, lo mismo. Queremos usar el nombre que usamos en nuestro archivo Wrangler toml. Entonces, aquí voy a cambiar esto a Nathan Demo. Y cuando creamos una base de datos vectorial, mencionamos que estamos almacenando, nuevamente, estamos almacenando estas matrices de punto flotante basadas en la dimensionalidad y la métrica. Y también tenemos la capacidad de usar, por lo que, cuando hacemos esto, lo estamos configurando, Flatflair conoce un par, nuevamente, como modelos predefinidos, nuevamente, como modelos predefinidos. Especialmente algunos de estos de código abierto. Entonces, en realidad puede utilizar la información que conoce sobre el modelo ya existente en cuanto a su dimensionalidad y métrica de distancia elegida con una configuración preestablecida. Entonces, hay una forma alternativa de este comando donde puedes especificar la dimensionalidad y la métrica de distancia manualmente. Pero sí, si pudiéramos usar nuestra propia BD, eso sería genial, creo. Solo para darte la oportunidad. Porque entonces realmente puedes jugar con ella. Entonces, sí, cambiaría el nombre de la BD a lo que tenías en tu archivo Wrangler toml. Copia ese comando y podemos usar este preajuste, debería estar bien. EGE base. Si quieres leer más al respecto, hay una página de CloudFlare.

De acuerdo. Así que hagámoslo. Make poems. Si hago eso, asegúrate de ponerlo en la cuenta compartida. Y hemos creado uno correctamente, lo cual es genial. Sabes, nos da la información que necesitamos si queremos comenzar a usar esto en nuestro archivo Wrangler toml, pero ya tenemos esa información. Lo hicimos con anticipación. Entonces, lo hicimos con anticipación. Debería coincidir con este nombre aquí. Genial. Ahora tenemos una base de datos vectorial y tenemos nuestra estructura para comenzar a crear nuestra aplicación RAG. Si queremos, creo que incluso podemos implementar esto ahora mismo, y nos mostrará algo. No funcionará, pero creo que al menos nos mostrará, ya sabes, una especie de estructura básica aquí. Entonces, para hacer eso, escribo npm wrangler deploy. Esto pondrá todo en marcha. Estos son, nuevamente, los resultados, así es como se llaman, pero básicamente solo los enlaces a nuestro, queremos Cloudflare AI, así que necesitamos este AI que ya está allí, y luego nuestro índice vectorizado, el índice vectorizado que creamos. Y ahora tenemos una URL a la que podemos acceder. Entonces, si copio eso y voy, tengo curiosidad, creo, oh, no va a funcionar. De acuerdo. Bueno, me adelanté un poco aquí. Pensé que funcionaría porque aún no hemos configurado las cosas en el código pero lo haremos funcionar. Lo haremos funcionar. De acuerdo. Así que, hablamos de los poemas de amor que queremos usar para, ya sabes, sembrar algunas cosas locales para nosotros, así

15. Carga de datos en la base de datos vectorial

Short description:

Tenemos datos Indie JSON que contienen poemas de famosos autores. Queremos usar estos datos para sembrar nuestra base de datos vectorial. Para hacerlo, creamos un objeto de embeddings utilizando los embeddings de Cloudflare AI de link chain y configuramos el objeto de configuración con los nombres de enlace. También creamos una tienda utilizando Cloudflare vectorize store. Nos aseguramos de que la dimensionalidad de los embeddings coincida con la tienda vectorial. Los nombres de estas variables pueden variar según la plataforma.

podemos usar esos. Ya los incluí en el repositorio para nosotros. Si vas a assets poems.indijson, Indie significa delimitado por saltos de línea. Es como un formato especial. Pero puedes ver aquí, son líneas de JSON que tienen un título, que es el título del poema, el autor del poema y luego el texto que compone el poema. Así que tenemos algunos grandes nombres aquí, como E.E. Cummings, Maya Angelou, Shakespeare está aquí y cosas así. Pero un par, esto es básicamente los data que usaremos para sembrar aquí. No tendremos que tocar esto en absoluto. Pero, al menos por ahora. Si quieres hacerlo por tu cuenta, puedes agregar y eliminar cosas aquí. Cambiará un poco las cosas. Pero te dará un poco más de contexto. Pero lo que queremos hacer es usar ese Indie JSON como data en nuestra, en nuestra aplicación. En la base de datos vectorial. Entonces, para hacer eso, hice un punto final llamado load em up, donde cargamos los datos del poema en la base de datos para que se puedan usar como contexto. Así que esto es lo que veremos primero, cómo poner nuestras cosas en vectorize, en nuestra base de datos vectorial.

Para hacer eso, necesitamos, vamos a usar un par de funciones de link chain. Entonces, vamos a crear el objeto de embeddings. Así que embeddings. Y esto va a usar una nueva función de embeddings de AI de Cloudflare workers, que podemos ver. Obtén un autocompletado allí. Pero sí, esto viene nuevamente de link chain. Y hay, puedes ver aquí arriba, link chain tiene un paquete específico de Cloudflare. Podrías reemplazar esto, también hay uno, una vez más, para como advanced DB y pinecone y cosas así, si realmente quisieras ir por ese camino. Pero nuevamente, para los propósitos aquí, vamos a usar los embeddings de AI de Cloudflare. Y eso toma un objeto de configuración, que es, es un enlace. Nuevamente, los enlaces y los workers, si no estás familiarizado, los enlaces son como los enlaces a las variables globales que se inyectan. Vienen de Wrangler Toml. Configuramos nuestro nombre de enlace para vectorize como vectorize index. Nuestro nombre de enlace para AI es simplemente AI. Entonces, venimos aquí, y esto se convierte en C.env.AI. Sí. Que aún no he escrito. Probablemente debería haberlo hecho. Pero está bien. Y luego, es importante tener en cuenta con qué creamos nuestro índice. Nuevamente, creamos eso con este preajuste aquí, este EF de VGE base. Voy a poner eso en una variable constante, porque lo vamos a referenciar un par de veces. Así que digamos que la constante del modelo de embeddings va a ser eso mismo que usamos para crear el índice. Porque el otro parámetro en estos embeddings, es un nombre de modelo que necesitamos. Así que le daremos el modelo de embeddings. Y ahora tenemos nuestro generador de embeddings listo para funcionar. También queremos almacenar estos embeddings en algún lugar. Así que vamos a crear una tienda, que será una nueva tienda de vectorize de CloudFlare. Nuevamente, viene de LangChain, ya está un poco configurado para nosotros. Recuerda, los embeddings vienen del modelo. Así que este worker's AI, maneja el lado del modelo. Y ahora vectorize es nuestra tienda vectorial. Entonces, oh, obtienes un vectorized no autorizado allí. Mira, me gustaría saber si otras personas también obtienen eso. Espero haber configurado los permisos correctamente. Veamos si me aseguro de que estés en esta cuenta. De acuerdo. Estoy recibiendo un correo electrónico rápidamente para asegurarme de que estés aquí. Así que solo me aseguro de que estés agregado a esto nuevamente. No creo que lo estuvieras, oh, veamos. Si puedes intentarlo de nuevo, Cicel, eso sería increíble. Porque creo, oh, maldición, debería haberte agregado directamente. Vas a tener que verificar tu correo electrónico. Sí. Vas a tener que verificar tu correo electrónico, Cicel, para confirmar la invitación. Lo siento por eso. Podría haberte agregado directamente, pero olvidé marcar esa casilla. Pero deberías estar listo para continuar. Sí, aquí está nuestro modelo de embeddings. Nuevamente, lo mismo, podemos copiar y pegar eso de lo que tenemos aquí porque solo queremos asegurarnos de que esto coincida con el valor de esto porque queremos que lo que el AI, nuevamente, esto no es específico de Cloudflare, pero queremos que lo que el AI use para generar embeddings coincida con la dimensionalidad de la tienda Vector. Y eso es realmente lo que estamos haciendo aquí. Entonces, queremos, sí, queremos, oh, sí, hay un anuncio al principio. Pero es un buen consejo. Esa es una convención de Cloudflare. Los nombres de estas serán un poco diferentes, dependiendo de dónde vayas, pero los

16. Carga y análisis de datos de poemas

Short description:

Tenemos una tienda vectorizada y un generador de embeddings del modelo. Necesitamos especificar el parámetro de índice para la tienda vectorizada y la ubicación para ingresar los embeddings. Cargamos el texto sin procesar del archivo local assets.json en una variable llamada datos de poemas sin procesar. Dividimos las líneas de los datos de poemas en saltos de línea y analizamos cada línea como JSON válido. El formato del JSON es título, autor y texto.

la idea es la misma. Sí, quieres que la dimensionalidad sea la misma entre lo que el modelo genera y lo que almacenas. Genial. Volvamos aquí. También, tal vez sea más fácil, voy a proporcionar un enlace, les proporcionaré un enlace a todos ustedes. Iba a guardar esto para el final. Pero si lo necesitan, si se atrasan o necesitan un poco de ayuda, hay una versión completada de este ejercicio ubicada aquí. Pero les animo a que sigan el proceso. Para ver cómo se construyen las cosas. Genial. Entonces, nuevamente, ahora tenemos una tienda vectorizada pero necesitamos decirle dónde está nuestro índice real. Así que hay un parámetro. Debería haber un parámetro en esto que se llama índice. Y escribimos el nombre de este enlace vectorizado. Así que podemos copiarlo aquí. Y debería estar todo listo. Ahora tenemos nuestro generador de embeddings del modelo. También tenemos nuestra tienda vectorizada. Vamos a almacenar lo que salga de esos embeddings en esta pieza del rompecabezas vectorizado. Ahora, necesitamos realmente cargar los data y colocarlos allí. A veces puede ser útil tener registros en la consola, para poder asegurarnos de que lleguemos a ciertos puntos. Digamos aquí. Oh, el primero. Oh, gracias. Gracias. Tienes razón. Sí. Me preguntaba por qué TypeScript no me estaba dando pistas. Tienes toda la razón. Gracias. También necesitamos decirle de dónde ingresar los embeddings. Buen punto. Genial. Sí, me gusta el registro en la consola. Ayuda a rastrear dónde estamos. Así que digamos cargando vectores. Lo siento, cargando poemas desde el archivo de semilla. Y ahora, necesitamos, sí, hacer nuestra carga aquí. Un poco. Usamos formato. Las cosas se vuelven interesantes en la forma en que tenemos que leer las cosas aquí. Por lo general, usarías. Es posible que desees cargar estas cosas desde una tienda de data remota como R2 o S3 o algo similar. Eso haría esto un poco más simple. Porque no quería tener que involucrar el acceso a R2 y cosas así. Quiero mantener las cosas lo más simples posible. Estamos cargando algo desde un lugar local. Lo que vamos a hacer es cargar nuestro archivo directamente aquí. Entonces, creo que lo llamo como datos de poemas sin procesar funcionará desde assets.json. Así que vamos a cargar nuestro texto sin procesar real de ese archivo en esta variable. Les permitiré copiar eso. Y una vez que haya terminado, entonces podemos comenzar a iterar sobre eso. Así que me gusta las funciones de reducción o mapeo si puedo usarlas. Así que llamo a eso datos de poemas sin procesar. Eso es una cadena. Vamos a tener eso en cuenta. Sí. Bueno. Dividir. Y vamos a dividir esto en saltos de línea porque es un JSON de saltos de línea. Vamos a tomar cada una de esas líneas y decir veamos aquí. Cada línea es un JSON válido. Podemos simplemente analizar eso. Entonces, el analizado es JSON.parse.línea. Esto es solo un detalle de implementación de lo que tuve que hacer. Debido a que estamos usando JSON de saltos de línea aquí, no pude usar saltos de línea para dividir las líneas del poema real. Así que simplemente cambié esas barras verticales por barras diagonales invertidas. Entonces, lo que queremos hacer es convertir esas barras diagonales invertidas nuevamente a las barras diagonales originales para que se carguen correctamente. Sabemos que analizar, nuevamente, analizar es JSON. El formato aquí es

17. Carga y Segmentación de Poemas

Short description:

Reemplazamos las barras verticales en el texto analizado por saltos de línea y cargamos los poemas en un array. Consideramos el tamaño de los poemas al almacenarlos en la base de datos vectorial para mejorar la relevancia de la búsqueda. Almacenar el poema completo como un embedding puede disminuir la probabilidad de una búsqueda de similitud exitosa. En su lugar, podemos segmentar y dividir el poema para almacenar secciones más pequeñas y representativas. Este enfoque equilibra el almacenamiento del contexto y la precisión de los resultados de búsqueda.

título, autor, texto. Entonces, parsed.text va a ser parsed text.replace.all. Y estamos reemplazando todas las barras verticales con saltos de línea. Ahora tenemos eso configurado correctamente. Y podemos devolver parsed. Entonces, esto debería cargar todos nuestros poemas en un array. Y me gusta hacer tipos para este tipo de cosas de nuevo. Solo voy a decir esto de antemano. Este tipo es un objeto de título, string, autor, string, oops, y string. Y eso es un array de esos. Ahora tenemos un tipo para poemas. Perfecto. Y siempre es bueno, de nuevo, solo rastrear que realmente obtuvimos lo que queríamos. Entonces, digamos, cargado. Poems.length. Así que tendremos un registro en la consola. Espero que todo eso tenga sentido hasta ahora. Ahora estamos llegando a algo un poco más específico de IA y cómo funciona esto. Entonces, si miramos estos poemas. Permítanme volver a podemos ver que los datos reales aquí, ya que estamos importando el poema, no deberían colocarse. Sí. Tienes razón, Jan. La ubicación no es la mejor. Probablemente debería estar en source. Y sí, puedes hacer ese cambio si quieres. Solo tenía esto funcionando y no quería meterme demasiado con eso. Pero para que tu ejemplo sea correcto, probablemente no debería estar donde debería estar si lo estamos cargando en el código fuente real o en el código compilado. Genial. Podemos ver que estos estas cosas son bastante largas en realidad. Algunos de estos poemas son muy cortos. Este es Melody Godfrey. Me gusta su pequeño poema sobre el autovalor aquí. Una de las cosas que poseo y mi valor es mi posesión favorita. Eso es un pequeño corto. Pero también tenemos algunos que son bastante más largos, como el phenomenal woman de Maria Angelou y cosas así. Entonces, una de las cosas a considerar cuando se almacena esta información es qué tan grandes son las piezas de información que realmente deseas almacenar en tu base de datos vectorial para aumentar la relevancia de estas búsquedas aquí. Entonces, podríamos poner el poema completo en un embedding y almacenarlo, ya sabes, es una sola fila en la base de datos vectorial. Pero eso significa que, como, la similitud, como una búsqueda de similitud en todo el poema se vuelve menos probable de acertar, porque es, ya sabes, es más grande, el espacio de búsqueda se incrementa. Y los parámetros generales y las características pueden no estar representadas con tanta precisión como lo estarían con una versión pequeña, como una versión segmentada de algo así. Entonces, hay este concepto en el almacenamiento de vectores llamado peck splitting o segmentación y división. La gente lo llama de diferentes maneras, hay toda una ciencia en esto también.

18. Segmentación de Poemas y Agregación al Almacenamiento

Short description:

Nos aseguramos de que los fragmentos que almacenamos en la base de datos vectorial tengan un contexto preciso pero no sean demasiado largos para disminuir la probabilidad de coincidencia. Utilizamos un tamaño de fragmento de 200 y un separador de texto de caracteres cursivos para dividir los poemas en documentos. Estos documentos son luego procesados por el tokenizador y los embeddings. Conservamos el título y el autor del poema como metadatos. Existe una pequeña restricción con el formato de los metadatos, lo que nos obliga a eliminar una línea de código. Finalmente, agregamos los documentos a nuestro almacenamiento y obtenemos los IDs correspondientes.

como tratar de obtener esta información correctamente. Asegurándonos de tener un fragmento lo suficientemente preciso que almacene el contexto de manera adecuada, que sea lo suficientemente largo para usarlo en algún lugar, pero no tan largo como para que la probabilidad de coincidencia disminuya. Por lo tanto, incluso podemos poner incluso esto definitivamente un valor para jugar con él. Ya encontré uno que funciona bastante bien con este tamaño de fragmento de 200. Así que vamos a usar eso por ahora. Y luego explicaré un poco más después de que todo esto esté terminado y tengamos código para trabajar. Entonces, vamos a crear un separador. Y esto también, veamos aquí, el separador de caracteres cursivos proviene de, tengo una hoja de trucos aquí. No sé exactamente dónde están las importaciones y cosas así. Recursivo, como se escribe correctamente, eso ayudaría. Lo siento, veamos esto. De, sé que viene de Linkchain y es el separador de texto de caracteres. Ahí vamos. Ahora, nos da lo que necesitamos. El separador de texto de caracteres cursivos es uno de los separadores de texto disponibles. Esto es específico para texto. Alguien preguntó si todo esto funciona también con imágenes y videos. Definitivamente sí. Pero se utilizará una forma diferente de dividir los datos en un separador de imágenes en comparación con uno de texto aquí. Para el propósito de la aplicación, vamos a usar esto. Pero vale la pena investigar esto. Como las formas de dividir y fragmentar para imágenes y videos y cosas así. Pero de todos modos, sí, vamos a hacer esto. Tomamos algunos parámetros aquí. Iba a darle un tamaño de fragmento. Encontré que 200 funciona bastante bien. Lo bueno es que también le puedes dar una superposición. Así que no pierdes, ya sabes, no estás trazando líneas duras en la arena en cuanto a cómo funciona esto. Le estás dando un poco de capacidad para superponerse y obtener algo de contexto de lugares anteriores también. Sí, vamos a usar un separador que se vea así. Y ahora vamos a usar eso para comenzar a dividir nuestros poemas en lo que se llaman documentos. Básicamente, los documentos individuales se alimentan en el tokenizador y luego en los embeddings y ese es el flujo allí. Así que vamos a omitir estas constantes poema en poemas. Mencionamos que estamos creando documentos, por lo que docs va a ser esas operaciones asíncronas que puedo usar ese separador para dividir a través de este método llamado crear documentos. Nuevamente, eso básicamente crea un montón de subsecciones de nuestra entrada original. Esas subsecciones son docs. Pero la entrada de esto va a ser el texto del poema. Podemos ver que toma el texto aquí. Esto es lo que estamos tratando de dividir y crear documentos. En este caso, va a ser poem.txt. También podemos darle algunos metadatos para no perder mucha información al hacer esto. Tal vez, ya sabes, queremos asegurarnos de que cada uno de estos documentos todavía sepamos de dónde proviene. Entonces, lo que haremos es decir que el título, le daremos uno llamado título y el título es el poema.título y también diremos lo mismo para el autor, básicamente. Será nuestro autor, oops, lo siento. Genial. Va a crear un montón de subsecciones de nuestro texto pero preservaremos la información allí. Podemos hacer algunos registros si queremos. Siempre es interesante, supongo. Así que digamos que hacemos, tenemos, veamos, sí, queremos capturar lo que acabamos de procesar. Entonces, poema.título, oops, creado y luego obtengamos nuestra cantidad de puntos. dot.length puntos. ¿Es plural? Son dos etiquetas. Ahora sabemos cómo se ve eso. Genial. Y hay un pequeño problema con la forma en que las cosas funcionan actualmente en

19. Formato de Metadatos y Agregación al Almacenamiento

Short description:

El formato para los metadatos utilizados en la inserción vectorial tiene una profundidad limitada. El uso del separador de documentos de Link Chain viola esta restricción. Sin embargo, esta información no es crítica. Recorremos los documentos y eliminamos la línea de código doc.metadata.loc. Representa las líneas cubiertas por la solicitud de creación de documento. Actualmente, esta es una incompatibilidad que necesita ser corregida. Después de eso, agregamos los documentos a nuestro almacenamiento y obtenemos los IDs de índice. La respuesta no es crucial para nuestro propósito.

y todo esto con vectorización y un par de otras bases de datos. El formato para los metadatos que se utiliza al insertar el vector está limitado en cuanto a su profundidad, no es solo un, es un objeto JSON, pero la profundidad de ese objeto está restringida. Y desafortunadamente, si usas docs, el separador de documentos de Link Chain, se viola esa restricción de profundidad. La buena noticia es que esta no es información que necesitemos demasiado. Tendrás que confiar en mí en esto. Todo lo que queremos hacer es básicamente recorrer los documentos y luego eliminar. Se llama doc.metadata.loc. Es esta línea de código. Básicamente, lo que hace en el separador es decir qué, ya sabes, si es una cadena de varias líneas, qué líneas de tu cadena están cubiertas por esta creación de documento, el documento individual que fue procesado por la solicitud de creación de documentos. Y sí, en este momento, eso es una incompatibilidad. Algo que vamos a tener que solucionar. Pero solo ten en cuenta que tendrá que ser así por ahora. Genial. Y luego ahora vamos a agregar esto a nuestro almacenamiento. Así que cuando agregamos algo, obtenemos IDs para ello. Así que los verificaremos. Los llamaremos IDs de índice, pero vamos a hacer await store.add documents. Y son los documentos que acabamos de crear. Y sí, estos son los documentos vectorizados de antes. Son los documentos que acabamos de crear. Y también voy a mostrar esa idea en la consola. Pero podemos decir, oops, uno de los templates insertados. Si podemos simplemente registrar estos IDs de índice que obtuvimos de vuelta al índice. Y sí, la respuesta aquí no importa demasiado. No la estamos usando realmente para, estamos más interesados en cargar y, ya sabes, es un hacedor versus un obtenedor aquí. Genial. Genial. ¿Alguna pregunta, comentario o inquietud hasta ahora? Esto es lo que toma aquí.

20. Uso de la Base de Datos Vectorial para Consultas

Short description:

Tenemos un montón de documentos en nuestra base de datos vectorial y todo el contexto que necesitamos para una consulta. Tomemos un descanso de cinco minutos antes de continuar. Podemos probar la capacidad de utilizar la base de datos vectorial realizando una búsqueda de similitud semántica utilizando el punto final 'search'. Extraeremos una consulta de la cadena de consulta y obtendremos los embeddings del almacenamiento. Luego utilizaremos el método 'similarity search' en el almacenamiento para realizar la consulta y limitar los resultados a cinco. Después de implementar con Wrangler, podemos acceder al punto final de búsqueda y llamar al punto final 'load them up' para cargar los datos. Si hay algún problema, podemos usar 'npx wrangler tail' para depurar. Verifiquemos el formato de los poemas y volvamos a implementar si es necesario.

nuestra entrada y crea un contexto para el rag real. Así que ahora tenemos un montón de documentos dentro de nuestra base de datos vectorial y todo el contexto que necesitamos para usarlo en una consulta. ¿Qué tal, sé que todos estamos interesados en llegar a la consulta real? En realidad, tal vez hagamos otro descanso de cinco minutos porque estamos, estamos en otra hora. Sí. Ahora tenemos la capacidad de cargar datos. Hagamos una prueba rápida para asegurarnos de que realmente podemos usarlo. Luego volvemos, ya sabes, a lo que esperamos aquí. Así que hay un pequeño punto final rápido aquí llamado search. También es un buen punto final. Pero esto en realidad va a utilizar la base de datos vectorial para hacer una búsqueda de similitud semántica regular. Entonces, esto es lo que parece, vamos a extraer una consulta. La extraeremos de la cadena de consulta real también. Entonces C.req, C.req.query, nómbralo como Q o algo así. Porque no necesitamos que esto sea, ¿cómo tengo los enlaces de Wrangler, solo de Tom? Eso debería suceder automáticamente cuando haces un despliegue de Wrangler o algo así. Ahora tus tipos pueden no estar presentes. Entonces, si estás hablando específicamente de tipos, tendrás que hacer un poco de trabajo adicional para agregarlos como globales que están presentes. O en realidad, hono, puedes ver que el primer parámetro de la versión genérica de hono es ENV. Así que puedes darlo allí. Aún no lo hemos hecho. Pero si te preocupa específicamente el tipo, eso debería estar bien. Si no puedes encontrarlos en absoluto, como un despliegue de Wrangler, eso probablemente significa que hay algo más. Solace debería aclararlo.

Mientras tanto, sigamos adelante. Así que tenemos la consulta. Y también queremos hacer lo mismo que acabamos de hacer, de hecho, solo copiemos y peguemos. Vamos a obtener nuestros embeddings en nuestro almacenamiento, para que podamos usar la vectorización para hacer la consulta aquí. Y luego es solo copiar y pegar. Probablemente sea solo cuestión de hacer const save results equals await store. Y podemos ver que el almacenamiento tiene propiedades en él. Pero la que nos interesa aquí es similarity search. Y queremos que sea simplemente lo que sea la consulta. Y lo limitaremos a cinco por ahora. Adelante y responde JSON results. Genial. Esto es todo. Lo copiamos y pegamos. Todo lo que estamos haciendo aquí es extraer la variable de consulta. Y luego, esta es realmente la única pieza nueva del rompecabezas, es poder usar el método similarity search en el almacenamiento. Entonces, vamos a hacer un despliegue de Wrangler ahora. Nuevamente, ese comando es npx wrangler deploy. Si la página principal no funcionaba antes, probablemente todavía no lo haga. Pero está bien, no estamos interesados en eso aquí, queremos, ¿cómo hago que desaparezca esta barra? Está afectando mis cosas de Chrome. Lo que realmente queremos hacer es ir a, creamos ese punto final de búsqueda si volvemos aquí. Y le estamos dando una, simplemente estamos extrayendo la vista de consulta, oh, lo siento. Me adelanté un poco. En realidad tenemos que llamar a load them up primero para cargar estas cosas ahora. Así que hicimos todo el trabajo para hacerlo. Veamos si realmente funciona. Para hacer eso, hicimos que fuera un punto final de tipo get para que podamos simplemente llamar, load them up. Y parece que obtuvimos un error interno del servidor aquí. Eso está bien. Hay una forma de hacer algunas pruebas si es necesario. Ignora ese comando. Es solo una cosa de Cloudflare. Lo que queremos hacer es npx wrangler tail para ver por qué falló esto. Actualiza eso. Podemos ver, ¿puede leer propiedades de indefinido? ¿Puede leer propiedades de indefinido? Así que cargamos 10 poemas. Cargamos esta parte, funcionó. Nunca llegamos aquí. Hagamos un console.log de los poemas para ver cómo se ve realmente eso, asegurémonos de que esté en el formato que esperamos. Voy a querer implementar eso de nuevo. Esto es parte de la diversión, ¿verdad? Siempre demos en vivo, codificación en vivo, tratando de resolver las cosas sobre la marcha aquí. Eso se ve bastante bien para mí. Tenemos nuestras cosas.

21. Creación de un Chatbot con Cloudflare Workers AI

Short description:

Hemos solucionado el problema con la creación de documentos y hemos cargado con éxito poemas en VectorDB. La búsqueda de 'goose' devolvió el poema con la palabra 'goose' y otros resultados relacionados. Nuestra API valida que podemos cargar y ver los poemas. Ahora estamos listos para crear un chatbot utilizando el paquete Cloudflare Workers AI, específicamente el componente de chat.

Console.log poemas. Hicimos nuestra barra diagonal. Eso se ve bien. Sería agradable. Creo que estamos fallando en el momento de creación del documento. Entonces, tal vez también hagamos un, oh, solo tenemos el poema individual aquí. Así que no se ve tan mal allí. Hacer un despliegue rápido y tail. Pero si funcionara la primera vez, estaría asombrado. Oh, interesante. Entonces, parece que poemas es un, eso es un índice. Creo que obtenemos cero de esto. Entonces, lo que cambié aquí. Gracias. Sí, ese es el problema. Oh, quiero decir, en lugar de const not in, sino of. Sí, tienes toda la razón. Hombre, gracias, gracias por eso detalle. Por eso es bueno tener un poco, es un verdadero ejercicio de colaboración aquí.

Genial. Esto debería funcionar ahora. Pero verifiquemos triplemente eso. Vemos que está girando durante un tiempo. Eso suele ser una buena señal. Significa que está intentando hacer algo. Volvamos a nuestros registros. Tomó un poco de tiempo para aparecer aquí. Pero veamos qué obtenemos. Sí, mira eso. Ahora podemos ver que hemos insertado una cantidad de registros con el texto de nuestros, sí, nuestros poemas. Esto es genial. Agradezco que hayas notado nuevamente, ese, ese, ese, ese, ese pequeño paquete allí con el de versus in. Me encanta ver eso. Entonces, ahora haremos, ahora probaremos realmente esta búsqueda. Ahora que tenemos cosas en, en VectorDB, si buscamos, vemos una cola. Sé que geese está aquí. Estoy bastante seguro. O tal vez sea goose. Eso afecta un poco los resultados. Pero hagamos goose. Buscaremos esto para goose. Y así, de esa manera, vemos que obtenemos vemos que obtenemos de vuelta. Este es el, este es el poema que tiene el goose en él, justo aquí. Y un par de otros, vemos uno que tiene, estoy seguro de que hay un par de otros con pájaros y cosas así. Pero eso no importa demasiado. De todos modos, validation que realmente podemos cargar los poemas, y que están en el orden que esperábamos que estuvieran. Hay algunos, sí, ese gander goose, pequeños pájaros, todo esto tiene sentido. Estamos viendo, estamos viendo cosas así. Hay un poco de tema aquí. Sí, creo que se ve bastante bien. Tenemos una API que realmente valida que podemos ver lo que ver las cosas. Pasemos a la parte divertida, que es hacer un tonto Guinness como un chat, un chatbot es la idea aquí. Al estilo de un mensajero instantáneo, aunque estamos hablando con un cupido, o su nombre es Bernard el bardo en este caso, pero un tipo de persona similar a un cupido. Así que vamos a hacer esto. Lo primero es lo primero, queremos leer lo que llegó. Así que diremos allí, solicitud. Por ahora, diremos que el cuerpo es igual a C.request.json. Esto es en realidad una operación de búsqueda. Así que esperemos eso. Y esto nos dará la entrada que luego podemos usar para alimentar nuestro proceso aquí. También necesitamos lo mismo que antes. Necesitamos acceso al almacenamiento y a la vectorización. Para poder hacer nuestra búsqueda. Así que simplemente copiaremos y pegaremos eso de nuevo, debería verse exactamente igual. Ahora queremos configurar un poco más el chatbot. Así que vamos a hacer eso. Entonces para el chat, o algo así, en el chat es usted y esto va a ser chat. Cloudflare workers AI. Esto también proviene de el paquete lang chain Cloudflare, ya preconfigurado para hacer lo que queremos en cuanto a cosas de chat. Hay un montón de otros modelos disponibles que hacen cosas como reconocimiento de imágenes e incluso generación de imágenes y cosas así. Pero vamos a trabajar con

22. Configuración del Chatbot con Modelo de IA

Short description:

Configuramos el modelo, el ID de cuenta y el token de cuenta. Utilizamos el almacenamiento para obtener datos para chatear. Alimentamos el mensaje del usuario y el contexto de la conversación en el modelo para obtener la respuesta deseada. Definimos las reglas del chatbot y el mensaje del sistema. ¡Nuestro bot está listo para chatear!

chat para este caso. Y queremos decir que este modelo va a ser, ahora en este caso, en realidad permitimos que las personas pasen el modelo que desean usar. También podríamos codificar esto. Pero ya tengo la interfaz configurada para enviar esto, así que podemos simplemente pasarlo, tomarlo de la solicitud que hemos analizado. Y ahora necesitamos configurar el ID de cuenta y el token de cuenta. Esto nos llevará de vuelta a el ID de cuenta de Cloudflare, el token de API de Cloudflare. Volveremos a esto. Sí, simplemente pondremos un gran to do, porque necesitamos completar esto. Nos preocuparemos por eso en un momento.

Bien, ahora tenemos nuestro almacenamiento, pero queremos usarlo para obtener cosas de él ahora con el fin de chatear. Nuevamente, Blank Chain ha hecho un buen trabajo construyendo algunas de estas cosas para nosotros. Hay un concepto llamado recuperadores. Eso está básicamente hecho a medida para buscar cosas en bases de datos vectoriales. Esos son genéricos para cualquier implementación de la API VectorStore, por lo que simplemente podemos pasar llamar a asRetriever en nuestro almacenamiento, y obtendremos nuestro almacenamiento. Y obtendremos algo del tipo VectorStoreRetriever, que luego podemos usar para hacer nuestras búsquedas.

Ahora esto requiere un poco de conocimiento de lo que está sucediendo en el front-end. Tendré que abrirlo en el costado cuando esto sea pequeño. Esta es la aplicación Vue. No te preocupes si nunca has usado Vue antes, no tienes que tocar esto en absoluto. La idea es, podemos ver aquí un mensaje de envío de solicitud. Nos envía un mensaje de usuario y el modelo que acabamos de usar hace un segundo, y luego los mensajes hasta ahora, que es simplemente una matriz de mensajes existentes previamente. Este mensaje de usuario es lo que vamos a usar para hacer nuestra búsqueda. Obviamente, queremos responder a lo que el usuario nos acaba de escribir. Así que diremos, capturaremos eso localmente, el mensaje del usuario es body.userMessage. Perfecto. Y luego también queremos tener el contexto histórico de la conversación. Tenemos todos los mensajes en esta lista de mensajes aquí. Haremos un poco de filtrado en eso para obtener el conjunto completo de mensajes hasta ahora. Así que mensajes, objetos de mensaje, es body.messages.map. Y para cada uno de estos, queremos decir, mensaje.rol. Hay un rol especial que Blank Chain asigna a la respuesta del chatbot, y ese es asistente. Así que diremos, si proviene del asistente, etiquetarlo como un mensaje de IA. De lo contrario, simplemente usaremos el mensaje en sí. Y también queremos incluir en esa matriz el contenido de ese mensaje. Sí, está bien. Tenemos nuestros mensajes que provienen del usuario, tenemos nuestro contexto aquí. Ahora queremos alimentar eso en nuestro modelo para que nos devuelva lo que nos interesa escuchar. Aquí es donde realmente entramos en programar la IA y la plantilla de la solicitud con la ingeniería de la solicitud. Así que si nunca has mirado detrás de las escenas antes, la mayoría de los chatbots tienen un conjunto de programación de parámetros donde se configuran en un formato legible por humanos para ser como, este es tu nombre, nunca debes hablar de cómo vas a destruir el mundo, todas esas cosas. Solo un poco de lo que estamos haciendo aquí. Este es un chatbot, veamos, mira mis notas nuevamente para ver de dónde viene esto. Chat, incorrecto, no me lo dará gratis esta vez. Blank Chain, plantilla de solicitud de chat. De acuerdo, el tipo actual de actividad que está sucediendo ahora mismo es la plantilla de solicitud de chat. Eso es lo que estamos buscando en esto y nuevamente, podemos ver aquí que esto es nuevamente hecho a medida para la solicitud de chat y tiene muy buena documentación de cómo se ve eso. Pero aquí es donde decimos, sabes cómo se ve nuestro nuestro sistema, el chatbot. Así que sigamos adelante y hagámoslo. Plantilla de solicitud de chat dot from message messages. Y le damos tanto el sistema, veamos, es un sistema eso es algo pequeño que viene de algún lugar único. Esta plantilla de mensaje del sistema también en el mismo lugar en realidad. Y mensaje humano. Mensaje del sistema más plantilla. Eso tiene un método de plantilla divertido que llamamos y aquí es donde definimos cómo se ve nuestro cómo se ve nuestro sistema. Voy a copiar y pegar esto de mi repositorio de GitHub porque ya lo he definido un poco. Pero estas son las reglas. Nuevamente, estás definiendo las reglas para tus chatbots. Entonces, en mi caso, déjame copiar esto. Sí. Aquí es donde nuevamente puedo decirle a la IA quién es y cuáles son sus reglas. Entonces, en este caso, estoy diciendo que hoy es el Día de San Valentín, está compartiendo el amor con todos. Y su nombre es, el hecho de que se supone que use poemas que ya hemos sembrado aquí. Tiende a ser un poco prolijo, así que me gusta tratar de limitarlo a solo unas pocas oraciones. Y sí. Utiliza esos objetos de mensaje de los que acabamos de hablar como el contexto en eso. Y lo mismo para la plantilla de la solicitud. Nuevamente, también queremos decirle lo que ha dicho el humano. Entonces, eso es lo que esta plantilla de mensaje humano de la solicitud del usuario mapea de nuevo al cuerpo que se mapea al mensaje que proviene de nuestro front-end aquí. Y así, de esa manera, hemos definido nuestro bot realmente. Gracias por pasar, Raiz. Te agradezco.

23. Completando la Cadena de Lane

Short description:

Configuramos nuestra indicación e importamos las dependencias necesarias. Definimos los poemas y el mensaje del usuario como entradas. Formateamos los documentos como una cadena y utilizamos el analizador de salida de cadena. Transmitimos el mensaje del usuario y devolvemos el resultado utilizando la función Hono. Nuestra cadena está casi completa.

Genial. Estamos muy cerca. Estamos cerca de la recta final aquí, lo prometo. Entonces, ahora tenemos nuestra indicación configurada. Queremos usarla en, ya sabes, la cadena de Lane. La cadena de Lane realmente se compone de lo que se llama secuencias ejecutables. Habría pensado que eso estaría disponible como una exportación. Pero aparentemente no. Secuencia ejecutable para ejecutables principales. De acuerdo. Entonces, importamos Lane Chain. ¿No hay ID de cuenta de CloudFlare? Sí. Sí, sí, sí. Eso sucederá. Esta es la tarea pendiente que tenemos aquí. Necesitamos completar esto. Tarea pendiente para obtener eso. Y eso es lo que haremos. Nos saca un poco del código para hacer eso. Pero eso es lo esperado por ahora, al menos. Es un buen intento, sin embargo. Entonces, secuencia ejecutable. Si estás tratando de ejecutar el que ya está completo, significa que debes ir a tu ReadMe. Te diré qué, si no terminamos esto en cinco minutos, simplemente eliminaremos el completado y te mostraré exactamente cómo hacerlo funcionar. Pero hasta entonces, intentaremos completarlo. Porque es un poco complicado. Si no has configurado un token de API de CloudFlare antes, es un poco... Sí, tienes que pasar por algunas páginas para hacerlo. Pero llegaremos allí. Genial. Ahora tenemos nuestras importaciones. Queremos la secuencia ejecutable. Las secuencias ejecutables son el núcleo de la cadena. Es de donde viene la cadena. Ejecuta una serie de operaciones y un LLM. Ahora tenemos nuestra indicación. Esa es una de nuestras entradas en esta cadena. Entonces, lo primero que haremos es decir que, hey, los poemas en esto provienen del recuperador, el recuperador del almacén vectorial, y que lo vamos a pasar a una función que hace un formato especial para nosotros, pero también proviene de LaneChain de serie. Simplemente tomará los documentos que creamos anteriormente y los unirá en una cadena. Y básicamente diremos que originalmente eran de tipo cadena, por lo que es seguro leerlos como cadena. Eso proviene de LaneChain a documento. Y es formato de documento como cadena. Genial. Tenemos eso. Y, veamos. También queremos importar nuestro mensaje del usuario. Estas son las entradas en esta indicación aquí. Puedes ver que hay una plantilla para los poemas y una variable de plantilla para el mensaje del usuario. Definimos eso aquí para poder usarlo realmente. Sin embargo, queremos pasar las cosas como un mensaje del usuario, así que hacemos eso. Y nuevamente, lo pasamos a la indicación para que podamos completarlo. Y también, en el chat. Necesitamos el analizador de salida de cadena. Y luego iremos a LaneChain. Y porque vamos a leer esto como una cadena, lo analizamos como una cadena. Analizador de salida de cadena. Muy bien. Ahora podemos transmitir. Oh, espera. Vamos a transmitir esto para obtener, ya sabes, como una especie de estilo de escritura a medida que escriben. Podríamos evitar eso y hacerlo todo de una vez si quisiéramos, pero es divertido tener el estilo de mensaje en tiempo real, creo. Entonces, vamos a transmitir el mensaje del usuario y vamos a, oops, devolver, transmitir texto. Oh, Hono. Esa es la función Hono. Y eso va a C, que, sí, esto originalmente entró en nuestra función, contiene todo el contexto. Y veamos aquí. Esta es una función anónima. Ahora, veamos si lo acepta.

24. Configuración de Tokens de API y Variables de Entorno

Short description:

Configuramos los tokens necesarios para Cloudflare y Workers AI. Los tokens nos permiten leer y recuperar datos del almacenamiento y permiten que el modelo de IA funcione correctamente. Creamos un token de API con los permisos requeridos y configuramos el ID de cuenta como una variable de entorno. Si estás siguiendo el proceso, estas variables eran cadenas vacías anteriormente, pero ahora están completas. Cada participante debe crear su propio token de API.

O, espera. Oh, sí. Entonces, queremos hacer cada token. Bueno, este es un término un poco confuso. No son los mismos tokens de los que hablamos antes. Este es un token en nuestro flujo de texto de Hono, pero esto está fuera del espacio de IA y de vuelta al espacio de respuesta. Pero en esencia, nos permite escribir data parcial en el front-end. Oh, eso es lo que transmitimos, ¿verdad? Y eso es lo que debería llevarnos allí. Nuevamente, hay mucho sucediendo aquí. Entiendo perfectamente si es difícil de seguir. Pero tenemos nuestras incrustaciones de IA en nuestro almacenamiento, así que tenemos todo lo necesario para obtener las incrustaciones reales de lo que se nos envió. Tenemos la capacidad de leer y recuperar cosas existentes del almacenamiento, lo cual es bueno. Tenemos, este es el modelo de chat que nos da nuestras cosas de vuelta, nuestros parámetros para el propio bot, junto con un mensaje que el usuario nos envió, y luego algunas cosas de transmisión para enviar cosas de ida y vuelta. Esto debería ser todo lo que necesitamos. Y, ya sabes, imagino que probablemente no funcionará la primera vez. Entonces, como estamos cerca del tiempo aquí, vamos a guardar todo localmente y pasar a la rama completada y te mostraremos lo que se necesita para que eso funcione. Permíteme volver a mi toml regular para las nuevas cosas. Demo. Y demo. Genial. Entonces, necesitamos, teníamos que hacer en nuestro código fuente para completar los, ¿dónde estaba esto? Oh, sí, aquí arriba. Los tokens de API para Cloudflare. Y necesitamos eso para que Workers AI haga su trabajo. Hay un pequeño espacio en el readme que te dice cómo configurar estos valores, pero no te dice de dónde obtenerlos realmente. Entonces, permíteme guiarte a través de ese proceso y lo haremos rápidamente para el mío también. Entonces, tengo todo configurado aquí. Voy a ejecutar este primer comando. Regular secret put. Entonces, los secretos son variables de entorno protegidas. Y simplemente le das el nombre de la variable que deseas. Esto te dará un espacio para ingresar un valor secreto. El ID de cuenta proviene de diferentes lugares. La forma más fácil es probablemente simplemente ir a la URL. Bueno, en realidad, si ya estás en las páginas, y las páginas de workers ya, puedes copiar esto aquí mismo. Pero es el mismo valor que está en la URL de la cuenta también. Entonces, de cualquier manera, uno de esos funciona. Así que simplemente copio el valor allí, lo pego aquí. Éxito. Eso es bueno. Ahora, para el token de API, es un poco más complicado. Voy a, vamos a copiar esto nuevamente, configurar esto para comenzar a ejecutarse. Necesito crear un token de API que permita la lectura de Workers AI para esta aplicación. Entonces, tengo que ir aquí arriba en esta barra superior, hacer clic en el pequeño usuario. Mi perfil. Aquí a la izquierda están los tokens de API. Y podemos ver que ya tenemos algunos para nuestros inicios de sesión de Angular. Esta es la pequeña pantalla que acordamos antes, pero queremos hacer un nuevo token que podamos usar para este proyecto. Entonces, haz clic en sí, crear token. No sé si alguna de estas plantillas tiene todo lo que queremos aquí. Creo que honestamente, probablemente solo necesitamos workers. Eso es probablemente todo lo que necesitamos. Entonces, vamos a usar eso como plantilla. Voy a cambiarle el nombre, no tienes que cambiarlo si no quieres, pero lo haré por el bien de la claridad aquí. Lo renombraré a DevOps JS workshop. Workers AI. De acuerdo. Y podemos ver que esto nos da el permiso para leer de Workers AI, que creo que es todo lo que necesitamos para este token. Podemos limitarlo a solo una cuenta. Eso probablemente no es mala idea. Solo digamos que es válido para esta cuenta compartida aquí. No tienes que preocuparte por el filtrado de IP. Puedes hacerlo si eres hiperparanoico, pero no es necesario. Y luego puedes establecer un TTL para cuánto tiempo vive ese token. Solo lo dejaré hasta el sábado porque no vivirá mucho tiempo. Pero si hago clic en aceptar, me da una pequeña descripción aquí. Y hago clic en crear token, lo que me da esta página. Entonces, voy a copiar ese valor, volver a mi terminal que tiene esta configuración. Y, boom, ahora tengo el token y el valor del ID de cuenta según sea necesario. Y si estás siguiendo el proceso, estas eran cadenas vacías. Si estás en la rama completada, ahora están completas porque realmente agrega esas variables de entorno al contexto de la cuenta que se recibe.

25. Creación de Tokens de API y Despliegue

Short description:

Configuramos los tokens necesarios para Cloudflare y Workers AI. Los tokens nos permiten leer y recuperar datos del almacenamiento y permiten que el modelo de IA funcione correctamente. Creamos un token de API con los permisos requeridos y configuramos el ID de cuenta como una variable de entorno. Si estás siguiendo el proceso, estas variables eran cadenas vacías anteriormente, pero ahora están completas. Cada participante debe crear su propio token de API.

¿Cada uno de nosotros tiene que crear un token de API? Sí. Esto es específico de la cuenta de usuario, no es un tipo de cuenta global específica. Quiero decir, podría compartir el mío contigo, pero estarías usando mi cuenta. Así que probablemente no es una buena idea. Definitivamente es algo que quieres crear por tu cuenta. Y, nuevamente, si necesitas que te guíe nuevamente, puedo hacerlo. Eran tokens de API aquí. Crear token workers AI. Y luego podrías hacer un poco de filtrado allí, si quisieras, pero incluso si te quedas con los valores predeterminados, es suficiente. Podemos ver que eso existe aquí. Entonces, si todo salió bien, deberíamos poder desplegar esto. Y crucemos los dedos. Oh. Creo que la cola. Lo siento, ella esta vez. Tengo. Oh, vaya. Lo siento. Tal vez esa sea la razón por la que no funcionaba. Sigo diciéndote que ejecutes NPX Wrangler deploy. Esto dice algo especial con Vue. En lugar de ejecutar NPX Wrangler deploy, si simplemente ejecutas NPX run deploy, esto pasa una carpeta de activos que carga los data. Oh, hombre. Lo siento. Olvidé que eso era necesario para este proyecto. Y ahora, si cargo esto. Efectivamente, tenemos nuestro pequeño chat. Y podríamos decir, ¿qué animales te recuerdan al amor? Y está respondiendo. Esto sigue al ganso y la gansa que estábamos viendo antes. Pero, tada. Tenemos una aplicación de chat funcional. Este es el mismo código exacto que estábamos viendo hace un momento.

Lo siento. La pieza que faltaba era el NPM run deploy. No Wrangler deploy. Espero que hayas disfrutado esto. Sé que nos quedamos sin tiempo. Eso fueron tres horas completas. Estoy dispuesto a quedarme si las personas quieren que todo funcione al 100%. Me quedaré unos diez minutos adicionales aproximadamente. Pero sé que también se nos acabó el tiempo. Fue un placer. Y realmente, realmente aprecio que todos se hayan quedado y hayan pasado un buen rato y espero que hayan sacado algo interesante. De hecho, tengo un pequeño final aquí. Gracias por lograrlo. Felicidades por haberlo logrado. Nuevamente, sé que todos sabemos esto. Pero, la IA sin servidor no es una solución mágica. Pero es bastante buena. Y bastante fácil para prototipos rápidos. Especialmente cosas como rags donde puedes tener modelos más estáticos. Y puedes usar soluciones existentes para bases de datos vectoriales y cosas así . Lo que creamos fue un poeta realmente genial. Puede darnos poemas de amor y citarlos a su manera peculiar. Pero imagina si esto también estuviera usando documentación para desarrolladores o algo así. Sería súper, súper útil. De hecho, tenemos un pequeño producto llamado CloudFlareCursor que utiliza casi exactamente la misma configuración. En lugar de sembrar poemas de amor, sembramos la documentación de los trabajadores de CloudFlare. Y puedes preguntarle, ya sabes, cómo configuro un trabajador que redirige a HTTPS? Y utilizará la documentación que tiene y el contexto que tiene para darte una respuesta real para algo así. Así que tuvimos una pequeña demostración divertida de esto. Muy, muy poderoso si se aplica a otras aplicaciones y cosas así. Subiré estas diapositivas. Pero también tengo algunos enlaces adicionales para leer y aprender. Pero muchas gracias. Y, nuevamente, si tienes que irte, entiendo completamente. De lo contrario, me quedaré y haremos que esto funcione para todos. ¿Querías que te muestre nuevamente la creación de un token de API? Sí. Si vas a API, lo siento, haz clic en este pequeño menú desplegable de usuario aquí arriba y ve a mi perfil. Eso te dará esta pantalla. Y aquí a la izquierda

26. Uso de la Plantilla de Workers AI y Precios

Short description:

Puedes utilizar la plantilla de Workers AI beta sin realizar ningún cambio. El valor obtenido en la siguiente pantalla debe pegarse en el token de API de Cloudflare. Actualmente, el costo es gratuito para los usuarios del plan de pago de workers, pero habrá cambios en los precios en el futuro. El costo depende del uso y del tamaño del conjunto de datos. No dudes en hacer preguntas en el canal de Discord de CloudFlare sobre Vectorize y Workers AI. Agradecemos tu participación y esperamos que hayas disfrutado de la masterclass. ¡Feliz Día de San Valentín!

son los tokens de API. Donde puedes crear un token. Y simplemente usando la plantilla de workers AI beta llegarás allí. Honestamente, ni siquiera tienes que cambiar esto si no quieres. Puedes simplemente continuar con el resumen y estarás bien. Pero ese valor que obtienes en la siguiente pantalla es el que debes pegar en el token de API de Cloudflare que te proporciona este comando. Saludos a todos. Y, nuevamente, aprecio que todos se hayan unido. Es genial. Estaré atento a las preguntas durante los próximos minutos. Pero, que tengan un hermoso Día de Acción de Gracias, o no, Día de San Valentín.

Sí, está bien. Estaba diciendo que solo en este caso, sí, está restringido solo a los poemas. Pero eso es porque se lo indicamos en nuestra configuración o parámetros para el bot. Dijimos que use al menos dos líneas de un poema en cada respuesta y que no invente las suyas propias. Entonces, en este caso, es lo suficientemente inteligente como para saber que tiene que usar algo de esta lista que le hemos dado aquí. Pero no tiene que ser así. Definitivamente puedes darle un espectro de operación mucho más abierto . Gran parte de eso depende de ti y es interesante. La ingeniería basada en la indicación es su propio pequeño microcosmos de cosas a considerar. Sí, Frank, tienes una buena pregunta sobre el costo. En este momento, todo es gratuito. Tendré que poner un asterisco en eso. Es gratuito si tienes un plan de pago de workers. El Vectorize en sí solo está disponible para usuarios de workers de pago, por eso tuvimos que pasar por el proceso de agregar personas a una cuenta específica para que esto suceda realmente. Esto es mientras están en beta. Planeamos cambiar eso. Planeamos cambiar los precios una vez que se lance oficialmente. Toda esa información de precios ya se ha publicado, ya es información pública. Pero, al menos, es una forma para nosotros de hacerlo. Como mencionamos con serverless, todo se basa en el uso. El almacenamiento de vectores, depende de qué tan a menudo estés consultando tus data. En este caso, probablemente ni siquiera sea un centavo. Porque no estamos usando esto muy intensamente. Pero según cómo sea tu tráfico , puedes ver que obtienes 30 millones de forma gratuita una vez que lleguemos allí, una vez que esto se lance oficialmente. A menos que estés usando esto de manera muy intensa, es posible que no te cueste mucho. Pero entiendo que mucho de eso depende del uso y hay algunos cálculos para ejemplos de uso y cosas así en esta página. Pero para aficionados y usuarios como tú, también depende del tamaño de tu conjunto de data. Pero teóricamente, podría ser muy poco, muy, muy poco. Creo que cubrí lo que dije. Repetí lo que había omitido originalmente. Pero si hay algo específico que quieres que repase, puedo hacerlo. Tengo unos dos minutos más antes de tener que irme por otras obligaciones. Pero todavía veo a personas charlando, así que todavía no me voy.

Sí, Forrester. De nada. Tenemos un Discord. Si aún no has visitado el Discord de CloudFlare, ahí es donde muchos de nosotros pasamos el tiempo. Pero hay un canal específico para Vectorize y otro para Workers AI también. Sí, eres totalmente bienvenido a hacer cualquier pregunta que tengas. Esto va para todos. No solo para Forrester aquí. Pero sí, si tienes alguna pregunta que se te ocurra después de esto y quieres aclaración, únete a CloudFlare Discord, busca ese canal de Vectorize o el de Workers AI. Y simplemente deja un mensaje allí y te responderemos. Todos somos bastante buenos para monitorear esas cosas. Pero saludos a todos. Creo que fue realmente, realmente divertido. Me sorprende que realmente hayamos logrado llenar las tres horas que teníamos. Lo logramos. Y lo hicimos con éxito. Así que sí, también tengo algo de tiempo libre. ¿Hay una plantilla de documentación sin indicación? Sí, tenemos muchas plantillas y tutoriales para esto. Vizual. Probablemente lo esté diciendo mal. Me disculpo. Ya hay muchas plantillas disponibles para esto. Mi código fuente también está ahí. Con una cuenta totalmente gratuita, esto no funcionará porque debes tener workers de pago para trabajar con Vectorize. Pero solo necesitas pagar por workers para que funcione. No hay un nivel de facturación específico para ninguna de las otras funciones de IA además de workers, al menos por el momento. Bien, saludos a todos. Que tengan un hermoso Día de San Valentín. Diviértanse juntos. Paz.

Watch more workshops on topic

React Advanced Conference 2023React Advanced Conference 2023
98 min
Working With OpenAI and Prompt Engineering for React Developers
Workshop
In this workshop we'll take a tour of applied AI from the perspective of front end developers, zooming in on the emerging best practices when it comes to working with LLMs to build great products. This workshop is based on learnings from working with the OpenAI API from its debut last November to build out a working MVP which became PowerModeAI (A customer facing ideation and slide creation tool).
In the workshop they'll be a mix of presentation and hands on exercises to cover topics including:
- GPT fundamentals- Pitfalls of LLMs- Prompt engineering best practices and techniques- Using the playground effectively- Installing and configuring the OpenAI SDK- Approaches to working with the API and prompt management- Implementing the API to build an AI powered customer facing application- Fine tuning and embeddings- Emerging best practice on LLMOps
React Summit 2022React Summit 2022
50 min
High-performance Next.js
Workshop
Next.js is a compelling framework that makes many tasks effortless by providing many out-of-the-box solutions. But as soon as our app needs to scale, it is essential to maintain high performance without compromising maintenance and server costs. In this workshop, we will see how to analyze Next.js performances, resources usage, how to scale it, and how to make the right decisions while writing the application architecture.
Node Congress 2021Node Congress 2021
245 min
Building Serverless Applications on AWS with TypeScript
Workshop
This workshop teaches you the basics of serverless application development with TypeScript. We'll start with a simple Lambda function, set up the project and the infrastructure-as-a-code (AWS CDK), and learn how to organize, test, and debug a more complex serverless application.
Table of contents:        - How to set up a serverless project with TypeScript and CDK        - How to write a testable Lambda function with hexagonal architecture        - How to connect a function to a DynamoDB table        - How to create a serverless API        - How to debug and test a serverless function        - How to organize and grow a serverless application


Materials referred to in the workshop:
https://excalidraw.com/#room=57b84e0df9bdb7ea5675,HYgVepLIpfxrK4EQNclQ9w
DynamoDB blog Alex DeBrie: https://www.dynamodbguide.com/
Excellent book for the DynamoDB: https://www.dynamodbbook.com/
https://slobodan.me/workshops/nodecongress/prerequisites.html
React Summit 2022React Summit 2022
107 min
Serverless for React Developers
WorkshopFree
Intro to serverlessPrior Art: Docker, Containers, and KubernetesActivity: Build a Dockerized application and deploy it to a cloud providerAnalysis: What is good/bad about this approach?Why Serverless is Needed/BetterActivity: Build the same application with serverlessAnalysis: What is good/bad about this approach?
GraphQL Galaxy 2021GraphQL Galaxy 2021
143 min
Building a GraphQL-native serverless backend with Fauna
WorkshopFree
Welcome to Fauna! This workshop helps GraphQL developers build performant applications with Fauna that scale to any size userbase. You start with the basics, using only the GraphQL playground in the Fauna dashboard, then build a complete full-stack application with Next.js, adding functionality as you go along.

In the first section, Getting started with Fauna, you learn how Fauna automatically creates queries, mutations, and other resources based on your GraphQL schema. You learn how to accomplish common tasks with GraphQL, how to use the Fauna Query Language (FQL) to perform more advanced tasks.

In the second section, Building with Fauna, you learn how Fauna automatically creates queries, mutations, and other resources based on your GraphQL schema. You learn how to accomplish common tasks with GraphQL, how to use the Fauna Query Language (FQL) to perform more advanced tasks.
JSNation Live 2021JSNation Live 2021
81 min
Intro to AI for JavaScript Developers with Tensorflow.js
Workshop
Have you wanted to explore AI, but didn't want to learn Python to do it? Tensorflow.js lets you use AI and deep learning in javascript – no python required!
We'll take a look at the different tasks AI can help solve, and how to use Tensorflow.js to solve them. You don't need to know any AI to get started - we'll start with the basics, but we'll still be able to see some neat demos, because Tensorflow.js has a bunch of functionality and pre-built models that you can use on the server or in the browser.
After this workshop, you should be able to set up and run pre-built Tensorflow.js models, or begin to write and train your own models on your own data.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Scaling Up with Remix and Micro Frontends
Top Content
Do you have a large product built by many teams? Are you struggling to release often? Did your frontend turn into a massive unmaintainable monolith? If, like me, you’ve answered yes to any of those questions, this talk is for you! I’ll show you exactly how you can build a micro frontend architecture with Remix to solve those challenges.
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Full Stack Components
Top Content
Remix is a web framework that gives you the simple mental model of a Multi-Page App (MPA) but the power and capabilities of a Single-Page App (SPA). One of the big challenges of SPAs is network management resulting in a great deal of indirection and buggy code. This is especially noticeable in application state which Remix completely eliminates, but it's also an issue in individual components that communicate with a single-purpose backend endpoint (like a combobox search for example).
In this talk, Kent will demonstrate how Remix enables you to build complex UI components that are connected to a backend in the simplest and most powerful way you've ever seen. Leaving you time to chill with your family or whatever else you do for fun.
React Advanced Conference 2022React Advanced Conference 2022
29 min
Understanding React’s Fiber Architecture
Top Content
We've heard a lot about React's Fiber Architecture, but it feels like few of us understand it in depth (or have the time to). In this talk, Tejas will go over his best attempt at understanding Fiber (reviewed by other experts), and present it in an 'explain-like-I'm-five years old' way.
JSNation 2023JSNation 2023
24 min
AI and Web Development: Hype or Reality
In this talk, we'll take a look at the growing intersection of AI and web development. There's a lot of buzz around the potential uses of AI in writing, understanding, and debugging code, and integrating it into our applications is becoming easier and more affordable. But there are also questions about the future of AI in app development, and whether it will make us more productive or take our jobs.
There's a lot of excitement, skepticism, and concern about the rise of AI in web development. We'll explore the real potential for AI in creating new web development frameworks, and separate fact from fiction.
So if you're interested in the future of web development and the role of AI in it, this talk is for you. Oh, and this talk abstract was written by AI after I gave it several of my unstructured thoughts.
React Summit US 2023React Summit US 2023
30 min
The Rise of the AI Engineer
We are observing a once in a generation “shift right” of applied AI, fueled by the emergent capabilities and open source/API availability of Foundation Models. A wide range of AI tasks that used to take 5 years and a research team to accomplish in 2013, now just require API docs and a spare afternoon in 2023. Emergent capabilities are creating an emerging title: to wield them, we'll have to go beyond the Prompt Engineer and write *software*. Let's explore the wide array of new opportunities in the age of Software 3.0!