dgpt é uma sistema de chat com ia onde voce pode usar diversos modelos para conversa. Utiliza php com frankenphp como runtime, slim framework, twig, tailwind e htmx. Utiliza o protocolo mercure, uma alternativa ao websocket, para mensagens instantâneas no chat. Como motor de ia utiliza o ollma.
O projeto possui um arquivo docker-compose que subirá todos os serviços, a partir disso algumas configurações tem que ser feitas, é necessário ter instalado:
- PHP na versão 8.2 ou superior
Apos isso instale as dependências do projeto com composer install
.
Depois voce deve copiar o arquivo .env.example
e renome-lo para .env
e preencher os campos, um exemplo de configuração:
MODE=dev
OLLAMA_HOST=ollama
OLLAMA_PORT=11434
OLLAMA_LLM_PATH=/llm
Onde:
- MODE define o modo em que a aplicação vai funcionar, mais explicações abaixo.
- OLLAMA_HOST o host do servidor ollama, o padrão do projeto é ollama.
- OLLAMA_PORT a porta do servidor, o padrão é 11434.
- OLLAMA_LLM_PATH é o caminho, a partir do root do projeto, onde os llm's serão armazenados.
Apos isso o projeto esta pronto para ser usado no caminho https://localhost
.
Como o projeto propriamente instalado e com um modelo instalado é so escrever seu prompt, a velocidade e acurácia da resposta vai depender da sua maquina e do seu modelo.
Os LLM's (large language model) sao centro deste projeto. É necessário ter ao menos um LLM para que o chat funcione. Por padrão o projeto nao vem com nenhum LLM, por causa do seu tamanho (eles costumam ser bem grandes).
O primeiro passo para adicionar um llm é baixar um modelo, eles podem ser encontrados no site do huggingface, os modelos baixados devem ser no formato gguf
, baixe um que se adéque a sua maquina, um modelo de 2_7B de parâmetros normalmente pede 2G de memoria ram um modelo de 7B necessita de 7 a 8GB e assim por diante.
Com um modelo baixado adicione esse modelo na pasta llm
ou pasta que voce definiu no arquivo .env
dentro da pasta crie um arquivo com o mesmo nome do modelo mas sem nenhuma extensão, por exemplo, baixei o modelo openchat_3.5.Q2_K.gguf
entrao crio um arquivo openchat_3.5.Q2_K
(sem extensão alguma), o conteúdo deste arquivo deve ser:
FROM ./openchat_3.5.Q2_K.gguf
Mais opções sobre o que por neste arquivo podem ser encontrados no site do ollama [por link aqui]
Recarrega a pagina do sistema e vera que na barra lateral haverá uma opção chamada openchat_3.5.Q2_K
com uma opção chamada Add
aperte neste botão e o modelo sera adicionado ao sistema, isso pode demora um pouco de acordo com sua maquina e do tamanho do modelo. Vários modelos podem ser adicionados ao sistema.
Uma das features mais legais do frankenphp é o worker mode um modo apos o primeiro boot a aplicação php fica em memoria, deixando-a bastante eficaz.
Primeiramente, todas as variáveis no arquivo .env
devem ser passadas para o arquivo docker-compose.yml
. A inserção de varáveis de ambiente via .env
nao funciona de forma consistente.
O primeiro passo é no arquivo .env
mudar o MODE
para prod
ou worker
no arquivo docker-compose.yml
descomete a linha.
# - FRANKENPHP_CONFIG=worker public/index.php
Depois reinicie o container do php.
Na minha percepção o worker mode nao faz muita diferença nesta aplicação, da sua arquitetura atual, pois ela faz chamadas a outro servidor, porem se a abordagem com a ia for feita de outro modo, usando o llama.cpp por exemplo, onde o processamento é local, acho que o workermode traria mais benefícios, acredito que houve alguma melhora de performance, mas nao tanta nesse caso de uso.
Para alterar o frontend é necessario instalar as bibliotecas do nodejs para builder o front, para isso é necessario ter o nodejs e npm, apos isso instale as depdendencias de desenvolvimento.
Apos instaldas você pode executar o comando npm run watch
para o tailwind atualizar o css em cada alteraçāo nos arquivos .twig
. O htmx pode ser rebuildado com o comando npm run webpack
para rebuildar os arquivos js.