Por que resumir transcrições em operações B2B?
Operações B2B geram um volume alto de interações por telefone e chat: atendimento a clientes corporativos, negociação de contratos, suporte técnico especializado, reuniões de implantação. Sem um registro estruturado, informações se perdem entre equipes, prazos são esquecidos e o histórico do cliente fica fragmentado. O resumo automático com LLMs resolve parte do problema: transforma conversas longas em um documento curto e acionável, com itens de ação, responsáveis e próximos passos. Mas para funcionar em produção, é preciso definir o que extrair, proteger dados pessoais e medir se o resumo realmente ajuda.
O que extrair de uma transcrição
O que é útil depende do contexto, mas em atendimento B2B alguns campos são quase sempre necessários:
- Resumo executivo: até 200 palavras com o objetivo da chamada, decisões tomadas e contexto.
- Itens de ação: lista de tarefas com descrição, responsável e prazo acordado.
- Compromissos e follow-ups: quem ficou de retornar, quando e sobre o quê.
- Sentimento do cliente: positivo, neutro ou negativo, para priorização.
- Pontos de atrito: reclamações sobre produto, prazo, atendimento ou contrato.
- Termos técnicos ou detalhes de configuração: informações que precisam ser registradas com precisão.
- Riscos legais ou contratuais: menções a multas, cancelamento, SLA ou confidencialidade.
Estruture a saída como JSON para facilitar a integração com CRMs, ERPs ou sistemas de tickets. Um schema típico poderia ser:
{'resumo': '...', 'itens_acao': [{'descricao': '...', 'responsavel': '...', 'prazo': '...'}], 'sentimento': 'neutro', 'topicos_sensiveis': ['multa', 'rescisão']}
Como estruturar o prompt e o schema
Use function calling (ou tools) para forçar o modelo a retornar um objeto estruturado, reduzindo a necessidade de pós-processamento. O exemplo abaixo usa o SDK da OpenAI, apontando para o endpoint fornecido pela sua equipe de acesso por variáveis de ambiente.
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ['BASE_URL'],
api_key=os.environ['API_KEY'],
)
def resumir_transcricao(transcricao: str):
resposta = client.chat.completions.create(
model='modelo-indicado-pela-equipe',
messages=[
{'role': 'system', 'content': 'Você resume transcrições de atendimento B2B. Retorne JSON válido com resumo, itens de ação, sentimento e tópicos sensíveis.'},
{'role': 'user', 'content': f'Transcrição:\n{transcricao}'}
],
tools=[{
'type': 'function',
'function': {
'name': 'gerar_resumo',
'description': 'Gera resumo estruturado da transcrição',
'parameters': {
'type': 'object',
'properties': {
'resumo': {'type': 'string', 'description': 'Resumo em até 200 palavras'},
'itens_acao': {'type': 'array', 'items': {'type': 'object', 'properties': {'descricao': {'type': 'string'}, 'responsavel': {'type': 'string'}, 'prazo': {'type': 'string'}}}},
'sentimento': {'type': 'string', 'enum': ['positivo', 'neutro', 'negativo']},
'topicos_sensiveis': {'type': 'array', 'items': {'type': 'string'}}
},
'required': ['resumo', 'itens_acao']
}
}
}],
tool_choice='auto'
)
# Extrair argumentos da tool call e validar
O prompt deve incluir instruções para não inventar informações ausentes e marcar incertezas como 'não informado'. Para transcrições longas, divida em blocos com sobreposição (ex.: 4.000 tokens por bloco, 200 tokens de sobreposição) e combine os resumos parciais.
Tratamento de dados pessoais (LGPD)
Transcrições de atendimento contêm dados pessoais: nomes, CPF, e-mails, telefones, dados da empresa, às vezes dados sensíveis como saúde ou informações financeiras. A LGPD exige base legal, finalidade específica e medidas de segurança. Antes de enviar qualquer texto para um LLM, considere:
- Anonimização ou pseudonimização: substitua identificadores diretos por placeholders antes da chamada à API. A anonimização deve ocorrer no seu ambiente, não no provedor.
- Minimização: remova trechos irrelevantes (conversa social, informações redundantes) antes de processar.
- Controle de acesso: apenas usuários autorizados podem visualizar transcrições e resumos; registre logs.
- Retenção: defina por quanto tempo transcrições e resumos ficam armazenados e exclua após o período.
- Contrato com o provedor: verifique se existe acordo de processamento de dados (DPA) e se o provedor não usa seus dados para treinar modelos.
Um exemplo simples de anonimização com expressões regulares (não exaustivo; em produção use NER dedicado):
import re
def anonimizar(texto: str) -> str:
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+\b', '[EMAIL_REMOVIDO]', texto)
texto = re.sub(r'\b(?:\+?55\s?)?(?:\(?\d{2}\)?)\s?\d{4,5}-?\d{4}\b', '[TELEFONE_REMOVIDO]', texto)
return texto
Atenção: regex pode falhar com formatos incomuns e não cobre nomes próprios. Combine com modelos de reconhecimento de entidades (NER) locais ou serviços de anonimização antes do envio.
Como medir se o resumo é útil
Não basta gerar resumo bonito; é preciso avaliar se ele melhora a operação. Defina métricas objetivas e subjetivas:
- Cobertura: porcentagem de pontos-chave da transcrição presentes no resumo. Meça manualmente em uma amostra ou com outro LLM como juiz.
- Consistência factual: o resumo contém apenas fatos mencionados? Avalie com verificação humana ou modelos de inferência textual (NLI). Taxa de alucinação deve ser próxima de zero.
- Acionabilidade: itens de ação têm descrição clara, responsável e prazo? Porcentagem de itens sem responsável é um alerta.
- Tempo economizado: compare o tempo que um analista leva para escrever o resumo manualmente versus revisar o resumo automático. Em um piloto hipotético, se a revisão leva 30% do tempo da redação manual, o ganho é relevante (exemplo ilustrativo).
- Satisfação do usuário: pesquise a equipe para saber se os resumos reduzem retrabalho e melhoram a comunicação.
Monte um conjunto de teste com 50 a 100 transcrições reais (anonimizadas) e compare o resumo automático com um resumo de referência. Itere o prompt e o schema a cada rodada.
Armadilhas comuns
- Transcrições com erros de reconhecimento de fala: ruído pode confundir o modelo; use pré-processamento simples (correção de termos, remoção de repetições).
- Falta de contexto: se a chamada faz referência a e-mails ou tickets anteriores, inclua esses dados no input como contexto adicional.
- Idiomas mistos: termos técnicos em inglês podem aparecer; instrua o modelo a manter siglas e termos técnicos no idioma original.
- Excesso de formalismo: resumos muito rígidos podem perder nuances; ajuste o tom conforme o público.
Conclusão
Resumir transcrições de atendimento B2B com LLMs é viável e traz ganhos operacionais claros, desde que você defina uma estrutura de extração, proteja dados pessoais conforme a LGPD e acompanhe métricas de utilidade. Comece com um piloto pequeno, meça e ajuste. A TokenRecarga fornece acesso a modelos de IA para empresas brasileiras, com atendimento comercial local e faturamento em reais, facilitando a adoção dessas técnicas no seu fluxo.
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.