Chatbot customizado com Dialogflow CX, Vertex AI e LangChain 🤖
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 📐
- 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.
- Se correspondido, ele retorna a resposta com base no fluxo normal.
- Se não corresponder, ele chama um webhook (nesse caso, uma Cloud Function).
- O webhook chama o modelo Vertex AI GenAI (PaLM 2 — text) para classificar a questão.
- 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.
- Caso não exista Data Store (o tema foi classificado como “Outro”), retornará uma resposta fixa.
- O webhook retorna resultados para o Dialogflow CX, que retorna para o usuário.
Observações 🧐
- Existem várias opções de “integrador”. Lembre-se de conferir as integrações disponíveis no Dialogflow CX (Slack, Google Chat, etc.).
- A curadoria personalizada com visualização não é abordada neste artigo, mas é muito simples definir a funcionalidade de exportação para BigQuery do Dialogflow CX.
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
- Vá para a console do Dialogflow CX e crie um novo agente no modo Build Your Own.
- Restaure o exemplo de bot disponibilizado.
- Atualize o webhook com a URL da sua Cloud Function.
- 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.
- 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! 📢