TelegramBot-OpenAI-API
? Desenvolvido por ChatKeke
- Um bot Telegram baseado em Python, simples de usar e rápido de implantar para API OpenAI
- ? Mensagens de voz transcritas pela API Whisper
- (transcrições automáticas, traduções e outras mensagens para o bot por meio de mensagens de voz do TG)
- ☁️ Informações meteorológicas em tempo real, alertas meteorológicos e dados de geolocalização via OpenWeatherMap, WeatherAPI e US NWS (weather.gov)
- ? Geolocalização e pesquisas de mapas via API MapTiler
- (com previsões meteorológicas em todo o mundo em todos os idiomas suportados pela API OpenAI)
- ? Instruções de navegação via API Openrouteservice
- Acompanhamento diário de uso de token e limitação de taxa para uso de API/gerenciamento de custos
- ? Modelos de API Perplexity junto com modelos OpenAI
- Útil para verificar fatos e complementar as datas limite da OpenAI
- Etapas integradas do Elasticsearch RAG
- Aumente a taxa de conhecimento com seus próprios documentos
- Gere insights extras com o criador do par de perguntas e respostas
- ? Notificações de feriados por meio do módulo
holidays
do Python- Localizado para países suportados ou adicione seus próprios lembretes especiais
- ? Buscando preços de ações via Alpha Vantage API e Yahoo! Financiar
- Acesso em tempo real a dados financeiros e do mercado de ações
- ? Feeds RSS de todas as fontes disponíveis
- Obtenha notícias e muito mais via RSS
- ? Pesquisas DuckDuckGo como chamadas de função aumentadas em contexto
- Novo! Navegação subagente para pesquisas aprimoradas e precisas!
- Navegação na Web (despejos de páginas com links) como chamadas de função aumentadas pelo contexto
- Com listas opcionais de permissão/proibição de domínio/IP para segurança
- ? Módulo de chamada de função de calculadora para cálculos precisos
- Chega de se atrapalhar com alucinações aritméticas de IA!
- ? Dockerizado para segurança e facilidade de implantação
- Para aqueles que amam seus Dockers, prontos para funcionar em minutos!
Requisitos mínimos gerais:
- Token de bot da API do Telegram
- use o bot
@BotFather
no Telegram para configurar seu bot e obter um token de API do Telegram Bot para ele
- Token da API OpenAI
- Obtenha um em: https://platform.openai.com/
? Instalando sem Docker no Linux
Pré-requisitos
- Testado e funcionando em Python
3.10.12
a 3.12.2
- Instale os pacotes Python necessários com
pip install -r requirements.txt
(testado e funcionando com as versões listadas em requisitos.txt -
pydub
geralmente requer que ffmpeg
seja instalado separadamente. Observe que nem pydub
nem ffmpeg
são praticamente desnecessários se você não estiver utilizando a funcionalidade de mensagem de voz/WhisperAPI, mas se estiver, instalação sugerida (Debian/Ubuntu Linux): sudo apt-get install ffmpeg
- NOTA: As pesquisas DuckDuckGo requerem que
lynx
esteja instalado em seu sistema; ele precisa ser executado como um subprocesso. (Instale no Debian/Ubuntu Linux com: sudo apt-get install lynx
)
- Clone o repositório com:
git clone https://github.com/FlyingFathead/TelegramBot-OpenAI-API/ &&
cd TelegramBot-OpenAI-API/
- Instale os pacotes necessários:
pip install -r requirements.txt
- (Recomendado) instale os pacotes opcionais:
- Em sistemas Linux Ubuntu/Debian tree:
sudo apt-get install -y ffmpeg lynx
- Configure seu token de bot do Telegram:
- Defina seu token da API do Telegram Bot como variável de ambiente
TELEGRAM_BOT_TOKEN
ou coloque-o em um arquivo de texto chamado bot_token.txt
dentro do diretório config/
(= config/bot_token.txt
)
- Configure seu token da API OpenAI:
- Como variável de ambiente
OPENAI_API_KEY
ou colocado em um arquivo de texto chamado api_token.txt
dentro do diretório principal do programa
- Outros módulos:
- Se você deseja usar a API OpenWeatherMap e a API MapTiler para, por exemplo, recuperação de dados meteorológicos localizados, defina as variáveis de ambiente
OPENWEATHERMAP_API_KEY
e MAPTILER_API_KEY
adequadamente. Você pode obter as chaves de API do OpenWeather e MapTiler - Informações meteorológicas adicionais (fases da lua, avisos meteorológicos, etc.) são obtidas do WeatherAPI, defina a variável de ambiente
WEATHERAPI_KEY
para usá-las. - Se você deseja usar a API Openrouteservice para instruções de direção, defina a variável de ambiente
OPENROUTESERVICE_API_KEY
em Openrouteservice - Se você deseja usar a verificação de fatos suplementar da API Perplexity com seus modelos on-line, registre-se em Perplexity.ai, compre alguns créditos de API e defina sua chave da API Perplexity para a variável de ambiente:
PERPLEXITY_API_KEY
- Outros ajustes:
- Ajuste sua configuração editando
config/config.ini
ao seu gosto
- Correr:
- Execute o programa com:
python src/main.py
? Instalando Dockerizado
Pré-requisitos
O Docker deve estar instalado em sua máquina.
- Se não estiver instalado, você pode baixá-lo e instalá-lo no site oficial do Docker.
Chave de API do Telegram Bot e chave de API OpenAI :
- Você precisará de uma chave API válida do Telegram Bot. Você pode obter um criando um bot com BotFather.
- Você também precisará de uma chave de API OpenAI. Se você não tiver um, poderá gerá-lo na página da API OpenAI.
Etapa 1: clonar o repositório
Primeiro, clone o repositório do GitHub:
git clone https://github.com/FlyingFathead/TelegramBot-OpenAI-API.git
cd TelegramBot-OpenAI-API
Etapa 2: execute o script de configuração
Este projeto inclui um script de configuração que irá guiá-lo na inserção de suas chaves de API e na geração de um arquivo .env
.
Execute o script:
Siga as instruções fornecidas pelo script. Ele solicitará sua chave de API OpenAI e chave de API do Telegram Bot, validá-las e criar um arquivo .env
com suas credenciais.
Etapa 3: construir a imagem Docker
Depois que seu arquivo .env
for criado, você precisará construir a imagem Docker.
Você pode executar o docker_deploy.sh
em destaque para construir a imagem do Docker:
Ou você pode construí-lo manualmente:
sudo docker build -t telegrambot-openai-api .
Isso construirá a imagem localmente com base no Dockerfile
no repositório.
Etapa 4: execute o contêiner Docker
Depois que a imagem for criada com êxito, você poderá iniciar o bot em um contêiner Docker.
Execute o contêiner com o seguinte comando:
sudo docker run --env-file .env --name telegrambot-openai-api -d telegrambot-openai-api
- O sinalizador
-d
executa o contêiner em modo desanexado (em segundo plano). - O sinalizador
--env-file .env
injeta suas chaves de API no contêiner.
Etapa 5: verifique o contêiner em execução
Você pode verificar se o contêiner está em execução usando:
Isso listará todos os contêineres em execução. Se o seu bot estiver funcionando corretamente, ele deverá aparecer na lista.
Passo 6: Parando o Contêiner
Se precisar parar o bot, você pode fazer isso executando:
sudo docker stop < container_id >
Substitua <container_id>
pelo ID real do contêiner, que você pode obter na saída docker ps
.
Etapas adicionais (opcional)
Logs : se precisar visualizar os logs do bot para solucionar quaisquer problemas, você pode usar:
sudo docker logs < container_id >
Reinicie o contêiner : se você parar o contêiner e quiser iniciá-lo novamente, poderá executar o comando docker run
novamente ou reiniciar o contêiner existente com:
sudo docker start < container_id >
Atualizando o bot
Se o repositório receber atualizações e você quiser aplicá-las, siga estas etapas:
Obtenha as alterações mais recentes do GitHub:
Reconstrua a imagem do Docker:
sudo docker build -t telegrambot-openai-api .
Pare o contêiner em execução:
sudo docker stop < container_id >
Inicie um novo contêiner usando a imagem atualizada:
sudo docker run --env-file .env --name telegrambot-openai-api -d telegrambot-openai-api
Há também um script docker_deploy.sh
incluído que visa tornar a reconstrução e a implantação menos complicadas.
Agora você deve ter o TelegramBot-OpenAI-API rodando em um contêiner Docker, totalmente conectado ao Telegram e ao OpenAI. Aproveite seu bot!
Se você tiver algum problema, consulte os logs ou entre em contato na página Problemas do repositório.
Atualizando seu config.ini
Use o configmerger.py
para atualizar arquivos de configuração antigos para uma versão mais recente config.ini
. Você pode fazer isso salvando uma cópia de sua configuração existente, ou seja, um arquivo chamado myconfig.txt
e incluindo nele as linhas que deseja manter para a versão mais recente.
Depois disso, basta executar, por exemplo, python src/configmerger.py myconfig.txt
e todas as suas linhas de configuração existentes serão migradas para a nova. Funciona na maioria dos casos, mas lembre-se de ter cuidado e verificar novamente quaisquer problemas de migração com ie diff
!
(Exemplo) Como mesclar e atualizar sua configuração existente:
python3 src/configmerger.py myconfig.txt
Registro de alterações
- v0.75055 - correções no sanitizador de HTML (para API do Telegram; melhor manipulação de HTML malformado), usando BeautifulSoup4+lxml para análise agora
- v0.75054 – pequenas correções e mais detecção de erros em
calc_module.py
- v0.75053 - inclui apenas territórios elegíveis em consultas do NWS dos EUA
- a lista de territórios consultados/elegíveis pode ser definida em
config.ini
na seção NWS
- v0.75052 - inclui os detalhes do Serviço Meteorológico Nacional dos EUA em alertas
- v0.75051 -
config.ini
atualizado para configurar previsões e alertas meteorológicos do NWS- O método sugerido é complementar via NWS os dados meteorológicos adicionais necessários
- deixar os alertas meteorológicos do NWS dos EUA ativados no
config.ini
é altamente recomendado, mesmo se você tiver outros métodos de busca ativados (ou seja, OpenWeatherMap), é melhor prevenir do que remediar
- v0.7505 - US NWS (National Weather Service, weather.gov) adicionado como fonte de dados meteorológicos
- para informações adicionais; especialmente alertas meteorológicos
- todos os dados serão combinados das fontes OpenWeatherMap e US NWS por padrão
- v0.7504 - logs de uso fixo e mapeamento de diretório de gráficos
- v0.7503 - melhor formatação de mensagens e captura de erros
- v0.7502 - adicionado
docker_setup.sh
para implantação mais fácil baseada em Docker - v0.7501 -
Dockerfile
e melhor captura de erros ao receber 401 Unauthorized
- v0.75 Refatoração principal (5 de outubro de 2024) ???
- todo o projeto foi arrumado e muitos bugs corrigidos durante ele
-
python src/main.py
para iniciar o bot daqui em diante - lista enorme de novos recursos, como:
- registro aprimorado
- verificando o Elasticsearch na inicialização; captura de exceção em várias etapas
- Verbosidade do Elasticsearch adicionada para maior clareza
- Elasticsearch agora pode ser configurado via
config.ini
- registro aprimorado (dados de bate-papo + bot em registro unificado separado)
- os chatlogs agora têm uma
source
para eles sempre que são chamados por meio de chamadas de função, para que qualquer extração de dados externos seja registrada com mais clareza - no geral, esta atualização torna o bot muito mais facilmente implementável
- v0.7431 - manipulação potencial de chaves de API conforme arquivos de texto movidos em
config/
por padrão - v0.743 - alterações e simplificação do carregamento de configuração
- arrumando; todas as configurações estão agora em
config/
- importei a nova lógica para leitura de token de bot do meu
whisper-transcriber-telegram-bot
-
bot_token.py
alterado e atualizado de acordo -
config_paths.py
agora possui a configuração de todo o projeto para caminhos de arquivos de configuração ( config.ini
, etc...) - mova qualquer
bot_token.txt
existente (se usado) para config/
- use
configmerger.py
para atualizar com suas configurações personalizadas - (mais WIP na frente de reestruturação do projeto)
- v0.742 - Busca de etapa RAG do dia do nome finlandês
- v0.741 - alterado para o modelo mais atual da API Perplexity (
llama-3.1-sonar-small-128k-online
) devido a descontinuações e atualizações em seus modelos - v0.74 - a navegação subagente com as pesquisas do mecanismo de pesquisa DuckDuckGo está aqui!
- Habilitado em
config.ini
via EnableAgenticBrowsing = True
- Ele permite que o auxiliar de IA siga links para obter mais informações e retornar resultados relevantes
- Correções de bugs adicionais para casos extremos e sua análise de saída
- v0.7373 – pequenas correções em
api_get_duckduckgo_search.py
; link agente seguindo WIP - v0.7372 - Outras alterações na lógica de análise (
markdown_to_html
em modules.py
) - v0.7371 - Análise aprimorada para markdown/html
- v0.737 - Mudanças na inclusão da API Perplexity (o modelo principal agora a inclui no contexto para melhor aplicabilidade e coerência).
- v0.736 - Módulo de calculadora
calc_module.py
adicionado para precisão nas solicitações de cálculo. - v0.735 - Navegação no site Lynx com listas de permissão/proibição para domínios permitidos/não permitidos para visualização
- v0.734 - Agora hospedando mais de 100 feeds RSS por padrão (quando o RAG é acionado)
- Pesquisas DuckDuckGo adicionadas como uma chamada de função
- v0.733 - Lógica de análise RSS simplificada no contexto RAG
- v0.7321 - Melhorias na análise de RSS
- v0.732 - adicionadas chamadas de função ElasticSearch RAG para feeds RSS
- (para, por exemplo, fontes de notícias, etc., consulte
rss_parser.py
)
- v0.73101 - API Perplexity modularizada chama ainda mais em um manipulador separado
- (veja:
perplexity_handler.py
)
- v0.731 - adicionado Yahoo! Finanças como uma chamada de função API para pesquisas de preços de ações (requer o pacote pip
yfinance
) - v0.730 - adicionada chamada de função da API Alpha Vantage para buscar preços de ações em tempo real (requer chave da API Alpha Vantage)
- v0.729 - mudou para
gpt-4o-mini
nas configurações padrão em vez de gpt-3.5-turbo
(mais novo, mais barato, melhor) - v0.728 - mais tratamento de casos extremos ao buscar dados meteorológicos multi-API
- v0.727 - corrigidos problemas de API de casos extremos de WeatherAPI e busca de clima (retornando valores ímpares, etc.)
- v0.726 - mudou para API OpenAI de
langdetect
ao usar, ou seja, API Perplexity para consultas de informações- (função
detect_language
em api_perplexity_search.py
) - isso é para melhor precisão em ambientes multilíngues
- => menos respostas no idioma errado quando um caminho de tradução é necessário para o usuário final
- muito mais preciso que
langdetect
e pode ser ainda mais aproveitado com a seleção de modelos
- v0.7251 - pequenas melhorias e correções de robustez no módulo
api_key.py
- v0.725 - chamada adicional da API Perplexity + ajustes de tradução
- v0.724 - lógica de divisão para respostas mais longas da API Perplexity
- v0.723 - adicionado jitter, lógica de nova tentativa modificada em solicitações de tradução + API Perplexity
- v0.7201 - adicionada configuração do modelo Perplexity API ao
config.ini
- v0.72 - captura de erros e mensagens aprimoradas com a API do Perplexity
- v0.71 - menções de feriados por meio do módulo de
holidays
do Python (pode ser estendido) - v0.708 - combinação aprimorada de dados astronômicos via WeatherAPI
- v0.707 - limpeza de código + melhorias no tratamento da API Perplexity
- v0.706 - mais opções de busca de clima; busca adicional de dados com base no país
- v0.705 - combinação aprimorada de dados meteorológicos; pequenos ajustes
- v0.703 - Traduções de idiomas e ajustes na busca de dados WeatherAPI
- v0.70 - Adicionado suporte WeatherAPI, para ativar, obtenha uma chave de API em weatherapi.com
- v0.61 - tratamento aprimorado de dados meteorológicos e de tempo/dados globalmente
- v0.60 - pré-análise de informações de URL e busca de informações adicionais para fontes de mídia, ou seja, com
yt-dlp
- v0.59 - chamada de função personalizada via Elasticsearch RAG (se habilitado)
- v0.58.4 - mais correções de análise e formatação
- v0.58.3 - ajustes de análise, formatação e agrupamento
- v0.58.2 - formatação aprimorada em chamadas de API pplx
- v0.58.1 - análise de redução aprimorada em chamadas de API Perplexity traduzidas
- v0.58 - fragmentação, análise e outras pequenas correções
- v0.57.5 - alterações feitas no tratamento da API Perplexity; novos modelos de sonar online
- v0.57.1 - fallbacks aprimorados em chamadas de API externas, como API Perplexity
- v0.57 - captura de erros aprimorada e substitutos à prova de falhas
- v0.56 - Adicionado suporte Elasticsearch para RAG - use o sinalizador
ElasticsearchEnabled
no novo config.ini
(definido como True
ou False
para ativar ou desativar) - v0.55.4 - Rastreamento de chamadas de API, tempos de espera extras, se necessário, para chamadas de API externas
- v0.55.3 - atividade de resposta, melhor lógica de agrupamento
- v0.55 - melhor manipulação da animação de resposta
- v0.52 - dados meteorológicos mais precisos globalmente por meio da API OpenWeatherMap e API Maptiler
- v0.51 - agrupamento "inteligente" de solicitações externas para mitigar problemas relacionados ao tempo limite
- v0.50.3 -
langdetect
e correções de manipulação - v0.50.2 - animação de digitação nas respostas, ajustes na lógica de processamento
- v0.50.1 -
langdetect
na avaliação automática dos requisitos de tradução - v0.50 - Chamada de função personalizada: verificação de fatos da API Perplexity
- v0.49.1 - Ajustes de modularidade
- v0.48 - Implementação da API Openrouteservice
- v0.47 - mais correções de contagem de tokens e lógica de pesquisa
- v0.46.2 - correções na contagem de tokens e lógica de pesquisa
- v0.46 - reescreveu a lógica de pesquisa nas redefinições diárias da contagem de tokens
- v0.45 - recurso
/usagechart
adicionado para gráficos de utilização (requer matplotlib
) - v0.44 - Chamada de função de API, pesquisas meteorológicas da API OpenWeatherMap e pesquisa geográfica da API MapTiler
- v0.43.2 - Corrigido um pequeno bug nos limites diários de tokens
- v0.43.1 - Melhor detecção de erros
- v0.43 - Novos comandos administrativos:
/setsystemmessage <message>
(válido até a reinicialização do bot) e /resetsystemmessage
(redefinir do config.ini
) - v0.42 - comando
/reset
adicionado para redefinição do bot. Defina os sinalizadores ResetCommandEnabled
e AdminOnlyReset
em config.ini
adequadamente. - v0.41 - tratamento modularizado de mensagens de texto para
text_message_handler.py
e tratamento de mensagens de voz para voice_message_handler.py
- v0.40 - gerenciamento de tempo limite de sessão para compactar o histórico de bate-papo (consulte
config.ini
=> SessionTimeoutMinutes
, MaxRetainedMessages
) - v0.39.5 - pequenas correções na implementação de carga útil da API OpenAI
- v0.39.4 -
log_message
e rotate_log_file
modularizados (manipulação de arquivo de log) => modules.py
- v0.39.3 -
check_global_rate_limit
modularizado => modules.py
- v0.39.2 - análise de estilo de texto e pré-processamento WhisperAPI STT para o modelo melhorados
- v0.39 - melhor análise de codeblocks, html e outras marcações, mais modularizado; veja
modules.py
- v0.38 - mantenha um melhor registro do uso diário do token, simplificado ( nota : você precisará limpar seu
token_usage.json
existente, a estrutura do arquivo mudou em relação à versão anterior) - v0.37 - melhor aplicação dos limites de mensagens de voz
- v0.36 - correções e ajustes de comandos de bot
- v0.35 - comandos de bot modularizados para
bot_commands.py
, versão corrigida configmerger.py
- v0.34 - adicionado
configmerger.py
para facilitar a atualização do bot (mesclar sinalizadores de configuração antigos com novas versões) - v0.33 - mais correções de desempenho e funcionalidades assíncronas + unificadas adicionadas
- v0.32 - Pesquisa diária de redefinição do contador de tokens e pequenas correções de bugs
- v0.31 - Contador de token de memória de contexto ajustado e corrigido para ser mais preciso
- v0.30 - Ajustes finos e pequenas correções na interação da API Whisper
- v0.29 - Adicionadas transcrições WhisperAPI por meio de mensagens de voz
- As mensagens de voz WhisperAPI usam o mesmo token da API OpenAI que a versão normal de chat de texto
- veja o
config.ini
para ativar ou desativar a opção - WIP para recursos adicionais de transcrição
- v0.28 - saudação personalizável
/start
em config.ini
- v0.27 - adicionado o comando
/usage
para rastrear o uso do token (somente para o proprietário do bot, 0 para desabilitar em config.ini
) - v0.26 - adicionado registro de bate-papo separado e uma funcionalidade de limitador global para solicitações/min (consulte
config.ini
) - v0.25 - funcionalidade de limite diário de uso de token
- adicionou uma funcionalidade para definir limites diários de uso de token (para controle de custos de bot), consulte
config.ini
- utilitários extras modularizados (mensagem de inicialização etc.) em
utils.py
- v0.24 - correções de bugs e limite de taxa pré-alfa
- v0.23 - opção de log em arquivo adicionada, veja novas opções de log em
config.ini
- v0.22 -
escape_markdown
movido para um arquivo .py
separado, mas não foi usado de qualquer maneira - v0.21 - Refatoração Abrangente e Introdução ao Design Orientado a Objetos
- Implementou princípios de programação orientada a objetos encapsulando a funcionalidade do bot na classe TelegramBot.
- Estrutura de código refinada para melhor legibilidade, capacidade de manutenção e escalabilidade.
- v0.20 - modularização, etapa 1 (leitura de chave e token:
api_key.py
, bot_token.py
) - v0.19 - correções de erros de tempo limite, nova tentativa de tratamento; Valor
Timeout
adicionado ao config.ini
- v0.18 - a temperatura do modelo agora pode ser definida em
config.ini
- v0.17 - carimbo de data e hora para melhor consciência temporal
- v0.16 -
/help
e /about
- v0.15 - memória de contexto do histórico de bate-papo (aparar com MAX_TOKENS)
- v0.14 - correções de bugs
- v0.13 - análise/regex para remarcações de título + endereço de URL
- v0.12 - mais análise de regex HTML a partir da marcação da API
- v0.11 - mudou para análise de HTML
- v0.10 - Testes MarkdownV2 (blocos de código + negrito estão funcionando principalmente )
- v0.09 - usando MarkdownV2
- v0.08 - redução para respostas do bot
- v0.07 - registra mensagens recebidas e enviadas
- v0.06 - Mensagem do sistema API corrigida
- v0.05 - nova tentativa, máximo de tentativas, atraso na nova tentativa
- v0.04 - corte do histórico de bate-papo
Contribuir
- Todas as contribuições apreciadas! Sinta-se à vontade para postar quaisquer bugs e outros problemas na página "Problemas" do repositório.
- Não se esqueça de marcar com estrela se gostar. :-)
Sobre
- Escrito por FlyingFathead
- Código fantasma digital por ChaosWhisperer