Cómo arreglé mi cafetera usando un sistema RAG

Cómo arreglé mi cafetera usando un sistema RAG

Tabla de contenidos

Cuando mi cafetera decidió dejar de funcionar, revisar el manual fue simplemente doloroso y, honestamente, una pérdida de tiempo. Así que, en lugar de rendirme, probé algo diferente: utilicé un sistema de Recuperación-Aumentada por Generación (RAG) con un Modelo de Lenguaje Grande (LLM) para solucionarlo.

Comencé configurando un sistema de recuperación a partir del manual; esto me ayudó a organizar la información para que el LLM pudiera entender qué era qué. A partir de ahí, le hice al LLM algunas preguntas específicas. ¡Las respuestas fueron perfectas para solucionar problemas y me ahorraron mucho tiempo y frustración!

En resumen, logré que mi cafetera funcionara sin tener que adivinar. Esto demuestra cómo los sistemas RAG pueden hacer tu vida diaria más fácil. ¡Estoy emocionado de ver dónde más puede ayudar esta tecnología!

Puntos clave del PoC

— Base de conocimiento: Neo4j graph database

— Herramientas: Langchain QA chain

— Modelo: Azure OpenAI 4o

Como funciona

Paso 1: Instala las dependencias

Primero, carga todas las librerías en tu entorno:

    pip install neo4j langchain-openai langchain langchain-community langchain-huggingface pandas tabulate

Paso 2: Inicializa tu base de datos Neo4j

Conecta con Neo4j inicializando la base de datos con tus credenciales. Verifica que las credenciales están seguras en unas variables de entorno.

    from neo4j_graph import Neo4jGraph
    
    enhanced_graph = Neo4jGraph(
        url=os.environ["NEO4J_INSTANCE"],
        username=os.environ["NEO4J_USER"],
        password=os.environ["NEO4J_PASS"],
        enhanced_schema=True

Paso 3: Inicializa el modelo de lenguaje

Ahora, configura el modelo de Azure OpaneAI usando tus credencialeS:

    from azure_openai import AzureChatOpenAI
    
    model = AzureChatOpenAI(
        azure_deployment=os.environ['AZURE_OPENAI_DEPLOYMENT'],
        model_version="2024-05-13",
        api_version="2024-02-01",
        temperature=0
    )

Paso 4: Crea una Q&A con Neo4j

¡Aquí es donde ocurre la magia! Crearás una cadena de preguntas y respuestas configurando emdeddings, creando un vector store en Neo4j y configurando un retriever para obtener respuestas relevantes.

    from langchain_huggingface import HuggingFaceEmbeddings
    from langchain_qa_chain import Neo4jVector, RetrievalQAWithSourcesChain
    
    embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
    store = Neo4jVector.from_existing_index(
        embeddings,
        url=os.environ['NEO4J_INSTANCE'],
        username=os.environ['NEO4J_USER'],
        password=os.environ['NEO4J_PASS'],
        index_name="vector",
        keyword_index_name="text_index",
        search_type="hybrid"
    )
    retriever = store.as_retriever()
    sim_chain = RetrievalQAWithSourcesChain.from_chain_type(
        model, 
        chain_type="stuff", 
        retriever=retriever,
        verbose=False,
        return_source_documents=True
    )

Paso 5: Pregunta

¡Pongámoslo a prueba con una pregunta de ejemplo! Consulta el modelo y obtén resultados en segundos:

    result = sim_chain("The milk has big bubbles")

Paso 6: Ponlo todo bonito en una tabla

Haz que tu output sea visualmente atractiva y organizada. Este truco de formato muestra la respuesta y las fuentes en una tabla bien estructurada con el contexto de la página:

    import pandas as pd
    import json
    from tabulate import tabulate
    from IPython.display import display, Markdown
    
    data = json.dumps([{"page_content": doc.page_content, "metadata": doc.metadata} for doc in result["source_documents"]])
    df = pd.json_normalize(json.loads(data))
    df = df.drop(['metadata.position', 'metadata.content_offset', 'metadata.source', 'metadata.fileName', 'metadata.length'], axis=1)
    df.rename(columns={'page_content': 'Content', 'metadata.page_number': 'Page'}, inplace=True)
    display(Markdown('# Response:\n' + result["answer"]))
    display(Markdown('# Sources:\n'))
    display(Markdown(tabulate(df, headers='keys', tablefmt='github', showindex='never')))

Resultados del experimento

Ya estaría!

Con esta configuración, ahora estás listo para hacer preguntas, obtener respuestas inteligentes de Neo4j y mostrarlas de manera atractiva. Esta integración no solo hace que tu base de conocimientos sea poderosa, sino también fácil de navegar e interactuar.

Posts relacionados

Revolucionando las noticias con IA: Cómo creé un generador automatizado de noticias en formato podcast

Revolucionando las noticias con IA: Cómo creé un generador automatizado de noticias en formato podcast

Siempre he admirado el enfoque de Ángel Martín para dar las noticias: directo y al grano, sin rodeos, solo lo esencial. Inspirado por esa filosofía, creé un generador de pódcast de noticias impulsado por IA centrado en ofrecer noticias concisas y relevantes para mi ciudad, A Coruña. Mi objetivo era desarrollar un sistema que mantuviera a las personas informadas sin necesidad de recorrer artículos extensos o múltiples fuentes.

Leer más
Transformando los sistemas RAG con la técnica de context retrieval (una implementación con langchain)

Transformando los sistemas RAG con la técnica de context retrieval (una implementación con langchain)

Audio del artítculo:

Hace poco me topé con una fascinante publicación de Anthropic sobre la recuperación contextual, ¡y de inmediato me intrigó su potencial para revolucionar los sistemas RAG! El concepto era tan convincente que decidí ponerlo a prueba con un experimento del mundo real utilizando 10 años de informes anuales de CUAC FM. Lo que comenzó como una curiosidad se convirtió en un proyecto de investigación exhaustivo. Elaboré 30 preguntas cuidadosamente diseñadas junto con 30 respuestas de referencia revisadas por mí para evaluar rigurosamente si la recuperación contextual realmente cumple lo que promete. ¿El resultado? ¡Absolutamente transformador!

Leer más
La babel de los agentes de IA: Skills universales con skills-forge

La babel de los agentes de IA: Skills universales con skills-forge

Audio del post:

El panorama de la IA es un mapa fragmentado de jardines amurallados. Creas un Custom GPT para tu equipo de producto, un Gemini Gem para tus investigadores y una skill de Claude Code para tus ingenieros. Cada uno vive en aislamiento — sus propias instrucciones, su propio formato, su propio ciclo de vida. Cuando el conocimiento subyacente cambia, actualizas tres cosas en lugar de una.

Leer más