Buenas prácticas y tutoriales

Twitter Thread tl;dr ¿Con IA? Parte 2

En parte 1 vimos cómo scrapear Twitter, convertir tweets en documentos JSON, obtener una representación incrustada de ese tweet, almacenarlo todo en Couchbase y cómo ejecutar una búsqueda vectorial. Estos son los primeros pasos de una arquitectura de Generación Aumentada de Recuperación que podría resumir un hilo de Twitter. El siguiente paso es utilizar un Modelo de Lenguaje Grande. Podemos pedirle que resuma el hilo, y podemos enriquecer el contexto de la petición gracias a la Búsqueda Vectorial.

LangChain y Streamlit

Entonces, ¿cómo hacer que todo esto funcione con un LLM? Ahí es donde el proyecto LangChain puede ayudar. Su objetivo es permitir a los desarrolladores crear aplicaciones basadas en LLM. Ya tenemos algunos ejemplos disponibles en GitHub que muestran nuestro módulo LangChain. Como esta demo de RAG que permite al usuario subir un PDF, vectorizarlo, almacenarlo en Couchbase y utilizarlo en un chatbot. Ese está en JavaScript, pero también hay un Versión Python.

Resulta que esto es exactamente lo que quiero hacer, salvo que utiliza un PDF en lugar de una lista de tweets. Así que lo bifurqué y empezó a jugar con él aquí. Aquí, Nithish está usando un par de librerías interesantes, LangChain por supuesto, y Streamlit. ¡Otra cosa interesante que aprender! Streamlit es como un PaaS, código reducido y ciencia de datos servicio. Permite desplegar aplicaciones basadas en datos muy fácilmente, con un mínimo de código, de una forma muy, muy opinable.

Configuración

Vamos a dividir el código en trozos más pequeños. Podemos empezar con la configuración. El siguiente método se asegura de que las variables de entorno correctas están configuradas, y detiene el despliegue de la aplicación si no lo están.

En comprobar_variable_entorno es llamado varias veces para asegurarse de que se ha establecido la configuración necesaria, y si no se detendrá la aplicación.

Esto significa que todo lo que hay ahí es necesario. Una conexión a OpenAI y a Couchbase. Hablemos rápidamente de Couchbase. Es un JSON, base de datos distribuida multi-modelo con una caché integrada. Puedes usarla como K/V, SQL, Búsqueda de texto completo, Series temporales, Analítica, y hemos añadido fantásticas nuevas características en 7.6: CTEs recursivas para hacer consultas gráficas, o la que más nos interesa hoy, Búsqueda vectorial. La forma más rápida de probarlo es ir a nube.couchbase.comHay un periodo de prueba de 30 días, sin necesidad de tarjeta de crédito.

A partir de ahí puedes seguir los pasos y configurar tu nuevo cluster. Configura un bucket, scope, collection e index, un usuario y asegúrate de que tu cluster está disponible desde el exterior y podrás pasar a la siguiente parte. Conseguir una conexión a Couchbase desde la app. Se puede hacer con estas dos funciones. Puedes ver que están anotadas con @st.cache_resource. Se utiliza para almacenar en caché el objeto desde la perspectiva de Streamlit. Lo hace disponible para otras instancias o repeticiones. Aquí está el extracto del documento

Decorador para almacenar en caché funciones que devuelven recursos globales (por ejemplo, conexiones a bases de datos, modelos ML).

Los objetos almacenados en caché se comparten entre todos los usuarios, sesiones y repeticiones. Deben ser seguros porque se puede acceder a ellos desde varios subprocesos simultáneamente. Si la seguridad de los subprocesos es un problema, considere el uso de st.session_state para almacenar recursos por sesión.

Así que con esto tenemos una conexión al clúster Couchbase y una conexión a la envoltura del almacén vectorial LangChain Couchbase.

connect_to_couchbase(connection_string, db_username, db_password) crea la conexión al cluster Couchbase. get_vector_store(_cluster, db_bucket, db_scope, db_collection, _embedding, index_name,) crea el CouchabseVectorStore wrapper. Contiene una conexión al clúster, la información del bucket/ámbito/colección para almacenar los datos, el nombre del índice para asegurarnos de que podemos consultar los vectores, y una propiedad de incrustación.

Aquí se refiere a la función OpenAIEmbeddings. Recogerá automáticamente el OPENAI_API_KEY y permitir a LangChain utilizar la API de OpenAI con la clave. Cada llamada a la API será transparente para LangChain. Lo que también significa que cambiar de proveedor de modelos debería ser bastante transparente a la hora de gestionar la incrustación.

Escribir documentos LangChain en Couchbase

Ahora, donde ocurre la magia, donde obtenemos los tweets, los parseamos como JSON, creamos la incrustación y escribimos el documento JSON en la colección específica de Couchbase. Gracias a Steamlit podemos configurar un widget de subida de archivos y ejecutar una función asociada:

Parece algo similar al código de la parte 1, excepto que toda la creación de la incrustación es gestionada de forma transparente por LangChain. El campo de texto será vectorizado, los metadatos serán añadidos al doc de Couchbase. Se verá así:

A partir de ahora tenemos funciones para gestionar la subida de tweets, vectorizar los tweets y almacenarlos en Couchbase. Es hora de utilizar Streamlit para construir la aplicación real y gestionar el flujo de chat. Vamos a dividir esa función en varios trozos.

Escribir una aplicación Streamlit

Empezando por la declaración principal y la protección de la app. No quieres que nadie la use, y usar tus créditos OpenAI. Gracias a Streamlit se puede hacer con bastante facilidad. Aquí configuramos una protección por contraseña usando el LOGIN_PASSWORD env. Y también configuramos la página global gracias a la variable set_page_config método. Esto le dará un simple formulario para introducir la contraseña, y una simple página.

Para ir un poco más allá podemos añadir las comprobaciones de variables de entorno, la configuración de OpenAI y Couchbase, y un simple título para iniciar el flujo de la app.

Streamlit tiene una buena integración de espacio de código, realmente te animo a usarlo, hace que el desarrollo sea realmente fácil. Y nuestro plugin VSCode puede ser instalado, para que puedas navegar por Couchbase y ejecutar consultas.

Run SQ++ Vector Search query from Codespace

Ejecutar consulta de búsqueda vectorial SQL++ desde el espacio de código

A Basic streamlit application opened in codespace

Una aplicación Basic Streamlit abierta en Codespace

Crear cadenas LangChain

Después viene la configuración de la cadena. Aquí es donde LangChain brilla. Aquí es donde podemos configurar la retriever. Va a ser utilizado por LangChain para consultar Couchbase para todos los tweets vectorizados. Entonces es el momento de construir el prompt RAG. Puedes ver que la plantilla toma un {contexto} y {pregunta} parámetro. Creamos un objeto Chat prompt a partir de la plantilla.

Después viene la elección del LLM, aquí elegí GPT4. Y por último la creación de la cadena.

La cadena se construye a partir del modelo elegido, el contexto y los parámetros de consulta, el objeto prompt y un objeto StrOuptutParser. Su función es analizar la respuesta LLM y enviarla de vuelta como una cadena streamable/chunkable. La dirección RunnablePassthrough llamado para el parámetro de la pregunta se utiliza para asegurarse de que se pasa al prompt 'tal cual' pero puedes utilizar otros métodos para cambiar/sanitizar la pregunta. Eso es todo, una arquitectura RAG. Dando un contexto adicional a una pregunta LLM para obtener una mejor respuesta.

También podemos construir una cadena sin él para comparar los resultados:

No hay necesidad de contexto en la plantilla de consulta y el parámetro de cadena, y no hay necesidad de un recuperador.

Ahora que tenemos un par de cadenas, podemos utilizarlas a través de Streamlit. Este código añadirá la primera pregunta y la barra lateral, permitiendo carga de archivos:

A continuación, las instrucciones y la lógica de entrada:

 

Con eso tienes todo lo necesario para ejecutar la aplicación streamlit que permite al usuario:

    • Cargar un archivo JSON que contenga tweets
    • Transformar cada tweet en un documento LangChain
    • Almacenarlos en Couchbase junto con su representación de incrustación
    • Gestiona dos avisos diferentes:
      • uno con un recuperador LangChain para añadir contexto
      • y uno sin

Si ejecutas la aplicación deberías ver algo como esto:

The full streamlit application example opened in Codespace

El ejemplo completo de aplicación streamlit abierto en Codespace

Conclusión

Y cuando se pregunta "¿son importantes los calcetines para los desarrolladores?", se obtienen dos respuestas muy interesantes:

Basándonos en el contexto proporcionado, parece que los calcetines son importantes para algunos desarrolladores, como mencionan Josh Long y Simon Willison en sus tuits. Expresan su deseo de tener calcetines y parecen valorarlos.

Los calcetines son importantes para los desarrolladores, ya que proporcionan comodidad y apoyo mientras pasan largas horas sentados frente al ordenador. Además, mantener los pies calientes puede ayudar a mejorar la concentración y la productividad.

Voilà, tenemos un bot que sabe de un hilo de twitter, y puede responder en consecuencia. Y lo más divertido es que no sólo utilizó el vector de texto en el contexto, sino también todos los metadatos almacenados, como el nombre de usuario, porque también indexamos todos los metadatos del documento LangChain al crear el índice en la parte 1.

¿Pero esto es realmente resumir el hilo X? Pues no. Porque la búsqueda vectorial enriquecerá el contexto con los documentos más cercanos y no con el hilo completo. Así que hay que hacer un poco de ingeniería de datos. Hablaremos de ello en la próxima parte.

Recursos

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Laurent Doguin

Laurent es un metalero empollón que vive en París. Principalmente escribe código en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programación reactiva y otras cosas de moda. También fue Developer Advocate de Clever Cloud y Nuxeo, donde dedicó su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.