Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 |