1 puntos por GN⁺ 2024-11-19 | 1 comentarios | Compartir por WhatsApp

Framework Fast GraphRAG simplificado y configurable mediante prompts

  • Conocimiento interpretable y depurable: los grafos ofrecen una vista del conocimiento que las personas pueden explorar, consultar, visualizar y actualizar
  • Rápido, económico y eficiente: diseñado para ejecutarse a gran escala con bajos requisitos de recursos y costo
  • Datos dinámicos: genera y mejora grafos automáticamente según las necesidades del dominio y la ontología
  • Actualizaciones incrementales: admite actualizaciones en tiempo real a medida que los datos evolucionan
  • Exploración inteligente: utiliza exploración de grafos basada en PageRank para mejorar la precisión y la confiabilidad
  • Compatibilidad con asincronía y tipos: ofrece compatibilidad completa con asincronía y tipos para flujos de trabajo robustos y predecibles

Instalación

  • Instalar desde PyPi (recomendado)

    pip install fast-graphrag
    
  • Instalar desde el código fuente

    # Primero clona este repositorio
    cd fast_graphrag
    poetry install
    

Inicio rápido

  • Configura la clave de la API de OpenAI en el entorno

    export OPENAI_API_KEY="sk-..."
    
  • Descarga A Christmas Carol de Charles Dickens

    curl https://raw.githubusercontent.com/circlemind-ai/fast-graphrag/… > ./book.txt
    
  • Ejemplo de código en Python

    from fast_graphrag import GraphRAG
    
    DOMAIN = "Analyze this story and identify the characters. Focus on how they interact with each other, the locations they explore, and their relationships."
    EXAMPLE_QUERIES = [
        "What is the significance of Christmas Eve in A Christmas Carol?",
        "How does the setting of Victorian London contribute to the story's themes?",
        "Describe the chain of events that leads to Scrooge's transformation.",
        "How does Dickens use the different spirits (Past, Present, and Future) to guide Scrooge?",
        "Why does Dickens choose to divide the story into \"staves\" rather than chapters?"
    ]
    ENTITY_TYPES = ["Character", "Animal", "Place", "Object", "Activity", "Event"]
    
    grag = GraphRAG(
        working_dir="./book_example",
        domain=DOMAIN,
        example_queries="\n".join(EXAMPLE_QUERIES),
        entity_types=ENTITY_TYPES
    )
    
    with open("./book.txt") as f:
        grag.insert(f.read())
        print(grag.query("Who is Scrooge?").response)
    
  • Al reinicializar fast-graphrag en el mismo directorio de trabajo, conserva automáticamente todo el conocimiento

Ejemplos

  • Consulta la carpeta examples para ver tutoriales sobre casos de uso comunes de la biblioteca
    • custom_llm.py: ejemplo sencillo para configurar fast-graphrag con varios modelos de lenguaje y embedders compatibles con la API de OpenAI

Contribuciones

  • Se agradecen contribuciones grandes y pequeñas. Las contribuciones hacen de la comunidad de código abierto un lugar increíble para aprender, inspirarse y crear
  • Puedes revisar la guía de contribución para saber cómo empezar
  • Si no sabes por dónde comenzar, puedes unirte a Discord y hacer preguntas

Filosofía

  • Nuestra misión es aumentar la cantidad de aplicaciones GenAI exitosas en el mundo
  • Para lograrlo, construimos herramientas de memoria y datos para que las apps con LLM puedan aprovechar pipelines de búsqueda altamente especializados sin la complejidad de configurar y mantener flujos de trabajo con agentes

Código abierto o servicio administrado

  • Este repositorio está bajo la licencia MIT. Consulta LICENSE.txt para más detalles
  • La forma más rápida y confiable de comenzar con Fast GraphRAG es usar el servicio administrado
  • Las primeras 100 solicitudes de cada mes son gratis; después, se cobra según el uso

1 comentarios

 
GN⁺ 2024-11-19
Opiniones de Hacker News
  • Usar BM25 junto con LLM puede dar resultados muy relevantes

    • Los embeddings funcionan bien cuando el tamaño de la consulta es similar al tamaño del almacén de embeddings
    • Es efectivo usar un LLM para generar una respuesta hipotética y usarla en la consulta de embeddings
    • En la etapa de descomposición y extracción de conocimiento, se usa un metaprompter para generar automáticamente tipos de dominio/entidad
    • Los LLM no son buenos para descomponer el conocimiento en el nivel adecuado
    • Se usan mapas mentales de mermaid.js para dividir jerárquicamente la entrada y encontrar la ruta adecuada
    • Las preguntas generadas se indexan como texto y se convierten en embeddings
    • BM25 puede usarse para hacer coincidir directamente la consulta del usuario, y un enfoque híbrido ofrece mejores resultados
    • Si no se usa un LLM en tiempo de consulta, es posible explorar jerárquicamente usando la similitud de embeddings como función de costo
  • PageRank y Triangle Centrality son métricas de centralidad interesantes que pueden aplicarse a grafos

    • Triangle Centrality determina la centralidad contando los triángulos alrededor de un nodo
    • Según la investigación, TC es más lento que PR en grafos dispersos, pero se vuelve más eficiente a medida que el grafo crece
  • La recuperación de información tradicional parece adecuada para RAG

    • La búsqueda vectorial es útil para datos no estructurados, pero menos efectiva para datos estructurados
    • Convertir datos estructurados en datos no estructurados para búsqueda vectorial puede ser ineficiente
    • Puede ser útil hacer que el LLM aprenda la consulta o que interactúe con APIs de búsqueda/consulta existentes
    • Usar contextos grandes para traer muchos resultados con varias consultas es más rápido y más barato que la búsqueda vectorial
  • Quieren usar un sistema GraphRag en una startup de IA para analizar documentos a gran escala

    • Se espera que alrededor del 10% de los documentos cambien cada mes
    • Se puede usar S3 para recopilar datos, pero es necesario entender los costos y el tiempo de procesamiento
  • Dudas sobre que PageRank requiera una API key de OpenAI

    • Existe una restricción que impide usar salidas de OpenAI para desarrollar modelos competidores
    • Preocupación por el deterioro económico de las personas comunes
  • Pregunta sobre cómo almacenar y consultar un grafo sin usar una base de datos de grafos

    • En intentos de extracción con el modelo sciphi triplex se obtuvieron resultados inconsistentes
  • Pregunta sobre cuánta cantidad de texto se necesita para construir un grafo de conocimiento de texto específico de un dominio

    • Aider aplica PageRank al grafo de llamadas de un repositorio de código para encontrar contexto relevante
  • Pregunta sobre cómo el dominio y las consultas de ejemplo ayudan a construir un grafo de conocimiento

  • Confusión sobre la política de precios

    • En la página de GitHub dice que las primeras 100 solicitudes son gratis, pero en la landing page recomiendan autoalojarlo para usarlo gratis
  • Pregunta sobre si la respuesta a "¿Quién es Scrooge?" es mejor que en otros enfoques

    • Duda sobre si el enfoque busca reducir costos o conseguir mejores respuestas