Expertise · Bases de conhecimento e pesquisa semântica
Construímos o corpus a partir do qual um assistente tem permissão para responder, com regras sobre o que entra, como se divide, como se pesquisa e o que acontece quando a fonte muda.
Um assistente que responde aos clientes é exatamente tão bom quanto o corpus de onde lê. Nós tratamos do corpus: extração de documentos e do site, divisão em fragmentos, indexação, recuperação, o gate de aprovação humana e a atualização. Inclui a resposta à pergunta de quando NÃO vale a pena a pesquisa semântica.
Já construídoExistem implementações próprias para cada etapa, mas o seu estado difere e deve ser dito de forma direta. O que corre com vetores próprios: a memória de um quadro interno usado diariamente, com coluna `vector(1536)`, índice `ivfflat` em distância de cosseno, limiar de similaridade 0,35 e um loop que reindexa a cada 30 minutos apenas o que mudou. O que corre com vetores no fornecedor: a base de conhecimento dos agentes vocais, sincronizada para o motor de recuperação do fornecedor com fragmentos de 500 e sobreposição de 100. O que corre em produção **sem** vetores: a base de conhecimento da plataforma de assistentes de texto — extração, divisão, configuração por assistente e recuperação híbrida estão escritas e funcionam, mas o caminho de indexação escreve a coluna de vetor com `null`, portanto a pontuação híbrida degrada para lexical, e o próprio código diz isso através da etiqueta `keyword-only`. O que está escrito e ainda não está ligado em produção: o pipeline próprio em `pgvector` da plataforma vocal, cuja migração traz no cabeçalho a menção “LOCAL ONLY — do not push to prod”. Um serviço vende-se com este mapa em cima da mesa, não sem ele.
Um assistente que fala com clientes não “sabe” nada. A cada pergunta, alguém pesquisa antecipadamente alguns fragmentos de texto e coloca-os à sua frente, e ele formula a resposta a partir deles. A qualidade da resposta decide-se quase integralmente nessa etapa de pesquisa, não na escolha do modelo. Por isso, este serviço é sobre corpus e sobre recuperação, não sobre modelo.
O trabalho tem quatro partes que se estragam independentemente umas das outras. A extração: de que ficheiros e de que páginas retiramos texto utilizável, e o que fazemos quando não conseguimos. A divisão: quão grandes são os fragmentos, quanto se sobrepõem, onde se corta uma frase. A recuperação: como se escolhem os fragmentos para uma pergunta específica, quantos, e com que critério. A atualização: o que acontece quando o documento-fonte se modifica. Um sistema pode ser impecável em três delas e inútil por causa da quarta.
Há uma etapa adicional, que muitos saltam e que muda completamente o resultado: o gate de aprovação. Um corpus que cresce sozinho, a partir de conversas, passa rapidamente a conter respostas que ninguém validou. O ciclo que construímos funciona ao contrário: quando o agente diz “não tenho esta informação”, a pergunta é registada com o estado “em espera”, uma pessoa recebe uma notificação e responde, e a sua resposta passa para o estado “aprovado” e só então entra no corpus. O conhecimento cresce a partir de lacunas reais, com uma pessoa na cadeia.
E a parte impopular: a pesquisa semântica nem sempre é a escolha correta. Para uma plataforma pública própria, recusámo-la deliberadamente. O corpus é o próprio texto da plataforma, dividido em passagens curtas que trazem cada uma a página de onde vêm, pontuadas por sobreposição de palavras. Sem vetores, sem armazenamento vetorial, sem um pedido adicional na rede — e, mais importante, sem nenhuma fonte de fora do repositório. O assistente só pode repetir o que já está escrito no site, e qualquer resposta é verificada numa página escrita por uma pessoa. Este é todo o mecanismo anti-invenção.