1 pontos por GN⁺ 2024-11-19 | 1 comentários | Compartilhar no WhatsApp

Framework Fast GraphRAG simplificado e orientável por prompts

  • Conhecimento interpretável e depurável: grafos fornecem uma visão do conhecimento que pode ser explorada por humanos, além de poder ser consultada, visualizada e atualizada
  • Rápido, barato e eficiente: projetado para rodar em larga escala com baixa exigência de recursos e custos
  • Dados dinâmicos: cria e aprimora grafos automaticamente de acordo com os requisitos do domínio e da ontologia
  • Atualizações incrementais: oferece suporte a atualizações em tempo real à medida que os dados evoluem
  • Exploração inteligente: usa navegação em grafos baseada em PageRank para aumentar a precisão e a confiabilidade
  • Suporte assíncrono e tipado: suporte completo a execução assíncrona e tipagem para fluxos de trabalho robustos e previsíveis

Instalação

  • Instalar via PyPI (recomendado)

    pip install fast-graphrag
    
  • Instalar a partir do código-fonte

    # Primeiro clone este repositório
    cd fast_graphrag
    poetry install
    

Início rápido

  • Defina a chave da API da OpenAI no ambiente

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

    curl https://raw.githubusercontent.com/circlemind-ai/fast-graphrag/… > ./book.txt
    
  • Exemplo de código 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)
    
  • Ao reinicializar o fast-graphrag no mesmo diretório de trabalho, todo o conhecimento é preservado automaticamente

Exemplos

  • Consulte a pasta examples para ver tutoriais sobre casos de uso comuns da biblioteca
    • custom_llm.py: exemplo simples de como configurar o fast-graphrag com diferentes modelos de linguagem e embedders compatíveis com a API da OpenAI

Contribuição

  • Contribuições grandes e pequenas são bem-vindas. Elas tornam a comunidade open source um lugar incrível para aprender, se inspirar e criar
  • Você pode consultar o guia de contribuição para saber como começar
  • Se não souber por onde começar, pode entrar no Discord e fazer perguntas

Filosofia

  • Nossa missão é aumentar o número de aplicações GenAI bem-sucedidas no mundo
  • Para isso, construímos ferramentas de memória e dados para que apps com LLM possam aproveitar pipelines de busca altamente especializados sem a complexidade de configurar e manter fluxos de trabalho baseados em agentes

Open source ou serviço gerenciado

  • Este repositório está sob a licença MIT. Para mais detalhes, consulte LICENSE.txt
  • A forma mais rápida e confiável de começar a usar o Fast GraphRAG é por meio do serviço gerenciado
  • As primeiras 100 requisições de cada mês são gratuitas; depois disso, a cobrança é feita com base no uso

1 comentários

 
GN⁺ 2024-11-19
Comentários do Hacker News
  • Usar BM25 junto com LLM pode produzir resultados com altíssima relevância

    • Embeddings funcionam bem quando o tamanho da consulta é parecido com o tamanho do repositório de embeddings
    • É eficaz usar um LLM para gerar uma resposta hipotética e usá-la na consulta de embeddings
    • Na etapa de decomposição e extração de conhecimento, usa-se um metaprompter para gerar automaticamente tipos de domínio/entidade
    • LLMs não são bons em decompor conhecimento no nível adequado
    • Usa-se um mindmap em mermaid.js para dividir a entrada hierarquicamente e encontrar a raiz apropriada
    • As perguntas geradas são indexadas como texto e transformadas em embeddings
    • Com BM25, é possível casar diretamente a consulta do usuário, e uma abordagem híbrida oferece resultados melhores
    • Se não usar LLM no momento da consulta, é possível navegar hierarquicamente usando similaridade de embeddings como função de custo
  • PageRank e Triangle Centrality são métricas de centralidade interessantes que podem ser aplicadas a grafos

    • Triangle Centrality determina a centralidade contando os triângulos ao redor de um nó
    • Segundo pesquisas, TC é mais lenta que PR em grafos esparsos, mas fica mais eficiente à medida que o grafo cresce
  • Acredito que recuperação tradicional de informação seja adequada para RAG

    • Busca vetorial é útil para dados não estruturados, mas menos eficaz para dados estruturados
    • Converter dados estruturados em dados não estruturados para busca vetorial pode ser ineficiente
    • Pode ser útil fazer o LLM aprender a consulta ou interagir com APIs de busca/consulta já existentes
    • Usar um grande tamanho de contexto para trazer muitos resultados com várias consultas é mais rápido e barato do que busca vetorial
  • Querem usar um sistema GraphRag para análise de documentos em grande escala em uma startup de IA

    • Espera-se uma alteração de cerca de 10% nos documentos por mês
    • É possível coletar dados usando S3, mas é preciso entender o custo e o tempo de processamento
  • Questionamento sobre PageRank exigir uma chave de API da OpenAI

    • Há uma restrição de que não se pode usar as saídas da OpenAI para desenvolver modelos concorrentes
    • Preocupação com a deterioração econômica das pessoas comuns
  • Pergunta sobre como armazenar e consultar um grafo sem usar um banco de dados de grafos

    • Ao tentar extrair com o modelo sciphi triplex, tiveram resultados inconsistentes
  • Pergunta sobre quanto texto é necessário para construir um grafo de conhecimento de textos específicos de um domínio

    • O Aider aplica PageRank ao grafo de chamadas de um repositório de código para encontrar o contexto relevante
  • Pergunta sobre como domínio e consultas de exemplo ajudam a construir um grafo de conhecimento

  • Confusão sobre a política de preços

    • Na página do GitHub diz que as primeiras 100 requisições são grátis, mas na landing page recomenda-se self-hosting para usar gratuitamente
  • Pergunta se a resposta para "Quem é Scrooge?" é melhor do que a de outras abordagens

    • Dúvida se a proposta é reduzir custos ou obter respostas melhores