Este é um guia sobre como construir um Telegram Bot apoiado por um LLM (ou seja, llama2-chat, llama2-chat-32k, vicunha). O bot está hospedado em uma instância EC2 de nível gratuito, a inferência llm está hospedada no Beam Cloud como uma API REST sem servidor, que é gratuita durante as primeiras 10 horas de computação. A coisa toda é bastante lenta, mas este é apenas um ponto de partida.
Você pode seguir este guia para construir um Python Telegram Bot:
Como criar um bot de telegrama usando Python
Aqui vou te dar os principais passos:
Agora você pode iniciar uma conversa com seu bot procurando o nome de usuário no Telegram.
Quanto à hospedagem da inferência do llm, a melhor opção que encontrei por enquanto é o Beam Cloud. Seus preços de computação estão entre os mais baratos e oferecem 10 horas de computação gratuita com ótimas GPUs. A oferta de armazenamento gratuito, que é muito apreciada.
O chatbot é construído usando langchain e huggingface. Portanto, se você quiser a família de modelos Llama 2, precisará solicitar acesso aos modelos. É muito fácil de fazer e eles são muito rápidos na aprovação do pedido.
TODO Usei algumas fontes para reunir langchain e HF, irei adicioná-los o mais rápido possível.
Se quiser usar modelos fechados, você precisará definir um token de rosto abraçado. Isso está embutido no código, vou consertar nos próximos dias.
Este é um guia para gerar o token:
Tokens de acesso do usuário HuggingFace
Depois de criar sua conta, sem necessidade de método de pagamento, vá ao painel e na guia Configurações no menu direito você encontrará os Segredos. Se você estiver usando um modelo como lhama 2 que requer um token de rosto de abraço, será necessário definir a variável HF_TOKEN com o token de rosto de abraço.
Então você pode fazer tudo localmente. Vá para o subdiretório lm.
cd ./src/telegram_llm_bot/shared/llm/beam
Siga o guia de instalação do Beam Instalação do Beam.
Dentro do arquivo app.py você pode modificar as seguintes variáveis ou deixá-las como estão. Em breve irei movê-los para um arquivo de configuração:
HF_CACHE = "./models"
MODEL_ID = "meta-llama/Llama-2-7b-chat-hf"
APP_NAME = "travel-guru"
GPU = "T4"
MEMORY = "16Gi"
Você está pronto para implantar o aplicativo:
beam deploy app.py
O aplicativo deve estar instalado e funcionando agora. Vá para o painel do Beam e na guia Aplicativos você pode encontrar seu aplicativo.
Você pode hospedar seu bot gratuitamente em uma instância EC2 de nível gratuito. Este é um guia que você pode seguir:
Tutorial: primeiros passos com instâncias Linux do Amazon EC2
Durante a criação da instância, você deve se lembrar de criar um par de chaves que usará para conectar-se remotamente à sua instância via ssh.
Eu recomendo definir o Ubuntu como sistema operacional.
Depois de definir o par de chaves, o .pem será baixado automaticamente.
Agora você pode se conectar à instância ec2 via linha de comando usando ssh:
ssh -i " {filename}.pem " ubuntu@{address}.{region}.compute.amazonaws.com
Clone este repositório na instância ec2. Precisaremos apenas da pasta bot, precisamos sim do resto, então provavelmente irei separá-la do resto no futuro, por enquanto isso não é um grande problema:
git clone https://github.com/ma2za/telegram-llm-bot.git
Vá para o diretório do bot
cd telegram-llm-bot
Crie um arquivo .env para definir as variáveis de ambiente comuns a todos os seus bots
touch .env
Via nano modifique o conteúdo do .env com o seguinte conteúdo.
MONGO_HOST=telegram-mongo
MONGO_PORT=27017
Isso é necessário para configurar um banco de dados MongoDB para armazenar as conversas.
Crie outro arquivo .env específico para um bot para definir as variáveis de ambiente
touch ./src/telegram_llm_bot/bots/base_chatbot/.env
Via nano modifique o conteúdo do .env com o seguinte conteúdo.
TELEGRAM_BOT_TOKEN =
BEAM_TOKEN =
BEAM_URL = https://apps.beam.cloud/{something}
SETTINGS_FILE=telegram_llm_bot.bots.base_chatbot.settings
BOT_NAME=travel-guru
TELEGRAM_BOT_TOKEN é o token que recebemos anteriormente do BotFather.
BEAM_TOKEN : em Chaves de API no painel do aplicativo Beam, você pode gerar um token do Beam.
BEAM_URL é obtido na visão geral do aplicativo onde você pode clicar em Call API e lá você pode descobrir facilmente o URL
Finalmente podemos usar o docker compose para construir imagens e executar os contêineres.
Instale o Docker e o Docker Compose. Aqui está o guia oficial:
Instale o Docker Engine no Ubuntu
Construa, crie e inicie os contêineres:
sudo docker compose up -d --build
Terminamos aqui!
Os prompts do sistema estão contidos em config.yml .
Você está pronto para conversar!