Criando um chatbot usando sua própria IA

Matheus Duzzi Ribeiro
7 min readMay 20, 2024

Entenda passo a passo como desenvolver um assistente personalizado para sua empresa utilizando LLM

Atualmente, um dos assuntos mais discutidos do mercado é a Inteligência Artificial, especificamente a IA Generativa, a qual teve uma disseminação extremamente acelerada com o lançamento do Chat GPT. Entretanto, o uso dessa ferramenta vai muito mais além do que um simples prompt no site da Open AI, partindo de aplicações impulsionadas com inteligência artificial, como o auto complete de buscas em um marketplace até chatbots, como veremos nesse artigo.

Fonte: Understand and Exploit GenAI With Gartner’s New Impact Radar (Gartner)

Um dos maiores desafios do uso da inteligência artificial no mundo corporativo é a escalabilidade, de modo que o uso dessa ferramenta seja personalizado ao seu negócio, isto é, que a IA aprenda com seus dados e assim seja um forte alinhado para o aumento de receita. Porém, uma das maneiras de se contornar isso é através do que chamamos de embedding.

Token e Embedding

Para que computadores possam processar texto, é necessário transformá-lo em números. Isso é feito através de dois conceitos principais: tokens e embeddings.

Tokens são as unidades básicas de texto, que podem ser palavras, subpalavras ou até mesmo caracteres, dependendo da aplicação. Esses tokens são então convertidos em números, permitindo que os modelos de Machine Learning possam manipulá-los matematicamente.

Embeddings são representações vetoriais densas dos tokens. Eles capturam semântica e contexto de palavras em um espaço contínuo, permitindo que palavras com significados similares tenham representações próximas. Esse processo de transformar texto em números é essencial para que modelos de linguagem possam realizar suas tarefas com eficácia.

Fonte: Pinecone

A tokenização é o processo de dividir o texto em unidades menores, chamadas tokens, que podem ser mapeadas para números. Esse mapeamento é armazenado em um vocabulário ou léxico, que funciona como um dicionário, onde cada token possui um índice específico.

Ao conhecermos o índice de um token, podemos convertê-lo em seu correspondente numérico (“tokenizar”) ou recuperar o token a partir do índice (“destokenizar”). Existem três principais tipos de tokenização, cada uma com suas vantagens e desvantagens:

  • Tokenização por Caractere: Cada letra do alfabeto é mapeada para um valor numérico. Por exemplo, “E” pode ser 5 e “b” pode ser 2. Embora simples, essa abordagem gera muitos tokens, tornando o processo computacionalmente custoso para textos longos.
  • Tokenização por Palavra: Cada palavra é mapeada para um índice no dicionário de tokens. Isso reduz o número de tokens, mas aumenta a complexidade do dicionário, que deve conter uma vasta quantidade de palavras.
  • Tokenização Subpalavra: Palavras são divididas em partes menores, como radicais, prefixos e sufixos. Por exemplo, “correr” pode ser dividida em “corr-” e “-er”. Essa abordagem equilibra a simplicidade do dicionário com a redução da quantidade total de tokens, permitindo reutilização eficiente.

Cada tipo de tokenização apresenta desafios específicos, desde a complexidade do dicionário até a quantidade de tokens gerados. Escolher a abordagem certa depende do balanço entre eficiência computacional e cobertura linguística necessária para o modelo de linguagem.

Enquanto os tokens são representações estáticas de unidades de texto, os embeddings são representações vetoriais dinâmicas em um espaço multidimensional. Embeddings podem ser imaginados como pontos com coordenadas.

Fonte: A Guide to Word Embedding (Towards Data Science)

Para simplificar, pense em um espaço vetorial bidimensional, com um eixo horizontal e um vertical. Neste espaço, cada palavra é representada por um ponto com duas coordenadas, que variam conforme o contexto. Essa flexibilidade permite que embeddings capturem nuances semânticas e contextuais, tornando-os mais adaptáveis e poderosos para o processamento de linguagem natural.

Base de conhecimento

Pensando em exemplificar como um chatbot pode aprender com uma base de conhecimento proprietária, iremos construir nosso próprio material de treinamento. Nosso objetivo será criar um assistente de compra de tênis de corrida.

Para isso, basta seguir os seguintes passos:

  1. Selecionar os principais canais do Youtube que recomendam tênis de corrida, como por exemplo, o canal “Tênis Certo” e “Tênis1Minuto”.
  2. Escolha vídeos com vários tipos de conteúdo e perspectiva de cada canal, de modo que cubra diferentes lacunas, nesse caso, que contenha desde tênis para iniciantes até profissionais.
  3. Transcreva cada conteúdo utilizando alguma ferramenta, como ytscribe e armazene em um arquivo .docx
  4. Refine o texto, usando um prompt no Chat GPT como“Refine os textos desse documento, apresente de forma resumida cada um e armazene em um novo documento”
Exemplo de base de conhecimento

Note, que este é um material básico para o chatbot começar a ter contexto, e pode ser incorporado mais dados, como artigos do tema abordado e comentários de consumidores nos marketplaces.

Flowise e Pinecone

Para criar o seu chatbot, você pode utilizar de uma das ferramentas mais faladas no momento, quando falamos de LLM, o Flowise. Esta é uma ferramenta Open Source que oferece diversas vantagens e recursos que tornam o desenvolvimento mais rápido e adaptável, como:

  • Desenvolvimento Rápido: proporciona feedback imediato, acelerando as fases de desenvolvimento e teste.
  • Adaptabilidade: permite integrações personalizadas, oferecendo flexibilidade para adaptar a ferramenta às necessidades específicas do usuário.
  • Templates: Inclui chains como a de “recuperação de perguntas e respostas” e a de “tradução de idiomas”, que podem ser personalizadas para atender a diferentes requisitos.

Para começar usar a ferramenta é muito simples:

  1. Instale com o comando: npm install -g flowise
  2. Inicie seu primeiro aplicativo LLM: npx flowise start

Em paralelo, crie uma conta na Pinecone. Essa ferramenta ajudará a armazenar o banco de dados vetorial com uma API simples, potencializando a pesquisa semântica. Tendo sua conta concluída, siga os seguintes passos:

  1. Crie um index chamado “Tenis”
  2. Parametrize o seu index com “text-embedding-3-large”

Feito isso você estará apto a ter uma base de conhecimento de fácil acesso para treinamento com LLM.

Fluxo de criação do Chatbot

Chegou a hora de criarmos nosso especialista em tênis de corrida. É importante que além das configurações já feitas no Flowise e Pinecone, você tenha uma conta na API do Chat GPT disponível

Fluxo de treinamento do Chatbot

Para treinar o chatbot, você pode seguir um template como mostrado acima, contendo os seguintes componentes:

  1. Conversational Retrieval QA Chain: com este elemento, você será capaz de se comunicar com o banco de dados vetorial. É importante que você use da parametrização em “Additional Parameters” para personalizar o bot como um especialista no assunto em que está sendo trabalhado, veja um exemplo:
  • Rephrase Prompt:

“Reformule a pergunta para torná-la mais clara e focada. Considere o histórico da conversa e a intenção do usuário.

Histórico da Conversa: {chat_history}
Pergunta: {question}

Pergunta reformulada:”

  • Response Prompt:

“Seu nome é “Runner Tennis Copilot”. Você deve agir como um especialista em no produto “Runner Tennis Copilot” ao falar com o cliente com o qual está conversando.

Usando o contexto fornecido, responda à pergunta do usuário da melhor maneira possível, utilizando os recursos fornecidos, e sempre pergunte ao final de cada resposta bem sucedida se o usuário precisa de ajuda em mais algo. Se não houver nada no contexto relevante para a pergunta em questão, diga ‘Não tenho certeza sobre sua pergunta’ e pare por aí.
Recuse-se a responder qualquer pergunta que não seja sobre a informação. Nunca saia do personagem.
— — — — — —
{context}
— — — — — —
Lembre-se: Se não houver informações relevantes dentro do contexto, diga apenas “Não tenho certeza”. Não tente inventar uma resposta. Nunca saia do personagem.”

2. ChatOpenAI: nesse componente você irá ter conexão com a API da Open AI. Note que a temperatura do Bot escolhida foi 0.4, de modo que o chatbot use com exatidão a base de conhecimento.

3. Pinecone: aqui você irá ter conexão com o index criado. Nele você armazenará o banco de dados vetorial desse contexto.

4. OpenAI Embeddings: para conseguir criar o embedding, você utilizará esse componente com a parametrização “text-embedding-3-large”, de modo a ser compatível com o index criado na Pinecone.

5. Docx File: será o componente que receberá seu arquivo da base de conhecimento

6. Recursive Character Text Splitter: por fim, através desse elemento, você será capaz de subdividir seu material, de maneira que possamos realizar a busca semântica no banco de vetores.

Upsert Vector DataBase

Agora, basta fazer o upsert do seu banco de dados vetorial, isto é, treinar o chatbot e enviar os dados para pinecone.

Exemplo de conversa

Tendo realizado o embedding dos seus dados, você já pode testar seu chatbot. Basta clicar no ícone de chat no canto superior direito.

Código para endpoint do chatbot

Este tipo de criação de chatbot pode ser hospedado em diversos tipos de serviços, marketplaces ou aplicações através de um endpoint criado no momento da geração do fluxo, ajudando seu negócio a crescer cada vez mais utilizando a inteligência artificial!

Referências

https://www.gartner.com/en/articles/understand-and-exploit-gen-ai-with-gartner-s-new-impact-radar

https://www.stork.ai/pt/ai-tools/flowiseai-92b18

--

--