Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證AI-powered help desk built with Python, FastAPI, PostgreSQL, pgvector and React. Automatic ticket classification, routing and RAG-based solution suggestions.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Service desk com inteligência artificial: recebe chamados, classifica, define prioridade, encaminha para a equipe certa e sugere a solução com base na base de conhecimento, citando as fontes. AI-powered service desk that automatically classifies, prioritizes and routes support tickets while generating context-aware solutions using RAG. Projeto full stack completo: API em Python/FastAPI com PostgreSQL + pgvector, frontend em React + TypeScript, IA com Claude e busca semântica com embeddings + RAG. Roda inteiro com docker compose up.檢視完整 README ↗
Service desk com inteligência artificial: recebe chamados, classifica, define prioridade, encaminha para a equipe certa e sugere a solução com base na base de conhecimento, citando as fontes.
AI-powered service desk that automatically classifies, prioritizes and routes support tickets while generating context-aware solutions using RAG.
Projeto full stack completo: API em Python/FastAPI com PostgreSQL + pgvector, frontend em React + TypeScript, IA com Claude e busca semântica com embeddings + RAG. Roda inteiro com docker compose up.
Aplicação: https://resolveai-silk.vercel.app · API e documentação: https://resolveai-api-wb7q.onrender.com/docs
Entre com [email protected] / resolveai123 (ou agent@ para a visão de atendente e user@ para a de solicitante). A base tem 5.000 chamados de demonstração.
A API roda no plano gratuito do Render e hiberna quando fica sem uso: a primeira chamada pode levar até um minuto para responder. Depois disso fica rápida.
Demonstração · Funcionalidades · Ciclo de vida do chamado · Como a IA funciona · Base de conhecimento e RAG · Arquitetura · Stack · Instalação · Deploy · Variáveis de ambiente · Testes · API · Roadmap
| Chamados | Detalhe do chamado |
|---|---|
| Solicitante que resolveu sozinho | Equipe revisando a solução |
|---|---|
| Base de conhecimento | Administração |
|---|---|
Tema escuro: dashboard · chamado
Logins de demonstração (senha resolveai123): [email protected] · [email protected] · [email protected]
Chamados
#número, filtros por situação, prioridade, categoria, equipe, responsável e dataInteligência artificial
Base de conhecimento
Administração e acesso
Dashboard
Solicitante abre o chamado
│
▼
ABERTO ──────────► EM ANDAMENTO ◄────────► AGUARDANDO SOLICITANTE
│ │ resposta do solicitante devolve
│ │
├── equipe resolve ──┤
└── solicitante resolve sozinho, descrevendo como
│
▼
RESOLVIDO ──── resposta do solicitante ────► volta para a fila
│
solicitante confirma, equipe fecha ou 5 dias sem ninguém fechar
│
▼
FECHADO (definitivo: não aceita alterações nem mensagens)
| Situação | Significa |
|---|---|
| Aberto | Chegou e ninguém começou a trabalhar nele |
| Em andamento | Um atendente está trabalhando nele |
| Aguardando solicitante | O atendente perguntou algo; a resposta do solicitante devolve o chamado para Em andamento |
| Resolvido | Problema solucionado: o SLA para de contar e o chamado fecha sozinho em 5 dias |
| Fechado | Arquivado de vez |
No filtro da lista, Não resolvidos reúne Aberto, Em andamento e Aguardando solicitante.
AUTO_CLOSE_RESOLVED_DAYS).Chamado criado
├─ Regras de prioridade (palavras-chave) ┐ síncrono, já vem na resposta da API
├─ Roteamento pela categoria ┘
└─ Em segundo plano:
├─ Classificação por IA → sugestão gravada + aplicada se confiança ≥ 0,7
└─ Busca na base (RAG) → sugestão de solução com fontes citadas
Regras que tornam a automação segura:
Provedores intercambiáveis. O padrão é gratuito e roda offline; a IA de verdade é opcional:
| Função | Padrão (grátis) | Opcional |
|---|---|---|
| Classificação | palavras-chave do catálogo | Claude (claude-haiku-4-5), saída estruturada |
| Embeddings | hashing local de palavras | Voyage AI (voyage-4-lite) |
| Resposta | trecho do artigo mais relevante | Claude, resposta escrita a partir dos artigos |
Detalhes da integração com o Claude: modelo configurável, prompt caching, parâmetros enviados conforme o modelo (effort e fallback de recusa só para quem suporta), timeouts, retries e erros do SDK mapeados para códigos próprios. Tokens de entrada/saída e latência ficam gravados em cada análise.
Artigo salvo ─► divisão em trechos ─► embeddings ─► pgvector (índice HNSW)
Chamado ─► embedding da pergunta ─► busca por similaridade ─► artigos relevantes
─► gerador de resposta ─► sugestão + fontes citadas
React + Vite (nginx)
│ /api
▼
FastAPI ──► PostgreSQL + pgvector
│
├─► Claude (classificação e respostas)
└─► Voyage AI (embeddings)
Monólito modular, em camadas: rotas → serviços → modelos. As rotas validam entrada e delegam; a regra de negócio fica nos serviços.
backend/
├── app/
│ ├── api/ # Rotas FastAPI e dependências (RBAC)
│ ├── core/ # Config, banco, segurança, erros, logs, texto
│ ├── models/ # SQLAlchemy (inclui o tipo de vetor do pgvector)
│ ├── schemas/ # Contratos Pydantic
│ ├── services/ # triage, ai_classifier, priority, routing, knowledge,
│ │ # embeddings, rag, answer_generator, sla, analytics
│ ├── scripts/ # seed e gerador de dados de demonstração
│ └── jobs.py # tarefas periódicas (fechamento automático)
├── migrations/ # Alembic
└── tests/ # 212 testes
frontend/
├── src/
│ ├── auth/ # Sessão e refresh de token
│ ├── components/ # Layout, UI e gráficos
│ ├── lib/ # Cliente da API, tipos, formatação pt-BR, tradução de erros
│ └── pages/ # Dashboard, chamados, base de conhecimento, administração
└── nginx.conf # Serve o SPA e encaminha /api
Decisões de arquitetura
organization_id; dados de outra empresa retornam 404, não 403, para não revelar o que existe.ticket_history, com valores legíveis e actor = null quando foi a automação.ALTER TYPE.{"error": {"code": "TICKET_NOT_FOUND", "message": "Ticket not found."}}; o frontend traduz pelo código.2026-09-14T14:35:12+00:00 INFO ticket.created ticket_id=527 user_id=42.vector no PostgreSQL e JSON no SQLite, então a suíte roda nos dois bancos.SKIP LOCKED evita que duas instâncias fechem o mesmo chamado.Backend: Python 3.13 · FastAPI · Pydantic · SQLAlchemy 2 · Alembic · PostgreSQL 17 + pgvector · JWT + Argon2 · Pytest Frontend: React 19 · TypeScript · Vite · Tailwind CSS 4 · TanStack Query · React Router · Recharts · Lucide · Vitest + Testing Library IA: Claude (Anthropic SDK) · Voyage AI (embeddings) · RAG sobre pgvector Infra: Docker · Docker Compose · nginx · GitHub Actions
Pré-requisitos: Docker Desktop. Para desenvolver, também Python 3.13+ e Node 24+.
git clone https://github.com/paulo-carvalho10/resolveai.git
cd resolveai
docker compose up -d --build
docker compose exec api python -m app.scripts.seed # dados básicos
docker compose exec api python -m app.scripts.demo_data # 5.000 chamados de demonstração
docker compose up -d db # só o banco
cd backend
python -m venv .venv
.venv\Scripts\activate # Linux/macOS: source .venv/bin/activate
pip install -r requirements-dev.txt
copy .env.example .env # Linux/macOS: cp .env.example .env
alembic upgrade head
python -m app.scripts.seed
uvicorn app.main:app --reload
cd ../frontend
npm install
npm run dev # http://localhost:5173
Windows: use
127.0.0.1e nãolocalhostnas URLs do banco. Olocalhostresolve primeiro para IPv6, onde o repasse de portas do WSL pode aceitar a conexão sem encaminhá-la, e ela trava.
No backend/.env (o mesmo arquivo vale para o Docker):
AI_PROVIDER=claude
ANTHROPIC_API_KEY=sk-ant-... # console.anthropic.com
EMBEDDING_PROVIDER=voyage
VOYAGE_API_KEY=pa-... # dashboard.voyageai.com
Depois de trocar o provedor ou o modelo de embeddings, reindexe: POST /knowledge/reindex (admin).
Passo a passo em docs/DEPLOY.md, com planos gratuitos: banco no Neon (PostgreSQL + pgvector), API no Render (Docker, a partir do render.yaml) e frontend na Vercel (frontend/vercel.json). O container da API roda as migrations sozinho ao subir.
Lista completa e comentada em backend/.env.example. As principais:
| Variável | Padrão | Função |
|---|---|---|
DATABASE_URL | PostgreSQL local | conexão do banco |
JWT_SECRET_KEY | inseguro para dev | assinatura dos tokens (obrigatório em produção) |
AI_PROVIDER | keyword | keyword (grátis) ou claude |
AI_MODEL | claude-haiku-4-5 | modelo do Claude |
AI_AUTO_APPLY_MIN_CONFIDENCE | 0.7 | confiança mínima para aplicar a sugestão |
EMBEDDING_PROVIDER | local | local (grátis) ou voyage |
RAG_TOP_K / RAG_MIN_SCORE | 3 / por provedor | artigos enviados à IA e similaridade mínima |
SLA_HOURS_* | 24 / 8 / 4 / 1 | prazo por prioridade |
AUTO_CLOSE_RESOLVED_DAYS | 5 | dias em Resolvido até o sistema fechar o chamado |
cd backend && pytest --cov # 212 testes
cd frontend && npm test # 23 testes
Os testes do backend rodam em SQLite em memória por padrão e, com TEST_DATABASE_URL, no PostgreSQL com pgvector (é assim que o CI roda). Eles cobrem autenticação, permissões, isolamento entre organizações, ciclo de vida do chamado (incluindo fechamento automático e reabertura), regras de prioridade, classificação, RAG, SLA, dashboard e os provedores de IA (com clientes falsos, sem gastar API).
O CI (.github/workflows/ci.yml) roda lint, testes no PostgreSQL, verificação de que as migrations batem com os modelos, lint + tipos + testes + build do frontend, e o build das imagens Docker.
Documentação interativa (Swagger/OpenAPI) em /docs.
| Método | Rota | Acesso |
|---|---|---|
| POST | /auth/register | público (cria organização + admin) |
| POST | /auth/login · /auth/refresh | público |
| GET | /auth/me | autenticado |
| GET · POST · PATCH | /users, /users/{id} | leitura: agente/admin · escrita: admin |
| GET · POST · PATCH · DELETE | /teams, /teams/{id}, /teams/{id}/members | leitura: agente/admin · escrita: admin |
| GET · POST · PATCH · DELETE | /categories, /subcategories/{id} | leitura: todos · escrita: admin |
| GET · POST · PATCH · DELETE | /priority-rules, /priority-rules/{id} | leitura: agente/admin · escrita: admin |
| GET · POST | /tickets | todos (solicitante vê só os seus) |
| GET · PATCH · DELETE | /tickets/{id} | PATCH: agente/admin · DELETE: admin |
| POST | /tickets/{id}/assign · /tickets/{id}/resolve | agente/admin |
| POST | /tickets/{id}/self-resolve | solicitante (o próprio, com a descrição da solução) |
| POST | /tickets/{id}/close | agente/admin (qualquer situação) · solicitante (o próprio, depois de resolvido) |
| GET · POST | /tickets/{id}/messages | todos (notas internas só para agentes) |
| GET | /tickets/{id}/history | agente/admin |
| POST · GET | /tickets/{id}/ai/analyze · /tickets/{id}/ai/analyses | agente/admin |
| POST · GET | /tickets/{id}/ai/suggest · /tickets/{id}/ai/suggestions | agente/admin |
| GET · POST · PATCH · DELETE | /knowledge, /knowledge/{id} |
| leitura: todos (solicitante só publicados) · escrita: admin |
| GET | /knowledge/search?q= | autenticado |
| POST | /knowledge/reindex | admin |
| GET | /analytics/dashboard | agente/admin |