Chatbot customizado com Dialogflow CX, Vertex AI e LangChain 🤖

Amanda Furtado Brinhosa
google-cloud-brasil
4 min readDec 12, 2023

Se você está buscando uma abordagem mais customizada de Retrieval Augmented Generation (RAG), que é uma técnica de IA para melhorar a qualidade das respostas de uma LLM baseadas em um contexto específico, você está no lugar — ou artigo — certo.

Na publicação de hoje o objetivo é propor uma abordagem de arquitetura de chatbot que aproveite Vertex Search e LLMs encapsulados por LangChain criando uma experiência realmente personalizada. O Dialogflow CX serve como interface e controle de conversação, dando a oportunidade de trazer recursos fora da caixa (out of the box) para curadoria e operações transacionais (mas é opcional!).

Visão geral da arquitetura 📐

  1. O usuário faz uma pergunta por meio do integrador (Integrator) e o Dialogflow CX verificará se há uma correspondência de intenção para isso.
  2. Se correspondido, ele retorna a resposta com base no fluxo normal.
  3. Se não corresponder, ele chama um webhook (nesse caso, uma Cloud Function).
  4. O webhook chama o modelo Vertex AI GenAI (PaLM 2 — text) para classificar a questão.
  5. Com base na classificação, o LangChain chamará o Data Store correspondente usando a lógica do recuperador (Retriever) para dar uma resposta com as fontes associadas.
  6. Caso não exista Data Store (o tema foi classificado como “Outro”), retornará uma resposta fixa.
  7. O webhook retorna resultados para o Dialogflow CX, que retorna para o usuário.

Observações 🧐

Configuração

Vertex Search

Crie o(s) aplicativo(s) e data store(s) na Vertex Search. Neste exemplo foram criadas duas versões, simulando diferentes áreas da empresa (por exemplo, diferentes temas, como RH e TI) e utilizando dados não estruturados (PDFs). O procedimento completo está descrito na documentação.

Cloud Function

Coloque o código fonte em um bucket no Cloud Storage chamado search-with-langchain. Então, abra um Cloud Shell para realizar o deploy da Cloud Function (procedimento completo para deploy na documentação).

Lembre-se de atualizar as variáveis de ambiente:

PROJECT_ID=
LOCATION_ID=global
REGION=us-central1
MODEL=text-bison
DATA_STORE_ID_1=
DATA_STORE_ID_2=
gcloud functions deploy search-with-langchain --gen2 --region=us-central1 --runtime=python311 --source=gs://search-with-langchain/source.zip --entry-point=entry_point_http --trigger-http --memory=512M --set-env-vars PROJECT_ID=YOUR PROJECT ID,LOCATION_ID=global,REGION=us-central1,MODEL=text-bison,DATA_STORE_ID_1=YOUR DATA STORE ID,DATA_STORE_ID_2=YOUR DATA STORE ID

Allow unauthenticated? Yes (você pode alterá-lo mais tarde de acordo com os requisitos).

Vertex AI GenAI (text-bison)

Na Cloud Function nós chamamos um prompt que faz a classificação do assunto da pergunta (classifier_prompt.py é o arquivo). Para cada caso de uso será diferente, então lembre-se de atualizá-lo. Você pode testá-lo diretamente no Vertex AI Generative AI Studio.

Dialogflow CX

  1. Vá para a console do Dialogflow CX e crie um novo agente no modo Build Your Own.
  2. Restaure o exemplo de bot disponibilizado.
  3. Atualize o webhook com a URL da sua Cloud Function.
  4. Nas configurações do agente no Dialogflow CX (Agent Settings), na aba Share, copie a conta de serviço terminando em “@gcp-sa-dialogflow.iam.gserviceaccount.com” e dê a ela permissão de cloud functions invoker para que o Dialogflow possa chamar o webhook.
  5. Teste três diferentes casos: pergunta de um domínio (ex.: RH), pergunta de outro domínio (ex.: TI) e pergunta fora de qualquer um deles.

Testando, 1, 2, 3 🎤

Depois de toda a configuração, é hora de testar! Sugestão de fluxo:

  • Oi
  • Como acesso a VPN?
  • E como faço pra pedir férias?
  • Ok, tchau

E esse será apenas o começo da sua jornada criando chatbots customizados!

Melhorias possíveis ✅

  • Usar um prompt personalizado para a parte do LangChain;
  • Melhorar/formatar a resposta do Vertex Search usando LLMs;
  • Usar um LLM para criar uma resposta alternativa quando a classificação for “Outro”;
  • Separar a parte de classificação e recuperação em mais de uma Cloud Function;
  • Usar fontes diferentes para o Vertex Search (por exemplo, originalmente ele foi desenvolvido usando arquivos HTML do Confluence importados no Cloud Storage e a fonte foi convertida para o URL original, isso fornece muitos insights sobre como melhorar a própria documentação)

Conclusão 📝

Neste artigo, trouxemos uma implementação alternativa para customizar um chatbot usando Dialogflow CX, Vertex Search, LangChain e LLMs na Vertex AI. Vale lembrar que essa é apenas uma das várias opções em Google Cloud para construir um chatbot. Com a IA Generativa as tecnologias estão avançando rapidamente, então não perca os nossos blogs no Google Cloud Brasil.

Deixe sua sugestão sobre o que mais gostaria de ler aqui! 📢

--

--