TolkyFeatures é o catálogo de funcionalidades da plataforma Tolky. O assistente usa esse catálogo para identificar, a partir de uma pergunta em linguagem natural, qual funcionalidade é mais relevante para o contexto do usuário.

Antes de usar qualquer endpoint, execute as 4 migrações SQL no Supabase SQL Editor:

  1. Criação da tabela tolky_features
  2. Habilitação da extensão pgvector
  3. Criação do índice de embedding para busca semântica
  4. Configuração das policies de acesso (RLS) para tolky_features

Os endpoints retornam 500 enquanto essas migrações não estiverem aplicadas.

Esquema do banco

Tabela tolky_features

ColunaTipoObrigatórioDescrição
iduuidsimIdentificador único gerado automaticamente
titletextsimNome curto da feature
descriptiontextnãoResumo em uma linha
long_descriptiontextnãoDescrição completa usada para embedding
moduletextnãoAgrupamento lógico (ex.: "leads")
is_activebooleansimtrue por padrão; false após delete
dataset_iduuidnãoFK para datasets — dataset de embedding
chunk_iduuidnãoFK para chunks — bloco de conteúdo indexado
created_attimestamptzsimData de criação
updated_attimestamptzsimData da última atualização

Relacionamentos com datasets e chunks

Ao criar uma feature, o sistema provisiona automaticamente:

  • Um dataset dedicado (datasets) para isolar o conteúdo da feature do restante da base de conhecimento.
  • Um chunk (chunks) com o texto combinado de title, description e long_description, que é vetorizado e indexado para busca semântica.

Ambos são identificados via dataset_id e chunk_id na tabela tolky_features. Esses registros são gerenciados internamente — não devem ser manipulados diretamente via API de datasets ou chunks.

Fluxo de dados

flowchart TD
  subgraph Criar
    A[POST /create] --> B[Inserir tolky_features]
    B --> C[Criar dataset dedicado]
    C --> D[Criar chunk com título + descrições]
    D --> E[Gerar embedding e indexar]
  end

  subgraph Atualizar
    F[PUT /update] --> G{Campos de texto\nalterados?}
    G -- sim --> H[Atualizar tolky_features]
    H --> I[Re-gerar embedding do chunk]
    G -- não --> J[Atualizar apenas metadados]
  end

  subgraph Deletar
    K[DELETE /delete] --> L[is_active = false]
    L --> M[Remover chunk do índice semântico]
  end

Endpoints disponíveis

Busca semântica

A busca é feita em dois passos: geração do embedding da consulta e pesquisa por similaridade no índice de features.

async function searchFeatures(query, tolkyAdminToken) {
  const embeddingResponse = await fetch(`${BASE_URL}/api/v4/embeddings/generate`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${tolkyAdminToken}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ text: query }),
  });

  const { embedding } = await embeddingResponse.json();

  const searchResponse = await fetch(`${BASE_URL}/api/v4/tolkyFeatures/search`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${tolkyAdminToken}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ embedding, topK: 5 }),
  });

  return searchResponse.json();
}

Comportamento de re-embedding

Ao atualizar uma feature, o sistema re-gera o embedding apenas quando campos de texto são alterados:

Campo alteradoRe-embedding disparado
titlesim
descriptionsim
longDescriptionsim
modulenão
isActivenão

O re-embedding ocorre de forma síncrona. A atualização só é confirmada após o novo vetor ser indexado com sucesso.

Falhas na criação

A criação de uma feature segue um modelo de duas fases:

  1. Fase 1 — registro: o registro em tolky_features é inserido com dataset_id e chunk_id como null.
  2. Fase 2 — indexação: o dataset e o chunk são criados e o embedding é gerado. Em caso de sucesso, dataset_id e chunk_id são preenchidos.

Se a Fase 2 falhar, o registro em tolky_features permanece com dataset_id e chunk_id como null e a feature não aparece na busca semântica. Nesses casos, exclua a feature e tente criar novamente. A feature sem índice não afeta o funcionamento das demais.

Re-ativação

Ao deletar uma feature, o dataset e o chunk associados são removidos do índice semântico, mas os registros em datasets e chunks não são apagados automaticamente.

Reativar uma feature via PUT /update com isActive: true não restaura o dataset nem o chunk no índice semântico. A feature retorna como ativa na listagem, mas continua ausente da busca semântica.

Para restaurar a indexação manualmente, execute no Supabase SQL Editor:

UPDATE tolky_features
SET is_active = true
WHERE id = '<feature-id>';

-- Re-indexar o chunk associado
SELECT reindex_tolky_feature_chunk('<feature-id>');

Se a função reindex_tolky_feature_chunk não estiver disponível, exclua e recrie a feature via API.