Um agente inteligente que utiliza Amazon Bedrock para análise e busca em documentos PDF e Word, estruturado como uma API Flask com interface Streamlit.
- Processamento de Documentos: Suporte para PDF e Word (.docx)
- Busca Vetorial: Utiliza FAISS para busca semântica eficiente
- Amazon Bedrock: Integração com modelos Claude 3 Sonnet
- API REST: Interface Flask para integração fácil
- Interface Web: Frontend Streamlit interativo
- Editor de Prompts: Modificação em tempo real das instruções do agente
- Embeddings: Utiliza Amazon Titan para vetorização
- Instruções Personalizáveis: Prompt do agente configurável
bedrock-document-agent/
├── documents/ # Coloque seus PDFs e Word aqui
├── prompts/
│ └── agent_instructions.txt # Instruções do agente
├── config/
│ └── settings.py # Configurações
├── src/
│ ├── app.py # API Flask principal
│ ├── document_processor.py # Processamento de documentos
│ ├── vector_store.py # Sistema de busca vetorial
│ └── bedrock_agent.py # Agente Bedrock
├── vector_store/ # Índice vetorial (criado automaticamente)
├── streamlit_app.py # Interface web Streamlit
├── requirements.txt # Dependências Python
├── .env.example # Exemplo de configuração
├── .gitignore # Arquivos ignorados pelo Git
├── run.py # Script principal da API
├── run_streamlit.py # Script para interface web
├── demo.py # Demonstração completa
└── test_api.py # Script de teste da API
cd bedrock-document-agent
pip install -r requirements.txt# Copie o arquivo de exemplo
cp .env.example .env
# Edite com suas credenciais
nano .envConfigure no arquivo .env:
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=sua_access_key
AWS_SECRET_ACCESS_KEY=sua_secret_key
BEDROCK_MODEL_ID=anthropic.claude-3-sonnet-20240229-v1:0Certifique-se de que sua conta AWS tem acesso aos modelos:
anthropic.claude-3-sonnet-20240229-v1:0amazon.titan-embed-text-v1
- Coloque seus arquivos PDF e Word na pasta
documents/ - Execute o processamento via API ou interface web
python demo.pyEste script irá:
- Verificar requisitos
- Instalar dependências
- Criar documentos de exemplo
- Iniciar API e interface web
- Executar testes automatizados
python run_streamlit.pyInicia automaticamente a API Flask e a interface Streamlit.
python run.pyInicia apenas a API Flask em http://localhost:5000
streamlit run streamlit_app.pyInicia apenas a interface em http://localhost:8501 (API deve estar rodando)
A interface web oferece:
- Conversa em tempo real com o agente
- Histórico de mensagens
- Configuração de parâmetros de busca
- Visualização de fontes utilizadas
- Modificação em tempo real das instruções do agente
- Preview das alterações
- Salvamento automático
- Templates predefinidos
- Lista de documentos disponíveis
- Informações de tamanho e data
- Reprocessamento com um clique
- Status do processamento
- Status da API em tempo real
- Informações do vector store
- Configurações do agente
- Logs e métricas
GET /healthGET /statusPOST /documents/uploadPOST /chat
Content-Type: application/json
{
"message": "Sua pergunta aqui",
"max_results": 5,
"similarity_threshold": 0.7
}python test_api.py- Acesse
http://localhost:8501 - Vá para a aba "Documentos"
- Clique em "Reprocessar Documentos"
- Vá para a aba "Chat"
- Digite uma pergunta e teste
import requests
# Chat com o agente
response = requests.post('http://localhost:5000/chat', json={
"message": "Quais são os principais tópicos abordados nos documentos?"
})
result = response.json()
print(f"Resposta: {result['response']}")
print(f"Fontes: {result['sources']}")- Acesse
http://localhost:8501 - Vá para a aba "Chat"
- Digite sua pergunta
- Veja a resposta com fontes citadas
- Claude 3 Sonnet (padrão)
- Claude 3 Haiku
- Outros modelos compatíveis
CHUNK_SIZE: Tamanho dos chunks (padrão: 1000)CHUNK_OVERLAP: Sobreposição entre chunks (padrão: 200)MAX_SEARCH_RESULTS: Máximo de documentos retornados (padrão: 5)SIMILARITY_THRESHOLD: Limiar de similaridade (padrão: 0.7)
- Via Interface Web: Use o editor na aba "Editor de Prompt"
- Via Arquivo: Edite
prompts/agent_instructions.txt
Modifique src/document_processor.py para suportar outros formatos.
Modifique streamlit_app.py para personalizar a interface web.
- Verifique se as credenciais estão corretas no
.env - Confirme se a região está correta
- Teste com AWS CLI:
aws sts get-caller-identity
- Verifique se os modelos estão habilitados na sua conta
- Confirme as permissões IAM para Bedrock
- Verifique se a API está rodando em
localhost:5000 - Confirme se o Streamlit está na porta
8501 - Veja os logs para erros específicos
- Verifique se os arquivos estão na pasta
documents/ - Confirme se são PDFs ou Word válidos
- Use a interface para reprocessar
O sistema fornece logs detalhados sobre:
- Processamento de documentos
- Buscas realizadas
- Chamadas para Bedrock
- Erros e exceções
- Atividade da interface web
- Nunca commite credenciais AWS no código
- Use IAM roles quando possível
- Mantenha as dependências atualizadas
- Configure CORS adequadamente para produção
- O
.gitignoreprotege arquivos sensíveis
Para melhor performance:
- Use instâncias EC2 com mais memória para documentos grandes
- Configure cache para embeddings frequentes
- Otimize o tamanho dos chunks baseado no seu caso de uso
- Use SSD para armazenamento do vector store
- Suporte ao Cliente: Base de conhecimento inteligente
- Análise de Contratos: Busca em documentos legais
- Manuais Técnicos: Assistente para documentação
- Pesquisa Acadêmica: Análise de papers e artigos
- Compliance: Consulta a políticas e procedimentos
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para detalhes.
Desenvolvido com ❤️ usando Amazon Bedrock, Flask e Streamlit