ChatBot Inteligente com Qwen2.5
Chatbots são uma das aplicações mais importantes de IA. Até recentemente, eles eram pouco eficientes. Mas, com o avanço impressionante dos LLMs, hoje eles têm desempenhos fantásticos. Porém, integrar LLMs como os GPTs da OpenAI num aplicativo pode ter um custo alto. Felizmente, vários modelos abertos já estão disponíveis (por exemplo, aqui e aqui).
A família Qwen2.5 é o mais novo lançamento do Alibaba. Formada por diversos LLMs, ela possui vários modelos liberados com licença Apache2.0 prontos para serem integrados em aplicativos Python. Para comemorar a novidade, usaremos um de seus LLMs para criar um chatbot super, mega simples com Streamlit.
Bibliotecas e LLM
pip install streamlit
Ollama servirá para executar o LLM. Para instalar o Ollama, consulte as instruções aqui e veja se seu computador tem os requisitos mínimos.
Com as duas bibliotecas instaladas, baixe o modelo que será usado. O Qwen2.5 tem vários tamanhos. Utilizaremos o modelo 1.5B. Ele é um modelo pequeno, já na faixa de um SLM. A vantagem de um modelo desse porte é que ele é mais rápido para ser executado e requer menos recursos computacionais. Para baixar o modelo, digite o comando no terminal:
ollama pull qwen2.5:1.5b
Início do código
Faremos um código bem minimalista. Portanto, num arquivo Python que pode se chamar app.py, importe as bibliotecas necessárias:
import streamlit as st
import ollama
Depois, inicie um cliente Ollama e selecione o LLM:
# inicia o cliente ollama
client = ollama.Client()
Elementos do Streamlit para criar um Chatbot
Para o chatbot em si, primeiro criamos um contêiner para nossas interações e inserimos um título simples.
def main():
with st.container(border=True):
st.title("ChatBot Inteligente")
Depois, inicializamos uma lista que conterá as interações realizadas durante uma sessão. Note que estamos continuando o código acima no mesmo contêiner (copie apenas da linha 5 em diante):
def main():
with st.container(border=True):
...
# inicializa lista para armazenar chat
if "messages" not in st.session_state:
st.session_state.messages = []
A lista definida acima será usada para exibir o histórico de conversas. Para isso, usamos um loop (copie apenas da linha 5 em diante):
def main():
with st.container(border=True):
...
# Mostra mensagens do chat
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
Chatbot com Qwen2.5 em código
Nessa parte, implementaremos as interações entre usuários do web app e o LLM Qwen2.5-1.5B. Portanto, dando sequência ao código, usaremos elementos chat_input chat_message do Streamlit. Eles funcionam para receber e exibir os prompts do usuário. Os inputs recebidos são adicionados ao histórico de conversas do chat e também é enviado ao LLM para gerar uma resposta:
def main():
with st.container(border=True):
...
# copie apenas a partir daqui
if prompt := st.chat_input("Me pergunte qualquer coisa..."):
# Mostra mensagem do usuário
st.chat_message("user").markdown(prompt)
# Adiciona a mensagem na lista de mensagens
st.session_state.messages.append({"role": "user", "content": prompt})
# envia a mensagem do usuário ao LLM com Ollama
response = client.generate(model="qwen2:1.5b", prompt=prompt)
O passo seguinte é adicionar a resposta do LLM à lista de mensagens e exibi-la no web app (copie apenas a partir da linha 8):
def main():
with st.container(border=True):
...
if prompt := st.chat_input("Me pergunte qualquer coisa..."):
...
# copie apenas a partir daqui
# Mostra resposta do LLM
with st.chat_message("assistant"):
st.markdown(response)
# Adiciona mensagem do LLM na lista de mensagens
st.session_state.messages.append({"role": "assistant", "content": response})
Por fim, definimos o comando para executar o app (apenas linhas 8 e 9 fora da função main()).
def main():
with st.container(border=True):
...
if prompt := st.chat_input("Me pergunte qualquer coisa..."):
...
if __name__ == "__main__":
main()
Pronto! Para executar o código, o comando é streamlit run app.py. Veja um exemplo de interação do nosso app abaixo.
Qwen2.5 domina 29 idiomas (incluindo português), sabe escrever código e é muito inteligente. Se você precisar de um modelo mais potente ou específico do que o LLM usado, pode trocar a versão por outra.