Como usar IA para criar um assistente pessoal.

Como usar IA para criar um assistente pessoal.
Photo by Google DeepMind / Unsplash

Nesse artigo vou te mostrar como usar IA e modelos de LLM para treinar criar e treinar seu próprio chatbot.

Introdução

Vamos usar os modelos disponíveis no HuggingFace, Spaces e python.

HuggingFaces é um repositório global onde podemos encontrar centenas de modelos de LLM pré-treinados, ou seja, alguém já vez o trabalho pesado treinando modelos com bilhões de parâmetros. Além disso também podemos usar a infra do HuggingFace para executar esses modelos na nuvem e como se não fosse o bastante também podemos criar Spaces, que é uma forma de hospedar nossas aplicações.

Crie uma conta no HuggingFace e em seguida vá em Spaces -> New Space.

Crie num novo Space com nome e descrição, em Select the Space SDK, vamos escolher Streamlit.

Streamlit é uma ferramenta onde podemos criar interfaces para nossas aplicações de modo absurdamente rápido.

Em Space Hardware deixe a opção padrão que é a versão gratuita e crie seu Space. Recomendo criar no modo público e compartilhar comigo depois.

Faça o clone do Space na sua máquina e vamos começar a brincadeira.

Vá na repositório do modelo principal que iremos usar e solicite o acesso
Mistral

Código

Crie um arquivo chamados requirements.txt com as dependências que iremos usar no projeto.

transformers
huggingface_hub
streamlit
langchain_core
langchain_community
langchain_huggingface
langchain_text_splitters
accelerate
watchdog
tqdm
sentencepiece
langchain
langchain-huggingface

Em seguida crie um arquivo chamado app.py com esse conteúdo.

diagnosis-chatbot/app.py at main · lesimoes/diagnosis-chatbot
An interactive Python chatbot that helps users identify a possible diagnosis based on the symptoms they report. - lesimoes/diagnosis-chatbot

O app.py é o coração da aplicação nele é onde estou carregando nosso modelo principal, Mistral-7B-Instruct-v0.3 e o modelo pra tradução para o Português Brasileiro Helsinki-NLP/opus-mt-tc-big-en-pt.

A função get_response é onde aplico os modelos, por exemplo no trecho onde carrego a função get_llm_hf_inference.

def get_llm_hf_inference(model_id=model_id, max_new_tokens=128, temperature=temperature):
    llm = HuggingFaceEndpoint(
        repo_id=model_id,
        task="text-generation",
        max_new_tokens=max_new_tokens,
        temperature=temperature,
        token = os.getenv("HF_TOKEN")
    )
    return llm

Função onde o modelo principal é carregado

Nesse trecho eu carrego o modelo principal (Mistral), sua tarefa que é "qual a sua função", existem muitas tarefas para NLP (Processamento de Linguagem Natural) e sua temperatura. A temperatura diz o quanto o chatbot será criativo, sendo 0.1 bem conservador e 1.0 bem criativo.

Adicionado sua base de conhecimento

Voltando para get_response você vai reparar knowledge_context nesse trecho

    prompt = PromptTemplate.from_template(
        (
            "[INST] {system_message}"
            "{knowledge_context}\n"
            "\nCurrent Conversation:\n{chat_history}\n\n"
            "\nUser: {user_text}.\n [/INST]"
            "\nAI:"
        )
    )

Aqui é onde a mágica acontece, eu poderia usar apenas o modelo Mistral e pronto, porém quero um assistente virtual, ou seja, ele precisa ter uma base de conhecimento a mais. Essa base pode ser algo pessoal como anotações de estudos, conversas de whatsapp ou no meu caso eu alimentei o chatbot com uma base de Sintomas e Diagnósticos capturar de um site sobre saúde.

No arquivo knowledg_base.py é onde eu alimento o chatbot com o conteúdo de database.txt.

diagnosis-chatbot/knowledge_base.py at main · lesimoes/diagnosis-chatbot
An interactive Python chatbot that helps users identify a possible diagnosis based on the symptoms they report. - lesimoes/diagnosis-chatbot

No meu caso minha base está no formato:
Sintoma: nome_do_sintoma
conteudo_sobre_o_sintoma

Por isso o arquivo knowledg_base.py sabe como interpretar esse formato e alimentar o chatbot. Fique livre pra usar esse formato ou criar o seu próprio formato e adaptar o código.

Feito isso basta você criar uma base de conhecimento para o seu contexto, se quiser usar o mesmo que o meu:

diagnosis-chatbot/database.txt at main · lesimoes/diagnosis-chatbot
An interactive Python chatbot that helps users identify a possible diagnosis based on the symptoms they report. - lesimoes/diagnosis-chatbot

Aqui você também pode criar um web scraping apontando para algum site e criar sua própria base de conhecimento, afinal web scraping é o pilar das LLMs.

Deploy

Agora basta enviar as modificações para o HuggingFace através do git push.

Aguarde alguns minutos e atualize a página.

Considerações

Dê uma olhada nos parâmetros do código, dentre eles uma atenção especial para o system_message, é nele que configuramos a personalidade do chatbot.

No exemplo a seguir o chatbot recomendou alguns remédios, isso pode ser evitado através do system_message.

Lembre-se, esse projeto é apenas para demonstração e nenhuma recomendação do chatbot deve ser levado a sério, para problemas de saúde consulte um médico.

Todo o projeto pode ser encontrado aqui:

GitHub - lesimoes/diagnosis-chatbot: An interactive Python chatbot that helps users identify a possible diagnosis based on the symptoms they report.
An interactive Python chatbot that helps users identify a possible diagnosis based on the symptoms they report. - lesimoes/diagnosis-chatbot

Inté!