Este projeto implementa uma API para recuperação de documentos utilizando FastAPI, Sentence Transformers para embeddings de texto, e Ollama para geração de respostas baseadas nos documentos mais relevantes. O sistema processa arquivos de texto e PDF, divide-os em chunks e encontra o documento mais relevante para responder às perguntas dos usuários.
- Carregamento automático de documentos
.txt
e.pdf
da pastadata/
. - Opção de carregar apenas arquivos
.txt
, apenas.pdf
ou ambos. - Segmentação de documentos em chunks para melhor indexação.
- Uso de embeddings para encontrar o documento mais relevante para uma consulta.
- Integração com Ollama para geração de respostas baseadas no conteúdo do documento.
- Uso do Guardian Sail para garantir controle de acesso e segurança nas consultas.
- Retorno do nome do documento de origem na resposta.
- FastAPI - Framework para criação de APIs.
- Sentence Transformers - Para criação de embeddings dos documentos.
- Ollama - Para geração de respostas baseadas nos documentos.
- Uvicorn - Servidor para rodar a API.
- Logging - Para monitoramento e debug.
- Guardian Sail - Para controle de acesso e segurança nas respostas da API.
RAG_FASTAPI
│── 📂 data/ # Pasta contendo os arquivos de texto e PDF
│── 📂 services/ # Serviços de processamento e consulta
│ │── query_service.py # Serviço para processar consultas RAG
│ │── document_service.py # Processamento dos documentos e embeddings
│ │── pdf_service.py # Carregamento e processamento de PDFs
│ │── txt_service.py # Carregament
98F7
o e processamento de textos
│── 📂 utils/ # Utilitários adicionais
│ │── guardian_sail.py # Implementação do Guardian Sail para controle de acesso
│── 📜 rag.py # API RAG sem LLM
│── 📜 rag_llm.py # API RAG com LLM
│── 📜 README.md # Documentação do projeto
│── 📜 requirements.txt # Dependências do projeto
│── 📜 test_main.http # Testes da API RAG
│── 📜 test_main_llm.http # Testes da API RAG com LLM
pip install -r requirements.txt
python rag_llm.py
A API será iniciada em http://localhost:8000
python rag.py
A API será iniciada em http://localhost:8080
- Método:
POST
- Descrição: Retorna a resposta baseada no documento mais relevante.
- Entrada:
{ "query": "Como dividir textos em segmentos menores?" }
- Saída:
{ "pergunta": "Como dividir textos em segmentos menores?", "resposta": "A segmentação de textos em chunks facilita a indexação...", "documento_fonte": "documento1.txt" }
- Configura a API com FastAPI.
- Recebe a consulta do usuário.
- Usa embeddings para encontrar o documento mais relevante.
- Retorna a resposta com o nome do documento fonte.
- Configura a API com FastAPI.
- Recebe a consulta do usuário.
- Usa embeddings para encontrar o documento mais relevante.
- Envia o documento para Ollama para gerar uma resposta.
- Retorna a resposta com o nome do documento fonte.
- Responsável por processar a consulta do usuário e encontrar o documento mais relevante.
- Calcula a similaridade entre embeddings da query e dos documentos.
- Utiliza Guardian Sail para garantir que respostas respeitem políticas de segurança.
- Gerencia o carregamento e processamento de documentos .txt e .pdf.
- Utiliza Sentence Transformers para gerar embeddings dos documentos.
- Permite carregar documentos específicos por tipo (txt, pdf ou ambos).
- Implementa uma função para reconstruir textos eliminando sobreposição de chunks.
- Responsável por carregar e processar arquivos
.txt
do diretório especificado. - Divide os textos em chunks (trechos menores) para facilitar o processamento posterior.
- Implementa sobreposição (
overlap
) para garantir que a divisão de trechos não perca contexto.
- Responsável por carregar e processar arquivos
.pdf
do diretório especificado. - Extrai o texto de cada página do PDF utilizando PyMuPDF (fitz).
- Divide o texto em chunks para facilitar a indexação.
- Adiciona metadados como o número da página ao documento processado.
- Implementa camadas de segurança na API.
- Aplica regras de controle de acesso e auditoria sobre as respostas geradas.
- Evita vazamento de informações sensíveis ou fora do escopo permitido.
- Armazenamento de embeddings em um banco de dados para otimizar a busca.
- Suporte a mais formatos de documentos (DOCX, HTML).
- Implementação de cache para evitar recomputação de embeddings.
- Aprimoramento do Guardian Sail para validar respostas com base em regras dinâmicas.
Caso tenha dúvidas ou sugestões, sinta-se à vontade para contribuir! 😊