Chatbot é uma das aplicações mais versáteis de inteligência artificial. Gemini é a inteligência artificial mais poderosa da Google. Neste post, usaremos a inteligência artificial Gemini acessada através da Gemini API para criar um super chatbot que responde a qualquer questão. Também usaremos a biblioteca Python Streamlit para criar uma interface de usuário (GUI).
Bibliotecas
Usaremos duas bibliotecas: google-generativeai e Streamlit. As instalações com pip podem ser feitas com o comando:
pip install google-generativeai streamlit
A biblioteca Streamlit também pode ser instalada através da distribuição do Anaconda com o comando:
conda install -c conda-forge streamlit
Além das bibliotecas, para usar a Gemini API é preciso ter uma API key como explicado aqui.
Chatbot com Gemini API e Streamlit
Crie um arquivo Python chamado chatbot.py. No início do arquivo, importe os pacotes necessários e defina sua API key para usar a Gemini API. No trecho abaixo, não se esqueça de substituir SUA API KEY (linha 5) pela sua key.
import os
import streamlit as st
import google.generativeai as genai
os.environ['GOOGLE_API_KEY'] = "SUA API KEY"
genai.configure(api_key = os.environ['GOOGLE_API_KEY'])
Na sequência, selecionamos o LLM (large language model) do Gemini que usaremos no nosso chatbot. Utilizaremos o gemini-pro.
llm = genai.GenerativeModel('gemini-pro')
Em seguida, definimos um título para nosso aplicativo.
st.title("Chatbot com Gemini")
Para testar o código até aqui, salve o arquivo e execute o seguinte comando no terminal: streamlit run chatbot.py. O aplicativo abre diretamente no browser. Por enquanto, ele possui apenas o título.
Na página de seu aplicativo, selecione a opção Always Rerun para ele ser atualizado toda vez que o código Python for salvo.
Streamlit e seus Elementos para Chat
Streamlit oferece vários elementos que facilitam a criação de interfaces gráficas do usuário para chatbots. Um dos elementos que usaremos será o estado da sessão (session_state) para armazenar o histórico do chat para ele aparecer no nosso aplicativo. Primeiro, verificamos se o estado da sessão tem a chave messages indicando que a interação já foi iniciada. Se não tiver, ela será inicializada como uma lista contendo apenas uma frase inicial do bot (content).
if "messages" not in st.session_state:
st.session_state.messages = [
{
"role":"assistant",
"content":"Me pergunte qualquer coisa"
}
]
Depois, adicionamos um for loop para iterar pela lista com o histórico do chat e exibir cada mensagem no contêiner de mensagens do nosso aplicativo.
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
Após essa adição, nosso aplicativo fica assim:
query = st.chat_input("Oi, me pergunte qualquer coisa")
Com o chat_input, nosso aplicativo fica assim:
Gemini API para Acessar um LLM
def function_llm(query):
''' Função que acessa o LLM, gera a resposta e salva a interação.'''
# acessa o LLM para gerar uma resposta
response = llm.generate_content(query)
# Mostra as mensagens do bot
with st.chat_message("assistant"):
st.markdown(response.text)
# Salva as mensagens do usuário
st.session_state.messages.append(
{
"role":"user",
"content": query
}
)
# Salva as mensagens do bot
st.session_state.messages.append(
{
"role":"assistant",
"content": response.text
}
)
if query:
# Mostra a mensagem do usuário
with st.chat_message("user"):
st.markdown(query)
# chama a função que acessa o LLM
function_llm(query)