Este projeto implementa um sistema RAG (Retrieval-Augmented Generation) usando Go, OpenAI GPT-4 e MongoDB. O sistema permite que um agente de IA busque informações relevantes em uma base de dados antes de responder às perguntas do usuário.
- Go 1.21+
- MongoDB
- OpenAI GPT-4
- Docker & Docker Compose
.
├── cmd/
│ ├── api/
|__ main.go # Aplicação principal
│ └── seed/
│ └── main.go # Script para popular o banco
├── internal/
│ └── database/
│ └── mongodb.go # Pacote de acesso ao MongoDB
├── docker-compose.yml # Configuração do MongoDB
└── go.mod # Dependências do Go
Crie um arquivo .env na raiz do projeto:
OPENAI_API_KEY=sua-chave-da-openai
MONGO_URI=mongodb://admin:password123@localhost:27017- Clone o repositório:
git clone https://github.com/alextavella/agentic-rag.git
cd agentic-rag- Instale as dependências:
go mod tidy- Inicie o MongoDB:
docker-compose up -d- Verifique se os containers estão rodando:
docker-compose psExecute o script de seed para inserir documentos de exemplo:
go run cmd/seed/main.go- Execute a aplicação principal:
go run cmd/api/main.go- A aplicação irá:
- Receber uma pergunta do usuário
- O agente (GPT-4) decidirá se precisa buscar informações
- Se necessário, consultará o MongoDB
- Gerará uma resposta combinando seu conhecimento com os dados encontrados
Uma interface web para gerenciar o MongoDB está disponível em:
- URL: http://localhost:8081
- Usuário: admin
- Senha: password123
Os documentos no MongoDB seguem esta estrutura:
type Document struct {
Title string `json:"title"` // Título do documento
Content string `json:"content"` // Conteúdo principal
Link string `json:"link"` // Link/caminho do documento
Category string `json:"category"` // Categoria (ex: "performance")
}-
Busca Semântica
- Índice de texto no MongoDB para busca eficiente
- Busca em títulos e conteúdo dos documentos
- Limite configurável de resultados
-
Integração com OpenAI
- Uso do modelo GPT-4 Turbo
- Sistema de ferramentas (tools) para busca
- Histórico de conversação mantido
-
Persistência
- Armazenamento em MongoDB
- Conexão segura com autenticação
- Volume Docker para persistência dos dados
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Adicionar testes automatizados
- Implementar busca vetorial
- Adicionar mais opções de configuração
- Melhorar tratamento de erros
- Adicionar métricas e monitoramento
- Implementar cache de resultados
- Adicionar suporte a mais tipos de documentos