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)