Como mencioné en el post anterior, desarrollar la IA de Fabrice resultó mucho más complejo de lo esperado, lo que me obligó a explorar muchos enfoques diferentes.
El planteamiento inicial: Índice Llama – Búsqueda vectorial
Mi primera incursión en la mejora de las capacidades de recuperación de Fabrice AI consistió en utilizar el Índice Llama para la búsqueda vectorial. El concepto era sencillo: tomar el contenido de mi blog, convertirlo en documentos Langchain y, a continuación, transformarlos en documentos Llama. Estos documentos Llama se almacenarían entonces en un índice vectorial, lo que me permitiría consultar este índice en busca de información relevante.
Sin embargo, cuando empecé a probar el sistema, me di cuenta de que este enfoque no estaba dando los resultados que esperaba. En concreto, cuando formulé al sistema preguntas contextualizadas como “¿Cuáles son los mayores errores que cometen los fundadores de empresas? En lugar de recuperar el contenido matizado que yo sabía que había en los datos, devolvía respuestas irrelevantes o incompletas.
Este fracaso inicial me llevó a reconsiderar mi planteamiento. Me di cuenta de que no bastaba con almacenar el contenido en un índice vectorial; el mecanismo de recuperación debía comprender el contexto y los matices de las preguntas que se formulaban. Esta constatación fue la primera de muchas lecciones que darían forma a la evolución de la IA Fabrice.
Almacenamiento del Conocimiento: Almacenamiento y Recuperación de Documentos MongoDB
Teniendo en cuenta las limitaciones del enfoque del Índice Llama, a continuación exploré la posibilidad de almacenar los documentos Llama en MongoDB. El esquema flexible y la estructura orientada a documentos de MongoDB parecían una solución prometedora para gestionar los diversos tipos de contenido que había acumulado a lo largo de los años.
El plan consistía en crear una experiencia de búsqueda más dinámica y receptiva. Sin embargo, este enfoque no tardó en dar problemas. La funcionalidad de búsqueda, que había previsto que fuera más sólida, no funcionó como se esperaba. Las consultas que deberían haber devuelto documentos relevantes no arrojaban ningún resultado o mostraban contenido irrelevante.
Este contratiempo fue frustrante, pero también puso de relieve una lección fundamental: el método de almacenamiento es tan importante como la estrategia de recuperación. Empecé a considerar otras opciones, como utilizar MongoDB Atlas para búsquedas vectoriales, que potencialmente podría proporcionar la precisión y escalabilidad que necesitaba. Sin embargo, antes de comprometerme con esta alternativa, quise explorar otros enfoques para determinar si podría haber una solución más eficaz.
Recuperador de metadatos y almacén de vectores: En busca de la especificidad
Una de las siguientes vías que exploré fue el uso de un recuperador de metadatos combinado con un almacén vectorial. La idea subyacente a este enfoque era categorizar el vasto conjunto de información de la IA Fabrice y, a continuación, recuperar respuestas basadas en estas categorías. Al estructurar los datos con metadatos, esperaba mejorar la capacidad de la IA para proporcionar respuestas específicas y concretas.
Sin embargo, este método también tenía sus limitaciones. Aunque parecía prometedor a primera vista, la IA tenía dificultades para dar respuestas precisas a todo tipo de consultas. Por ejemplo, cuando pregunté: “¿Es optimista el autor?”. el sistema no supo interpretar la pregunta en el contexto del contenido relevante. En lugar de proporcionar un análisis perspicaz basado en los metadatos, devolvía respuestas vagas o ninguna.
Este enfoque me enseñó una valiosa lección sobre la importancia del contexto en la IA. No basta con categorizar la información; la IA también debe comprender cómo interactúan y se superponen estas categorías para formar una comprensión cohesiva del contenido. Sin esta profundidad de comprensión, incluso los métodos de recuperación más sofisticados pueden quedarse cortos.
Estructurar el conocimiento: El Índice de Árbol de Sumario
Mientras seguía perfeccionando la IA de Fabrice, experimenté con la creación de un SummaryTreeIndex. Este enfoque pretendía resumir todos los documentos en un formato de árbol, permitiendo a la IA navegar por estos resúmenes y recuperar información relevante basándose en la estructura del contenido.
La idea era que, resumiendo los documentos, la IA podría identificar rápidamente los puntos clave y responder a las consultas con información concisa y precisa. Sin embargo, este método también se enfrentaba a importantes retos. A la IA le costaba dar respuestas significativas a consultas complejas, como “¿Cómo tomar decisiones importantes en la vida?”. En lugar de basarse en el contenido rico en matices almacenado en los resúmenes, las respuestas de la IA eran a menudo superficiales o incompletas.
Esta experiencia puso de relieve la dificultad de equilibrar amplitud y profundidad en la IA. Aunque los resúmenes pueden proporcionar una visión general de alto nivel, a menudo carecen del contexto detallado necesario para responder a preguntas más complejas. Me di cuenta de que cualquier solución eficaz tendría que integrar tanto el contenido detallado como los resúmenes de alto nivel, permitiendo a la IA recurrir a ambos cuando fuera necesario.
Por eso, en la versión de la IA de Fabrice que está actualmente activa, hago que la IA dé primero un resumen de la respuesta, antes de entrar en más detalles.
Ampliando horizontes: Índice del Gráfico de Conocimientos
Reconociendo las limitaciones de los métodos anteriores, recurrí a un enfoque más sofisticado: el Índice de Grafos de Conocimiento. Este enfoque consistía en construir un grafo de conocimiento a partir de texto no estructurado, lo que permitía a la IA realizar consultas basadas en entidades. El objetivo era crear una comprensión más dinámica e interconectada del contenido, que permitiera a la IA de Fabrice responder con mayor eficacia a preguntas complejas y contextualizadas.
A pesar de su promesa, el Índice del Gráfico de Conocimientos también se enfrentó a importantes obstáculos. A la IA le costó producir resultados precisos, sobre todo en las consultas que requerían una comprensión profunda del contexto. Por ejemplo, cuando se le preguntó: “¿Cuáles son las valoraciones justas de Semilla y Serie A?”, la IA volvió a fracasar a la hora de dar una respuesta pertinente, lo que pone de manifiesto la dificultad de integrar texto no estructurado en un grafo de conocimiento coherente.
Este enfoque, aunque en última instancia fracasó, proporcionó información importante sobre los retos que plantea el uso de grafos de conocimiento en la IA. La complejidad de los datos y la necesidad de un contexto preciso significaban que incluso un grafo de conocimiento bien construido podía tener dificultades para ofrecer los resultados deseados. Otro inconveniente del Índice de Grafos de Conocimiento era su lentitud. El tiempo de respuesta para obtener documentos relacionados era muy elevado en comparación con un índice de almacén vectorial.
Reevaluación de los datos: Géminis
Tras varios contratiempos, decidí adoptar un enfoque diferente aprovechando la IA de Google, Gemini. La idea era crear conjuntos de datos a partir de archivos JSON-CSV y, a continuación, entrenar un modelo LLM personalizado utilizando estos datos. Esperaba que utilizando datos estructurados y un modelo de entrenamiento robusto, podría superar algunos de los retos que habían plagado los intentos anteriores.
Sin embargo, este enfoque también encontró dificultades. El proceso de entrenamiento se detuvo debido a un formato incorrecto de los datos, que impidió entrenar eficazmente el modelo. Este contratiempo subrayó la importancia de la integridad de los datos en el entrenamiento de la IA. Sin datos correctamente formateados y estructurados, incluso los modelos más avanzados pueden no funcionar como se espera.
Esta experiencia me llevó a considerar el potencial de utilizar BigQuery para almacenar datos JSON, proporcionando una plataforma más escalable y fiable para gestionar los grandes conjuntos de datos necesarios para entrenar eficazmente la IA de Fabrice.
Combinando fuerzas: Documentos Langchain con Pinecone
A pesar de los retos a los que me he enfrentado hasta ahora, estaba decidido a encontrar una solución que permitiera a la IA Fabrice almacenar y recuperar conocimientos de forma eficaz. Esta determinación me llevó a experimentar con documentos Langchain y Pinecone. El enfoque consistía en crear un almacén vectorial Pinecone utilizando documentos Langchain e incrustaciones OpenAI, y luego recuperar los documentos más similares en función de la consulta.
Este método resultó prometedor, sobre todo cuando la consulta incluía el título del documento. Por ejemplo, cuando se le preguntó “¿Cuál es la clave de la felicidad?”, la IA fue capaz de recuperar y resumir el contenido relevante con precisión. Sin embargo, seguía habiendo limitaciones, sobre todo cuando la consulta carecía de palabras clave o títulos específicos.
Este enfoque demostró el potencial de combinar distintas tecnologías para mejorar el rendimiento de la IA. Al integrar los documentos de Langchain con el almacén vectorial de Pinecone, pude mejorar la pertinencia y precisión de las respuestas de la IA, aunque con algunas limitaciones.
Conseguir la coherencia: GPT Builder OpenAI
Tras explorar varios métodos y tecnologías, recurrí al GPT Builder de Open AI para consolidar y perfeccionar los conocimientos almacenados en Fabrice AI. Al cargar todo el contenido en una base de conocimientos GPT, pretendía crear una plataforma más coherente y fiable para recuperar mis conocimientos e interactuar con ellos.
Este enfoque resultó ser uno de los más exitosos, ya que la IA fue capaz de proporcionar mejores resultados en una serie de consultas. La clave de este éxito fue la integración de todos los conocimientos en un sistema único y cohesionado, que permitió a la IA aprovechar toda la amplitud de contenidos al responder a las preguntas.
Como mencioné en mi anterior post, no conseguía que funcionara en mi sitio web, y sólo estaba disponible para los suscriptores de pago de Chat GPT, lo que me parecía demasiado limitante. Además, aunque era mejor, seguía sin gustarme la calidad de las respuestas y no me sentía cómoda haciéndolo público.
Refinamiento final: Asistentes GPT Utilizando el Modelo 4o
La pieza final del puzzle en el desarrollo de la IA de Fabrice llegó con la introducción de los Asistentes GPT utilizando el Modelo 4o. Este enfoque representaba la culminación de todo lo que había aprendido a lo largo del proyecto. Utilizando una base de datos vectorial y refinando las instrucciones, mi objetivo era conseguir el mayor nivel posible de precisión y comprensión contextual en las respuestas de la IA.
Este método consistía en cargar todo el conocimiento que había acumulado en una base de datos vectorial, que luego se utilizaba como base para las interacciones de la IA. La base de datos vectorial permitió a la IA realizar búsquedas más sofisticadas, recuperando información basada en el significado semántico de las consultas en lugar de basarse únicamente en la coincidencia de palabras clave. Esto supuso un avance significativo respecto a enfoques anteriores, ya que permitió a la IA comprender y responder mejor a preguntas complejas y matizadas.
Una de las innovaciones clave de este enfoque fue el cuidadoso perfeccionamiento de las instrucciones.
Elaborando y probando meticulosamente diferentes preguntas, pude guiar a la IA para que diera respuestas más precisas y pertinentes.
Esto implicaba no sólo ajustar la redacción de las preguntas, sino también experimentar con diferentes formas de estructurarlas para obtener las mejores respuestas posibles.
Los resultados fueron impresionantes.
La IA era ahora capaz de manejar una amplia gama de consultas con gran precisión, incluso cuando las preguntas eran abiertas o requerían una profunda comprensión del contexto.
Por ejemplo, cuando se le preguntó: “¿Cómo tomar las decisiones más importantes de tu vida?”.
la IA proporcionó una respuesta exhaustiva y perspicaz, recurriendo a diversas fuentes y perspectivas para ofrecer una respuesta completa.
Este éxito fue la culminación de cientos de horas de trabajo e innumerables experimentos. Demostró que, con la combinación adecuada de tecnología y refinamiento, era posible crear una IA que no sólo pudiera almacenar y recuperar información de forma eficaz, sino también interactuar con ella de forma significativa. El desarrollo de los Asistentes GPT utilizando el Modelo 4o marcó el punto en el que la IA de Fabrice alcanzó realmente su plenitud, logrando el nivel de sofisticación y precisión que yo había previsto desde el principio. La API de los Asistentes GPT se integró entonces en mi blog para permitir a los usuarios finales interactuar con la IA de Fabrice de la forma en que la ves ahora en el blog.
Reflexionar sobre el viaje
El proceso de desarrollo de la IA de Fabrice puso de manifiesto las complejidades de trabajar con IA, sobre todo cuando se trata de comprender y contextualizar la información. Me enseñó que no hay atajos en el desarrollo de la IA: cada paso, cada iteración y cada experimento son una parte necesaria del viaje hacia la creación de algo verdaderamente eficaz.
De cara al futuro, me entusiasma seguir perfeccionando y ampliando la IA de Fabrice. Como mencioné en el último post, revisaré las preguntas formuladas para completar la base de conocimientos donde haya lagunas. También espero lanzar finalmente una versión interactiva que se parezca y suene como yo y con la que puedas hablar.