Como usar IA para criar um assistente pessoal.
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.
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.
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:
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:
Inté!