API para o sistema de perguntas sobre leis em angola
# api-lexai
API para o sistema de perguntas sobre leis em Angola. Backend em FastAPI com agente LLM (Groq), SQLAlchemy 2.0 async e PostgreSQL.
O agente pesquisa legislação angolana na web (com priorização de fontes jurídicas de referência, como Lex.ao e o Diário da República), extrai o texto de diplomas e responde com base em artigos citados, sempre com a fonte.
## Stack
- **FastAPI** + **Uvicorn**
- **SQLAlchemy 2.0** (async, com `asyncpg`)
- **Alembic** (migrations)
- **Pydantic v2** + **pydantic-settings**
- **Groq** (LLM)
- **Redis** (rate limiting) — com fallback em memória
- **structlog** (logging)
## Estrutura de pastas
```
├── alembic/ # migrations Alembic
├── alembic.ini
├── app/
│ ├── api/ # rotas / endpoints FastAPI
│ ├── agent/ # lógica do agente LLM
│ │ ├── tools/ # ferramentas do agente (busca web, HTML, PDF, cache)
│ │ └── system_prompt.py
│ ├── core/ # configuração, logging, utilitários
│ ├── data/ # seed curado das leis prioritárias (app/data/laws.py)
│ ├── db/ # engine, sessão, Base declarativa, cliente Redis
│ ├── models/ # modelos ORM (SQLAlchemy)
│ └── schemas/ # esquemas Pydantic de entrada/saída
├── scripts/
│ └── seed_laws.py # extrai e popula law_cache com as leis prioritárias
├── tests/ # testes (pytest)
├── docker-compose.yml # PostgreSQL, Redis e RabbitMQ para desenvolvimento
└── .env.example # modelo das variáveis de ambiente
```
## Pré-requisitos
- Python 3.11+
- PostgreSQL e Redis (locais ou via `docker compose`)
- Chave de API da Groq
## Setup local
### 1. Dependências de infraestrutura (PostgreSQL, Redis)
Com Docker (recomendado):
```bash
docker compose up -d
```
Os containers expõem PostgreSQL na porta `5434`, Redis na `6378` e RabbitMQ em `5673/15673`. Ajuste `DATABASE_URL` e `REDIS_URL` no `.env` em conformidade (ver abaixo).
Sem Docker: instale PostgreSQL e Redis localmente e ajuste as p …