Autores: Arthur Vieira e Sandro Santos

Este trabalho foi realizado de forma colaborativa por várias pessoas incríveis dos times de IT Engineering, People & Culture e NuLLM no Nubank (ordem alfabética): Aline Villaça, Camila Masuno, Carolina Junqueira, Daniella Angelos, Douglas Santos, Fabio Yamate, Gabriel Cerqueira, Jader Gomes, Paulo Castro, Rafael Godinho, Silvestre Auricchio, Thiago Mangueira, Thiago Português, Valeska Amodeo e Wesley Santos

Introdução

Com cerca de 9 mil colaboradores e múltiplos times ao redor do mundo, sabemos que garantir acesso rápido e eficiente à informação é essencial para manter a agilidade no dia a dia. Cada área do Nubank possui seus próprios processos e documentações no Confluence, o que reflete a autonomia das equipes — mas também pode tornar a navegação por esse conhecimento mais complexa. Percebemos que, em algumas situações, os colaboradores investiam tempo significativo tentando encontrar a informação certa ou entender qual time era o responsável por determinado assunto, o que ocasionalmente levava à abertura de tickets de suporte. Esses pontos de fricção representaram para nós uma oportunidade clara: como poderíamos facilitar o acesso à informação de forma escalável, sem comprometer a autonomia das áreas?

Diante desse cenário, foi criada uma solução baseada em IA para facilitar a busca por informações de maneira rápida, por meio de uma interface amigável, sem a necessidade de navegar por dezenas de páginas ou abrir tickets, fortalecendo a cultura de autoatendimento da informação no Nubank.

Conheça nossas oportunidades

A Solução

A solução foi integrada ao Slack, permitindo que colaboradores realizem suas consultas com facilidade. A partir da pergunta feita pelo usuário, a ferramenta busca pelas páginas mais relevantes no Confluence e recupera os documentos mais adequados. Esses documentos alimentam um modelo de linguagem de grande escala (LLM), que gera uma resposta personalizada — e, caso a resposta não seja satisfatória, o usuário é direcionado ao portal correspondente para abrir um ticket.

Essa abordagem se baseia no framework de Retrieved Augmented Generation (RAG). Sabe-se que modelos de linguagem de grande escala têm a capacidade de armazenar informações factuais com base em seus dados de treinamento [1]. No entanto, no nosso caso de uso, novas informações relevantes podem ser criadas a qualquer momento, e fazer fine-tuning no modelo sempre que isso ocorre seria inviável em termos de custo. O RAG resolve esse problema ao permitir que o modelo busque informações em uma base de conhecimento — neste caso, as documentações do Confluence do Nubank — para recuperar os dados relevantes em tempo real e gerar uma resposta personalizada.

Arquitetura

Indexação e Busca na Base de Conhecimento

Para tornar os documentos pesquisáveis, o conteúdo textual de cada página do Confluence é automaticamente extraído. Cada documento é dividido em blocos menores (chunks), mantendo metadados como ID, título, URL e departamento. Esses blocos são convertidos em embeddings — vetores numéricos que representam seu significado semântico — por meio de um LLM. Esses embeddings, junto com seus metadados, compõem a base de conhecimento (KB).

Como as documentações são atualizadas com frequência pelos departamentos, esse processo é executado automaticamente a cada 2 horas, garantindo que os colaboradores sempre tenham acesso às informações mais recentes.

Quando um usuário faz uma pergunta, essa consulta também é transformada em um embedding pelo mesmo LLM, e os blocos mais relevantes da base de conhecimento são recuperados.

A busca acontece em duas etapas para gerar a resposta final:

  1. Roteamento: os chunks recuperados inicialmente são usados para realizar uma classificação Few-Shot via LLM, processo chamado de Dynamic Few-Shot Classification.
  2. Geração da resposta: apenas os documentos do departamento classificado são buscados novamente, e os novos chunks são usados para gerar a resposta final.

Por que utilizar um processo em duas etapas?

Para evitar que respostas sejam geradas com base em documentações de diferentes departamentos — o que pode levar a respostas imprecisas ou confusas. Além disso, essa abordagem ajuda a evitar o uso de informações internas para responder perguntas genéricas.

Roteador: Classificador Dinâmico Few-Shot

Quando um usuário realiza uma pergunta, a solução identifica qual departamento tem maior probabilidade de conter a resposta. Isso é feito com um mecanismo de classificação baseado em LLM, usando a abordagem Dynamic Few-Shot Classification.

LLMs são few-shot learners [2], ou seja, são capazes de aprender com poucos exemplos durante a execução. Os exemplos usados são determinados pelos chunks recuperados na primeira etapa da busca. Assim, os chunks, seus respectivos departamentos e a consulta do usuário são enviados ao LLM para identificar o departamento mais adequado para responder à dúvida.

Há também casos em que a pergunta não requer consulta à documentação interna — como pedidos de tradução, resumo ou perguntas de conhecimento geral. O roteador é capaz de alocar esse tipo de pergunta como “Fonte Externa”, com exemplos desse tipo de consulta incluídos nos exemplos de few-shot.

Geração da Resposta

Uma vez identificado o domínio (departamento), uma nova busca é feita, agora restrita à documentação daquele departamento. Os chunks recuperados e a pergunta do usuário são enviados ao LLM, que gera uma resposta personalizada. As URLs dos documentos usados também são apresentadas ao usuário, caso ele deseje se aprofundar.

Se o usuário não estiver satisfeito com a resposta, ele pode ser direcionado ao portal do departamento para abertura de um ticket.

Métricas

Seis meses após o lançamento da ferramenta para todos os colaboradores, os resultados foram:

  • 5 mil usuários únicos
  • 280 mil mensagens trocadas com a ferramenta
  • 80% de feedbacks positivos nas respostas (com taxa de resposta de 6%)
  • 96% de redução na abertura de tickets em domínios internos (ticket deflection = número de tickets evitados por meio da ferramenta)
  • 70% dos usuários retornaram à ferramenta no intervalo de 30 dias
  • 9 segundos em média para receber uma resposta na AskNu (o tempo para encontrar a resposta no Confluence leva até 30 minutos ou 8 horas se o colaborador precisa abrir um ticket)

A qualidade do roteador — ou seja, sua capacidade de identificar corretamente o departamento responsável pela dúvida — é medida com base em Precisão (78%) e Recall (77%).

Em relação à qualidade das respostas, os responsáveis por cada departamento auditam regularmente as respostas fornecidas pela ferramenta para identificar oportunidades de melhoria na documentação. Atualmente, 74% das respostas para domínios internos foram classificadas como precisas.

Conclusão / Próximos Passos

A solução tem se mostrado um grande sucesso na empresa, sendo amplamente adotada pelos Nubankers, reduzindo tanto o tempo necessário para encontrar informações quanto o número de tickets abertos.

Como próximos passos, estamos trabalhando continuamente na qualidade do roteador para melhorar as métricas de ponta a ponta. Também estamos trabalhando na integração da ferramenta com nossos sistemas corporativos, o que permitirá automatizar a execução de tarefas, como:

  • abertura de tickets diretamente pelo app
  • solicitação de contracheques
  • pedidos de férias
  • solicitação de acessos a plataformas

No próximo post, vamos compartilhar os esforços que estão sendo feitos em relação à governança de conteúdo: como identificar documentações duplicadas, inconsistentes, perguntas frequentes e lacunas de informação.

Referências

[1] Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., Goyal, N., Küttler, H., Lewis, M., Yih, W., Rocktäschel, T., Riedel, S., Kiela, D. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv preprint arXiv:2005.11401.

[2] Brown, T.B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D.M., Wu, J., Winter, C., Hesse, C., Chen, M., Sigler, E., Litwin, M., Gray, S., Chess, B., Clark, J., Berner, C., McCandlish, S., Radford, A., Sutskever, I., Amodei, D. (2020). Language Models are Few-Shot Learners. arXiv preprint arXiv:2005.14165.

Conheça nossas oportunidades