Domando los Modelos de Lenguaje a través de TypeScript

Rate this content
Bookmark

Probablemente hayas jugado con bots como ChatGPT y los hayas utilizado para brainstorming. Tal vez hayas notado que obtener respuestas en la estructura o formato correcto ha sido un desafío. Como personas, eso está bien, pero los programas son mucho más quisquillosos. Hemos estado experimentando con el uso de TypeScript en sí mismo como una forma de guiar y validar las respuestas de los modelos de lenguaje.

26 min
21 Sep, 2023

AI Generated Video Summary

TypeChat es una biblioteca de código abierto que utiliza tipos de TypeScript para guiar y validar las respuestas de los modelos de lenguaje. Permite la creación de respuestas complejas y proporciona una forma de corregir errores en el modelo. Los programas de TypeChat permiten un mejor flujo de datos y la capacidad de referirse a pasos individuales. El ejemplo de matemáticas demuestra el uso de un traductor de programas y técnicas de metaprogramación para la seguridad de tipos. Los modelos de lenguaje entrenados tanto en código como en prosa funcionan bien en este contexto.

1. Introducción a TypeChat

Short description:

Hola a todos, mi nombre es Daniel Rosenwasser y soy el gerente de programa en el equipo de TypeScript en Microsoft. Hoy quiero hablarles sobre TypeChat, otra cosa en la que he estado trabajando recientemente con otros miembros de mi equipo. En los últimos meses, probablemente hayan visto mucho sobre inteligencia artificial y modelos de lenguaje grandes. Estos modelos de lenguaje son muy poderosos y es posible que hayan tenido la idea de intentar incorporar la inteligencia de uno de estos modelos de lenguaje en su aplicación, tal vez para agregar una interfaz de lenguaje natural de alguna manera.

Hola a todos, mi nombre es Daniel Rosenwasser y soy el gerente de programa en el equipo de TypeScript en Microsoft. Hoy quiero hablarles sobre TypeChat, otra cosa en la que he estado trabajando recientemente con otros miembros de mi equipo. Entonces, en los últimos meses, probablemente hayan visto mucho sobre inteligencia artificial y modelos de lenguaje grandes. Estos modelos de lenguaje son muy poderosos y probablemente hayan tenido la oportunidad de usarlos en forma de algo como ChatGBT o un programa de chat similar donde pueden hacerle preguntas al modelo, y este puede darles respuestas, pueden iterar a través de ideas y es una excelente manera de iterar creativamente a través de conceptos y demás. Eso funciona muy bien para las personas, pero estos modelos de lenguaje son muy poderosos y es posible que hayan tenido la idea de intentar incorporar la inteligencia de uno de estos modelos de lenguaje en su aplicación, tal vez para agregar una interfaz de lenguaje natural de alguna manera. Entonces, como ejemplo, supongamos que tenemos alguna aplicación que debe ayudarnos a planificar planes para un día, planes para el fin de semana, tal vez específicos de una ubicación. No parece impracticable dado el hecho de que estos modelos han sido entrenados con tanta data en el mundo, por lo que podrían saber mucho sobre Seattle u otra ciudad.

2. Uso de tipos de TypeScript para guiar modelos de lenguaje

Short description:

En esta aplicación, quieres obtener datos de modelos de lenguaje. Sin embargo, los modelos de lenguaje a menudo producen datos que no son fáciles de analizar. Puedes hacer que los modelos de lenguaje respondan en JSON, pero no siempre coincidirá con el formato esperado. Los tipos de TypeScript pueden guiar al modelo de lenguaje y proporcionar el formato deseado. Sin embargo, el modelo de lenguaje aún puede producir respuestas que no se ajusten exactamente. Se necesita validación para hacer que la IA intente nuevamente.

estás tratando de buscar ideas para. En esta aplicación, tal vez solo queremos poder hacerle una pregunta, esa es nuestra intención de usuario, y luego obtener un conjunto de resultados con un par de lugares y cada una de sus descripciones también. Entonces eso parece estar bien, pero ¿cómo harías para que uno de estos modelos de lenguaje produzca data que puedas usar en esta aplicación? Lo que puedes haber notado al intentar hacer algo así es que terminas tratando de mimar a la IA para que la dé en un formato específico, y incluso una vez que está en ese formato, genera un lenguaje natural que no siempre será fácil de analizar. Por ejemplo, aquí hay una solicitud y una respuesta que tomó un par de intentos para obtener algo razonable, ¿verdad? Una de las cosas que puedes notar es que termino tratando de darle un poco de orientación sobre cómo espero que sea la respuesta, ¿verdad? Esto no es tan malo, ¿verdad? Pero principalmente porque ha dado una respuesta regular en un formato específico. Y así me ha dado un formato de elementos de lista. Cada uno de ellos está numerado. Y luego entre el lugar y la descripción, tengo dos puntos. Ahora, ¿la IA siempre va a volver con ese esquema o formato? No necesariamente. Muchos de estos modelos de lenguaje son no deterministas. Entonces realmente no puedes contar con este formato. Pero incluso si pudieras contar con ese formato, no siempre puedes confiar en que el data se pueda analizar de manera uniforme, ¿verdad? Por ejemplo, en este caso, tengo una lista y todo está en este formato. ¿Qué tal si intentamos dividir por los dos puntos, ¿verdad? Podrías intentar decir, déjame intentar quitar cada uno de los números y luego dividir por los dos puntos. Pero ¿qué pasa si uno de los elementos de tu lista tiene dos puntos dentro del título o algo así, ¿verdad? Básicamente estás tratando de analizar lenguaje natural en este punto, ¿verdad? Y ahora tienes un error, y ahora tienes que averiguar cómo ser resistente a eso. Y así esto termina siendo un poco impráctico para la mayoría de las personas, ¿verdad? Es muy difícil analizar lenguaje natural. Pero muchos de ustedes probablemente también se dieron cuenta de que pueden hacer que los modelos de lenguaje respondan en forma de JSON. Y eso es genial, ¿verdad? Ahora realmente tienes algo que tu aplicación puede analizar fácilmente con JSON.parse o lo que sea, y obtener los datos que necesitas y trabajar a partir de eso. Pero eso realmente solo funciona para ejemplos simples, ¿verdad? Aquí pude decir, aquí hay un ejemplo del JSON que quiero obtener, ¿verdad? Tengo un lugar y una descripción, un lugar y una descripción. Y la IA es bastante buena para entender eso. Pero no nos dice acerca de propiedades opcionales, tal vez el caso en el que tienes tres tipos diferentes de objetos que esperas que estén en una posición específica, cosas así. Y así, solo dar ejemplos sería impráctico porque te meterías en estas explosiones combinatorias de todos los tipos de cosas que realmente querrías proporcionar. Los ejemplos no son suficientes. Lo que necesitas es algo un poco más. Y resulta que hay un formato que funciona bastante bien, en su mayor parte, en nuestra experiencia. Y es algo con lo que todos ustedes están familiarizados aquí en esta conferencia de TypeScript, que son los tipos. Los tipos de TypeScript son en realidad un gran formato para describir el formato exacto que queremos de un modelo de lenguaje y todas las formas en las que esperamos. Entonces, los tipos son realmente buenos para guiar al modelo de lenguaje hacia lo que queremos, ¿verdad? Y en realidad puedes tomar los tipos en una aplicación, como el texto real de los tipos en tu programa, tomar una intención de usuario y crear una solicitud que puedes enviar a un servicio de IA, a un modelo de lenguaje. Y eso te proporcionará JSON, Dirías, dame una respuesta en forma de JSON, aquí está el tipo al que debes cumplir cuando proporciones esa respuesta. Y así, ahora puedes guiar al modelo de lenguaje.

Pero como dije, el modelo de lenguaje no siempre va a regresar con una respuesta que sea exactamente como esperamos, ¿verdad? Tal vez regrese con JSON, pero no es del formato precisamente, ¿verdad? Siempre podemos decir, oye, no me diste el JSON correcto, inténtalo de nuevo. Pero necesitas algo más que empuje a una IA para que puedas decir

3. Uso de tipos de TypeScript para la validación de respuestas

Short description:

Una vez que tengas los tipos, puedes usarlos para validar la respuesta del modelo de lenguaje. Al construir un programa que verifique cada propiedad y valor, TypeScript puede asegurar que la respuesta sea correcta. Si hay un error, se puede enviar de vuelta al modelo para su reparación. Este enfoque permite la creación de respuestas complejas, como tomar pedidos de café. TypeChat, una biblioteca de código abierto, encapsula estas ideas y facilita comenzar. El ejemplo de sentimiento, que categoriza el sentimiento del usuario como positivo, negativo o neutral, demuestra las capacidades de TypeChat.

intentar de nuevo también. Y eso es la validación. Entonces, en realidad, una vez que tengas los tipos, puedes usar los tipos para validar la respuesta del modelo de lenguaje también. Y así, lo que realmente decidimos hacer es, dijimos, oye, si tenemos los tipos y tenemos el JSON, es muy trivial construir un pequeño programa donde puedes hacer que TypeScript verifique cada una de las propiedades y cada uno de los valores que han regresado, porque es muy simple en ese punto. Porque JSON es realmente solo aproximadamente un subconjunto de JavaScript. Y JavaScript es un subconjunto de TypeScript. Y así, en realidad puedes crear un programa, hacer que TypeScript lo verifique y si tiene un error, enviar ese error de vuelta al modelo de lenguaje y hacer que el modelo de lenguaje intente reparar lo que fue su respuesta desde la última vez. Eso funciona bastante bien. Y así, puedes usar esto para realmente construir respuestas aún más complejas, ¿verdad? Entonces, puedes decir, oye, tal vez soy un quiosco que toma pedidos de café o algo así, ¿verdad? Y así, los pedidos son efectivamente en forma de un carrito. Un carrito tiene muchos artículos. Esos artículos pueden ser uno de varios tipos diferentes de artículos. Y le damos ese esquema. Damos una intención del usuario, como quiero dos lattes, uno tall y uno grande. Y el modelo de lenguaje puede, o buenos modelos de lenguaje pueden típicamente responder con JSON bien formado que se ajusta al tipo. Y depende de la calidad de tu modelo, ¿verdad? Puedes hacer que se repare un par de veces. Pero en general, muchos de los que están disponibles para las personas hoy en día que están ampliamente disponibles regresan con una buena respuesta aquí. Y así, creo que este es un buen momento para dar una demostración rápida de TypeChat, que es esta biblioteca que hemos creado para encapsular todas estas ideas y facilitar su implementación. Así que voy a abrir el repositorio de TypeChat, ¿verdad? Es todo de código abierto. Puedes obtenerlo hoy. Lo anunciamos hace aproximadamente un mes más o menos. Y así, primero queremos ver el archivo readme para ver los ejemplos, ¿verdad? Este es el archivo readme en el nivel superior. Pero para tener una idea de TypeChat en sí, queremos echar un vistazo a los ejemplos. En la carpeta de ejemplos, tenemos un archivo readme con una tabla que describe cada uno de los ejemplos que tenemos. Y básicamente van desde los más fáciles de entender hasta los más difíciles. Así que el ejemplo de sentimiento que tenemos es como el hola mundo de TypeChat. Es un clasificador que toma una intención del usuario, ¿verdad? Toma una oración del usuario como una indicación, la envía a un modelo de lenguaje e intenta categorizar ese sentimiento como positivo, negativo o neutral. Así que vamos a eso. Tenemos un esquema de sentimiento. Y este archivo de esquema es lo que realmente se va a usar cuando lo enviemos al modelo de lenguaje. En realidad, vamos a tomar el texto completo de este archivo de esquema. Pero nota que es solo una respuesta muy simple, ¿verdad? Es solo un objeto con una propiedad que recibe una cadena que es negativo, neutral o positivo. También, algo a tener en cuenta es que mencioné que estamos yendo

4. Construyendo el Modelo de Lenguaje

Short description:

Los comentarios pueden ser útiles para persuadir al modelo de lenguaje a dar una respuesta que se ajuste a una forma deseada. En el ejemplo de sentimiento, el modelo de lenguaje categoriza diferentes oraciones. El código para construir el modelo de lenguaje involucra la función 'crear modelo de lenguaje', que toma variables de entorno y carga el archivo de esquema. El 'traductor JSON' se utiliza para asegurar que la respuesta cumpla con el tipo deseado.

enviar literalmente todo el texto del archivo al modelo de lenguaje. Por lo tanto, eso también significa que cosas como los comentarios también serán útiles para persuadir al modelo de lenguaje a dar una respuesta que se ajuste mejor a una forma que solo los tipos en bruto. Por lo tanto, también puedes comunicar más que solo los tipos.

Entonces, ya estamos en el ejemplo de sentimiento. Todo está construido aquí. Entonces, lo que voy a hacer es ejecutar el ejemplo. Así que esto crea una indicación y simplemente voy a escribir hola mundo. El modelo de lenguaje que estamos usando en este momento, que es GPT35 turbo, categoriza esta oración como neutral. Cada vez que hago esto, tantas veces como ponga un signo de exclamación, siempre es neutral por alguna razón. Pero si escribo algo como type chat es genial. Eso es positivo. Así que veamos cómo se ve el código para construir esto. Primero, tenemos esta función llamada crear modelo de lenguaje. La función crear modelo de lenguaje toma las variables de entorno que tenemos en nuestro proceso, y eso se llena con un archivo .n. No voy a mostrarte el contenido completo, pero puedes configurar cosas como el modelo que deseas y algunos otros data. Actualmente, la función crear modelo de lenguaje solo está ahí para facilitarte un modelo accesible que cargue modelos de Open AI o Azure Open AI. En realidad, un modelo es un concepto muy general. Puedes usar cualquier modelo que desees. Puedes usar algo que se haya entrenado localmente. Puedes usar algo que sea un servicio completamente diferente. Type chat es agnóstico a todo eso. Todo lo que nos importa es si puedes tomar una cadena y establecer una conexión a través de un modelo de lenguaje y, finalmente, devolver un éxito o un fallo en la cadena. Solo nos importa si puedes darnos una cadena a partir de una cadena. De todos modos. Así que creamos el modelo de lenguaje, lo inferimos a partir de nuestras variables de entorno y luego cargamos el archivo de esquema. Este es el archivo de esquema real que tenemos junto a main.ts. Ahora, hay cierta sutileza allí y hablaré de eso en un segundo, pero observa que este archivo aquí corresponde exactamente a este archivo aquí. Luego creamos lo que se llama un traductor JSON. Y esto tomará el modelo, tomará el esquema y el nombre del tipo al que queremos que se ajuste nuestra respuesta. Y esto es como el punto de entrada en nuestro archivo de tipos, ¿verdad? Podemos tener muchos tipos en este archivo. Podemos tener toda una red o gráfico de tipos y queremos asegurarnos de conocer el exacto con el que estamos comenzando. Y así estamos proporcionando el nombre del tipo, estamos proporcionando el tipo real que hemos cargado en el programa aquí,

5. Processing Requests and Examples

Short description:

Tenemos una función de procesamiento de solicitudes que simplifica la creación de un indicador de línea de comandos. Cada solicitud se ejecuta a través del traductor y, finalmente, del modelo de lenguaje. Los datos resultantes tienen un tipo seguro y bien definido gracias a TypeScript. El ejemplo de sentimiento es fácil de comenzar, y también tenemos un ejemplo más sofisticado de una cafetería. Dependiendo del modelo, puede funcionar de manera consistente o tener problemas ocasionales.

y luego tenemos un objeto traductor. Y también tenemos esta función de procesamiento de solicitudes, que realmente está ahí para facilitar la creación de un indicador de línea de comandos porque Node por alguna razón lo hace un poco difícil. Le das el indicador que quieres tener en cada línea, ya sabes, el texto que quieres imprimir en cada indicador, y luego un callback cada vez que obtienes una intención del usuario o una oración, ¿verdad? Entonces, esta es cada línea que se ingresa en el indicador. Ejecutamos cada una de las solicitudes a través del traductor, el traductor llama al modelo de lenguaje, el modelo de lenguaje responde, y luego el traductor toma eso, utiliza los tipos, construye el programa y utiliza internamente TypeScript para verificar el programa y asegurarse de que haya tenido éxito. Y si no lo ha tenido, posiblemente haga algunos intentos nuevamente y tal vez retroceda un poco también. Y si no tenemos éxito, simplemente mostramos un error y salimos. Pero si lo tenemos, lo que obtenemos es un data bien tipado. Así que obtenemos nuestro sentimiento, un éxito de respuesta de sentimiento, nuestro data es una respuesta de sentimiento, y luego tenemos ese sentimiento bien tipado . Y debido a que TypeScript está verificando el tipo de esta cosa, sabemos que esta cosa es fuertemente y estáticamente o estrictamente tipada. Y eso es muy fácil de comenzar. En total, alrededor de 22 líneas de código. Y hay un poco de sutileza allí porque en nuestra compilación, en realidad tenemos que hacer un poco de cosas adicionales. Entonces, si estás usando algo como ts-node, esto no es un problema, pero porque en realidad estamos buscando el archivo de entrada de TS, estamos utilizando los tipos de archivo de esquema, en realidad los copiamos todos en el directorio de la aplicación. Y es un poco rudimentario, pero funciona bastante bien. ¿Verdad? Y si no quieres hacer esto, siempre puedes usar algo como ts-node. Y probablemente haya formas fáciles de hacer que esto funcione con algo como deno o bon o lo que sea, ¿verdad?

El ejemplo de sentimiento es bastante fácil de comenzar. También tenemos otro ejemplo de una cafetería. Entonces, en nuestra cafetería, tenemos un esquema un poco más sofisticado. Cerraré los otros archivos aquí. Y así es similar a lo que tenía en la presentación hace un momento. Solo ten paciencia por un segundo. Tenemos un carrito, el carrito tiene artículos, los artículos son cada uno de estos elementos de línea, y luego, ya sabes, etcétera, etcétera, etcétera. Entonces, podemos pedir muffins de marca de manzana, muffins de arándanos, bagels, lo que sea. Y así que en realidad puedo salir de este indicador, ir a la carpeta del ejemplo de la cafetería y luego puedo ejecutar esto . Y puedo decir un café con leche pequeño y un bagel, por favor. Y así que miramos la salida aquí, en realidad obtenemos un JSON bien formado y para cada uno de los artículos, tenemos un café con leche, es un tamaño pequeño, y un bagel, ¿verdad? Y la cantidad es uno, la cantidad es uno. Y ya sabes, dependiendo de tu modelo, en realidad descubrirás que esto funciona de manera consistente o puede tener problemas ocasionales. Entonces, ya sabes, probemos esto. Dame un café con leche alto y un plátano. Y así que nota que falla aquí. En realidad, termina diciendo que no entendió lo siguiente, y luego

6. Schema and Unknown Text

Short description:

Al crear esquemas, es bueno darles un grado de incertidumbre. El texto desconocido se utiliza cuando el modelo de lenguaje no comprende un concepto. Esto permite aplicaciones más robustas y la capacidad de previsualizar las solicitudes del usuario.

enumeró eso. Y eso se debe a cómo formamos nuestro esquema, ¿verdad? Lo interesante es que al crear estos esquemas, en muchos casos es bueno darles un grado de incertidumbre, ¿verdad? En casos en los que un modelo de lenguaje no puede comprender completamente la intención del usuario, es bueno tener una salida. Y así, la salida aquí, el grado de libertad, como quieras llamarlo, que hemos agregado, es esta cosa llamada texto desconocido. Y así, cada vez que el modelo de lenguaje no comprende un concepto, tiende a poner las cosas en este cubo de texto desconocido, ¿verdad? Y lo que sucederá es que a medida que hacemos nuestros pedidos, esto funciona básicamente de la misma manera. Pero lo que decimos es que, cuando encontramos un tipo desconocido, decimos: No pude entender lo siguiente. Y luego simplemente recorremos todo el proceso y explicamos y detallamos, ¿verdad? Así que puedo decir que quiero un café alto y un plátano y un gorila sosteniendo el plátano. Y es capaz de traducir cada uno de esos elementos en un desconocido, que es un plátano y un gorila sosteniendo el plátano, ¿verdad? Así que eso funciona bastante bien. En general, si sientes que un usuario va a cometer un error, es bueno agregar estos grados de libertad. Decir algo como permito texto desconocido, o tal vez un booleano que indique que el pedido no fue claro o algo así puede ayudar con tu aplicación y puedes ser un poco más robusto, tal vez señalar cosas específicas. Y una de las cosas clave de algo como TypeChat es que, como todo está en JSON, siempre puedes previsualizar exactamente lo que un usuario iba a obtener cuando realizaba una de estas solicitudes. Así que eso es

7. Creating TypeChat Programs

Short description:

A menudo, las personas intentan planificar o escribir programas con IA, utilizando los conceptos básicos de TypeChat para crear comandos. Sin embargo, la secuencia lineal de comandos carece de la capacidad de hacer referencia a argumentos anteriores. Para solucionar esto, se crea un pseudo-lenguaje donde la IA responde en JSON. Esta representación falsa se convierte luego en un programa real utilizando TypeScript para la verificación de tipos, asegurando programas bien tipados entre cada paso. Este concepto de programas TypeChat permite un mejor flujo de datos y la capacidad de hacer referencia a pasos individuales.

Crear programas TypeChat es quizás la parte más fácil de entender de TypeChat. Una de las cosas que también nos dimos cuenta es que a menudo las personas intentan hacer algún tipo de planificación o escritura de programas con IA, ¿verdad? Tal vez tienes una aplicación, tienes muchas, muchas, muchas tareas diferentes y todas se pueden ejecutar posteriormente en un cierto orden. Y puedes usar los conceptos básicos de TypeChat, como el enfoque de TypeChat que acabo de mostrarte, para crear comandos, ¿verdad? Puedes crear objetos con un nombre de comando y tal vez algunos argumentos o propiedades que sigan y que se puedan usar como argumentos de alguna manera. Resulta que muchos programas, como VS Code y otros, utilizan una forma de realizar acciones similar a esta, ¿verdad? Hay un nombre de comando y luego algunas propiedades que siguen. Y también puedes secuenciarlos. Pero uno de los problemas con esto es que solo obtienes una secuencia lineal, ¿verdad? Y no tienes forma de hacer referencia a un argumento anterior en algunos casos. Y así, lo que quieres poder hacer es también validar que estás obteniendo el flujo correcto de datos, ¿verdad? Que cada uno de estos pasos realmente tiene el tipo correcto de datos que produce y que se puede usar en el siguiente paso. Pero también quieres poder hacer referencia a cada uno de los pasos individuales anteriores porque tal vez necesitas tener algunos resultados intermedios antes de ejecutar una acción o algo así. Y así, una pregunta que podrías hacer es, ¿qué pasa si simplemente generas código y tomas un enfoque muy similar al de TypeChat que tenías antes, ¿verdad? Todo lo que necesitas son tipos. Y así, tal vez digas, aquí está mi API, genera un programa como este. Eso funciona bien a veces, pero hay un par de problemas, ¿verdad? Primero, queremos que TypeChat sea multiplataforma con el tiempo, ¿verdad? Queremos poder llevar esto a otros lenguajes como Python o C Sharp u otros. Pero cuando dices que vas a crear código explícito, también necesitas poder decir que quieres aislar esto también. O tal vez quieres tener algo que interprete el código real de alguna manera. Pero luego terminas creando un intérprete muy completo que realmente tiene que interpretar mucho JavaScript o cualquier otro lenguaje que crees. Y luego terminas con muchos otros problemas, como, bueno, tengo APIs que son asíncronas frente a síncronas. Entonces, ahora la IA necesita generar código que también sepa sobre eso. Y resulta que cuando tienes el lenguaje real, intenta salirse de los límites con frecuencia. Entonces, si tienes JavaScript, intentará aprovechar al máximo el JavaScript que está disponible. Eso no siempre es ideal. Entonces, lo que realmente descubrimos fue que puedes confundir lo suficiente a la IA simplemente creando un pseudo-lenguaje en cierto sentido. Y dices, en realidad, solo responde en JSON. Y el JSON debería verse así. Y puede unir eso bastante bien y decir, sabes, hay estas propiedades meta que cada una de estas propiedades puede hacer referencia o especificar que tengo una función o lo que sea. Y así, esto es básicamente un lenguaje falso o una representación de lenguaje que se serializa a JSON. Y funciona lo suficientemente bien. Pero, ¿de dónde obtenemos la validación? ¿Cómo sabemos que las entradas de writeFile son realmente del tipo correcto? Que el texto recortado crea una cadena y esa cadena se puede usar como la salida, la entrada para la llamada a writeFile. Bueno, luego podemos tomar la representación falsa, el programa falso, tomar ese JSON, convertirlo en un programa real y luego usar TypeScript para crear un programa que realmente necesita ser verificado por tipos. Y así, cuando hacemos esa verificación de tipos, entonces podemos validar si cada una de las entradas y salidas corresponde correctamente. Y así, ahora tienes un programa bien tipado entre cada paso y sabes que los índices corresponden correctamente. Y así, esa es otra parte de TypeChat, que también tenemos este concepto de programas TypeChat.

8. Using a Program Translator for Math Example

Short description:

En esta sección, exploramos el ejemplo matemático y el uso de un traductor de programas en lugar de un traductor JSON. El programa siempre espera un tipo específico llamado API, que puede ser exportado. Las expresiones matemáticas se pueden escribir directamente, creando un programa JSON que se valida e interpreta. Se pueden utilizar técnicas de metaprogramación para garantizar la seguridad de tipos. El ejemplo matemático demuestra la capacidad de realizar operaciones complejas y crear pasos que se pueden referenciar más adelante. Los modelos de lenguaje entrenados tanto en código como en prosa funcionan bien en este contexto. Visítanos en GitHub para obtener más información y participa con nosotros en Twitter y otras plataformas.

corto de tiempo en este punto. Pero voy a entrar en el ejemplo matemático. Ahí no es donde está. Y luego voy a ejecutar el programa también. Y mi terminal no funciona muy bien con esto. Pero veamos el esquema matemático. El esquema matemático es realmente solo un conjunto de métodos para sumar, restar, multiplicar, dividir, negar. Y luego algunas cosas de identidad y luego como no sé cómo manejar esto correctamente. Ese grado de libertad del que mencioné antes.

Y en este programa en realidad no estamos usando un traductor JSON. Estamos usando un traductor de programas. Y la idea clave aquí es que siempre espera un tipo específico llamado API. Así que tengo que exportar un tipo llamado API aquí. Y lo que puedo hacer es simplemente escribir expresiones matemáticas y puedo decir algo como sumar uno y 41, ¿verdad? Y lo que hace eso es que realmente crea ese programa JSON antes. Esto es lo que construimos para validar el programa. En realidad, creamos esto. Y luego tenemos un intérprete que realmente lo ejecuta. Entonces, cuando implementas esto, efectivamente creas un intérprete en la forma de create o handle call. ¿Correcto? Y así tienes esta función evaluate JSON program y proporcionas un callback y luego simplemente toma un nombre de función y los argumentos que se le proporcionan. Y hay muchas cosas de metaprogramación que puedes hacer para asegurarte de que todo esté bien tipado. Entonces, al final, volviendo a nuestro ejemplo matemático, puedo hacer cosas sofisticadas de búsqueda. Como puedo decir, sumar uno y 41 y luego duplicarlo después, y tengo un error tipográfico ahí. Y en algunos casos lo vamos a incluir en línea, pero en otros casos, tal vez debido a cómo lo he dicho, creará un paso y el paso luego se puede referenciar en uno de los otros pasos. Así que dice sumar, y luego dice multiplicar. Y resulta que los modelos de lenguaje que han sido entrenados tanto en código como en prosa funcionan bastante bien aquí. Bueno, eso fue nuestra demostración. Desafortunadamente, estoy corto de tiempo, pero lo que realmente animamos a las personas a hacer es visitarnos en GitHub. Tenemos discusiones, tenemos problemas, realmente queremos saber de ustedes y también pueden seguirnos en otros lugares como Twitter o Blue Sky. Bueno, muchas gracias por su tiempo y eso es todo, cuídense. Transcrito por https://otter.ai

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

TechLead Conference 2023TechLead Conference 2023
35 min
A Framework for Managing Technical Debt
Let’s face it: technical debt is inevitable and rewriting your code every 6 months is not an option. Refactoring is a complex topic that doesn't have a one-size-fits-all solution. Frontend applications are particularly sensitive because of frequent requirements and user flows changes. New abstractions, updated patterns and cleaning up those old functions - it all sounds great on paper, but it often fails in practice: todos accumulate, tickets end up rotting in the backlog and legacy code crops up in every corner of your codebase. So a process of continuous refactoring is the only weapon you have against tech debt.In the past three years, I’ve been exploring different strategies and processes for refactoring code. In this talk I will describe the key components of a framework for tackling refactoring and I will share some of the learnings accumulated along the way. Hopefully, this will help you in your quest of improving the code quality of your codebases.

React Summit 2023React Summit 2023
24 min
Debugging JS
As developers, we spend much of our time debugging apps - often code we didn't even write. Sadly, few developers have ever been taught how to approach debugging - it's something most of us learn through painful experience.  The good news is you _can_ learn how to debug effectively, and there's several key techniques and tools you can use for debugging JS and React apps.
React Advanced Conference 2022React Advanced Conference 2022
22 min
Monolith to Micro-Frontends
Many companies worldwide are considering adopting Micro-Frontends to improve business agility and scale, however, there are many unknowns when it comes to what the migration path looks like in practice. In this talk, I will discuss the steps required to successfully migrate a monolithic React Application into a more modular decoupled frontend architecture.
React Advanced Conference 2023React Advanced Conference 2023
22 min
Power Fixing React Performance Woes
Next.js and other wrapping React frameworks provide great power in building larger applications. But with great power comes great performance responsibility - and if you don’t pay attention, it’s easy to add multiple seconds of loading penalty on all of your pages. Eek! Let’s walk through a case study of how a few hours of performance debugging improved both load and parse times for the Centered app by several hundred percent each. We’ll learn not just why those performance problems happen, but how to diagnose and fix them. Hooray, performance! ⚡️
React Summit 2023React Summit 2023
24 min
Video Editing in the Browser
Video editing is a booming market with influencers being all the rage with Reels, TikTok, Youtube. Did you know that browsers now have all the APIs to do video editing in the browser? In this talk I'm going to give you a primer on how video encoding works and how to make it work within the browser. Spoiler, it's not trivial!

Workshops on related topic

React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2022React Advanced Conference 2022
148 min
Best Practices and Advanced TypeScript Tips for React Developers
Featured Workshop
Are you a React developer trying to get the most benefits from TypeScript? Then this is the workshop for you.In this interactive workshop, we will start at the basics and examine the pros and cons of different ways you can declare React components using TypeScript. After that we will move to more advanced concepts where we will go beyond the strict setting of TypeScript. You will learn when to use types like any, unknown and never. We will explore the use of type predicates, guards and exhaustive checking. You will learn about the built-in mapped types as well as how to create your own new type map utilities. And we will start programming in the TypeScript type system using conditional types and type inferring.
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
AI on Demand: Serverless AI
Featured WorkshopFree
In this workshop, we discuss the merits of serverless architecture and how it can be applied to the AI space. We'll explore options around building serverless RAG applications for a more lambda-esque approach to AI. Next, we'll get hands on and build a sample CRUD app that allows you to store information and query it using an LLM with Workers AI, Vectorize, D1, and Cloudflare Workers.
React Advanced Conference 2023React Advanced Conference 2023
98 min
Working With OpenAI and Prompt Engineering for React Developers
Workshop
In this workshop we'll take a tour of applied AI from the perspective of front end developers, zooming in on the emerging best practices when it comes to working with LLMs to build great products. This workshop is based on learnings from working with the OpenAI API from its debut last November to build out a working MVP which became PowerModeAI (A customer facing ideation and slide creation tool).
In the workshop they'll be a mix of presentation and hands on exercises to cover topics including:
- GPT fundamentals- Pitfalls of LLMs- Prompt engineering best practices and techniques- Using the playground effectively- Installing and configuring the OpenAI SDK- Approaches to working with the API and prompt management- Implementing the API to build an AI powered customer facing application- Fine tuning and embeddings- Emerging best practice on LLMOps
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Building a Shopify App with React & Node
WorkshopFree
Shopify merchants have a diverse set of needs, and developers have a unique opportunity to meet those needs building apps. Building an app can be tough work but Shopify has created a set of tools and resources to help you build out a seamless app experience as quickly as possible. Get hands on experience building an embedded Shopify app using the Shopify App CLI, Polaris and Shopify App Bridge.We’ll show you how to create an app that accesses information from a development store and can run in your local environment.
JSNation 2022JSNation 2022
41 min
Build a chat room with Appwrite and React
WorkshopFree
API's/Backends are difficult and we need websockets. You will be using VS Code as your editor, Parcel.js, Chakra-ui, React, React Icons, and Appwrite. By the end of this workshop, you will have the knowledge to build a real-time app using Appwrite and zero API development. Follow along and you'll have an awesome chat app to show off!