GraphRagSQL é uma ferramenta que converte esquemas SQL em grafos de conhecimento e utiliza RAG (Retrieval-Augmented Generation) para análise e consulta de dados. O projeto combina processamento de DDL SQL, teoria dos grafos e IA para fornecer insights sobre estruturas de banco de dados.
O diagrama acima ilustra o fluxo de funcionamento do GraphRagSQL:
- O DDL SQL é fornecido como entrada
- O GraphRagSQL processa o DDL e gera um grafo com embeddings
- Os embeddings são gerados via API da OpenAI
- O usuário faz perguntas em linguagem natural para a IA
- A IA consulta o GraphRagSQL para encontrar informações relevantes
- O sistema retorna apenas o SQL relevante para a pergunta do usuário
- Conversão de DDL SQL em grafos direcionados
- Geração de embeddings para análise semântica
- Sistema de logging integrado
- Suporte a análise de chaves estrangeiras e relacionamentos
- Integração com OpenAI para processamento de linguagem natural
- Exportação do grafo para visualização
- Consultas semânticas ao esquema do banco de dados
- Python 3.8+
- Chave de API da OpenAI
- Dependências listadas em
requirements.txt
- Clone o repositório:
git clone https://github.com/seu-usuario/graphrag.git
cd graphrag
- Crie e ative um ambiente virtual:
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
.\venv\Scripts\activate # Windows
- Instale as dependências:
pip install -r requirements.txt
- Configure as variáveis de ambiente:
cp .env.example .env
# Edite o arquivo .env e adicione sua chave da OpenAI
from graphrag import GraphRagSQL
# Seu DDL SQL
ddl = """
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE posts (
id INT PRIMARY KEY,
user_id INT,
title VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES users(id)
);
"""
# Inicialize o GraphRagSQL
graph_rag = GraphRagSQL(ddl)
# Exporta o grafo para um arquivo JSON que pode ser visualizado
graph_rag.export_graph_json('demo/public/graph_data.json')
import asyncio
# Consulta por similaridade semântica
async def main():
# Encontra tabelas relacionadas a usuários
result = await graph_rag.query_graph("tabelas relacionadas a usuários")
print(result)
# Encontra estruturas de posts
result = await graph_rag.query_graph("estrutura de posts e comentários")
print(result)
asyncio.run(main())
# Obter tabelas relacionadas a uma tabela específica
related_tables = graph_rag._get_related_tables("users")
print(f"Tabelas relacionadas a 'users': {related_tables}")
# Reconstruir DDL de uma tabela
ddl = graph_rag._reconstruct_ddl_for_node("posts")
print(f"DDL reconstruído:\n{ddl}")
# Inicialize com nível de log específico
graph_rag = GraphRagSQL(ddl, log_level="DEBUG")
Para rodar os testes:
python -m pytest tests/
Contribuições são bem-vindas! Por favor, leia nosso guia de contribuição em CONTRIBUTING.md para detalhes sobre nosso código de conduta e o processo para enviar pull requests.
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Se você tiver alguma dúvida ou sugestão, por favor abra uma issue no GitHub.