Skip to content

Base de Conhecimento

A Base de Conhecimento permite ao seu agente acessar documentos, tabelas e sites internos por meio de RAG (Retrieval-Augmented Generation). Em vez de confiar apenas em prompts, o agente faz buscas semânticas em vetores que representam seus conteúdos, recuperando trechos relevantes e inserindo-os no contexto da conversa.

O que é RAG?
RAG combina recuperação de documentos (via similaridade semântica) com geração de texto. Você armazena seus materiais como vetores; ao receber uma pergunta, o agente busca os vetores mais semelhantes e, com esses trechos, gera respostas mais precisas e fundamentadas.
🔗 Saiba mais sobre RAG (Wikipedia)

Exemplos de Uso

  • Manuais e políticas internas: PDFs, DOCX, Markdown.
  • FAQs e bases de suporte: CSV ou JSON exportados de sistemas legados.
  • Documentação online: crawler de sites para intranet ou portais.
  • Dashboards de métricas: planilhas com indicadores que o agente pode consultar.

Modelos de Embedding Disponíveis

A escolha do modelo de embedding impacta diretamente precisão, custo e tempo de vetorização:

  • Modelos Grandes

    text-embedding-3-large

    • Prós: captura nuances semânticas complexas, ideal para textos longos ou altamente técnicos.
    • Contras: custo elevado (R$1.20/1M tokens) e vetorização mais lenta.
  • Modelos Médios

    bge-en-icl

    • Prós: bom equilíbrio entre precisão e custo (R$0.185/1M tokens).
    • Contras: leve perda de acurácia em casos extremamente específicos.
  • Modelos Pequenos

    text-embedding-3-small

    • Prós: baixo custo (R$0.185/1M tokens) e vetorização rápida, ideal para volumes muito grandes.
    • Contras: menor fidelidade em similaridade semântica detalhada.
ModeloCustoUso recomendado
text-embedding-3-largeR$1.20 / 1M tok.Documentos longos, alta sensibilidade semântica
bge-en-iclR$0.185 / 1M tok.Aplicações gerais, bom trade-off custo/precisão
text-embedding-3-smallR$0.185 / 1M tok.Volumes enormes, custo mínimo

Atenção: trocar de modelo recria todos os vetores da tabela, gerando custos adicionais. Confira o consumo no Dashboard após a sincronização.

Criando uma Tabela

Por que “tabela” e não “documento”?

Cada tabela é um conjunto de linhas (ou “chunks”) vetorizados — pense nela como um CSV interno:

  • Flexibilidade: você pode mesclar vários arquivos, planilhas e páginas numa única fonte.
  • Granularidade: cada linha é um fragmento de texto, evitando que o agente traga trechos irrelevantes ou tenha que ler um documento inteiro para encontrar uma resposta.
  • Edição: edite, remova ou adicione linhas individuais sem reimportar tudo.
  • Visualização: A representação por tabela permite entender de maneira intuitiva a forma como os dados serão consultados e utilizados pelo agente.

Clique em + Criar Tabela (🔝 canto superior direito) e escolha:

Tabela Vazia

  • Nome: identificador único (snake_case).
  • Descrição: orienta o agente quando decidir usar esta tabela.
  • Modelo de Embedding: selecione um dos modelos acima.
  • Salvar: a tabela aparece sem conteúdo; prossiga para importar ou inserir manualmente.

Carregar Arquivo

  • Formatos: PDF, DOCX, TXT, MD, JSON, CSV.
  • Defina Nome, Descrição e Modelo.
  • Faça upload ou arraste o arquivo.
  • Split by page (aplica-se apenas a PDF e DOCX): divide o documento por página em chunks de até 20 000 caracteres, com 100 caracteres de sobreposição por padrão.
  • Salvar: popula a tabela com esses chunks.

Importar Website

  • URL: endereço inicial.
  • Seletores de Conteúdo: ex. body, article, #main. Extrai apenas o texto dentro desse seletor.
  • Profundidade: quantos níveis de links internos seguir (ex: 2 = página inicial + links dessas páginas).
  • Máximo de Links: limite de URLs por página (ex: 50) para evitar explorações infinitas.
  • Defina Nome, Descrição, Modelo e Salvar.

Importação Demorada

Bulk upload e web-scraping podem levar vários minutos, pois cada arquivo ou página é dividido, vetorado e enviado para armazenamento.

⚠️ Aviso
Se o site mudar, o conteúdo importado não se atualiza automaticamente. Reimporte e sincronize para refletir alterações.

Visualizando e Editando

Clique no nome da tabela para abrir a interface de gerenciamento:

Visão Geral

  • Título da Tabela e ícone ✏️ para editar Nome, Descrição e Modelo.
  • Contador de documentos (linhas) e modelo em uso.

Barra de Ações

  • 🔁 Restaurar: desfaz alterações locais e retorna ao último estado sincronizado.
  • 🔍 Consultar: abre o modal de busca semântica (ver seção 5).
  • ⬇️ Download: exporta toda a tabela em CSV.
  • Importar: adiciona mais arquivos ou websites sem sair da página.
  • 🔄 Sincronizar: reprocessa todos os fragments e atualiza vetores.

Linhas (Chunks)

  • Cada linha exibe um fragmento de texto (+ metadados opcionais).
  • 🗑️ Remover: exclui fragments irrelevantes.
  • ✏️ Editar: ajuste manual do texto ou identificação.
  • + Linha: crie manualmente novos fragments.

Testando Busca Semântica (Prototipagem)

  1. Clique em Consultar.
  2. Insira sua Consulta (pergunta ou termo).
  3. Defina Número de Resultados (N).
  4. Clique em Consultar e examine:
    • Trechos retornados com distância semântica (quanto menor, mais próximo).
    • Contexto: veja se o agente terá informação suficiente.

💡 Dicas sobre Chunks e N

  • Tamanho Máximo do Chunk: ⚠️ Não ultrapasse 20 000 caracteres — modelos de embedding têm limite de tokens e falham ao vetorar trechos maiores.
  • Chunks Menores: reduzem consumo de tokens, mas podem faltar contexto.
  • Chunks Maiores: entregam mais contexto, mas custam mais tokens.
  • N: usar valor baixo (1–3) economiza tokens; usar valor alto melhora cobertura mas aumenta custo.

Exemplo Prático: FAQ “Vibe Criativa”

Para ilustrar todo o fluxo, use este arquivo CSV de FAQ (empresa fictícia Vibe Criativa):

🔗 Baixe o CSV: faq_vibe_criativa.csv

Passo a passo

  1. Importe o CSV

    • Em Base de Conhecimento+ Criar TabelaCarregar Arquivo.
    • Nome: faq_vibe_criativa
    • Descrição: “Perguntas frequentes sobre serviços da Empresa Vibe Criativa”
    • Modelo: text-embedding-3-large
    • Faça upload de vibe_criativa_faq.csv e clique em Salvar.
  2. Prototipe uma Consulta

    • Clique em Consultar, insira contato, defina 3 resultados e confirme.
    • Verifique se os trechos retornados correspondem às informações de contato no FAQ.

Dica: ao usar text-embedding-3-large, você terá respostas mais precisas em perguntas de negócio, mas vetorização e custo por token serão maiores. Ajuste conforme seu volume e orçamento.

Consulta via API

Você pode incorporar essa consulta em qualquer fluxo do seu sistema — automações em CRMs, bots de Slack, triggers por webhook, rotinas agendadas, integrações com dashboards, etc. Basta chamar o endpoint sempre que precisar de dados da sua base de conhecimento.

Exemplo de Uso

Imagine uma rotina agendada que envia um email com as respostas para as perguntas mais frequentes:

  1. Rotina é executada
  2. Backend chama POST /v1/knowledge/faq_vibe_criativa/query para cada pergunta
  3. Email é enviado com as respostas do JSON retornado
typescript
// Consulta semântica via API
async function queryKB(
  tableName: string,
  query: string,
  n = 3
): Promise<any> {
  const res = await fetch(
    `https://api.sippulse.ai/v1/knowledge/${tableName}/query`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'api-key': process.env.SIPPULSE_API_KEY!
      },
      body: JSON.stringify({ query, n })
    }
  );
  if (!res.ok) throw new Error(`Erro ${res.status}`);
  return res.json();
}

// Uso de exemplo
(async () => {
  const tableName = 'faq_vibe_criativa';
  const result = await queryKB(tableName, 'contato', 3);
  console.log(result);
})();
python
import os
import requests

def query_kb(table_name: str, query: str, n: int = 3) -> dict:
    """
    Consulta semântica via API.
    - table_name: nome da tabela de conhecimento
    - query: texto de busca
    - n: número de resultados
    """
    url = f"https://api.sippulse.ai/v1/knowledge/{table_name}/query"
    resp = requests.post(
        url,
        headers={
            'Content-Type': 'application/json',
            'api-key': os.getenv('SIPPULSE_API_KEY')
        },
        json={'query': query, 'n': n}
    )
    resp.raise_for_status()
    return resp.json()

if __name__ == '__main__':
    table_name = 'faq_vibe_criativa'
    result = query_kb(table_name, 'contato', 3)
    print(result)

Exemplo de Resposta

json
// Resposta esperada (simplificada)
[
    {
        "content": "{\"question\":\"A VibeCriativa tem um canal de atendimento via WhatsApp?\",\"answer\":\"Sim, nosso WhatsApp é (11) 98765-4321, disponível no horário comercial.\"}",
        "distance": 1.1357711969228341,
    },
    {
        "content": "{\"question\":\"A VibeCriativa tem cases de sucesso disponíveis?\",\"answer\":\"Sim, temos cases de sucesso disponíveis no site e podemos enviar exemplos por e-mail sob demanda.\"}",
        "distance": 1.200524422602051,
    },
    {
        "content": "{\"question\":\"Como posso solicitar um orçamento personalizado?\",\"answer\":\"Você pode solicitar um orçamento através do formulário em nosso site ou enviando um e-mail para orcamento@vibecriativa.com.\"}",
        "distance": 1.2048347495936975,
    }
]

Controle de Custos

  • Dashboard: monitore consumo de tokens e gastos por importação/sincronização.
  • Auto-Sync: desative para evitar vetorização a cada pequeno ajuste.

Boas Práticas

  • Chunk size: 20 000 caracteres (máx.) com 100 de overlap costuma funcionar bem.
  • Descrições claras: ajudam o agente a filtrar tabelas corretas.
  • Sincronização consciente: use Auto-Sync em bases de baixa volatilidade.
  • Validação periódica: teste consultas-chave antes de liberar.

Perguntas Frequentes

Posso agrupar vários arquivos em uma única tabela?

Sim — importe quantos quiser e sincronize tudo de uma vez.


Como saber se um chunk está muito grande?

Se o trecho não couber no contexto do LLM, reduza o tamanho em caracteres.


O que acontece se um site mudar?

O conteúdo importado não se atualiza sozinho: reimporte e sincronize.


Qual o impacto do Auto-Sync?

Cada edição dispara vetorização imediata, gerando custos extras.