Empresas acumulam políticas, manuais, normas e procedimentos em diversos formatos. Um assistente interno baseado em LLM pode responder dúvidas de colaboradores com agilidade, mas exige cuidados específicos: quem pode acessar qual conteúdo? Como evitar o vazamento de dados pessoais? Como registrar as perguntas para melhorar a base sem violar a LGPD? Este artigo apresenta uma abordagem prática para esses três pontos.
Arquitetura básica
O assistente combina uma base de documentos, um mecanismo de busca, um modelo de linguagem e uma camada de registro. O fluxo típico é:
- O colaborador autentica e faz uma pergunta.
- O sistema identifica a área do colaborador (ex.: RH, financeiro, engenharia).
- Filtra os documentos que aquela área pode acessar.
- Recupera os trechos mais relevantes entre os documentos permitidos.
- Monta um prompt com o contexto filtrado e envia ao LLM.
- Retorna a resposta e registra a interação de forma anonimizada.
O código a seguir ilustra a chamada ao modelo usando o SDK da OpenAI, com as credenciais vindo de variáveis de ambiente fornecidas pela sua equipe de acesso.
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ["BASE_URL"],
api_key=os.environ["API_KEY"],
)
def responder_pergunta(pergunta, area_usuario, documentos):
# Filtra documentos que o usuário pode acessar
docs_permitidos = [doc for doc in documentos if area_usuario in doc["areas_permitidas"]]
contexto = "\n\n".join(doc["texto"] for doc in docs_permitidos[:5])
resposta = client.chat.completions.create(
model="sua-equipe-indica-o-modelo",
messages=[
{"role": "system", "content": "Você é um assistente interno. Use apenas o contexto fornecido."},
{"role": "user", "content": f"Contexto:\n{contexto}\n\nPergunta: {pergunta}"}
],
temperature=0.2,
)
return resposta.choices[0].message.content
Controle de acesso por área
Autenticação não é autorização. Saber quem é o colaborador não significa que ele pode ver todos os documentos. Cada documento deve ter metadados indicando as áreas ou perfis autorizados. Por exemplo:
{
"id": "doc-123",
"titulo": "Política de reembolso",
"areas_permitidas": ["financeiro", "rh"],
"texto": "..."
}
Na etapa de recuperação, o filtro por área deve ser determinístico, feito antes de enviar qualquer conteúdo ao modelo. O LLM não deve decidir o que o usuário pode ou não ver; isso é responsabilidade da aplicação. Se a base for grande, vale usar índices separados por área ou um banco vetorial com filtro de metadados nativo. O importante é que o contexto enviado ao modelo contenha apenas documentos cujo acesso é permitido para aquela área.
Minimização de dados e LGPD
O princípio da necessidade é central na LGPD: trate apenas os dados pessoais indispensáveis para a finalidade. Em um assistente interno, isso significa:
- Não enviar ao LLM trechos com CPF, e-mail, telefone ou outros identificadores, a menos que sejam estritamente necessários para a resposta e haja base legal.
- Remover ou mascarar esses dados antes da indexação, se possível, e também antes de montar o prompt.
- Aplicar a mesma sanitização nos logs.
Uma função simples de sanitização com expressões regulares pode reduzir o risco:
import re
def sanitizar(texto):
texto = re.sub(r"\b\d{3}\.\d{3}\.\d{3}-\d{2}\b", "[CPF_REMOVIDO]", texto)
texto = re.sub(r"\b[\w\.-]+@[\w\.-]+\.\w{2,}\b", "[EMAIL_REMOVIDO]", texto)
texto = re.sub(r"\(?\d{2}\)?\s?\d{4,5}-?\d{4}", "[TELEFONE_REMOVIDO]", texto)
return texto
Lembre-se de que a sanitização por regex é uma camada inicial; dados estruturados exigem regras mais robustas. O objetivo é minimizar a exposição de dados pessoais tanto no fluxo de consulta quanto no armazenamento.
Registro de perguntas para melhorar a base
Registrar as perguntas e respostas é valioso para identificar lacunas na documentação, termos confusos e necessidades recorrentes. Mas esse registro também deve seguir a LGPD.
Algumas práticas recomendadas:
- Armazene a pergunta já sanitizada, sem dados pessoais.
- Guarde apenas a área ou departamento do usuário, não o nome completo ou e-mail.
- Use um hash do identificador do usuário se for necessário rastrear a interação, em vez do ID original.
- Defina uma finalidade clara para o log (ex.: melhorar a base de conhecimento) e um prazo de retenção.
- Restrinja o acesso aos logs a administradores autorizados.
Exemplo de estrutura de registro:
import hashlib
def registrar_log(pergunta, resposta, area_usuario, usuario_id):
registro = {
"pergunta": sanitizar(pergunta),
"resposta": resposta,
"area": area_usuario,
"usuario_hash": hashlib.sha256(usuario_id.encode()).hexdigest()[:16],
"timestamp": "2026-10-27T12:00:00Z" # em produção, use datetime.utcnow()
}
# salvar em banco de dados com acesso restrito e política de retenção
# ...
Armadilhas comuns
- Enviar documento inteiro quando um trecho basta: aumenta o risco de expor dados desnecessários e eleva o custo de tokens.
- Registrar logs com dados pessoais: perguntas podem conter nomes, CPFs ou e-mails; sanitize antes de gravar.
- Um único índice sem separação por área: um colaborador pode receber resposta com conteúdo de outra área, mesmo sem intenção.
- Não revisar permissões e logs periodicamente: áreas mudam, pessoas trocam de setor, e a base evolui.
Conclusão
Um assistente interno B2B para políticas e documentos é viável e agrega eficiência, desde que o desenho respeite controle de acesso por área, minimização de dados e registro responsável. As decisões de autorização devem ficar na aplicação, não no modelo. A sanitização e a anonimização precisam ser aplicadas antes do envio ao LLM e antes do armazenamento dos logs. Assim, a empresa melhora a base de conhecimento sem abrir mão da conformidade com a LGPD.
A TokenRecarga fornece acesso a modelos de IA para empresas brasileiras, com atendimento e faturamento no Brasil. Quer entender como a sua empresa pode usar modelos de IA com atendimento e faturamento no Brasil? Fale com a gente — a equipe da TokenRecarga responde em português.