Base de conhecimento multiempresa para equipes e agentes de AI, com API, versionamento e uploads web
10K+
Expertise.AI é um sistema para centralizar, organizar e consultar conhecimento corporativo de forma rápida e rastreável.
O objetivo é reduzir tempo de busca por informação, padronizar conteúdos e permitir reutilização de conhecimento em operações, suporte, onboarding e decisão.
A plataforma também pode ser utilizada como base de conhecimento para consulta de agentes de IA, favorecendo automação e respostas contextualizadas.
Repositório oficial no GitHub:
data/kb_store/ — diretório raiz da base.data/kb_store/<empresa_id>/_documents/<document_uuid>/ — pasta física do documento.data/kb_store/<empresa_id>/_documents/<document_uuid>/v1.md, v2.md, ...document.meta.json em cada pasta de documento controla versão publicada e histórico.document.meta.json com o campo published_version.frontmatter.área, categoria e slug continuam existindo como metadados do documento, mas não definem mais sua identidade física em disco.SQLite local (data/system.sqlite3).Exemplo de separação:
data/kb_store/: estrutura de arquivos Markdown por versão (conteúdo da base).data/system.sqlite3 (SQLite): usuários, empresas, permissões, vínculos usuário-empresa e perfis.admin: administra usuários, perfis, políticas e configurações da empresa.editor: cria e edita conteúdos, cria novas versões e solicita publicação.revisor: valida e aprova versões para publicação.usuário -> empresa -> perfil é persistido em SQLite e aplicado como filtro de permissão na API e na UI.Exemplo de frontmatter:
---
id: onboarding-mensageria
titulo: Guia de Onboarding da Mensageria
area: suporte
categoria: processos
tags: [onboarding, processos, suporte]
status: revisado
autor: equipe-ops
versao: 2
publicada: false
revisado_em: 2026-03-09
---
---
documento: onboarding-mensageria
publicado_em: 2026-03-09
versao_publicada: 2
arquivo_publicado: v2.md
---
.pdf, .docx) durante a criação do documento.docling gera a versão em Markdown padronizada para revisão e publicação.GET /api/v1/empresas/{empresaId}/documentos/publicados?area=, ?categoria=, ?tag=, ?busca=, ?limit=, ?offset=.data_validade (formato YYYY-MM-DD) para controle de expiração.Expertise.AI — Sistema de base de conhecimento para escalar inteligência organizacional.
Este projeto já possui um esqueleto funcional em FastAPI com:
admin, editor, revisor..md versionados por documento.docling para Markdown.app/: código da API.data/system.sqlite3: banco SQLite para dados de administração.data/kb_store/: arquivos da base de conhecimento por empresa.SQLite:
userscompaniesuser_company_roles (admin, editor, revisor)data/kb_store/<empresa_id>/_documents/<document_uuid>/v{n}.mddata/kb_store/<empresa_id>/_documents/<document_uuid>/document.meta.jsonempresa_id + document_uuid.área, categoria e slug são metadados editáveis e podem mudar sem criar um novo documento físico.document_uuid, versões, anexos e metadados existentes.área/categoria/slug para localizar o documento.Pré-requisitos:
Instalação:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload
Pré-requisitos:
Comandos:
cp .env.example .env
docker compose up --build -d
EXPAI_DOCLING_PREFETCH_MODELS controla o modo offline dos modelos usados pelo docling no processamento de PDF.EXPAI_DOCLING_PREFETCH_MODELS=true faz o download dos modelos durante o docker build e os empacota dentro da imagem./app/data/docling_cache quando o volume de dados estiver vazio.EXPAI_DOCLING_PREFETCH_MODELS=false, a imagem não empacota os modelos e o primeiro processamento de PDF dependerá de acesso à internet para popular o cache.docker/docker-compose.yml), a variável documenta essa expectativa operacional, mas o comportamento offline real depende de a imagem já ter sido buildada/publicada com o prefetch habilitado.HTTP_PROXY, HTTPS_PROXY e NO_PROXY. No compose de build, essas variáveis são repassadas tanto para o docker build quanto para o runtime do container.URL de acesso:
Comandos úteis:
docker compose logs -f
docker compose ps
docker compose down
Limites operacionais do container:
expertise-ai em:
memory: 6gcpus: 2.0docling, reduzindo o risco de o processo web competir com a conversão pesada.Persistência:
expertise_ai_data armazena:
system.sqlite3kb_store e versões da base de conhecimentoPara resetar o estado dos dados (sem excluir código):
docker compose down -v
Baseado no histórico real deste projeto, com a configuração atual:
EXPAI_DOCLING_PDF_PAGE_BATCH_SIZE=10EXPAI_DOCLING_OCR_ENABLED=falseEXPAI_DOCLING_TABLE_STRUCTURE_ENABLED=falseEXPAI_DOCLING_THREADS=2Observações confirmadas:
359 páginas e aproximadamente 4 MB chegou a falhar antes com returncode=-9, o que é compatível com SIGKILL/OOM no subprocesso do docling.10 páginas e desabilitar OCR/tabelas, o processamento grande voltou a funcionar de forma estável no ambiente atual.Guia prático de capacidade:
50 páginas:
2 GB a 3 GB de RAM1 a 2 vCPUs50 a 200 páginas:
4 GB de RAM2 vCPUs200 a 400 páginas:
6 GB de RAM2 vCPUs10 páginas por lote400 páginas:
Importante:
POST /api/v1/empresas — cria empresa e usuário admin inicial.POST /api/v1/auth/login — autenticação e emissão de JWT.POST /api/v1/empresas/{empresa_id}/documentos — cria/atualiza documento via texto markdown.POST /api/v1/empresas/{empresa_id}/documentos/upload — upload de PDF/DOCX com conversão para .md.PUT /api/v1/empresas/{empresa_id}/documentos/{area}/{categoria}/{slug}/publicar — define a versão publicada.GET /api/v1/empresas/{empresa_id}/documentos/publicados — consulta documentos publicados da empresa (obrigatório).GET /api/v1/config — retorna configuração pública da plataforma (ex.: access_control_enabled).GET /api/v1/empresas/{empresa_id}/documentos/{area}/{categoria}/{slug} — lista versões do documento.GET /api/v1/empresas/{empresa_id}/documentos/{area}/{categoria}/{slug}/conteudo — retorna o conteúdo da versão publicada por padrão (popup de visualização) e aceita ?version=<n> para carregar qualquer versão no preview da linha do tempo.GET /api/v1/empresas/{empresa_id}/usuarios — lista usuários da empresa (admin).POST /api/v1/empresas/{empresa_id}/usuarios — cria/vincula usuário com perfil (admin).Para cadastrar áreas, categorias e documentos automaticamente, use:
python3 scripts/seed_test_data.py --documents 50 --areas 3 --categories-per-area 4
Com autenticação:
python3 scripts/seed_test_data.py --documents 50 --email [email protected] --password Admin@123 --company-id 1
Parâmetros principais:
--documents (obrigatório) — quantidade de documentos a criar.--areas — quantidade de áreas (padrão: 3).--categories-per-area — categorias por área (padrão: 3).--publish — publica todos os documentos criados.--base-url — URL base da API (padrão: http://localhost:8000).--company-id — empresa alvo (padrão: 1).POST /api/v1/auth/login
{
"email": "[email protected]",
"password": "senha",
"company_id": 1
}
Ao iniciar a plataforma sem dados de base, é criado automaticamente um tenant padrão com admin padrão:
EXPAI_DEFAULT_COMPANY_NAME (slug expai)EXPAI_DEFAULT_COMPANY_DESCRIPTION[email protected]Admin@123Esses valores podem ser alterados por variáveis de ambiente:
EXPAI_DEFAULT_COMPANY_NAMEEXPAI_DEFAULT_COMPANY_DESCRIPTIONEXPAI_DEFAULT_COMPANY_SLUGEXPAI_DEFAULT_ADMIN_NAMEEXPAI_DEFAULT_ADMIN_EMAILEXPAI_DEFAULT_ADMIN_PASSWORDEXPAI_SUPER_ADMIN_USEREXPAI_SUPER_ADMIN_PASSWORDEXPAI_BOOTSTRAP_DEFAULT_ADMIN (true ou false)EXPAI_ACCESS_CONTROL_ENABLED (true ou false)EXPAI_API_BASE_URL (ex.: http://localhost:8000, usada na documentação Swagger/OpenAPI)Recomenda-se alterar a senha padrão logo no primeiro acesso.
Também é possível definir a identidade padrão do super admin para operações em modo sem autenticação:
EXPAI_SUPER_ADMIN_USER (padrão: superadmin)EXPAI_SUPER_ADMIN_PASSWORD (padrão: Admin@123)Ao definir:
EXPAI_ACCESS_CONTROL_ENABLED=falseo sistema entra em modo sem controle de usuários:
anônimo.Para ambiente local novo, a primeira autenticação pode ser feita com:
[email protected]Admin@123Observações:
BOOTSTRAP_DEFAULT_ADMIN=true).Foi adicionada uma interface web em app/static/ com visual moderno, neutro e suave, voltada para a operação da base de conhecimento.
http://127.0.0.1:8000/área, categoria, tag, busca).admin) para criar novos usuários e visualizar usuários da empresa.Arquivos da interface:
app/static/index.htmlapp/static/styles.cssapp/static/app.jsA interface foi organizada em sessões separadas com menu horizontal no topo. Cada sessão mostra apenas a funcionalidade solicitada pelo usuário:
Estrutura visual:
document.meta.json com published_version.docling.document_converter.DocumentConverter.Este projeto está licenciado sob a MIT License.
Content type
Image
Digest
sha256:ac8d50066…
Size
3.3 GB
Last updated
5 months ago
docker pull lcaloi/expertiseai