Este tutorial é uma contribuição da comunidade e não é suportado pela equipe do Open WebUI. Serve apenas como uma demonstração de como personalizar o Open WebUI para seu caso de uso específico. Quer contribuir? Confira o tutorial de contribuição.
[!WARNING]
Esta documentação foi criada com base na versão atual (0.5.11) e está sendo constantemente atualizada.
Banco de Dados SQLite Interno do Open-WebUI
Para o Open-WebUI, o banco de dados SQLite serve como a espinha dorsal para gerenciamento de usuários, histórico de conversas, armazenamento de arquivos e várias outras funcionalidades principais. Compreender essa estrutura é essencial para quem deseja contribuir ou manter o projeto de forma eficaz.
Localização do SQLite Interno
Você pode encontrar o banco de dados SQLite em root -> data -> webui.db
📁 Root (/)
├── 📁 data
│ ├── 📁 cache
│ ├── 📁 uploads
│ ├── 📁 vector_db
│ └── 📄 webui.db
├── 📄 dev.sh
├── 📁 open_webui
├── 📄 requirements.txt
├── 📄 start.sh
└── 📄 start_windows.bat
Copiar o Banco de Dados Localmente
Se você quiser copiar o banco de dados SQLite do Open-WebUI que está sendo executado no contêiner para sua máquina local, você pode usar:
docker cp open-webui:/app/backend/data/webui.db ./webui.db
Alternativamente, você pode acessar o banco de dados dentro do contêiner usando:
docker exec -it open-webui /bin/sh
Visão Geral das Tabelas
Aqui está uma lista completa de tabelas no banco de dados SQLite do Open-WebUI. As tabelas estão listadas em ordem alfabética e numeradas para conveniência.
| Nº | Nome da Tabela | Descrição |
|---|
| 01 | auth | Armazena as credenciais de autenticação e informações de login de usuários |
| 02 | channel | Gerencia os canais de conversa e suas configurações |
| 03 | channel_member | Acompanha a associação de usuários e permissões nos canais |
| 04 | chat | Armazena sessões de conversa e seus metadados |
| 05 | chatidtag | Mapeia relacionamentos entre conversas e as tags associadas |
| 06 | config | Mantém as configurações de sistema |
| 07 | document | Armazena documentos e seus metadados para gerenciamento de conhecimento |
| 08 | feedback | Captura feedback e avaliações dos usuários |
| 09 | file | Gerencia arquivos enviados e seus metadados |
| 10 | folder | Organiza arquivos e conteúdos em estruturas hierárquicas |
| 11 | function | Armazena funções personalizadas e suas configurações |
| 12 | group | Gerencia grupos de usuários e suas permissões |
| 13 | knowledge | Armazena entradas da base de conhecimento e informações relacionadas |
| 14 | memory | Mantém o histórico das conversas e memória contextual |
| 15 | message | Armazena mensagens de conversas individuais e seus conteúdos |
| 16 | message_reaction | Registra reações dos usuários (emojis/respostas) às mensagens |
| 17 | migrate_history | Acompanha a versão do esquema do banco de dados e registros de migração |
| 18 | model | Gerencia as configurações e configurações dos modelos de IA |
| 19 | prompt | Armazena templates e configurações para prompts de IA |
| 20 | tag | Gerencia tags/etiquetas para categorização de conteúdo |
| 21 | tool | Armazena configurações para ferramentas e integrações do sistema |
| 22 | user | Mantém perfis de usuários e informações de conta |
Nota: existem duas tabelas adicionais no banco de dados SQLite do Open-WebUI que não estão relacionadas à funcionalidade principal do Open-WebUI e foram excluídas:
- Tabela de Versão do Alembic
- Tabela de Histórico de Migração
Agora que temos todas as tabelas, vamos entender a estrutura de cada uma delas.
Tabela Auth
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| id | String | PRIMARY KEY | Identificador único |
| email | String | - | Email do usuário |
| password | Text | - | Senha criptografada |
| active | Boolean | - | Status da conta |
Coisas para saber sobre a tabela auth:
- Usa UUID como chave primária
- Relacionamento Um-para-Um com a tabela
users (id compartilhado)
Tabela Channel
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| id | Texto | CHAVE PRIMÁRIA | Identificador único (UUID) |
| user_id | Texto | - | Proprietário/criador do canal |
| type | Texto | pode ser nulo | Tipo de canal |
| name | Texto | - | Nome do canal |
| description | Texto | pode ser nulo | Descrição do canal |
| data | JSON | pode ser nulo | Armazenamento flexível de dados |
| meta | JSON | pode ser nulo | Metadados do canal |
| access_control | JSON | pode ser nulo | Configurações de permissões |
| created_at | BigInteger | - | Timestamp de criação (nanosegundos) |
| updated_at | BigInteger | - | Timestamp da última atualização |
Considerações sobre a tabela de autenticação:
- Utiliza UUID como chave primária
- Nomes de canais não diferencia maiúsculas de minúsculas (armazenados em minúsculas)
Tabela de Membros do Canal
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | TEXTO | NÃO NULO | Identificador único da associação ao canal |
| channel_id | TEXTO | NÃO NULO | Referência ao canal |
| user_id | TEXTO | NÃO NULO | Referência ao usuário |
| created_at | BIGINT | - | Timestamp de quando a associação foi criada |
Tabela de Chat
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | String | CHAVE PRIMÁRIA | Identificador único (UUID) |
| user_id | String | - | Proprietário do chat |
| title | Texto | - | Título do chat |
| chat | JSON | - | Conteúdo e histórico do chat |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
| share_id | Texto | ÚNICO, pode ser nulo | Identificador de compartilhamento |
| archived | Boolean | padrão=False | Status de arquivamento |
| pinned | Boolean | padrão=False, pode ser nulo | Status de fixação |
| meta | JSON | padrão_do_servidor="" | Metadados incluindo tags |
| folder_id | Texto | pode ser nulo | ID da pasta pai |
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | VARCHAR(255) | NÃO NULO | Identificador único |
| tag_name | VARCHAR(255) | NÃO NULO | Nome da tag |
| chat_id | VARCHAR(255) | NÃO NULO | Referência ao chat |
| user_id | VARCHAR(255) | NÃO NULO | Referência ao usuário |
| timestamp | INTEGER | NÃO NULO | Timestamp de criação |
Configuração
| Nome da Coluna | Tipo de Dados | Restrições | Padrão | Descrição |
|---|
| id | INTEGER | NÃO NULO | - | Identificador chave primária |
| data | JSON | NÃO NULO | - | Dados de configuração |
| version | INTEGER | NÃO NULO | - | Número da versão da configuração |
| created_at | DATETIME | NÃO NULO | TIMESTAMP_ATUAL | Timestamp de criação |
| updated_at | DATETIME | - | TIMESTAMP_ATUAL | Timestamp da última atualização |
Tabela de Feedback
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | Texto | CHAVE PRIMÁRIA | Identificador único (UUID) |
| user_id | Texto | - | Usuário que forneceu feedback |
| version | BigInteger | padrão=0 | Número da versão do feedback |
| type | Texto | - | Tipo de feedback |
| data | JSON | pode ser nulo | Dados de feedback incluindo avaliações |
| meta | JSON | pode ser nulo | Metadados (arena, chat_id, etc) |
| snapshot | JSON | pode ser nulo | Snapshot associado ao chat |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Tabela de Arquivo
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | String | PRIMARY KEY | Identificador único |
| user_id | String | - | Proprietário do arquivo |
| hash | Text | nullable | Hash/checksum do arquivo |
| filename | Text | - | Nome do arquivo |
| path | Text | nullable | Caminho no sistema de arquivos |
| data | JSON | nullable | Dados relacionados ao arquivo |
| meta | JSON | nullable | Metadados do arquivo |
| access_control | JSON | nullable | Configurações de permissão |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Formato esperado para o campo meta:
{
"name": string,
"content_type": string,
"size": integer,
}
Tabela de Pastas
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | Text | PRIMARY KEY | Identificador único (UUID) |
| parent_id | Text | nullable | ID da pasta pai para hierarquia |
| user_id | Text | - | Proprietário da pasta |
| name | Text | - | Nome da pasta |
| items | JSON | nullable | Conteúdo da pasta |
| meta | JSON | nullable | Metadados da pasta |
| is_expanded | Boolean | default=False | Estado de expansão na interface |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Coisas a saber sobre a tabela de pastas:
- Pastas podem ser aninhadas (referência a parent_id)
- Pastas raíz têm parent_id nulo
- Os nomes das pastas devem ser únicos dentro de um mesmo pai
Tabela de Funções
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | String | PRIMARY KEY | Identificador único |
| user_id | String | - | Proprietário da função |
| name | Text | - | Nome da função |
| type | Text | - | Tipo da função |
| content | Text | - | Conteúdo/código da função |
| meta | JSON | - | Metadados da função |
| valves | JSON | - | Configurações de controle da função |
| is_active | Boolean | - | Status ativo da função |
| is_global | Boolean | - | Indicador de disponibilidade global |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Coisas a saber sobre a tabela de funções:
type pode ser apenas: ["filter", "action"]
Tabela de Grupos
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | Text | PRIMARY KEY, UNIQUE | Identificador único (UUID) |
| user_id | Text | - | Proprietário/criador do grupo |
| name | Text | - | Nome do grupo |
| description | Text | - | Descrição do grupo |
| data | JSON | nullable | Dados adicionais do grupo |
| meta | JSON | nullable | Metadados do grupo |
| permissions | JSON | nullable | Configuração de permissão |
| user_ids | JSON | nullable | Lista de IDs dos usuários membros |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Tabela de Conhecimento
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | Texto | PRIMARY KEY, UNIQUE | Identificador único (UUID) |
| user_id | Texto | - | Proprietário da base de conhecimento |
| name | Texto | - | Nome da base de conhecimento |
| description | Texto | - | Descrição da base de conhecimento |
| data | JSON | nullable | Conteúdo da base de conhecimento |
| meta | JSON | nullable | Metadados adicionais |
| access_control | JSON | nullable | Regras de controle de acesso |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Estrutura esperada para os campos access_control:
{
"read": {
"group_ids": ["group_id1", "group_id2"],
"user_ids": ["user_id1", "user_id2"]
},
"write": {
"group_ids": ["group_id1", "group_id2"],
"user_ids": ["user_id1", "user_id2"]
}
}
Tabela de Memória
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| id | String | PRIMARY KEY | Identificador único (UUID) |
| user_id | String | - | Proprietário da memória |
| content | Texto | - | Conteúdo da memória |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Tabela de Mensagem
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| id | Texto | PRIMARY KEY | Identificador único (UUID) |
| user_id | Texto | - | Autor da mensagem |
| channel_id | Texto | nullable | Canal associado |
| parent_id | Texto | nullable | Mensagem pai para threads |
| content | Texto | - | Conteúdo da mensagem |
| data | JSON | nullable | Dados adicionais da mensagem |
| meta | JSON | nullable | Metadados da mensagem |
| created_at | BigInteger | - | Timestamp de criação (nanosegundos) |
| updated_at | BigInteger | - | Timestamp da última atualização (nanosegundos) |
Tabela de Reações a Mensagens
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| id | Texto | PRIMARY KEY | Identificador único (UUID) |
| user_id | Texto | - | Usuário que reagiu |
| message_id | Texto | - | Mensagem associada |
| name | Texto | - | Nome/reação emoji |
| created_at | BigInteger | - | Timestamp da reação |
Tabela de Modelos
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| id | Texto | PRIMARY KEY | Identificador do modelo |
| user_id | Texto | - | Proprietário do modelo |
| base_model_id | Texto | nullable | Referência ao modelo pai |
| name | Texto | - | Nome de exibição |
| params | JSON | - | Parâmetros do modelo |
| meta | JSON | - | Metadados do modelo |
| access_control | JSON | nullable | Permissões de acesso |
| is_active | Boolean | default=True | Status ativo |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Tabela de Prompt
| Nome da Coluna | Tipo de Dado | Restrições | Descrição |
|---|
| command | String | PRIMARY KEY | Identificador único do comando |
| user_id | String | - | Proprietário do prompt |
| title | Texto | - | Título do prompt |
| content | Texto | - | Conteúdo/modelo do prompt |
| timestamp | BigInteger | - | Timestamp da última atualização |
| access_control | JSON | nullable | Permissões de acesso |
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | String | PK (composto) | Identificador normalizado de tag |
| name | String | - | Nome de exibição |
| user_id | String | PK (composto) | Proprietário da tag |
| meta | JSON | nullable | Metadados da tag |
Pontos para saber sobre a tabela de tag:
- Chave primária é composta (id, user_id)
Tabela de Ferramenta
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | String | CHAVE PRIMÁRIA | Identificador único |
| user_id | String | - | Proprietário da ferramenta |
| name | Text | - | Nome da ferramenta |
| content | Text | - | Conteúdo/código da ferramenta |
| specs | JSON | - | Especificações da ferramenta |
| meta | JSON | - | Metadados da ferramenta |
| valves | JSON | - | Configurações de controle da ferramenta |
| access_control | JSON | nullable | Permissões de acesso |
| created_at | BigInteger | - | Timestamp de criação |
| updated_at | BigInteger | - | Timestamp da última atualização |
Tabela de Usuário
| Nome da Coluna | Tipo de Dados | Restrições | Descrição |
|---|
| id | String | CHAVE PRIMÁRIA | Identificador único |
| name | String | - | Nome do usuário |
| email | String | - | Email do usuário |
| role | String | - | Função do usuário |
| profile_image_url | Text | - | Caminho da imagem de perfil |
| last_active_at | BigInteger | - | Timestamp da última atividade |
| updated_at | BigInteger | - | Timestamp da última atualização |
| created_at | BigInteger | - | Timestamp de criação |
| api_key | String | ÚNICO, nullable | Chave de autenticação API |
| settings | JSON | nullable | Preferências do usuário |
| info | JSON | nullable | Informações adicionais do usuário |
| oauth_sub | Text | ÚNICO | Identificador de assunto OAuth |
Diagrama de Relacionamento de Entidades
Para ajudar a visualizar o relacionamento entre as tabelas, consulte o Diagrama de Relacionamento de Entidades (ERD) abaixo, gerado com Mermaid.