AI - Instalando nosso Primeiro Modelo de AI Offline
Neste tutorial, você aprenderá a criar seu próprio ChatGPT offline utilizando o Ollama e o Llama. Vamos mostrar como utilizar a API e comparar o desempenho de diversos modelos. Acompanhe o passo a passo para configurar tudo de forma eficiente e escolher o melhor modelo para suas necessidades.

Olá meus Unicórnios! 🦄✨
Nesta altura do campeonato você já deve ser utilizado o ChatGPT ao menos uma vez na vida.
E também deve ter tido uma surpresa com os gastos! Depois que começas a utilizar uma grande quantidade de Tokens, e muitas conversações, os gastos começam a Subir.
Então, hoje iremos implantar nosso próprio "ChatGPT" offline.
Para isto, iremos utilizar o Ollama que possui os modelos mais comuns:

O modelo que iremos utilizar é o "Llama 3.1", modelo criado pela Meta, que é um dos melhores modelos Offline disponíveis na atualidade:

Você pode conhecer mais do Projeto em:

Este modelo tem três versões, com tamanhos diferentes:
- 8B: 4.7GB
- 70B: 40GB
- 405B: 231GB
Para este tutorial, iremos utilizar o modelo 8B com "4.7GB".
Porem, também mais pesado ele será, o que ira requerer mais recursos do seu computador.
Instalando o Ollama
Para instalar o Ollama, acesse o link abaixo e clique em "Download for Windows":

Depois abra o arquivo baixado "OllamaSetup.exe".
Clique em "Install":

Aguarde a Instalação Finalizar:

Depois que a Instalação for Encerrada, o Instalador ira fechar automáticamente.
Instalando o Modelo "Llama 3.1" no "Ollama"
O Ollama não instala automaticamente os modelos, precisamos instalar todos os modelos que desejados.
Podemos identificar o caminho para instalação, de cada modelo e sua linguagem, em:
Para o "Llama 3.1" na versão "8B" iremos utilizar:

Abra o PowerShell o preencha o comando de instalação:
ollama run llama3.1
Aguarde o Download e Instalação do modelo:

Depois da instalação ser finalizada, será exibido "success":

Funcionamento da API
O Ollama cria uma API com métodos muito similares a OpenAI.
A API fica na porta "11434", e seu acesso é feito pelo caminho "/api/".
Para exemplo, iremos buscar todos os Modelos Instalador/Ativados fazendo uma GET para "/api/tags":
http://localhost:11434/api/tags
A resposta será os modelos que você tem instalado:
{
"models": [
{
"name": "llama3.1:latest",
"model": "llama3.1:latest"
}
]
}
O que precisamos obter aqui é o campo "name" que será o campo que iremos utilizar na API de Conversão:
llama3.1:latest
Utilizando a API de Conversação
Para criar uma conversa, iremos enviar um POST para "/api/chat" onde precisamos enviar um Json semelhante ao Json abaixo:
{
"model": "llama3.1:latest",
"stream": false,
"options": {
"temperature": 0,
"num_ctx": 256
},
"keep_alive": "24h",
"messages": [
{
"role": "system",
"content": "Bot que deve responder como um Bruxo de Hogwarts"
},
{
"role": "user",
"content": "Quem é Harry Potter?"
},
{
"role": "assistant",
"content": "Harry Potter é o protagonista da série de livros de fantasia do mesmo nome, escrita por J.K. Rowling."
},
{
"role": "user",
"content": "E qual a casa de Harry Potter em Hogwarts?"
}
]
}
A resposta será retornado no elemento "message.content":
{
"model": "llama3.1:latest",
"created_at": "2024-07-31T21:13:29.7581227Z",
"message": {
"role": "assistant",
"content": "O jovem Harry Potter é um Gryffindor! A coragem e a lealdade são as características que o definem, e ele tem o privilégio de ser membro da mais nobre das casas de Hogwarts. Além dele, outros notáveis membros da casa incluem Ron Weasley e Hermione Granger, seus melhores amigos e companheiros em muitas aventuras."
},
"done_reason": "stop",
"done": true,
"total_duration": 101823170000,
"load_duration": 13484578100,
"prompt_eval_count": 78,
"prompt_eval_duration": 32615899000,
"eval_count": 85,
"eval_duration": 55702339000
}
Abrindo Ollama para o Mundo Exterior
Por padrão, o Ollama tem sua API aberta apenas o o "Localhost".
Inicialmente feche o Ollama, em "Quit Ollama" na barra de relógio:

Pesquise "system environment variables" no menu iniciar e clique em "Edit the system environment variables":

Clique em "Environment Variables...":

Clique em "New...":

No campo "Variable name" preencha com "OLLAMA_HOST" e no campo "Variable value" preencha com "0.0.0.0", em seguida, clique em "OK":

Clique em "OK" novamente nas duas janelas:

Reabra o Ollama através do Menu Inicial:

Comparando Velocidade de alguns Modelos
Para esta comparação, estamos utilizando uma máquina virtual com 16 gb de RAM, e 8 Cores de um processador Ryzen 7 5700G.

Em todas as requisições irei utilizar o mesmo exemplo enviado ao "/api/chat" mais acima.
A comparação de tempo será da primeira requisição e da segunda requisição e também irei comparar a resposta gerada.
Llama 3.1 - 8B
➡️ Primeira Requisição: 31 segundos
➡️ Segunda Requisição: 21 segundos
💬 Resposta:
O jovem Harry Potter é um Gryffindor! A coragem e a lealdade são as características que o definem, e ele tem o privilégio de ser membro da mais nobre das casas de Hogwarts. Além dele, outros notáveis membros da casa incluem Ron Weasley e Hermione Granger, seus melhores amigos e companheiros em muitas aventuras.
Phi 3 Mini - 3.8B (Mini)
➡️ Primeira Requisição: 15 segundos
➡️ Segunda Requisição: 8 segundos
💬 Resposta:
Harry Potter pertence à Casa das Tochas na escola mágica de Hogwarts. Apesar disso, ele tem uma conexão especial com as Pedras da Fênix e é frequentemente associado a elas por sua importância em seu destino.
Gemma 2 - 2B (Mini)
➡️ Primeira Requisição: 10 segundos
➡️ Segunda Requisição: 6 segundos
💬 Resposta:
Ah, Harry! Ele é um bruxo de uma força inigualável e lealdade que brilha como o próprio sol. Ele foi escolhido para a Casa dosbruxos, onde a coragem e a sabedoria se misturam em harmonia.
Mistral - 7B
➡️ Primeira Requisição: 27 segundos
➡️ Segunda Requisição: 15 segundos
💬 Resposta:
Ó, minha amiga, Harry Potter é o jovem herói da nossa escola de magia e bruxaria, Hogwarts. E ele pertence à Casa de Gryffindor, a mais brava e corajosa das casas de Hogwarts!
Por hoje é só, meus unicórnios! 🦄✨
Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟