IA a demanda: IA sin servidor

Rate this content
Bookmark

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

Nathan Disidore
Nathan Disidore
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

La masterclass explora la intersección de sin servidor e IA, discutiendo los conceptos básicos, beneficios, escalabilidad y desafíos de sin servidor. También se adentra en los componentes de la arquitectura de IA, bases de datos vectoriales y el uso del contexto en las consultas. La 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. La 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 a la 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 realizaremos un ejercicio práctico. La masterclass está programada para durar tres horas, y tomaremos descansos. Para participar, necesitarás una gorra de pensar, un editor para codificar en JavaScript, Node instalado y una cuenta gratuita de CloudFlare. Rellena el formulario que proporciono para acceder a la cuenta compartida. ¡Empecemos!

Bienvenidos, bienvenidos a todos. Y gracias por uniros a nosotros. Y en caso de que nadie os lo haya dicho todavía, feliz día de San Valentín, si eso es lo que celebráis, y celebradlo dondequiera que estéis. Estamos encantados de teneros hoy, y vamos a divertirnos un poco con el tema del día de San Valentín. Podemos ver incluso desde el principio, nuestro pequeño amigo robot nos está dando un poco de amor de entrada. Así que sí, de nuevo, gracias por uniros. Si estás buscando la masterclass o el curso sobre AI bajo demanda, entonces estás en el lugar correcto. Y vamos a empezar esta fiesta. Una pequeña 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, de hecho. Estoy trabajando en la base de datos vectorial DB que tenemos. Y si no sabes qué es eso, entraremos en detalles de qué es eso en unos pocos minutos. Pero sí, he estado en CloudFlare durante un poco más de cuatro años ahora. He desempeñado una variedad de roles en la empresa, trabajando, de nuevo, más recientemente en AI, pero en nuestras ofertas de serverless antes de eso, y antes de eso, en un rol más tradicional de back-end donde estamos lidiando con cosas como clusters de Kafka, que procesan, ya sabes, un par de terabytes, un par de billones y valen, billones de mensajes cada día, servicios de notificación de alertas, ese tipo de cosas internas de tooling. Estamos encantados de teneros. Y sí, hablemos un poco sobre qué esperar aquí para empezar. Vamos a establecer el escenario o daros el programa básico, por así decirlo. Así que, esto es, básicamente lo que vamos a hacer para empezar es repasar algunas diapositivas. Definitivamente quiero que esto sea interactivo. Y de nuevo, entraremos en eso en un minuto. No quiero estar hablando a vosotros. Haremos esto más un diálogo. Pero sí, repasaremos algunos conceptos básicos para establecer el escenario para lo que vamos a hacer, ya sabes, en la parte más práctica de todo esto. Y una vez que hayamos hecho eso, entraremos en la parte práctica de esto. Y todos podréis construir algo por vuestra cuenta para probar estas cosas en el mundo real. Aquí está cómo se ve nuestra agenda. Ya sabes, los puntos que vamos a tocar son primero vamos a hablar de qué es serverless. Hay bastantes de vosotros probablemente ya familiarizados con los conceptos allí. Pero sólo un pequeño repaso para las personas que no están tan familiarizadas o que nunca lo han usado antes por sí mismas. Hablaremos sobre AI, que imagino que un poco más de gente no está familiarizada con. Pero sí, saltando eso haremos un pequeño pulso aquí en un segundo para ver cómo se ve eso. Y luego veremos cómo se ve para unir esos conceptos en cómo serverless y AI pueden trabajar juntos. Y no es fácil hacer que eso suceda. Pero creo que al final de esto discutiremos qué... Oh, hola, Christina espectadores de todo el mundo aquí. Sí, hablaremos de cómo, ya sabes, somos capaces de unir estos dos conceptos en algo que funciona juntos. Y luego nos pondremos manos a la obra y realmente nos pondremos manos a la obra. Así que, espero que hoy, la conclusión será de nuevo, uno, si no has aprendido sobre cuáles son los bloques de construcción de una aplicación de AI architecture, te llevarás eso. Pero más importante, para ya sabes, la esencia de esta charla es que, ya sabes, cómo vamos a ser capaces de aplicar algunos de los conceptos de serverless a la tradicional AI architecture, y la búsqueda semántica, y serverless específicamente. Así que de nuevo, si no estás familiarizado con la búsqueda semántica, lo cubriremos en la sección de AI de nuestros repasos aquí. Pero esto es lo que espero que te lleves de lo que vamos a hablar aquí, las próximas tres horas. Y sí, tal vez eso es algo bueno para señalar. Así que es un buen punto de partida, donde esta masterclass está programada para durar tres horas. Eso es mucho tiempo, vamos a estar aquí durante bastante tiempo. Así que, ya sabes, definitivamente por tu bien y por el mío, definitivamente voy a ser consciente del tiempo. Y, ya sabes, tenemos un par de descansos incorporados para asegurarnos de que somos capaces de estirarnos y usar las instalaciones y tal vez conseguir aperitivos o algo así. Porque, ya sabes, definitivamente queremos mantenernos hidratados y, ya sabes, mantenernos sanos y alimentados y todo eso también. Aquí hay algunas cosas que vamos a necesitar para hacer que esta masterclass sea un éxito. Definitivamente queremos que tengas tu gorra de pensar puesta para que puedas estar en una actitud y espíritu de aprendizaje para recoger lo que estamos lanzando. Y para la parte en vivo, definitivamente vamos a querer algún editor que seamos capaces de usar para hacer la parte de codificación en vivo de esto. Vamos a estar codificando en JavaScript. Si no lo entiendes completamente, estos conceptos no son exclusivos de JavaScript en absoluto. Es sólo lo que hace las cosas un poco más fáciles. Y sí, también necesitaremos una cuenta de CloudFlare lo siento, necesitaremos Node instalado porque vamos a estar codificando 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 de nivel gratuito. Y hay un formulario que te voy a dar en un segundo también. Eso me dará la información que necesito para añadirte a una necesitamos algunos privilegios especiales para hacer que esto funcione. Así que si vas aquí y rellenas esto configura una cuenta y rellena este formulario de Google con la dirección de correo electrónico que utilizaste para configurar la cuenta, entonces puedo añadirte a una cuenta compartida que todos vamos a usar para este ejercicio y tendrás los privilegios que necesitas para hacer que esto funcione. Déjame copiar y pegar eso en el chat también porque eso probablemente será más fácil para todos seguir. Pero el código QR code está ahí si puedes escanear eso 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 doy cuenta de que envié eso como un mensaje directo.

2. Entendiendo 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 usando Serverless actualmente, pero eso es de esperar. Las personas son positivas hacia la IA. Ahora, profundicemos en Serverless. Es un término controvertido, pero desde la perspectiva del cliente, se refiere a implementaciones sin infraestructura que están altamente distribuidas. A menudo se basa en microservicios y función como servicio. Los beneficios incluyen facilidad de implementación y escalabilidad. AWS Lambda es una plataforma serverless popular.

Permíteme intentarlo de nuevo. Ahí vamos. Excelente. Genial. Así que comencemos aquí. Y de nuevo, quiero animarte. Esto es, de nuevo, una masterclass de tres horas. Así que eres 100% bienvenido a hacer preguntas. No estoy tan familiarizado con Zoom, pero supongo que es como un levantar la mano o algo así. Quiero hacer esto interactivo. Estamos teniendo un diálogo aquí. Y tal vez eso sea una buena transición para iniciar una rápida encuesta. Me gustaría saber un poco sobre los antecedentes de todos aquí. Así que estoy lanzando una encuesta. No estoy exactamente seguro de cómo esto aparece en su lado, pero deberían poder ver algunas preguntas que simplemente dan una sensación general de cuál es su brecha de conocimiento actual. Veamos. Veremos dónde se sitúan las personas aquí. Muy bien. Veamos qué tenían que decir las personas. Vaya, tuvimos suerte. Muchas personas se sienten cómodas con JavaScript aquí. Así que eso es excelente para lo que estamos tratando de hacer. De nuevo, nada aquí es exclusivo de JavaScript. Es simplemente la pila con la que vamos a trabajar hoy. Lo bueno de incluso algunos de las APIs que estamos usando es que son bastante agnósticas al lenguaje, especialmente en el espacio de la AI. Python parece ser uno de los standards de facto al menos para prototipos y cosas así. Así que definitivamente hay opciones allí. Pero parece que todos están bastante cómodos con JavaScript. Me encanta ver eso. Sí, esto va a ser lo interesante, creo, porque me doy cuenta de que esta es la conferencia de DevOps, y Serverless está tratando de abstraer mucho de ese aspecto operativo, pero no de una mala manera en absoluto. Así que parece que la mayoría de las personas no están actualmente usando Serverless. Y eso es honestamente lo que esperaba, especialmente en esta conferencia. No soy un defensor de una forma u otra, pero sí, sí, es la herramienta correcta para el trabajo correcto. Una de esas situaciones. Las personas son bastante positivas hacia la AI. No te culparía en absoluto si no lo fueras. Siempre hay, definitivamente hay conversaciones que tener en ambos lados allí. Pero hay, de nuevo, tiempo y lugar, y vale la pena. Esta es una conferencia de AI, o masterclass de AI. Así que supuse que la gente sería un poco más positiva hacia ella. Pero pero no voy a abogar de una forma u otra, os dejaré hacer eso a vosotros mismos. Y creo que eso está bien para mí. Lo daremos por bueno. Esto es un Sí, esto es eso es un buen, un buen ahora sabemos cuál es la común comunalidad y qué son los antecedentes de las personas. Es establecerá un poco el escenario para a dónde vamos a llegar aquí. Vamos a entrar en Serverless. Así que sí, eso sería increíble. ¿Qué es Serverless? Y resulta que esto es bastante controvertido. Para llegar a una definición aquí. Pregunté a un par de compañeros de trabajo, les mostré estas diapositivas, y ellos tenían sus propias opiniones. Y supongo que también depende un poco, ya sabes, si estás mirando desde el punto de vista de la plataforma o del cliente. Pero al menos en mis ojos, esta definición parece encajar, donde básicamente, ya sabes, implementaciones sin infraestructura de cualquier aplicación que estás tratando de sacar casi siempre de una manera altamente distribuida. Puse infraestructura en un asterisco y le di el viejo. Dale el viejo Oh, seguro, lo que tú digas sobre un regalo aquí de Jennifer Lawrence, porque, ya sabes, sin infraestructura, es...es una mentira. Siempre es la computadora de otra persona al final del día 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 tiempo de ejecución que vive en una plataforma como servicio. Eso también se ejecuta en cualquier red que esa plataforma posee. Destaqué el micro aquí, especialmente porque uno porque es divertido decir tiempo de ejecución suena como suena digno de mención. Pero muchas veces estás ejecutando microservices en estos despliegues de serverless. Así que realmente estás haciendo función como servicio es lo más a menudo lo que estás haciendo más a menudo allí. Cuando estás apuntando a un estilo de despliegue serverless allí. ¿Por qué querrías hacer algo así? Esa es una buena pregunta. Especialmente la parte abstraída. Bueno, creo que uno de los beneficios definitivos es la facilidad de despliegue. Podemos darle un diagrama de lo que se ve un despliegue tradicional especialmente de AI un poco. Y veremos que es bastante complicado. serverless en general elimina gran parte de la carga cognitiva allí, simplemente haciéndolo normalmente como una operación de una línea para hacer un comando de terminal de despliegue y sacar las cosas. La scalability está integrada en la definición de serverless, ya sabes, especialmente la parte de la red distribuida. Sí, realmente te aseguras de que lo siento, realmente maltrato los nombres aquí. patrón nueva función como servicio de tierra esto es exactamente eso. Sí. AWS Lambda es una muy popular plataforma serverless para ejecutar en la parte superior, pero la función como servicio es definitivamente lo que estás

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 barato para un uso poco frecuente. También proporciona baja latencia y puede ser complejo de configurar, con algunos desafíos y trampas.

mirando allí. Pero sí, de nuevo, muy escalable, incorporado en la naturaleza de las redes en las que estás ejecutando encima. Y el hecho de que esto es tanto contra es una trampa también. Pero las cosas son están destinadas a ser sin estado, al menos de forma predeterminada. A menudo es más barato, que va un poco en tandem con el hecho de que se basa en el uso. Basado en el uso es realmente uno de los grandes puntos de venta de todo esto. Así que en lugar de tener algo funcionando 24 siete, si sólo lo estás golpeando, ya sabes, de forma poco frecuente, no tienes obtienes serverless básicamente de nuevo, ya que cada ejecución individual es su propia unidad, te cobran en función del número total de ejecuciones, que y puede puede terminar siendo más barato mucho, especialmente para proyectos más pequeños, más de hobby, donde las personas con cargas de trabajo atípicas. Esa es una gran pieza del rompecabezas. El otro, el otro interesante, ya sabes, bono aditivo aquí es que las cosas son de baja latencia, porque estás ejecutando en generalmente como una red de borde, o al menos de manera distribuida, estás ejecutando cosas más cerca de donde está el usuario final, lo que significa que tu latencia entre conexiones termina siendo mucho más rápida que tener que hacer un viaje redondo a, digamos, un centro de data completo en algún otro lugar que estás tratando de golpear. Pero sí, definitivamente hace el trabajo. Sí, veo chats de AWS Lambda no siendo muy fácil. Sí, los ecosystem ecosistemas a su alrededor pueden ser un poco complicados. Supongo que el real, ya sabes, la invocación real en sí misma es, es generalmente bastante simple, pero hombre, he estado en he trabajado en AWS bastante conmigo mismo antes y tratar de conseguir las cosas configuradas puede ser 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 evitación de 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 auto-alojamiento son factores. Ahora pasamos a la IA, vamos a explorar su arquitectura y componentes.

Genial. ¿Alguien más quiere intervenir con sus experiencias o, o, o, ya sabes, dar pros o contras que son totalmente bienvenidos también, definitivamente en un activo aquí. Tengo que ver mi dónde está mi trampa. Ah, ahí está. Ahí está mi diapositiva de trampa. Bien, después de estos casos. Así que voy a repasar esos en un segundo. Genial. Entonces, los casos de uso para serverless o, ya sabes, aplicaciones sin estado. Esto es, ya sabes, de nuevo, no tiene que ser sin estado. Pero es una especie de caso base por defecto de la mayoría de los entornos de ejecución serverless. Así que si no te importa cómo se ven las cosas, o realmente quieres un lienzo en blanco entre ejecuciones, definitivamente no es mala idea mirar como una implementación serverless architecture. Aplicaciones que requieren scalability. De nuevo, esto viene gratis. Porque realmente de lo anterior. Y el hecho de que estamos ejecutando, generalmente en algún tipo de entorno aislado. Para Lambda, eso suele ser como Docker containers. Para CloudFlare eso es, son como aislamientos de nodo, pero algún tipo de tiempo de ejecución aislado. Y esas ejecuciones individuales realmente ayudan con la scalability. El tráfico impredecible también puede ser agradable. Ya sabes, si eres, de nuevo, gente de DevOps, estoy seguro de que estás familiarizado con esto, pero tener que entrar y configurar como HBAs, o algún tipo de balanceadores de carga y auto escaladores y cosas así para para el tráfico que, ya sabes, sigue algún tipo de curva sinusoidal puede ser molesto es una buena manera de ponerlo. Así que con serverless, no tienes que preocuparte por eso. De nuevo, estás basado en el uso, pero también eres infinitamente escalable, hasta los límites del proveedor, pero no tienes que preocuparte por todas esas cosas con serverless. Y luego hay, algunas personas simplemente odian, odian tener que hacer la gestión de servidores. Ya sabes, estamos hablando específicamente aquí sobre AI y ML. La mayoría de las personas de ML con las que interactué en el pasado, tienden a ser más basadas en la investigación y centradas en la investigación, que no están tan bien versadas en, ya sabes, arquitectura de servidores y todas esas cosas. Esto con con con con la configuración de serverless, de nuevo, no tienes que preocuparte por lo que acabamos de hablar de configurar HBAs y balanceadores de carga y muy complicado, ya sabes, disculpas para básicamente manejar lo que esencialmente es una indicación de función, obtenemos todo eso, todo eso todo eso se hace por nosotros. Mencioné que estaba buscando esto, de nuevo, no es una bala de plata, hay, hay, hay definitivamente trampas con serverless. Y siempre vale la pena hablar sobre esos cuando estamos mirando lo que estamos tratando de hacer aquí. Los inicios en frío son una cosa. Así que especialmente si tu, tu pequeño entorno aislado en el que están corriendo es como un, ya sabes, algo tan pesado como un contenedor de Docker, eventualmente tienes que, ya sabes, cargar cargar tus cosas en memoria, y hacerlo caliente. Así que, especialmente en una red distribuida donde estás corriendo en un montón de nodos diferentes, los inicios en frío, ya sabes, si sólo sucediera una vez, estaría bien. Pero si estás, ya sabes, corriendo en una red distribuida, como 300 ubicaciones diferentes, eso son 300 inicios en frío diferentes, si estás corriendo, llegas a cada uno de esos diferentes nodos por ahí. Así que es algo en lo que tienes que empezar a pensar un poco más es cómo mantener las cosas ligeras, y lidiar con los inicios en frío. También requiere un modelo mental diferente. Así que tu lo que normalmente piensas de una aplicación, algunas veces las cosas simplemente suceden. Y cuando estás cuando te ves obligado a pensar sin estado, definitivamente requiere un poco diferente proceso de navegación y de atravesar algunas de esas decisiones arquitectónicas que suceden en otro lugar. Sí, el tiempo de espera en AWS gateway puede ser bastante corto. Definitivamente me he topado con eso antes con lambdas. Y de nuevo, hablé de los inicios en frío que pueden ser especialmente molestos. Así que es un es un buen tiro justo allí. Creo que ya hemos tocado esto un par de veces, pero no hay memoria compartida, persistencia de estado. Hay, hay, hay un asterisco aquí también. Esto es de nuevo como el caso base por defecto, puedes añadir cosas a las lambdas, o a los tiempos de ejecución serverless para, para básicamente añadir estos externamente, pero entonces tú, entonces ya no estás, ya no estás aislado sólo a tu aplicación aquí, tienes una dependencia en algún sistema externo, o, o un tiempo de ejecución específico del proveedor, muy probablemente. Así que sí, podemos trabajar alrededor de estas cosas, pero no es, no es siempre lo más limpio del mundo. Las limitaciones de recursos caen en lo anterior un poco. Pero normalmente, de nuevo, no van a permitirte simplemente como correr infinitamente en un programa serverless. Si ejecutas tu tiempo de ejecución serverless, ya sabes, 24 siete, básicamente has construido un servidor regular que está corriendo en algún otro lugar. Así que la mayoría de las veces tienen limitaciones alrededor de eso, para, para asegurarse de que no estás obstaculizando la red. Así que es algo a considerar también. Y sí, el gasto es algo a, a pensar también, porque ellos, ya que todo está basado en el uso de recursos, sí, si corres mucho tiempo, pueden llegar a ser muy caros. El auto-alojamiento también es difícil. Es, es un poco más difícil hacer esto en casa, porque tú, ya sabes, normalmente quieres hacer esto de una manera altamente distribuida, como estábamos hablando antes. Y eso requiere, hay, hay, hay, creo, un par de soluciones por ahí para auto-alojar algunas soluciones rápidas, pero eso requiere que normalmente también tengas presencia en un montón de diferentes vcs o algo así, lo que significa que es en realidad más mantenimiento porque ahora tienes una, tienes la ventaja de una red distribuida de metales y nodos, tal vez no sea lo más divertido del mundo. Ya hicimos esto antes, dijimos, vimos que era alrededor de 50 50. Pero me gusta ver eso. Genial. Oh, sí. De nuevo, quiero que esto sea interactivo. Cualquier pensamiento final que alguien tenga sobre serverless antes de saltar a AI? Si no, podemos seguir adelante. Pero esta es tu fiesta. Así que sí, esperaremos aquí durante unos 30 segundos para ver si alguien tiene algún pensamiento final. Bien. Creo que estamos bien. Entonces pasaremos a AI. Más Jennifer Lawrence. Eso es divertido. No sé si todos ustedes ven hot ones. Pero ella es ella es

5. Componentes de la Arquitectura de IA

Short description:

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

comiendo las alas y es un gran episodio. Pero de todos modos, sí, AI en todos, todos es la palabra de moda estos días. Pero ¿qué es en realidad puedes saber qué comprende cuando AI como arquitectura y cuáles son los componentes que entran en algo de esto? Eso es lo que vamos a explorar. Ya vimos esto también. Así que no necesitamos preocuparnos por esto por cheque. Así que sí, uno de los grandes componentes en AI es el modelo en el que estás interesado en entrenar o lo siento, debería decir correr contra los modelos son muy, muy fundamentales en que son la mayor parte de la lógica de cálculo. Y reconocen si puedes ver aquí, reconocen patrones y hacen predicciones. Así que típicamente un modelo es un conjunto de parámetros publicados Bien publicado que han sido han sido entrenados para sabes, algún conjunto masivo de datos esencialmente. Así que es una lista pre calculada de un montón de diferentes parámetros que han considerado dignos de mirar y caracterizar. Así que es un parámetros que han considerado dignos de mirar y características y luego un montón de semillas datos para básicamente usar para construir una memoria o una huella de cómo se ven las cosas. Y luego lo usaremos más tarde para hacer nuestra búsqueda de similitudes y cosas así. Así que de nuevo, reconocer patrones, lo usamos para, para luego mirar los datos históricamente entrenados y hacer predicciones. Las incrustaciones son otra pieza importante del rompecabezas aquí. Tengo una definición muy técnica en la parte superior, que es un montón de vómito de palabras. Pero mencionamos que los modelos, una de las cosas que los modelos están tratando de hacer son capturar características y parámetros para que podamos usar eso como una métrica para buscar similitudes más adelante. Así que básicamente la incrustación es cada incrustación se utiliza para cada incrustación es cada propiedad dentro de, o lo siento, cada cada entrenado tipo de nodo de memoria dentro de ese modelo que tiene un valor para cada una de las propiedades o características que usamos como una, sabes, una importante en el modelo. Así que, creo que la versión simplificada lo destila un poco más. 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 tenemos, es básicamente sólo un enorme array de números. Y esa longitud se basa en la dimensionalidad. La dimensionalidad vuelve a nuestras características y propiedades. Básicamente, es el número total de esos. Y eso indica la relevancia de ese punto de datos en particular. Y necesitamos, nosotros, usamos esto en nuestra, cuando estamos consultando e insertando datos para básicamente empezar a trazar cómo se ve el estado del mundo dentro de la mente del o el espacio ML. Pero creo que este ejemplo visual ayuda un poco. Así que digamos que somos, uno de los modelos de incrustación populares por ahí o, sí, sí. Los generadores de incrustaciones por ahí es uno de los originales llamados word to beck. Y básicamente traduce palabras a una representación vectorial de dichas palabras. Así que aquí está, aquí está un ejemplo. Esto es básicamente un mapeo 2D de arrays vectoriales o, sí, mapeo 2D de arrays vectoriales en un espacio que podemos ver un poco más. Y podemos ver que esencialmente lo que el modelo ha hecho cuando genera estos es que los términos relacionados, así que va a hacer eso para mí. Pero los términos relacionados se agrupan. Y empezamos a ver algunos, algunos, algunos grupos formándose dentro de nuestro, nuestro, nuestro espacio de temas relacionados. A veces puede que no lo haga 100% bien o puede ser un poco vago y caer en múltiples, múltiples cubos donde vemos como duchas verdes aquí, lo que significa el color indica dónde, sabes, dónde pensamos que algo se encuentra. Algo se encuentra. Pero sí, la idea es que empezamos a, empezamos a mirar para agrupaciones aquí en estos puntos y podemos usar esos como, como, entramos en el mundo de la cuantización, se llaman centroides. Pero estamos buscando básicamente como, de nuevo, conceptos similares para que luego podamos usar entradas posteriores para, para también mapear a ese mismo espacio.

6. Bases de Datos Vectoriales

Short description:

Una base de datos vectorial almacena incrustaciones y permite la búsqueda de similitudes. Está altamente optimizada para este caso de uso. Plugins como pgVector permiten el uso de bases de datos tradicionales para el almacenamiento vectorial. Sin embargo, la elección predeterminada es una base de datos vectorial especializada.

Genial. Entonces, tenemos modelos, tenemos incrustaciones. La siguiente pieza importante del rompecabezas es una base de datos vectorial. Y una base de datos vectorial toma las incrustaciones que provienen de lo que acabamos de ver, que son, de nuevo, estos largos, largos arrays de floats que son, son, son puntos que representan similitudes. Y luego almacena esos en su almacenamiento de datos para que luego podamos usarlos para, para consultar, esencialmente.

Y estos están bastante optimizados para, para nuestro caso de uso aquí. Y específicamente, la mayoría de ellos tienen, ya sabes, en una base de datos SQL típica, estás, estás, estás haciendo, ya sabes, igualdad y teniendo algunos, tus, tus operadores de comparación pueden ser un gran, un gran array, como rango de cosas. Típicamente, cuando, con bases de datos vectoriales, la pieza más importante del rompecabezas es, es la búsqueda de similitudes. Entonces, la mayoría, muchos de ellos, realmente, eso es lo principal que implementan es, es la capacidad de devolver, puede que hayas oído hablar de Top K antes, si estás familiarizado con esto en absoluto, pero para devolver los mejores resultados de, de tu, tu, tu motor de almacenamiento.

Entonces, 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 al lado, por otro, otro asterisco. Por defecto, la, ya sabes, la respuesta es probablemente no. Se vuelve muy, muy costoso computacionalmente tratar de simplemente recuperar, como, ya sabes, un JSON array de los floats y luego hacer el cálculo localmente. Pero hay plugins para, para Postgres, como pgVector. No estoy al tanto de un equivalente de MySQL, pero estoy seguro de que, estoy seguro de que hay uno por ahí. Pero esencialmente, hay algunos plugins que puedes usar para usar incluso algunos de los estilos más tradicionales, como, RDBMSs para, para este tipo de cosas. Si estás, si estás alojando, como, auto-alojando o algo por el estilo.

7. Pesos de Dimensiones y Búsqueda de Vídeos

Short description:

Las dimensiones en los modelos pueden tener diferentes pesos. La búsqueda de similitudes puede utilizarse para imágenes y vídeos. Las bases de datos vectoriales están optimizadas para el cálculo de distancias. Se pueden utilizar métricas de distancia como las distancias euclídeas y coseno para calcular la similitud.

Pero la, la principal optimization aquí es, de nuevo, ver aquí, creo que Jan, Jan está insinuando. ¿Todas las dimensiones tienen la misma importancia? ¿Qué dimensiones tienen diferentes pesos? Ellos, ellos tienen, todos tienen la misma importancia para la mayoría, en realidad, no, lo siento, depende de tu modelo, depende de tu modelo. Hay, hay modelos ponderados donde, donde puedes, ya sabes, decir que, como, esto, esto es más importante que esto. La mayoría de las veces, no vas a tener que preocuparte por eso. La mayoría de las veces, no, vas a usar un modelo que ya ha sido proporcionado a menos que estés haciendo un auto-entrenamiento, que totalmente, totalmente puedes hacer, también. Pero depende de tu, tu caso de uso allí. Pero podrías, podrías tener ponderado, una versión ponderada de vectores también. Sí. ¿Puede la búsqueda de similitudes ser utilizada para imágenes y vídeos? Sí, puede. Hay, hay todos, hay justo como hay Word2Vec, también hay, como, un in, in IMG2Vec transformador por ahí que generará búsquedas de similitudes para, para, para, para imágenes. Vídeos, estoy seguro de que algo existe. No conozco ese de memoria, pero si puede ser codificado en bytes o representado en, en, en algo así, es, es casi, casi siempre hay alguna forma de, de, de hacer una, una incrustación para esas cosas. La verdadera conclusión aquí con, con estas bases de datos vectoriales es que están optimizadas para hacer cálculos de distancia a través, a través del, del espacio vectorial. Así que, cuando estás, cuando estás configurando tu, tu, tu índice o un índice en tu base de datos vectorial database, normalmente le dices una métrica que estás interesado en usar para calcular la distancia, la distancia. La mayoría de las veces es como una distancia euclídea o una distancia de coseno o algo por el estilo. Hay bastantes por ahí. Así que, ya sabes, no está limitado a sólo esos. Pero puedes usar esas distancias, métricas de distancia para, para calcular cuán lejos de, ya sabes, un valor esperado estás, y usar eso como una base para, para, ya sabes, lo, lo que estás devolviendo de esto. Así que puedes usar eso, usar esa información de manera más extensa.

8. Añadiendo Contexto y Consultando

Short description:

Una búsqueda de similitud encuentra un vector coincidente en la base de datos vectorial. El aprendizaje activo aumenta constantemente los modelos con nuevos datos. La Generación Aumentada por Recuperación (RAG) añade contexto a los modelos. La tokenización descompone los datos de entrada en piezas más pequeñas llamadas tokens. El generador de incrustaciones convierte los tokens en flotantes numéricos que representan vectores. Las incrustaciones se almacenan en la base de datos vectorial para la búsqueda de similitudes. El proceso implica añadir información a la tienda y consultar las incrustaciones relevantes. RAG combina la información de la consulta con el contexto para generar respuestas. El proceso puede ser complejo, pero las imágenes ayudan a entenderlo.

Es por eso que, sabes, esto es, creo que esta imagen encaja aquí. Estás, estás pasando en, tienes una cosa original aquí, que estaba en tu base de datos vectorial database, y estás pasando, estás buscando, sabes, estás haciendo una búsqueda de similitud en una operación de estilo de consulta, va a encontrar esa coincidencia y saber que ese vector es el que estamos, que estamos interesados en, en usar. Y probablemente encontrará un par de otros similares también. Si tu, si tu, si tu tamaño de contexto es, es grande. Sí. Así que, tuve que, tuve que incluir este. Tienes que, tienes que decirlo bien, ¿verdad? El círculo de las lay-i's. El tipo de operación constante y flujo de información en estos diferentes componentes es, es básicamente, el entrenamiento activo es una forma, o incluso simplemente como el reentrenamiento de modelos antiguos funciona. Así que, tenemos nuestro modelo original, o tal vez estamos, tal vez estamos creándolo por primera vez. Estamos simplemente precediéndolo con data original, pero tenemos un modelo donde estamos, estamos usando los nuevos data entrantes para aumentar continuamente ese modelo. Miramos los nuevos data que entran y es un paso llamado, creo que se llama atención, donde dices, es esto, es esto, es esta nueva información digna de mantener o, o, o, o usar como, como futura información de entrenamiento. Y puedes usar, puedes usar el ciclo de como modelo a entrada, a almacenar data, a, sabes, relevancia, relevancia /, sabes, si vale la pena mantenerlo, que puede ser un paso manual pero se convierte en este círculo de, creo que puedes, puedes usar esa información para luego mejorar aún más tu modelo. Así que, puedes, puedes básicamente refinar con el tiempo, y alimentar nueva información en este, en este proceso a través de una operación normal de, de estas diferentes piezas del rompecabezas aquí. Y de nuevo, eso es lo que se llama aprendizaje activo. Creo que aprender es un poco más difícil porque requiere un poco de un ciclo de retroalimentación. Pero, también puedes, sabes, alimentar esa información de nuevo en como viejo, viejas versiones de cosas también. O lo siento, como, como, como los, los viejos, o sigo diciendo viejo, los modelos base por ahí, o los que están publicados públicamente, no, no están aprendiendo activamente más, porque, sabes, son públicos y cosas así. Pero estos modelos están cambiando constantemente con el tiempo, y siendo reentrenados con nuevos data. Es sólo a un ritmo mucho más lento que como, un sistema de aprendizaje activo real sería. Genial. Y ahora, esto es, esto es algo que vamos, sabes, vamos a estar construyendo una aplicación RAG aquí en un ratito. Pero tal vez vale la pena tocar en qué, qué es RAG. Así que, RAG significa Generación Aumentada por Recuperación. Y se parece mucho a lo que acabamos de hablar en ese círculo de la vida, cosa de la vida. Así que tenemos, sabes, si estamos usando como un modelo base para hacer nuestra inicial, sabes, generación de incrustaciones y cosas así, eso funciona, sabes, hasta, hasta que tenemos algo nuevo información que como, normalmente, puedes haber, puedes haber intentado usar chat GTP, y dice, Oh, hey, lo siento, mi fecha de corte fue, sabes, no sé qué es estos días, pero diremos como, 17 de julio de 2023. Así que, no tengo ninguna nueva información desde entonces. A veces, la información que está actualmente en tu modelo no es suficiente, y quieres realmente darle más contexto. Así que tiene información que no tenía antes. Este es el, este es el verdadero punto de venta de la Generación Aumentada por Recuperación. Y es real, sabes, sus dos, dos grandes puntos. El texto es, sabes, generación de texto, eso no es único para RAGs necesariamente, eso sucede con cualquier modelo. Pero cualquier cosa que hace la recuperación de información, es realmente donde RAGs tipo de, vienen a, vienen a, vienen a jugar. Y a veces esta información intrival se llama contexto. Así que, cuando pensamos en como, donde podríamos usar algo que también tiene como contextual información relevante para cosas que queremos, a menudo se utiliza para como, pregunta, o respuesta basada en indicaciones, motores de recomendación, sabes, puede ser adaptado a como un tienda específica, o sabes, estoy seguro de que Amazon usa mucho de esto para su tipo de configuración. Resumen de documentos, si estás usando el RAG para buscar información de documentos, puede entonces usar esos como fuentes de contexto para resumir. Y de nuevo, realmente cualquier cosa que necesita acceso a información local que puede no estar ya presente dentro del modelo original. Así que, sé que estamos entrando en las hierbas aquí un poco, pero prometí que iba a mostrar tú tipo de qué incrustaciones y cosas parecen. Aquí es lo que, sabes, digamos que queremos añadir alguna información a un modelo existente que estamos usando. Y no sabe, sabes, qué regalos típicos se compran el Día de San Valentín. Así que, lo que he hecho aquí es, sabes, le doy una entrada y digo que los regalos tradicionales en el Día de San Valentín incluyen, y, sabes, sigo y sigo sobre flores y, sabes, animales de peluche, lo que sea que te guste. Y eso lo alimentaríamos en nuestro LLM, nuestro modelo. Aquí di, como, este es un ejemplo, no tiene que ser este, pero 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, eso no es la forma de decirlo, tokens, que son este concepto nebuloso en AI y ML. Pero esencialmente, es una forma, está tratando de, como, segmentar tus data de entrada en piezas más pequeñas que luego puede usar para generar las incrustaciones. Así que, depende un poco de, como, en el modelo que uses en cómo este tokenizador funciona, pero está tratando de encontrar qué piezas de información aquí pueden ser descompuestas a una incrustación que luego puede ser almacenada. Así que, en este caso, esto es, fui a abrir AI y escribir esto en, y tienen, como, un tokenizador en línea. Este sería el recuento de tokens para lo que esto parece. Y creo que la orientación general que dan es que, como, aproximadamente cuatro caracteres se supone que es un token, pero podemos ver aquí que está bastante por todas partes. Así que, de nuevo, dado estos es, no tienes que preocuparte por esto demasiado. Todo esto sucede un poco detrás de las escenas. Pero pensé que valía la pena, vale la pena mencionar, al menos sólo desde que estamos tipo de entrar en las hierbas aquí un poco. De esos tokens que se generan, entonces pasamos en nuestro generador de incrustaciones, y esto es lo que realmente convierte los tokens en flotantes numéricos que representan los vectores. Y, de nuevo, estamos diciendo que los vectores representan la relativa de cada punto particular dentro de este conjunto de dimensionalidad que tenemos aquí, que es, de nuevo, entrenado contra todos los parámetros y características que juntamos del modelo en sí. Estos flotantes suelen estar entre 1 y 0, aunque no tienen que ser. Ayuda un poco para algunas de las métricas de distancia si están entre 1 y 0. Así que, a veces es posible que quieras normalizar, como, muchos modelos realmente los normalizarán para ti. A veces es posible que tengas que hacerlo tú mismo si te importa la métrica de distancia que hace necesita estar entre 1 y 0, pero, de nuevo, no vas a tener que preocuparte por esa parte demasiado mucho. Es sólo, esto todo tipo de sucede para ti. Y estas incrustaciones se almacenan en el vector database, que acabamos de hablar, y eventualmente, esto es como una tienda de contexto, y cada una de las filas en aquí tienen este array de flotantes de n dimensiones. Así que, de nuevo, todo el proceso por el que estamos trabajando aquí es que queremos tomar este información y almacenarla en la base de datos vectorial database para que podamos usarla para luego hacer la búsqueda de similitud en más tarde. Así que, este es el proceso de añadir información a nuestra tienda. La consulta utiliza una configuración bastante similar aquí, donde consultamos, de nuevo, generamos nuestra incrustación, y luego esa incrustación va a la base de datos vectorial database y encuentra los k más relevantes, 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 desafiante de seguir, pero las imágenes visuales pueden ayudar. No dudes en hacer preguntas. Tomaremos un descanso pronto.

Y usamos eso, de nuevo, como contexto en el LLM que realiza la ampliación de, básicamente, combina la información de la consulta que entra con el contexto que sale 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 pasando aquí. Esto puede ser un poco difícil de seguir, así que espero que estas imágenes visuales estén ayudando un poco. Pero, de nuevo, sé que muchos de estos conceptos pueden no ser, ya sabes, puedes no estar tan familiarizado con ellos, así que, sí, no seas tímido si es un poco confuso. Y siempre podemos volver a ello más tarde. Genial. Y vamos a hacer una pausa aquí en un poco, así que no te preocupes aquí.

10. IA sin servidor 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 constante funcionamiento. Sin embargo, al centrarnos en la parte de consulta del ciclo y utilizar modelos de estantería, podemos hacer que la pieza de consulta sea sin servidor. Las operaciones de inserción y consulta son cruciales, y con la implementación de LLM y la base de datos vectorial de manera sin servidor, podemos lograr el éxito. Los modelos sin servidor funcionan bien para aplicaciones relativamente estáticas, y aunque pueden ser pesados para cargar, mantener el modelo caliente en toda la red puede superar este desafío. Además, existen diversas ofertas para bases de datos vectoriales sin servidor, como Vectorize y Pinecone, que actualizan constantemente sus ofertas.

Genial. Ahora, otra IA sin servidor. Sabes, eso sin servidor. IA es la nueva tendencia. Sin servidor no es la nueva tendencia estos días. Es una tendencia antigua. Pero juntos, siento que están volviéndose la nueva tendencia otra vez. He visto a bastantes empresas lanzar ofertas de IA sin servidor recientemente debido a las ventajas de la arquitectura sin servidor que acabamos de hablar un poco antes. Pero quizás tiene sentido hablar de cómo se ve una implementación tradicional y luego lo fácil que puede ser con sin servidor, ya sabes, si estás utilizando una oferta alojada. Entonces, hay una, en realidad, una muy buena base de datos vectorial de código abierto llamada Milvus. Y Milvus te da este bonito diagrama donde ellos explican cómo se ve alojar algunas de estas cosas. Milvus hace muchas cosas muy, muy buenas para ti, como cambiar entre cálculos basados en CPU y GPU de esos vectores, y también realiza algunas consultas de metadatos altamente optimizadas. Entonces, puedes hacer una bonita búsqueda híbrida y cosas así. Pero como podemos ver, es una configuración bastante complicada aquí. Tenemos balanceadores de carga con proxies a diferentes notificaciones, como colas de mensajes, múltiples nodos para almacenar múltiples nodos para almacenar los metadatos en un contenedor ETCD. Y un montón de nodos que tienen que funcionar para hacer esto de alta disponibilidad, y luego almacenamiento de objetos para almacenar los archivos brutos en sí. De nuevo, una configuración bastante complicada para algo. Quizás no insuperable por ningún tramo de la imaginación. Pero estás ejecutando, mira todos estos servidores aquí. Estás ejecutando mucho para conseguir, incluso para conseguir un Hola Mundo, al menos en grado empresarial o de alta disponibilidad para este tipo de configuración aquí. De nuevo, es un gran producto. No lo estoy despreciando en absoluto. Pero está mostrando cómo se ve desde un punto de vista tradicional.

Y entonces, de nuevo, ya hemos tocado esto. Pero hay un gran número de componentes y todo está siempre funcionando. Entonces, puedes imaginar que algo con tantas piezas del rompecabezas puede ser bastante caro. Estamos haciendo un funcionamiento 24-7 aquí. Y hace, ya sabes, todavía tenemos que pensar en la distribución si eso es importante para nosotros, porque tenemos un poco con la configuración de alta disponibilidad que propusieron allí. Pero eso todavía funciona en VCs, que no están tan cerca como las cosas de borde. Y de nuevo, no importa si estás utilizando un proveedor, siempre va a haber algo funcionando con una arquitectura tradicional. Entonces, pensemos en cómo se vería hacer esto sin servidor. Entonces, pero sí, hablamos un poco sobre el círculo. De nuevo, esto es algo así como volver al círculo de la vida. Tenemos entrenamiento, estimación, consulta, etiquetado. Todo simplemente fluye uno en el otro con el tiempo. Pero para la gran mayoría de las cosas, si esto es, si no estamos haciendo aprendizaje activo, este es un ciclo de aprendizaje activo, del cual hablamos. Pero si estamos bien con un aprendizaje pasivo y como un RAG, entonces pasamos casi el 95% de nuestro tiempo solo en esta consulta parte del ciclo. No tenemos que preocuparnos tanto por el entrenamiento y la estimación y el etiquetado. Especialmente si estás utilizando un modelo de estantería. Como ellos manejan el entrenamiento y el etiquetado, e incluso la estimación para nosotros. Solo nos preocupa la consulta. Entonces, si podemos hacer que esa pieza de consulta sea sin servidor, vamos a estar bastante bien.

Entonces, hay dos pequeñas operaciones que son importantes para nosotros. Hay la inserción, y esto es, de nuevo, esto es en el contexto de una aplicación de generación aumentada por recuperación. Pero la inserción y la consulta son las piezas que son realmente interesantes aquí, porque esto es lo que el 95, incluso yo, probablemente incluso el 99% de nuestras operaciones va a ser. De vez en cuando, actualizaremos el modelo, pero realmente no tengo que hacer eso demasiado. Entonces, sabemos que miramos lo que tenemos. Hablamos de tokenizadores y embeddings y nuestro LLM y RVDB, pero estos son realmente los únicos componentes que son necesarios para soportar estas dos operaciones aquí, esta consulta y esta inserción. Entonces, si podemos, de nuevo, conseguir que ese LLM y esa base de datos vectorial DB se desplieguen de manera sin servidor, estaremos en el negocio. Entonces, cuando se trata de modelos sin servidor, de nuevo, bueno, si queremos algo que funcione 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 suele estar bien. De nuevo, especialmente para cosas de estantería, como eso no cambia muy frecuentemente. Entonces, si tienes, digamos, un sin servidor cosas, como eso no cambia muy frecuentemente en absoluto. Y puedes combinar eso con los aspectos RAG porque puedes añadir a tu contexto todavía manteniendo tu modelo estático. Uno de los desafíos es que estos modelos son bastante pesados. Son bastante robustos la mayoría de las veces. Entonces, pueden ser pesados. Son pesados para cargar para que las cosas estén disponibles para nosotros. Y de nuevo, como hablé, realmente no somos capaces de hacer aprendizaje activo, pero podemos hacer eso con RAGs. Entonces, realmente el único, el mayor inconveniente aquí es que las cosas son pesadas para cargar. Pero si podemos mantener ese modelo caliente en toda la red, que especialmente para utilizando cosas de estantería que no tenemos que entrenar a medida y tener modelos personalizados funcionando para todos, y podemos hacer un buen caso aquí para hacer las cosas sin servidor. Cuando se trata de bases de datos vectoriales sin servidor, en realidad hay bastantes ofertas de esas también. Entonces, estas siempre están cambiando porque estamos constantemente, quizás no constantemente, pero a menudo añadiendo nueva información al contexto RAG para que pueda obtener toda la información que necesita para tomar decisiones informadas más adelante. Y hay un número de, de nuevo, como ofertas sin servidor ya. Vectorize es uno. Esto es en lo que trabajo. Yo realmente 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. Haremos una pausa antes de ponernos manos a la obra. Utilizaremos HonoJS, un marco optimizado para entornos sin servidor, y Linkchain, un ecosistema que abstrae las complejidades de la construcción de 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 comencemos.

a serverless vector database. De nuevo, todo basado en el uso. Y LanceDB es una versión de código abierto de todo esto. Funciona en, incluso es agnóstico a la plataforma cloud, lo cual es bastante genial. Soporta GCS, AWS, S3. Son como tiendas de objetos remotos y tiene un par de formatos de archivo personalizados dentro de él que lo hacen agradable para jugar. Pero con esas dos piezas, creo que somos capaces de 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 consulta operación, tenemos la capacidad de fluir básicamente a través de todo ese proceso ahora si tenemos esas herramientas disponibles para nosotros. Así que estamos a punto de entrar en ello. 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 volvamos, empezaremos a poner las manos en la masa aquí en un poco. De nuevo, también si no has rellenado ese formulario con tus credenciales de five-flag, si pudieras hacerlo, sería increíble. Tendré que probablemente conseguir que todos se acomoden o acomodarse en eso, pero lo haré durante este descanso también. Y debería estar en el historial del chat si estás buscándolo. Pero sí, suena bien. Vamos a ponernos en marcha, ya sabes, estirarnos, prepararnos para lo bueno cosas. Ahora que sabemos un poco más lo que estamos haciendo, hagámoslo de verdad.

Así que es hora de ponerse físico. Rápidamente, sólo un pequeño repaso sobre dos herramientas principales que utilizaremos para hacer esto posible. Esto no es super duper importante, pero hay un par de formas diferentes de hacer esto. Pero una de las cosas que empezamos a usar, una que me gusta mucho aquí cuando estamos trabajando en aplicaciones serverless, es un pequeño framework llamado HonoJS. Está básicamente optimizado para estos tipos de, como, micro servicio serverless entornos de tipo configuraciones. Y de nuevo, también es agradable, no es como, no te encierra en un proveedor específico. Tienes, veamos aquí. Empezando. Sí. Sí. Puedes ver aquí, tal vez no veas porque no está ampliado estoy seguro, pero ver aquí, tiene soporte para cosas de Cloudflare, Fastly, Versell, Elanda, Superbase. Así que es bastante agradable. Es básicamente, ya sabes, una plataforma agnóstica es todavía donde realmente ejecutas estas cosas. Así que estaremos usando Hono, que básicamente va a ser nuestro framework de enrutamiento /, ya sabes, hacer algunas cosas de middleware para nosotros. Sí, eso es super importante. Hay otras formas de hacerlo, pero me he llegado a gustar mucho eso recientemente. También estaremos usando Linkchain. No estoy seguro si, puedes estar familiarizado con esto, pero no estoy 100% seguro. Imagino que la mayoría de los demás, bastantes que no lo están. Linkchain es este ecosystem. Es casi un completo ecosystem en este punto, que esencialmente, eso es mucho de la pensamiento lejos de tener que construir servidor, no incluso serverless, pero cualquier tipo de aplicación basada en LLVM. En que, la cadena, encadenamiento es más o menos donde realmente, ya sabes, eso es de donde obtiene su nombre de, la capacidad de básicamente, ya sabes, 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 en aquí. Sí, lo hago. Los legos de la AI es lo que uno de mis compañeros de trabajo lo llama. Es mucho como Hono, en que te permite hacer versiones agnósticas de plataforma de, de trapos y cualquier operación LLVM. Así que, es bastante agradable en que tiene enlaces para cosas como las cosas de Cloudflare que estaremos utilizando hoy. Pero también puedes usarlo en un montón de otros servicios diferentes también, con cambios muy mínimos al code. Así que, nada de lo que estamos haciendo aquí está tratando de ser como, ya sabes, bloqueo de proveedores en el año, nada de eso estamos usando un montón de herramientas y frameworks para realmente asegurarnos de que tenemos, ya sabes, una verdadera moda serverless, la capacidad de tipo de para saltar alrededor sin demasiado de un, ya sabes, demasiados aros para saltar a través.

Así que, tengo para nosotros un repositorio que hace algo del code de arranque. No quiero quedarme, ya sabes, atrapado en como tener que preocuparme por cosas como CSS y cosas así. Y te animaría a que golpees esta URL, hagas un clon de este repositorio, y esto es lo que estaremos usando como base de muchas de nuestras operaciones aquí. También puedes ver, se llama el Bard of Love. Estamos tratando de jugar un poco con el Día de San Valentín un poco y estaremos construyendo una aplicación que, ya sabes, nos da, alimentamos algunos poemas de amor originales y le decimos que nos los devuelva si puede. Pero también es capaz de hacer sus propios poemas de amor para nosotros si necesita. Así que, podemos, y entraremos en exactamente cómo eso funciona como parte de este ejercicio aquí. Pero voy a seguir junto con ustedes, en realidad. Haremos esto interactivo para que puedas, haré lo mismo que tú haces. Un clon de git. Ya lo tengo aquí. Así que, saltando al Bard of Love y luego necesitamos entrar en ese directorio. Y uso VS Code, cualquier editor es tu favorito. Hazlo así. No tienes que confiar en mí pero te animo a que lo hagas. Déjame organizar mis escritorios correctamente aquí. No, quiero que serverless AI sea después. Ahí vamos. Amplía. Si echas un vistazo a este proyecto, podemos ver que hay un par de cosas de nuevo configuradas para nosotros ya aquí. El, creo que teníamos más o menos la mitad y la mitad que había 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 nodo, proporcionando una alternativa más rápida a las plataformas sin servidor tradicionales. Cloudflare Workers utiliza aislamientos V8 y soporta 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 al estilo del mensajero instantáneo AOL. Utilizaremos una cuenta compartida en Cloudflare para el proyecto. Para empezar a hacer 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 que esto ejecuta aislamientos de nodo. Creo que Cloud también lo hace hoy en día. Pero en lugar de verdaderos contenedores Docker, esto ejecuta un aislamiento V8, que es como una pequeña cáscara sobre los grupos C y nodo para hacer esto, con suerte, un poco más rápido. Pero una de las piezas del rompecabezas con Cloudflare Workers es, ya sabes, al final es todo JS. Podemos ver aquí que estamos configurados aquí. Y el readme te da una pequeña introducción a las tecnologías que se utilizan y lo que realmente estamos haciendo aquí.

Tenemos cosas como prettier configuradas para nosotros. Y si echamos un vistazo al paquete, tengo TypeScript configurado en esto también. No estás obligado a usar TypeScript. Uso los tipos en JS para hacerlo un poco más agradable, pero no sientas, eres bienvenido. Puro JavaScript funcionará aquí también. Así que no sientas que tienes que hacer eso por nosotros. Pero siempre es agradable tener, en mi opinión, cuando puedes salirte con un poco de tipado. Vemos nuestro Hono aquí y LangChain, que mencionamos antes, para conseguirnos esas dos herramientas externas para poner esto en marcha. Oops. También en los activos, la carpeta de activos, de nuevo, no tienes que preocuparte demasiado por CSS y cosas así. Así que tengo algo configurado para nosotros aquí. En realidad no puedo tomar todo el crédito por esto. Mi compañero de trabajo tuvo la brillante idea de conseguir esta aplicación de chat al estilo del mensajero instantáneo AOL. Así que felicitaciones a él por haber configurado gran parte de este trabajo. Pero es bastante interesante. De hecho, le pidió a chat GTP que le diera un código para básicamente renderizar un diálogo al estilo del mensajero instantáneo AOL, y lo hizo por él. Así que estamos usando AI para hacer una masterclass de AI. ¿Qué te parece? Bueno. Así que lo que hice durante el descanso es añadirlos a todos a una cuenta especial en Cloudflare que tiene los permisos necesarios para hacer este proyecto. Así que si ahora te diriges a dash.cloudflare.com, voy a iniciar sesión yo mismo. Divertido. Los buenos y viejos VPNs corporativos hacen que esto funcione, así que déjame conseguir esto rápido. Genial. Estoy dentro. En cuentas, ahora deberías ver devops.js AI masterclass compartida. Esta es la cuenta que utilizaremos para hacer todo esto posible. Y tiene algunos permisos, básicamente los permisos necesarios para la oferta de AI en algunos ecosistema de trabajadores de Cloudflare para para la oferta de AI en algunos ecosistema de trabajadores de Cloudflare para permitirnos hacer estas cosas. Si no estás familiarizado con el dash de Cloudflare, esto es lo que parece cuando, de nuevo, todos ustedes sólo tienen que hacer clic en esa cuenta, la masterclass compartida de devops. En realidad no necesitaremos estar en este dash mucho. Pero para futuras referencias, aquí a la izquierda, estos trabajadores y páginas es donde el real trabajador, nuestras diferentes aplicaciones van a vivir. Puedo ver que ya lo he hecho una vez, pero hagamos esto de nuevo juntos.

En primer lugar, necesitamos conseguir un... Vamos a tener que conseguir un token de servicio para Cloudflare para permitirnos empezar a hacer cambios a través de la CLI. Es un poco más fácil hacerlo aquí que en dash. Siempre es agradable usar un IDE y cosas así cuando puedes. Si lo haces, lo siento, debería haber dicho esto primero también, necesitas hacer primero NPMI, si aún no lo has hecho, para instalar todos los paquetes necesarios. Una vez que hayas hecho eso, entonces Wrangler estará instalado para la dependencia de desarrollo, y puedes usar nivel aquí, mpx para empezar 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. Lo golpeo. Debería abrir una ventana en tu navegador. Lo que sea abierto es. Básicamente, te dará un montón de cambios de permisos y ámbitos que permitirán al CLI de Wrangler hacer cambios por nosotros. Estás bien para aceptar eso. Puedes leer a través de todos ellos si quieres, pero vamos a terminar deshaciéndonos de esta cuenta de todos modos, así que todo está bien de cualquier manera. Una vez que hagas eso, estarás conectado, y puedes comprobar tres veces que si mpx Wrangler whoami, eso te dará una ventana como esta, y deberíamos tener estos ámbitos aquí, que nos permitirán hacer los cambios de AI y todas esas cosas buenas. Si estás siguiendo, deberíamos estar conectados con Wrangler. Deberíamos estar listos para ir. Cuando estamos haciendo un despliegue en los trabajadores, hay este Wrangler.toml, que es nuestro archivo de configuración para el proyecto. Todos estamos usando una cuenta compartida para esto, así que tenemos la posibilidad de pisar los pies de la gente.

13. Iniciar sesión y configurar Wrangler

Short description:

Para iniciar sesión, complete el formulario y cree una cuenta de Cloudflare. Wrangler es una herramienta de Cloudflare para interactuar con los trabajadores y las páginas de Cloudflare. Complete el formulario utilizando el correo electrónico que utilizó para registrarse. Obtendrá acceso a una cuenta privilegiada de Cloudflare. Actualice los nombres en el archivo de configuración para que sean únicos. Guarde el archivo y pase al siguiente paso en la terminal. Si encuentra problemas de inicio de sesión, es difícil solucionarlos en este momento.

Disculpas. ¿Cómo inicio sesión? Oh, sí, claro. Permíteme poner enlaces aquí. Lo devolveré, porque queremos bash. Entonces, 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 listada. En este punto, puedes mostrar tu ID de cuenta, o bueno, probablemente no quieras mostrar tu correo electrónico. Solo déjame saber que completaste el formulario de nuevo y lo revisaré. Pero, sí, ¿qué es Wrangler? Wrangler es la CLI que se conecta, es específico para Cloudflare, por lo que es una herramienta de Cloudflare. La contraseña debería ser la que uses para la cuenta que creaste. Entonces, vas a necesitar hacer, necesitas crear una cuenta si aún no lo has hecho. Solo haz clic en ese botón de registro y, sí, y luego aquí necesito, necesito mantener esto, mantener esto arriba, esta ventana aquí arriba. Enviar enlace, de nuevo, una vez que, una vez que hayas completado el registro, solo pon tu, pon tu correo electrónico que usaste aquí, y te agregaré. Pero, sí, Wrangler es una herramienta de Cloudflare que ayuda a interactuar con los trabajadores, y también esta cosa llamada Páginas de Cloudflare, que es una especie de versión de activos estáticos de los trabajadores. Es solo un pequeño, ya sabes, piensa en ello como AWS CLI, esencialmente, y es eso sobre la implementación específica del trabajador aquí. Genial. Tal vez le daremos a la gente solo 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 parecerse, ups, debería parecerse al formulario de Google de la masterclass de DevOps JS. Y, y asegúrate de poner el correo electrónico que usaste para registrarte aquí, para que yo pueda, pueda agregarte a la cuenta que estamos usando. Y, oh, veo dos nuevas respuestas. Perfecto. Bien. Nos vemos, chicos. Entonces, déjame agregar, agregarlos. Y, sí, todos ustedes están obteniendo acceso a una cuenta privilegiada de Cloudflare, si aún no lo han hecho. Entonces, podrías, tal vez, te daré un poco de tiempo para explorar después, si quieres ver, ya sabes, ver a qué tienes permiso, porque no es, no es, es una cuenta de Cloudflare bastante privilegiada para estas cosas. Entonces, solo agregándote a los grupos correctos aquí. Creo que eso debería, bien. Gracias a todos, ya sabes, 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 eso fue exitoso. Entonces, ahora, tenemos más personas aquí. De nuevo, déjame copiar y pegar los comandos, para que no los perdamos en ningún lugar. Oh, no creo, no veo esos. Formateando, pero lo averiguaremos. Oh, bueno, entiendes la idea. Y, ahora, bueno, creo que deberíamos estar listos para seguir adelante aquí. Este regular Toml, de nuevo, es nuestro archivo de configuración. Y, ya que todos estamos usando una cuenta compartida, queremos que los nombres de las cosas sean diferentes. Entonces, puedes ver aquí, como usé mi primer, inicial, apellido, parte de amor por el nombre del trabajador. Si todos ustedes pudieran hacer algo único. Tú sabes, tu nombre sería genial. Tal vez, lo mismo, primera inicial, apellido. Pero, vas a querer cambiar este valor a algo único. Y, entonces, lo que sea que uses para eso, usaría el mismo valor aquí en este índice vectorizado. Entonces, haré Nathan demo, solo para seguir el ritmo. Y, de nuevo, sé que esto es, no nos estamos enfocando en el código en absoluto todavía. Pero esto es solo el configuración inicial para que podamos. Cuando realmente lo pongamos en marcha, entonces comenzaremos a repasar el código un poco más. Si todos ustedes han hecho eso, perfecto. Solo guarda ese archivo. No necesitas hacer nada todavía. Bien. El siguiente paso es, volvemos a nuestra terminal. Y, vamos a Desencriptado. Estoy un poco inseguro de lo que eso significa. Es un error de código de conflicto, creo. Oh, oh, sí, sí, sí. ¿En el inicio de sesión? Sí, siempre que puedas ver esto, entonces deberías estar bien. Puedes obtener 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 ido adelante y desplegado su zona. Me encanta eso. Genial. No pasa de la pantalla de inicio de sesión, sin embargo. No pasa de la pantalla de inicio de sesión, sin embargo.

14. Configuración de la base de datos vectorial y despliegue de la aplicación

Short description:

Cambiamos Wrangler para darnos un nombre personalizado y creamos una vinculación de índice vectorizado. Creamos una base de datos vectorial utilizando el nombre de nuestro Wrangler toml. Ahora podemos desplegar 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 solucionar eso ahora mismo. Vale. 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, tengo a Owen en la cuenta. Puede valer la pena ver si puedes iniciar sesión ahora. Veremos. Veremos cómo va. De lo contrario, lo siento. Puede que tenga que pedirte que sigas el ritmo. No quiero retrasar las cosas demasiado todavía. Ah, vale. Ahí vamos. Te tengo. Bueno, si quieres usar un correo electrónico diferente, eres bienvenido a hacerlo. Solo, solo avísame. Sí, sí, sí. Genial. Vale. Entonces, sí, volvamos a lo que estamos intentando hacer aquí. Um, vamos, entonces, lo que hicimos fue cambiar nuestro Wrangler para darnos un nombre personalizado. También notarás aquí que queremos, estamos creando, sabes, una vinculación de índice vectorizado. Esto, esto, esto es, de nuevo, hablamos de bases de datos vectoriales. Vectorized es la base de datos vectorial database que vamos a utilizar aquí. Y esto es algo que necesitamos crear fuera de nuestro code pero de vuelta aquí en la terminal. Entonces, si miras ese README, verás que hay un paso para crear una base de datos vectorial. Ahora, de nuevo, lo mismo. Queremos usar el nombre que usamos en nuestro Wrangler toml. Entonces, para aquí, voy a cambiar esto a Nathan Demo. Y cuando estamos creando una base de datos vectorial, mencionamos que estamos almacenando, de nuevo, estamos almacenando estos arrays de flotantes basados en la dimensionalidad y con la métrica. Y también tenemos la capacidad de usar como, entonces, cuando estamos haciendo esto, estamos configurando esto, Flatflair sabe acerca de un par, de nuevo, algo así como modelos de serie, de nuevo, algo así como modelos de serie. Especialmente un par de estos de código abierto. Entonces, en realidad puede usar la información que sabe sobre el modelo ya existente en lo que respecta a su dimensionalidad y métrica de distancia de elección con solo un preajuste. 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 DB, eso sería genial, creo. Solo para darte una oportunidad. Porque entonces realmente puedes jugar con ella. Entonces, sí, cambiaría el nombre de la DB a lo que tenías en tu Wrangler toml. Copia ese comando, y podemos usar usando este preajuste debería estar bien. EGE base. Si quieres leer más sobre eso, hay una página de CloudFlare.

Vale. Entonces, hagamos eso. Hacer poemas. Si hago eso, quieres asegurarte de poner eso en la cuenta compartida. Y hemos creado uno con éxito, lo cual es genial. Sabes, nos da la información que necesitamos si queremos empezar a usar esto en nuestro Wrangler toml, pero ya tenemos esa información. Lo hicimos con anticipación. Entonces, lo hicimos con anticipación. Entonces, debería coincidir con este nombre aquí. Genial. Entonces, ahora tenemos una base de datos vectorial, y tenemos nuestra estructura para empezar a crear nuestra aplicación RAG. Si quisiéramos, creo que podemos desplegar esto incluso ahora mismo, y nos mostrará algo. No funcionará, pero creo que al menos nos mostrará, sabes, algo de una estructura aquí. Entonces, para hacer eso, escribo npm wrangler deploy. Va a poner todo esto en marcha. Estos son los, de nuevo, los hallazgos es lo que 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, índice vectorizado que creamos. Y ahora tenemos una URL a la que podemos acceder. Entonces, si copio eso y voy a, tengo curiosidad, creo, oh, no va a funcionar. Vale. Bueno, yo tenía un poco adelantado aquí. Pensé que funcionaría porque no hemos configurado cosas en el code todavía, pero lo haremos funcionar. Lo haremos funcionar. Bien. Entonces, hablamos de los poemas de amor que queremos usar para realmente, sabes, sembrar algunas cosas locales para nosotros, así

15. Cargando Datos en la Base de Datos Vectorial

Short description:

Tenemos datos JSON de Indie que contienen poemas de autores famosos. Queremos usar estos datos para sembrar nuestra base de datos vectorial. Para hacer eso, creamos un objeto de incrustaciones utilizando las incrustaciones de Cloudflare AI desde la cadena de enlaces y configuramos el objeto de configuración con los nombres de enlace. También creamos una tienda utilizando la tienda vectorizada de Cloudflare. Nos aseguramos de que la dimensionalidad de las incrustaciones coincida con la tienda Vector. Los nombres de estas variables pueden variar dependiendo de la plataforma.

podemos usar esos. Ya los incluí en el repositorio para nosotros. Si vas a los activos poems.indijson, Indie significa delimitado por nuevas líneas. 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 consiste en el poema. Así que, tenemos algunos pesos pesados aquí, como E.E. Cummings, Maya Angelou, Shakespeare está aquí y cosas así. Pero un par, estos son básicamente los data que usaremos para ver la semilla aquí. No tendremos que tocar esto en absoluto. Pero, no todavía, al menos. Si quieres hacer eso en tu propio tiempo, puedes agregar y eliminar cosas aquí. Cambiará las cosas un poco. Pero permitirá que te dé un poco más de contexto. Pero lo que queremos hacer es usar eso, 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 pueda ser utilizado como contexto. Entonces, esto es lo que vamos a mirar primero, es conseguir que nuestras cosas entren, entren, entren en vectorize, en nuestra base de datos vectorial.

Entonces, para hacer eso, necesitamos, vamos a usar un par, un par de funciones de link chain. Entonces, vamos a hacer, vamos a crear la incrustación, las incrustaciones objeto. Entonces, incrustaciones. Y esto va a usar una nueva función de incrustaciones de Cloudflare workers AI, que podemos ver. Obtén un autocompletado allí. Pero, sí, esto viene de nuevo de link chain. Y hay, puedes ver aquí, link chain tiene un paquete específico de Cloudflare. Podrías reemplazar esto con, también hay uno, como, una vez más, para advanced DB y pinecone y cosas así, también, si realmente quisieras ir por ese camino. Pero de nuevo, para los propósitos aquí, vamos a usar las incrustaciones de Cloudflare AI. Y eso toma un objeto de configuración, que es, es un enlace. De nuevo, los enlaces y los trabajadores, si no estás familiarizado, los enlaces son como los enlaces a los variables globales que se inyectan. Vienen del estrangulador Toml. Configuramos nuestro nombre de enlace para vectorizar fue vectorizar índice. Nuestro nombre de enlace para AI es solo AI. Entonces, vendremos aquí, y esto se convierte en C.env.AI. Sí. Que aún no he escrito. Probablemente debería haber hecho eso. Pero, está bien. Y luego, vale la pena notar con lo que creamos nuestro índice. De nuevo, creamos eso con este preajuste aquí, este EF por VGE base. Voy a poner eso en una variable constante, porque lo referenciaremos un par de veces. Entonces, digamos const embedding model va a ser eso misma cosa que usamos para crear el índice. Porque el otro parámetro en estas incrustaciones, es un nombre de modelo que necesitamos. Entonces, le daremos el modelo de incrustación. Y, ahora tenemos nuestro generador de incrustaciones listo para rock and roll. También queremos almacenar estas incrustaciones en algún lugar. Entonces, vamos a crear una tienda, que va a ser una nueva tienda vectorizada de CloudFlare. De nuevo, viene de LangChain, ya tipo de configurado para nosotros. Recuerda, las incrustaciones vienen del modelo. Entonces, esto es este trabajador AI, maneja el lado del modelo de las cosas. Entonces, y ahora vectorize es nuestra tienda vectorial. Entonces, oh, obtienes un vectorizado no titulado allí. Ver, tendría curiosidad por ver si otras personas también lo obtienen. Espero haber acertado con los permisos. Veamos si me aseguro de que tienes, estás en esta cuenta. Vale. Estoy recibiendo un correo electrónico rápidamente para asegurarme de que estás aquí. Entonces, solo me aseguraré de que estás añadido a estas cosas de nuevo. No creo que estuvieras, oh, veamos. Si puedes intentar eso de nuevo, Cicel, sería increíble. Porque creo, oh, mierda, debería haber añadido directamente. Vas a tener que comprobar tu correo electrónico. Sí. Vas a tener que comprobar tu correo electrónico, Cicel, para confirmar la invitación. Lo siento por eso. Podría haber añadido directamente, pero olvidé marcar esa casilla. Pero deberías estar bien. Sí, aquí está nuestro modelo de incrustaciones. De nuevo, lo mismo, podríamos simplemente copiar y pegar eso de lo que tenemos aquí porque solo queremos asegurarnos de que esto coincide con el valor en esto porque queremos que el AI, de nuevo, esto no es específico de Cloudflare, pero queremos que lo que el AI usa para generar incrustaciones coincida con la dimensionalidad de la tienda Vector. Y eso es realmente lo que esto está haciendo. Entonces, queremos, sí, queremos, oh, sí, hay un anuncio al frente. Pero es un buen grito. Esa es una convención de Cloudflare. Los nombres de estos serán un poco diferentes, dependiendo de dónde vayas, pero el

16. Cargando y Analizando Datos de Poemas

Short description:

Tenemos una tienda Vectorizada y un generador de incrustaciones del modelo. Necesitamos especificar el parámetro de índice para la tienda Vectorizada y la ubicación para ingerir las incrustaciones. Cargamos el texto sin formato del archivo local assets.json en una variable llamada datos de poema sin procesar. Dividimos las líneas de los datos del poema en nuevas líneas 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 tu dimensionalidad sea la misma entre lo que el modelo genera y lo que almacenas. Genial. Volvemos aquí. También, tal vez sea más fácil, te enlazaré a, te enlazaré a todos a él. Iba a guardar esto para el final. Pero si quieres, si te quedas atrás o necesitas un poco de ayuda, hay una versión completa de este ejercicio ubicada aquí. Pero te animaría a seguir adelante. Solo para ver las cosas a medida que se construyen. Genial. Entonces, de nuevo, ahora tenemos una tienda Vectorizada pero necesitamos decirle dónde está nuestro índice real. Entonces, hay un parámetro. Debería haber un parámetro en esto que se llama índice. Y escribimos el nombre de este enlace Vectorizado. Entonces, podemos copiar eso aquí. Y debería estar todo listo. Entonces, ahora tenemos nuestro generador de incrustaciones del modelo. También tenemos nuestra tienda Vectorizada. Solo vamos a almacenar lo que sale de esas incrustaciones en esta pieza Vectorizada del rompecabezas. Ahora, necesitamos realmente traer los data y meterlos allí. Entonces, a veces puede ser agradable tener console logs, para que realmente puedas a veces puede ser agradable tener console logs para que puedas asegurarte de llegar a ciertos puntos. Digamos aquí. Oh, el primero. Oh, gracias. Gracias. Tienes razón. Sí. Me preguntaba por qué el TypeScript no me daba hints. Tienes toda la razón. Gracias. También necesitamos decirle de dónde ingerir las incrustaciones. Buen grito. Genial. Entonces, sí. Me gusta el console log. Simplemente nos ayuda a rastrear dónde estamos. Entonces, digamos cargando vectores. Lo siento, cargando poemas del archivo de semillas. Y ahora, necesitamos, sí, realmente hacer nuestra carga aquí. Un poco. Estamos usando formato. Las cosas se ponen interesantes en la forma en que tenemos que leer las cosas aquí. Típicamente, usarías. Es posible que desees cargar estas cosas desde un almacenamiento de data remoto como R2 o S3 o algo por el estilo. Esto haría las cosas un poco más simples. 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 solo lo llamo como datos de poema sin procesar funcionará desde assets.json. Entonces, simplemente vamos a cargar nuestro texto sin procesar de ese archivo en esta variable. Te dejaré copiar eso. Y una vez que eso esté terminado, entonces podemos empezar a iterar sobre eso. Entonces, me gusta las funciones de reducción o mapeo si puedo usarlas. Entonces, llamo a eso datos de poema sin procesar. Eso es una cadena. Sepamos eso. Sí. Oh, bueno. Dividir. Y vamos a dividir estos en nuevas líneas porque es un JSON de nueva línea. Vamos a tomar cada una de esas líneas y decir veamos aquí. Cada línea es un JSON válido. Podemos seguir adelante y analizar eso. Entonces, el analizado es JSON.parse.line. Esto es solo un detalle de implementación de lo que tuve que hacer. Porque estamos haciendo un JSON de nueva línea aquí, tuve que no pude usar nuevas líneas para dividir las líneas de el poema real. Entonces, hice esas tuberías en lugar de slash ins. Entonces, lo que queremos hacer es convertir esas barras o esas tuberías de nuevo a las slash ins originales para que puedan ser cargadas correctamente. Sabemos que parse, de nuevo, parse es JSON. El formato aquí es

17. Cargando y Dividiendo Poemas

Short description:

Reemplazamos las tuberías en el texto analizado con nuevas líneas 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 entero como una incrustación puede disminuir la probabilidad de una búsqueda de similitud exitosa. En su lugar, podemos dividir y fragmentar 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 tuberías con nuevas líneas. 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 estas 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 los poemas. Perfecto. Y siempre es bueno, de nuevo, solo rastrea que realmente obtuvimos lo que queríamos. Entonces, digamos, cargado. Poems.length. Entonces, obtendremos un console log allí. Espero que todo eso tenga sentido hasta ahora. Ahora estamos llegando a algo un poco más específico para AI y cómo funciona esto. Entonces, si miramos estos poemas. Déjame volver esto a podemos ver que los datos reales aquí ya que estamos importando el poema no deberían ser colocados. Sí. Tienes razón, Jan. La ubicación no es la mejor. Probablemente debería estar solo en la fuente. Y, sí, eres bienvenido a hacer ese cambio si quieres. Solo tenía esto funcionando y no realmente quería meterme con eso demasiado. Pero para que tu ejemplo sea correcto, probablemente no es donde debería estar si lo estamos cargando en el código fuente real o en el código compilado. Genial. Podemos ver estos estas cosas son realmente bastante largas. Algunos de estos poemas tenemos un par que son muy cortos. Esto es Melody Godfrey. Me gusta su pequeño poema de autoestima aquí. Una de las cosas que poseo y mi valía es mi posesión favorita. Eso es un pequeño corto. Pero también tenemos algunos que son bastante más largos como el de Maria Angelou mujer fenomenal y cosas así. Entonces, una de las cosas a considerar cuando estás almacenando esta información es cuán grandes piezas de información quieres almacenar realmente en tu base de datos vectorial para aumentar la relevancia de estas búsquedas aquí. Entonces, podríamos poner el poema entero en una incrustación y almacenarlo, tú sabes, es una sola fila en la base de datos vectorial. Pero eso significa que, como, la similitud, como una búsqueda de similitud contra todo el poema se vuelve mucho menos probable de acertar, porque es, sabes, es más grande, el espacio de búsqueda se ha incrementado. Y los parámetros generales y las características pueden no estar tan representadas con precisión como lo estarían con un pequeño, como, como una versión fragmentada de algo así. Entonces, hay este concepto en el almacenamiento de vectores llamado división de picos o fragmentación y división. La gente lo llama de un par de diferentes, como, hay un par de cosas diferentes que se llaman. Pero hay toda una ciencia para esto también,

18. Dividiendo Poemas y Añadiendo a la Tienda

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 divisor de texto de caracteres cursivos para dividir los poemas en documentos. Estos documentos son procesados por el tokenizador y las incrustaciones. Conservamos el título del poema y el autor como metadatos. Existe una ligera restricción con el formato de los metadatos, lo que nos obliga a eliminar una línea de código. Finalmente, añadimos los documentos a nuestra tienda y obtenemos los ID correspondientes.

como intentar conseguir esto, esta información correcta. Asegurándonos de que tienes un fragmento suficientemente preciso que realmente almacenas el contexto que es, sabes, lo suficientemente largo para luego usar en algún lugar, pero no demasiado largo en el que como tu probabilidad de coincidencia, tu probabilidad de coincidencia disminuye. Así que, incluso podemos poner incluso esto definitivamente un valor con el que jugar. Vamos. Ya he encontrado uno que funciona bastante bien con este tamaño de fragmento de 200. Así que, vamos con eso por ahora. Y luego explicaré un poco más después de que, sabes, después de que todo esto haya terminado y tengamos code para partir. Así que, vamos a crear un divisor. Y esto también lo verás aquí, el divisor de caracteres cursivos viene de que tengo que tener una hoja de trucos aquí. No sé exactamente dónde están las importaciones y cosas así. Recurso. ¿Escribir bien eso ayudaría? Lo siento, te veo o esto. Sé que hagamos esto. De nosotros sé que viene de Linkchain y es el texto de la letra. Ahí vamos. Ahora, nos da lo que necesitamos. El divisor de texto de caracteres cursivos es uno de los divisores de texto disponibles por ahí. Esto es específico para el texto. Alguien preguntó si todo esto funciona también con imágenes y vídeos. Definitivamente lo hace. Pero usarás una forma diferente de dividir data en un divisor de imágenes versus uno de texto aquí. Para los propósitos de la aplicación rag vamos a ir con esto. Pero vale la pena mirar en. Como las formas de hacer este tipo de división y fragmentación para imágenes y vídeos y cosas así. Pero de todos modos, sí, pondremos esto en marcha. Tomamos algunos parámetros aquí. Iba a darle un tamaño de fragmento. Encontré que 200 funciona bastante bien. Lo bueno es que tú también le das una superposición también. Así que, no pierdes sabes que no estás simplemente como dibujando líneas duras en la arena en cuanto a cómo funciona esto. Estás dando un poco de ti no puedes darle la capacidad de superponerse y obtener algo de contexto de lugares anteriores también. Sí, iremos con un divisor que se ve así. Y ahora vamos a usar eso para empezar a dividir nuestros poemas en lo que se llaman documentos. Básicamente, los individuales los documentos se alimentan en el el tokenizador y todo y luego eso se alimenta en las incrustaciones y ese es el flujo allí. Así que, vamos a saltar sobre estos const poem en poems. Mencionamos que estamos creando documentos, así que docs va a ser eso es operaciones asíncronas que puedo voy a usar ese divisor para dividir a través de este método llamado crear documentos. De nuevo, eso básicamente crea un montón de subsecciones de nuestro original entrada original. Esas subsecciones son docs. Pero la entrada en esto va a ser nuestro texto de poema. Podemos ver que toma eso toma el texto aquí. Esto es lo que estamos tratando de dividir y crear documentos para. Es en este caso va a ser poema.txt. También podemos darle algunos metadatos para que no perdamos mucha información al hacer esto. Como quizás, sabes, queremos asegurarnos de que cada uno de estos documentos todavía todavía sabemos de dónde vino. Así que, lo que haremos es que diremos que el título, le daremos uno llamado título y el título es el poema.título y también diremos el lo mismo para el autor esencialmente. Va a 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 un montón de registros si queremos. Siempre es interesante, supongo. Así que, digamos que hacemos que tenemos veamos, sí, queremos capturar lo que acabamos de procesar. Así que, poema.título oops creado y luego obtengamos nuestro conteo de puntos. longitud de puntos puntos. ¿Es plural? Son dos etiquetas. Así que ahora sabemos cómo se ve eso. Genial. Y, hay un pequeño contratiempo con la forma en que las cosas funcionan actualmente en

19. Formato de Metadatos y Añadiendo a la Tienda

Short description:

El formato para los metadatos utilizados en la inserción vectorial tiene una profundidad restringida. El uso del divisor 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 de la solicitud de creación de documentos. Actualmente, esto es una incompatibilidad que necesita ser corregida. Después de eso, añadimos los documentos a nuestra tienda y obtenemos los ID de índice. La respuesta no es crucial para nuestro propósito.

y todo esto con vectorize y un par de otras bases de datos. El formato para los metadatos que usas cuando estás insertando tu vector está algo restringido, no es solo un, es un objeto JSON pero la profundidad de ese objeto está restringida. Y desafortunadamente, si usas docs, el divisor de documentos de link chain, viola esa restricción de profundidad. La buena noticia es que esta no es información que necesitamos demasiado. Tendrás que confiar en mí en esto. Todo lo que queremos hacer es entrar en nuestro básicamente recorrer los docs y luego eliminar. Se llama doc.metadata.loc. Es esta línea de code. Esencialmente, lo que esto significa en el divisor es que dice qué, ya sabes, si es una cadena de texto de varias líneas, qué líneas de tu cadena están cubiertas por este documento de creación, 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 arreglar. Pero solo ten en cuenta que va a tener que ser una cosa por ahora. Genial. Y ahora vamos a añadir estos a nuestra tienda. Así que cuando añadimos algo, obtenemos IDs para ello. Así que los comprobaremos. Diremos, llamaremos a esos IDs de índice, pero vamos a hacer await store.add documents. Y son los docs que acabamos de crear. Y sí, estos son vectorized store de antes. Son los documentos que acabamos de crear. Y se me ocurrió la idea de console log esto también. Pero podemos decir, oops, uno de la plantilla insertada. Si podemos simplemente registrar estos IDs de índice que obtuvimos de vuelta al índice. Y sí, la respuesta aquí no importa demasiado. No estamos realmente usando esto para, estamos más interesados en cargar y ya sabes, es un hacedor versus un getter aquí. Genial. Genial. ¿Alguna pregunta, comentario, preocupación hasta ahora? Esto aquí es lo que toma

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 usar la base de datos vectorial realizando una búsqueda de similitud semántica utilizando el punto final de 'búsqueda'. Extraeremos una consulta de la cadena de consulta y obtendremos los embeddings de la tienda. Luego usaremos el método de 'búsqueda de similitud' en la tienda para realizar la consulta y limitaremos los resultados a cinco. Después de desplegar con Wrangler, podemos acceder al punto final de búsqueda y llamar al punto final de 'cargarlos' 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 desplegar si es necesario.

nuestra entrada y crea un contexto para el trapo 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 si, sé que todos estamos interesados en llegar a la consulta real. De hecho, tal vez hagamos otro descanso de cinco minutos porque estamos, estamos en otra hora, Mark. Sí. Ahora tenemos la capacidad de cargar data. Hagamos una prueba rápida para asegurarnos de que podemos usarlo realmente. Luego obtenemos, ya sabes, algo de lo que esperamos aquí. Así que hay un pequeño punto final aquí llamado búsqueda. También un buen punto final. Pero esto va a hacer uso de la base de datos vectorial para hacer una simple búsqueda de similitud semántica. Entonces, lo que esto parece, vamos a extraer una consulta. La extraeremos de la cadena de consulta real, también. Así que C.req, así que C.req.query, nómbralo como Q o algo así. Porque no necesitamos que esto sea, ¿cómo tengo los enlaces de Wrangler, Tom solamente? Eso debería suceder automáticamente cuando haces un despliegue de Wrangler o algo así. Ahora tus tipos pueden no estar presentes. Así que si estás hablando de tipos específicamente, tienes que hacer un poco de trabajo extra para añadir esos 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 son los tipos específicamente de los que estás preocupado eso debería estar bien. Si no puedes encontrarlos en absoluto, como un despliegue de Wrangler, eso probablemente significa que algo más está pasando. Solace debería aclarar eso.

Mientras tanto, sigamos adelante. Así que tenemos la consulta. Y también queremos hacer lo mismo que acabamos de hacer, de hecho, vamos a copiar y pegar. Vamos a obtener nuestros embeddings en nuestra tienda, para que podamos realmente usar el vectorizador para hacer la consulta aquí. Y luego es solo copiar y pegar. Probablemente sea solo una cuestión simple de hacer const save results equals await store. Y podemos ver que la tienda tiene propiedades en ella. Pero el que nos interesa aquí es la búsqueda de similitud. Y queremos que sea solo lo que sea la consulta. Y lo limitaremos a cinco por ahora. Adelante y respuesta JSON resultados. Genial. Esto es todo. Super simple. Copiamos y pegamos esto. Todo lo que estamos haciendo aquí es extraer la variable de consulta. Y luego solo, esta es realmente la única nueva pieza del rompecabezas, es poder usar el método de búsqueda de similitud en la tienda. Así que, vamos a hacer un despliegue de Wrangler ahora. De nuevo, ese comando es npx wrangler deploy. Si la página principal no estaba funcionando antes probablemente todavía no lo estará. Pero eso está bien, no estamos realmente interesados en eso, queremos, ¿cómo hago para que esta barra desaparezca? Está interfiriendo con 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, solo estamos extrayendo la consulta para, oh, lo siento. Me adelanté un poco a mí mismo. Realmente tenemos que llamar a cargarlos primero para cargar estas cosas ahora. Así que, hicimos todo el trabajo para hacerlo. Veamos si realmente funciona. Así que, para hacer eso, hicimos ese punto final de obtener así que podemos simplemente llamar, cargarlos. Y parece que tenemos un error interno del servidor aquí. Así que, eso está bien. Hay una forma de hacer algo de debugging si necesitamos. Ignora ese comando. Eso es solo una cosa de Cloudflare. Lo que queremos hacer es npx wrangler tail para ver por qué falló esto. Refresca eso. Podemos ver, no puede leer propiedades de indefinido. No puede leer propiedades de indefinido. Así que, cargamos 10 poemas. Conseguimos que esta pieza se cargara, funcionó. Nunca, llegamos a, sí, llegamos a cargar 10 poemas. 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 desplegar eso de nuevo. Esta es parte de la diversión, ¿verdad? Siempre demos en vivo, codificación en vivo, tratando de descubrir 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:

Arreglamos el problema con la creación de documentos y cargamos exitosamente poemas en VectorDB. Buscar '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 de Cloudflare workers AI, específicamente el componente de chat.

Console.log poems. Hicimos nuestro slash in. Eso se ve bien. Sería agradable. Creo que estamos fallando en el momento de la creación del documento. Entonces, tal vez también hagamos un, oh, tenemos solo el poema individual aquí. Así que, eso no se ve tan mal allí. Hacer un despliegue rápido y tail. Pero para trabajar la primera vez habría estado asombrado. Oh, interesante. Entonces, parece que los poemas son 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, para const no en sino de. Sí, tienes toda la razón. Hombre, gracias, gracias por eso lugar. Es por eso que es agradable tener un poco, es un verdadero ejercicio de emparejamiento aquí.

Genial. Esto debería funcionar ahora. Pero vamos a verificarlo tres veces. Lo vemos girar por un tiempo. Eso suele ser una buena señal. Eso significa que está tratando de hacer algo. Volvemos a nuestros registros. Tomó un poco de tiempo aparecer aquí. Pero veamos lo que obtenemos. Sí, mira allí. Entonces, ahora podemos ver que hemos insertado efectivamente un montón de registros con el texto de nuestros, sí, nuestros poemas. Esto es genial. Aprecio la captura de nuevo, eso, eso, eso, eso, eso, ese pequeño paquete allí con el de versus en. Me encanta ver eso. Entonces, ahora haremos, ahora realmente intentaremos esta cosa de búsqueda. Ahora que tenemos cosas en, en el VectorDB, si buscamos, vemos una cola. Sucede que sé que geese está aquí. Estoy bastante seguro. O tal vez sea goose. Eso altera un poco los resultados un poco. Pero hagamos goose. Buscaremos esto para goose. Y así como así, vemos que obtenemos vemos que obtenemos de vuelta. Este es el, este es el poema que tiene el goose en él, justo allí. 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 realmente no importa demasiado. De todos modos, validation que podemos de hecho cargar el podemos de hecho cargar los poemas, y que están en el orden en que esperábamos que estuvieran. Hay algo sí, ese gander goose, pequeños pájaros, todo esto tiene sentido. Estamos viendo, estamos viendo cosas así. Hay un poco de un tema aquí. Entonces sí, creo que se ve bastante bien. Tenemos una API que realmente valida que somos capaces de ver lo que para ver las cosas. Pasemos a la parte realmente divertida, que es que estamos haciendo una tontería Guinness como un chat, un chatbot es la idea aquí. En el estilo de como, todos los mensajeros instantáneos, aunque estamos hablando con un cupido, o su nombre es Bernard el bardo en este caso, pero una persona tipo cupido. Entonces, vamos a hacer esto. Lo primero es lo primero, queremos leer lo que entró. Entonces diremos allí, solicitud. Por ahora, diremos que el cuerpo es igual a C.request.json. Esto es en realidad un data operación de búsqueda. Así que esperemos eso. Y esto nos dará la entrada que podemos entonces usar para alimentar nuestro proceso aquí. También necesitamos lo mismo que antes. Necesitamos acceso a la tienda y embedding. Así que podemos hacer nuestra búsqueda. Así que solo copiaremos y pegaremos esos de nuevo, deberían verse exactamente igual. Ahora queremos configurar el chatbot un poco más. Entonces, vamos a hacer eso. Así que para el chat, o algo, en el chat es usted y esto va a ser chat. Cloudflare workers AI. Esto también viene de el paquete lang chain Cloudflare, ya configurado para hacer lo que queremos hacer en lo que respecta a las cosas del chat. Hay un montón de otros modelos disponibles que hacen cosas como imagen reconocimiento e incluso generación de imágenes y cosas así. Pero vamos a trabajar con

22. Configuración del Chatbot con el Modelo de IA

Short description:

Configuramos el modelo, la ID de la cuenta y el token de la cuenta. Utilizamos la tienda 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, en este caso, nosotros realmente permitimos a las personas pasar el modelo que quieren usar. Podríamos codificar esto también. Pero ya tengo la interfaz de usuario configurada para enviar esto, por lo que podemos simplemente pasarlo, tomarlo de la solicitud que hemos analizado. Y ahora necesitamos establecer la ID de la cuenta y el token de la cuenta. Esto nos llevará de vuelta a Cloudflare ID de la cuenta, Cloudflare token de la API. Volveremos a esto. Sí, simplemente pondremos una gran tarea pendiente, porque necesitamos completar estos. Nos preocuparemos por eso en un momento.

Bueno, ahora tenemos nuestra tienda, pero queremos usarla para extraer cosas de ella ahora para el bien de chatear. De nuevo, la cadena en blanco ha hecho un muy buen trabajo construyendo algunas de estas cosas para nosotros. Hay este concepto llamado recuperadores. Eso está básicamente hecho a medida para, de nuevo, buscar cosas en bases de datos vectoriales. Aquellos son genéricos sobre cualquier cosa que implemente la API de VectorStore, por lo que podemos simplemente pasar llamar a asRetriever en nuestra tienda, y obtendremos nuestra tienda. 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á pasando en la interfaz de usuario. Tendré que abrirlo al lado 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 indicaciones. 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 solo 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 acaba de escribirnos. Entonces diremos, capturaremos eso localmente, por lo que el mensaje del usuario es body.userMessage. Perfecto. Y luego queríamos también tener el contexto histórico de la conversación también. Tenemos todos los mensajes en esta lista de mensajes aquí. Haremos un poco de filtro en eso para obtener el conjunto completo de mensajes hasta ahora. Así que los mensajes, los objetos de mensajes, son body.messages.map. Y para cada uno de estos, queremos decir, message.role. Así que hay un rol especial que Blank Chain asigna a la respuesta del chatbot, y eso es asistente. Entonces diremos, si vino del asistente, entonces etiquétalo como un mensaje de AI. De lo contrario, simplemente usaremos el mensaje en sí. Entonces, y también queremos en esa matriz incluir el contenido de ese mensaje. Sí, está bien. Así que tenemos nuestros mensajes que vienen del usuario, tenemos nuestro contexto aquí. Queremos alimentar eso en nuestro modelo para enviarnos realmente lo que nos interesa escuchar. Así es donde realmente nos metemos en la programación de la AI y la ingeniería del espacio de indicaciones. Así que si nunca has echado un vistazo detrás de las cubiertas antes, la mayoría de los chatbots tienen un conjunto de programación de parámetros donde ellos están configurados en formato legible para humanos para ser como, este es tu nombre, nunca se supone que debes hablar sobre cómo vas a destruir el mundo, todas esas cosas. Justo lo que estamos haciendo para esta configuración aquí. Así que este es un chatbot, veamos, miro mis notas de nuevo para ver de dónde viene esto. Chat, mal, no me lo va a dar gratis esta vez. Cadena de lenguaje, plantilla de indicaciones de chat. Bueno, el tipo de actividad actual que está sucediendo ahora es la plantilla de indicaciones de chat. Eso es lo que estamos buscando de esto y de nuevo, podemos ver aquí que esto es un de nuevo hecho a medida para las indicaciones de chat esencialmente y tiene una muy buena documentación de cómo se ve eso. Pero aquí es donde estamos diciendo que sabes cuál es nuestro nuestro sistema se ve así, el que el chatbot. Así que vamos a hacerlo. Plantilla de indicaciones de chat. De los mensajes de los mensajes. Y le das tanto el sistema, veamos, es un sistema eso es algo pequeño que viene de algún lugar único. Este mensaje del sistema plantilla de indicaciones también en el mismo lugar en realidad. Y mensaje humano. Plantilla de indicaciones de mensaje del sistema. Eso tiene un método de plantilla divertido que llamamos y aquí es donde estamos definiendo cuál es nuestro cómo se ve nuestro sistema. En realidad, voy a copiar y pegar esto de mi repositorio de GitHub porque ya lo he definido un poco. Pero estas son las reglas. De nuevo, estás definiendo las reglas para tus chatbots. Entonces, en mi caso, déjame copiar esto. Sí. Aquí es donde de nuevo llego a decirle a la AI quién es y cuáles son sus reglas. Entonces, en este caso, estoy diciendo que sabes que hoy es el Día de San Valentín, estás repartiendo amor con todos. Y su nombre es, el hecho de que se supone que debe usar poemas que ya hemos sembrado aquí. Tiende a ser un poco verboso, entonces, me gusta tratar de limitarlo a solo unas pocas oraciones. Y sí. Utiliza esos objetos de mensajes de los que estábamos hablando como el contexto en eso. Y lo mismo para la plantilla de indicaciones. De nuevo, también queremos decirle lo que ha dicho el humano. Así que eso es lo que esta plantilla de indicaciones de mensaje humano del usuario este mensaje de usuario se remonta al cuerpo que se remonta al mensaje que viene de nuestra interfaz de usuario aquí. Y así como así, hemos definido un bot realmente. Gracias por pasar, Raiz. Te aprecio.

23. Completando la Cadena de Lane

Short description:

Configuramos nuestro prompt 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 configuración de prompt. Queremos usar eso en, ya sabes, la cadena de Lane. La cadena de Lane realmente consta de lo que se llama secuencias ejecutables. Habría pensado que eso sería una exportación que está disponible. Pero aparentemente no. Secuencia ejecutable para runnables de núcleo. Vale. Entonces, importar. Cadena de Lane. ¿No CloudFlare ID de cuenta? Sí. Sí, sí, sí. Eso sucederá. Este es el to do que tenemos aquí. Necesitamos completar esto. To do para conseguir eso. Y eso es lo que conseguiremos. Nos saca un poco de la codificación hacer eso. Así que pensé que podríamos volver a eso. Pero eso es algo esperado por ahora al menos. Es un buen intento, sin embargo. Entonces, secuencia ejecutable. Si estás intentando ejecutar el ya completado, significa que necesitas ir a tu ReadMe. Te diré qué, si no terminamos esto en cinco minutos, simplemente volcaremos el completado, y te mostraré exactamente cómo hacerlo funcionar. Pero hasta entonces, intentaremos pasar por esto. Porque es un poco engorroso. Si no has configurado un token de API de CloudFlare antes, es un poco... Sí, tienes que pasar por algunas páginas del tablero para hacerlo. Pero llegaremos allí. Genial. Entonces, tenemos nuestras importaciones ahora. Queremos secuencia ejecutable. Las secuencias ejecutables son el núcleo de la cadena. De ahí viene la cadena. Está ejecutando una serie de operaciones y un LLM. Ahora tenemos nuestro prompt. Esa es una de nuestras entradas en esta cadena. Entonces, lo primero que vamos a hacer es que vamos a decir que, oye, los poemas en esto provienen del recuperador, el recuperador de la tienda de vectores, y que vamos a canalizar eso en una función que hace un formato especial para nosotros, pero también proviene de LaneChain de serie. Simplemente va a tomar los documentos que creamos anteriormente y los unirá en una cadena. Y básicamente decir que originalmente eran tipos de cadena, por lo que es seguro leerlos como cadena. Entonces, eso viene de LaneChain al documento. Y es formatear documento como cadena. Genial. Tenemos eso. Y, veamos. También queremos importar nuestro mensaje de usuario. Estas son las entradas en este prompt aquí. Puedes ver que hay una plantilla para poemas y una variable de plantilla para el mensaje del usuario. Estamos definiendo lo que son aquí para que podamos usar eso. Queremos simplemente pasar cosas a través como un mensaje de usuario, así que hacemos eso. Y de nuevo, estamos canalizando eso en el prompt para que podamos completarlo. Y también, en el chat. El analizador de salida de cadena es lo que necesitamos. Y luego iremos a LaneChain. Y porque vamos a leer esto como una cadena, así que parseamos esto como una cadena. Analizador de salida de cadena. Muy bien. Entonces, ahora podemos transmitir. Oh, espera. Vamos a transmitir esto para que podamos obtener, como, ya sabes, mientras están escribiendo algo de vuelta. Podríamos evitar eso y hacerlo todo de una vez si quisiéramos, pero es divertido obtener el estilo de mensaje realtime, 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 toma.

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 de la tienda y permiten que el modelo de IA funcione correctamente. Creamos un token de API con los permisos requeridos y establecimos el ID de la cuenta como una variable de entorno. Si estás siguiendo, estas variables eran cadenas vacías anteriormente, pero ahora están completas. Cada participante necesita crear su propio token de API.

O espera. Oh, sí. Entonces, queremos hacer cada token. Bueno, este es un término un poco sobrecargado. No son los mismos tokens de los que hablábamos antes. Este es un token en nuestro flujo de texto de Hono, pero esto está fuera del espacio AI de nuevo en, como, espacio de respuesta. Pero esencialmente, nos permite escribir datos parciales data en el front end. Oh, ¿eso es lo que transmitimos, verdad? Y eso es nuestro, debería llevarnos allí. De nuevo, un poco, esto es, hay mucho pasando aquí. Definitivamente entiendo si es difícil de seguir. Pero tenemos nuestros embeddings AI en nuestra tienda, así que tenemos todo nuestro material para obtener los embeddings reales de lo que se nos envió. Tenemos la capacidad de leer, recuperar cosas existentes de la tienda, lo cual es bueno. Tenemos, este es el modelo de chat para darnos nuestras cosas de vuelta, nuestros parámetros para el propio bot, junto con un mensaje que el usuario nos envió, y luego solo 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, vamos, ya que estamos acercándonos al tiempo aquí, vamos a seguir adelante y solo voy a guardar todo localmente que tengo y moverme a la rama completada y te mostraremos lo que se necesita para que esas cosas funcionen. Déjame mover mi toml regular a las cosas nuevas. Demo. Y demo. Genial. Entonces, necesitamos, teníamos que hacer en nuestra fuente para completar el, ¿dónde estaba esto? Oh, sí, aquí arriba. Los tokens de API para Cloudflare. Y necesitamos eso para que los trabajadores AI hagan su cosa. Hay un pequeño lugar en el readme que hace te dice cómo configurar estos valores, pero no te dice de dónde obtenerlos realmente. Entonces, déjame guiarte a través de ese proceso y lo haremos rápido 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 solo le das el nombre de la variable que quieres. Esto te dará un espacio para ingresar un valor secreto. El ID de la cuenta proviene de, hay un par de lugares diferentes donde puedes obtenerlo. La forma más fácil es probablemente simplemente ir a la URL. Bueno, en realidad, si estás en las páginas, y la página de workers y páginas ya, puedes copiar esto aquí mismo. Pero es el mismo valor que está en la URL para la cuenta, también. Entonces, de cualquier manera, una de esas funciona. Entonces, acabo de presionar el valor de copia 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 de nuevo, preparar esto para empezar a correr. Necesito hacer un token de API que permita la lectura de los trabajadores 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 tendremos un par para nuestro inicios de sesión Angular. Esta es la pequeña pantalla fuera de la pantalla a la que accedimos anteriormente, 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 trabajadores. Esto es probablemente todo lo que necesitamos. Entonces, vamos a seguir adelante y simplemente usar eso plantilla. Voy a renombrar esto a no tienes que renombrarlo si no quieres, pero lo haré solo por el bien de la mayoría aquí. Lo renombraré a DevOps JS masterclass. Workers AI. Okay. Y podemos ver que esto, el permiso que nos da es la capacidad de leer de workers AI, que creo que es todo lo que necesitamos para este token. Um, podemos limitarlo a solo una cuenta. Probablemente no sea una mala idea. Solo decir que es válido solo para esta cuenta compartida aquí. No tienes que preocuparte por el filtrado de IP. Puedes si eres hiper paranoico, pero no es obligatorio. Y luego puedes encontrar un TTL para cuánto tiempo vive ese token. Solo lo omitiré hasta el sábado porque no va a vivir demasiado tiempo. Pero si hago clic en okay, me da una pequeña descripción general 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, tengo ahora configurado el token y el valor o el ID de la cuenta según sea necesario. Y si estás siguiendo, estas eran cadenas vacías. Si estás en la rama completada, estas están completas ahora porque realmente agrega esas como variables de entorno al contexto de la cuenta que entra.

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 de la tienda y permiten que el modelo de IA funcione correctamente. Creamos un token de API con los permisos requeridos y establecimos el ID de la cuenta como una variable de entorno. Si estás siguiendo, estas variables eran cadenas vacías anteriormente, pero ahora están completas. Cada participante necesita 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 algo global específico de la cuenta. Quiero decir, podría compartir el mío contigo, pero estarías usando mi cuenta. Así que, probablemente no sea una buena idea. Definitivamente es algo que quieres crear por tu cuenta. Y, de nuevo, si necesitas que te guíe a través de eso de nuevo, puedo hacerlo. Eso fue tokens de API por aquí. Crear token workers AI. Y luego podrías hacer un poco de filtrado allí, si quisieras, pero incluso simplemente seguir con los valores predeterminados allí es suficiente. Podemos ver que eso existe aquí. Entonces, si todo salió bien, deberíamos poder desplegar esto. Y cruzando los dedos. Oh. Creo que la cola. Lo siento, ella esta vez. Tengo. Oh, vaya. Lo siento. Tal vez esa es toda la razón por la que no estaba funcionando. 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. Había olvidado que eso era una cosa 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 a nosotros. Esto sigue al ganso y al ganso que estábamos viendo antes. Pero, tada. Tenemos una aplicación de chat funcionando. Este es el mismo code que estábamos viendo justo ahora.

Lo siento. La pieza que faltaba era el NPM run deploy. No Wrangler deploy. Espero que hayas disfrutado esto. Sé que nos quedamos cortos de tiempo. Eso fueron tres horas completas. Estoy dispuesto a quedarme si la gente quiere que las cosas funcionen al 100%. Me quedaré unos diez minutos más o algo así. Pero sé que también estamos a tiempo. Fue un placer. Y realmente, realmente aprecio que todos se quedaran y pasaran el rato y, con suerte, algunas conclusiones interesantes. De hecho, tengo una pequeña despedida aquí. Gracias por hacerlo, felicidades por haberlo logrado. De nuevo, sé que todos ya sabemos esto. Pero, serverless AI no es una bala de plata. Pero es bastante bueno. Y bastante fácil para la creación de prototipos rápidos. Especialmente cosas como trapos donde puedes tener modelos más estáticos. Y puedes usar soluciones existentes para bases de datos vectoriales y cosas como eso. Lo que hicimos fue un poeta realmente genial. Es capaz de darnos poemas de amor y citarlos a su manera un poco peculiar. Pero imagina si esto también estuviera usando realmente documentación de 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, vemos la documentación de los trabajadores de CloudFlare. Y puedes preguntarle, sabes, ¿cómo configuro un trabajador que redirige a HTTPS? Y usará la documentación que tiene y el contexto que tiene para dar una respuesta real para algo así. Entonces, tuvimos una pequeña demostración divertida de esto. Muy, muy poderoso si lo aplicas a otras aplicaciones y cosas así. Publicaré estas diapositivas. Pero tengo un par, ya sabes, lecturas adicionales y más enlaces de aprendizaje también. Pero muchas gracias. Y, de nuevo, si tienes que irte, lo entiendo totalmente. De lo contrario, me quedaré y haremos que esto funcione para la gente. ¿Querías que te mostrara de nuevo la creación de un token de API? Sí. Si vas a API lo siento, haz clic en este pequeño usuario desplegable aquí arriba y ve a mi perfil. Eso te dará esta pantalla. Y aquí a la izquierda

26. Uso de la plantilla Workers AI y precios

Short description:

Puede utilizar la plantilla de Workers AI beta sin hacer 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 de precios en el futuro. El costo depende del uso y del tamaño del conjunto de datos. No dude en hacer preguntas en el canal de Discord de CloudFlare para Vectorize y Workers AI. Agradecemos su participación y esperamos que haya disfrutado de la masterclass. ¡Feliz Día de San Valentín!

son tokens de API. Donde puedes hacer crear token. Y simplemente usando la plantilla de workers AI beta te llevará allí. Honestamente, ni siquiera tienes que cambiar esto si no quieres. Puedes ir a continuar con el resumen y estarás bien. Pero ese valor que obtienes en la siguiente pantalla es lo que quieres pegar en lo que el token de API de Cloudflare este comando te da. Saludos a todos. Y, de nuevo, agradezco que todos se unan. Es genial. Supervisaré las preguntas durante los próximos minutos. Pero, que tengan un encantador Día de San Valentín.

Sí, está bien. Estaba diciendo que en este caso, sí, solo está restringido a los poemas. Pero eso es porque se lo dijimos 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 no invente las suyas. Entonces, en este caso es lo suficientemente inteligente como para saber que tiene que usar algo de esta lista que hemos dado aquí. Pero no tiene que ser así. Definitivamente puedes darle un espectro de operación mucho más abierto. Mucho de eso depende de ti. Y es bastante interesante. La ingeniería basada en indicaciones es su propio pequeño microcosmos de cosas a considerar. Sí. Frank, tienes una buena pregunta sobre el costo. Por el momento, todo es gratis. Tendré que poner un asterisco en eso. Es gratis si tienes un plan de pago de workers. Vectorize en sí, Vectorize solo está disponible para los usuarios de workers pagos, por eso tuvimos que pasar por el proceso de agregar personas a una cuenta específica para que esto suceda. Esto es mientras están en beta. Planeamos cambiar eso. Planeamos cambiar los precios una vez que vayamos a GA. Toda esa información de precios ha sido lanzada, 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 cuán a menudo estás consultando tus datos. En este caso, probablemente no sería ni un centavo. Porque no estamos golpeando esto muy fuerte. Pero basado en cómo se ve tu tráfico puedes ver que obtienes 30 millones gratis una vez que llegamos allí, una vez que esto se vuelve GA. A menos que estés golpeando las cosas bastante fuerte, puede que no te cueste mucho en absoluto. Pero entiendo que mucho de eso depende del uso y hay algunos cálculos para ejemplos de uso y cosas en esta página. Pero para los aficionados y usuarios como ese, también depende del tamaño de tu conjunto de datos. Pero teóricamente podría ser muy, muy poco. Creo que cubrí lo que dije. Repetí un poco lo que originalmente había perdido allí. Pero si hay algo específico que quieres que repase, puedo cubrir eso. Tengo unos dos minutos más antes de que tenga que irme por otras obligaciones. Pero todavía veo a la gente charlando, así que no voy a irme todavía.

Sí, Forrester. Eres bienvenido. Tenemos un Discord. Si aún no has revisado el Discord de CloudFlare, ahí es donde muchos de nosotros pasamos el rato. Pero hay un canal específico para Vectorize y uno 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 piensas después de esto y quieres aclaración, entra en Discord de CloudFlare, busca ese canal de Vectorize o el canal de Workers AI. Y solo deja una línea allí y te responderemos a ti. Todos somos bastante buenos monitoreando esas cosas. Pero saludos a todos. Creo que fue realmente, realmente divertido. Estoy asombrado de que realmente pudimos llenar las tres horas que teníamos. Logramos hacerlo. Y deberíamos hacerlo con éxito. Entonces, sí, también tengo algo de tiempo libre. ¿Hay una docs sin plantilla de indicación? Sí, tenemos muchas plantillas y tutoriales para esto. Vizual. Probablemente estoy diciendo eso mal. Pido disculpas. Hay muchas plantillas para esto ya. Mi código fuente también está ahí. Con una cuenta totalmente gratuita, esto no funcionará porque tienes que tener workers pagos para trabajar con Vectorize. Pero puedes no, ya sabes, solo necesitas pagar por los workers para hacer que eso funcione. No hay un nivel de facturación específico para ninguna de las otras cosas de AI además de los workers, por el momento al menos. Bueno, todos. Saludos y que tengan un encantador Día de San Valentín. Fue divertido pasar el rato con todos ustedes. Paz.

Watch more workshops on topic

Working With OpenAI and Prompt Engineering for React Developers
React Advanced Conference 2023React Advanced Conference 2023
98 min
Working With OpenAI and Prompt Engineering for React Developers
Top Content
Workshop
Richard Moss
Richard Moss
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
High-performance Next.js
React Summit 2022React Summit 2022
50 min
High-performance Next.js
Workshop
Michele Riva
Michele Riva
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.
Building Serverless Applications on AWS with TypeScript
Node Congress 2021Node Congress 2021
245 min
Building Serverless Applications on AWS with TypeScript
Workshop
Slobodan Stojanović
Slobodan Stojanović
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
Serverless for React Developers
React Summit 2022React Summit 2022
107 min
Serverless for React Developers
WorkshopFree
Tejas Kumar
Tejas Kumar
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?
Building a GraphQL-native serverless backend with Fauna
GraphQL Galaxy 2021GraphQL Galaxy 2021
143 min
Building a GraphQL-native serverless backend with Fauna
WorkshopFree
Rob Sutter
Shadid Haque
2 authors
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.
Intro to AI for JavaScript Developers with Tensorflow.js
JSNation Live 2021JSNation Live 2021
81 min
Intro to AI for JavaScript Developers with Tensorflow.js
Workshop
Chris Achard
Chris Achard
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

Scaling Up with Remix and Micro Frontends
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.
Full Stack Components
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.
Understanding React’s Fiber Architecture
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.
Building a Voice-Enabled AI Assistant With Javascript
JSNation 2023JSNation 2023
21 min
Building a Voice-Enabled AI Assistant With Javascript
Top Content
In this talk, we'll build our own Jarvis using Web APIs and langchain. There will be live coding.
AI and Web Development: Hype or Reality
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.
The Rise of the AI Engineer
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!