Todos nos hemos ido montando en esta ola de la AI y todo lo nuevo que nos ofrece. Desde asistentes superinteligentes hasta tu propio agendador de reservas.
Pero cuando nos vemos de cara para responder preguntas frecuentes, algo que relativamente podría ser tan fácil como pasarle todo un texto grande a nuestro modelo de inteligencia artificial y dejar que él sepa mágicamente lo que debe responder.
No obstante esa magia cuesta dinero y mucho y si nuestro negocio recive mensajes masivos pues no querras ver esa factura :).
Cotiza tu asistente aquí
Gracias al avance que ha tenido el open source y la bondades que nos ofrecen grandes empresas podemos reducir nuestros costes tanto como puedas aplicar estas nuevas tecnologías emergentes y de gratis acceso.
Hoy te traigo una modalidad conversacional algo avanzada pero que reducirá tus costes significativamente, te hablo de Groq / Llama3, Langchain y Builderbot.
Como siempre te dejo los links para que aprendas más del tema :)
Comenzemos!
Sí vienes ya del mundo de los Llm y la modalidad para interactuar con ellos, ya tendras conocimiento o te habras visto con los prompts (EL LENGUAJE PARA COMUNICAR TAREAS A LLM’S)
Hasta acá no hay nada nuevo, únicamente un pequeño fragmento indicando la tarea que debe completar el Llm. (EN ALGÚN MOMENTO TE COMPARTO UNA GUIA PARA HACER PROMPTS AVANZADOS)
Para nuestro Llm usaremos Groq junto a su promesa 15x faster
seteamos nuestro modelo a llama3-8b-8192 (RECUERDA QUE ESTAMOS USANDO SOLO OPENSOURCE)
Si te resulta extraño el uso de la palabra withStructuredOutput
es por el hecho qué es una técnica muy provechosa para sacar todo el poder y control de nuestro Llm. (YA PUES QUÉ SI TE DIGO, DE ESTO DA PARA OTRA ENTRADA ;) )
En esta etapa imagina que tienes en tu raiz un archivo llamado data.txt
en el contienes cada renglon de datos que necesitas responder a una pregunta data.
Para que este pequeño fragmento de código funcione deberás agregar a cada culminanción de parrafo la palabra [END]
eso le indicará a nuestro dataloader donde debe partir el parrafo antes de la ingesta de datos.
Con lo que hicimos arriba nos daría todo lo que necesitamos para nuestro asistente pero OJO no todo lo fácil promete buenos resultados, las modalidades anteriores llamadas “VANILLAS” hacian uso de un solo retriever (Es quien tiene nuestros datos y los retorna haciendo uso de similitudes), en este ejemplo usaremos 3 extras:
Si pudieramos ponerlo en un diagrama seria algo como esto:
Dejame darte un recorrido rápido:
- HNSW es un algoritmo de cercanía basado en vertices o grafos, siendo los más cercanos quienes tienen mayor similitud.
- Matryoshka hace de la búsqueda por matrices una evolución dado que aplica un vector pequeño y con menos score para hacer una segunda búsqueda sobre un vector más grande y junto al re ranking logra obtener mejor resultado.
- Multiquery vector mejora el input query inicial para hacer un mejor uso del retriever dado que envuelve la query incial en una mejora notable y que puede convertirse en una búsqueda con mejor accuracy.
- Contextual Compression usa una pequeña inferencia para convertir el resultado de la búsqueda en algo con sentido a lo que se necesita.
Para que nuestro asistente pueda responder a preguntas, nos hace falta crear un Runnable:
Un Runnable en Langchain es una interfaz con la cual podemos crear Llm’s repotenciados, en nuestro caso haremos uso de uno que maneje el historico de conversación, y si!, como se observa usa postgres como manager.
Te dejo la doc, copiatela esta fácil. 😀
Exportamos nuestra función para acoplarla a nuestro asistente de WhatsApp.
Para nuestro asistente de WhatsApp haremos uso de Builderbot nuestro gran amigo
Creamos nuestro fichero inicial, configuramos nuestro proveedor, database y flujo.
Para efectos de prueba con un solo flujo nos basta.
Soy Elimeleth Capuano, Programador y Divulgador de Chatbots.