TelegramBot-OpenAI-API
? Desarrollado por ChatKeke
- Un bot de Telegram basado en Python fácil de usar y rápido de implementar para la API OpenAI
- ? Mensajes de voz transcritos a través de Whisper API
- (transcripciones automáticas, traducciones y otros mensajes al bot a través de mensajes de voz de TG)
- ☁️ Información meteorológica en tiempo real, alertas meteorológicas y datos de geolocalización a través de OpenWeatherMap, WeatherAPI y US NWS (weather.gov)
- ? Geolocalización y búsquedas de mapas a través de MapTiler API
- (con pronósticos del tiempo en todo el mundo en todos los idiomas compatibles con la API OpenAI)
- ? Instrucciones de navegación a través de la API de Openrouteservice
- Seguimiento del uso diario de tokens y limitación de tasas para el uso de API/gestión de costos
- ? Modelos API de perplejidad junto con modelos OpenAI
- Útil para verificar hechos y complementar las fechas límite de OpenAI
- Pasos RAG de Elasticsearch integrados
- Aumente la tasa de conocimiento con sus propios documentos
- Genere información adicional con el creador del par de preguntas y respuestas
- ? Notificaciones de días festivos a través del módulo de
holidays
de Python- Localizado para países admitidos o agregue sus propios recordatorios especiales
- ? Obtener precios de acciones a través de Alpha Vantage API y Yahoo! Finanzas
- Acceso en tiempo real a datos financieros y bursátiles
- ? Feeds RSS de todas las fuentes disponibles
- Obtenga noticias y más a través de RSS
- ? DuckDuckGo busca como llamadas a funciones aumentadas por contexto
- ¡Nuevo! ¡ Navegación subagente para búsquedas mejoradas y precisas!
- Navegación web (volcados de páginas con enlaces) como llamadas a funciones aumentadas por contexto
- Con listas opcionales de permiso/no permitido de dominio/IP por seguridad
- ? Módulo de llamada de función de calculadora para cálculos precisos
- ¡No más problemas con alucinaciones aritméticas de IA!
- ? Dockerizado para mayor seguridad y facilidad de implementación
- Para aquellos que aman sus Dockers, ¡listos para funcionar en cuestión de minutos!
Requisitos mínimos generales:
- Token de bot API de Telegram
- use el bot
@BotFather
en Telegram para configurar su bot y obtener un token API de Telegram Bot para él
- Token de API de OpenAI
- Obtenga uno en: https://platform.openai.com/
? Instalación sin Docker en Linux
Requisitos previos
- Probado y funcionando en Python
3.10.12
a 3.12.2
- Instale los paquetes de Python necesarios con
pip install -r requirements.txt
(probado y funcionando con las versiones enumeradas en requisitos.txt -
pydub
generalmente requiere que ffmpeg
se instale por separado. Tenga en cuenta que ni pydub
ni ffmpeg
prácticamente no son necesarios si no está utilizando la funcionalidad de mensaje de voz/WhisperAPI, pero si lo está, se sugiere la instalación (Debian/Ubuntu Linux): sudo apt-get install ffmpeg
- NOTA: Las búsquedas de DuckDuckGo requieren que
lynx
esté instalado en su sistema; debe ejecutarse como un subproceso. (Instalar en Debian/Ubuntu Linux con: sudo apt-get install lynx
)
- Clona el repositorio con:
git clone https://github.com/FlyingFathead/TelegramBot-OpenAI-API/ &&
cd TelegramBot-OpenAI-API/
- Instale los paquetes necesarios:
pip install -r requirements.txt
- (Recomendado) instale los paquetes opcionales:
- En sistemas Linux del árbol Ubuntu/Debian:
sudo apt-get install -y ffmpeg lynx
- Configure su token de bot de Telegram:
- Configure su token API de Telegram Bot como variable de entorno
TELEGRAM_BOT_TOKEN
o colóquelo en un archivo de texto llamado bot_token.txt
dentro del directorio config/
(= config/bot_token.txt
).
- Configure su token API OpenAI:
- Ya sea como variable de entorno
OPENAI_API_KEY
o colocada en un archivo de texto llamado api_token.txt
dentro del directorio principal del programa
- Otros módulos:
- Si desea utilizar la API OpenWeatherMap y la API MapTiler, por ejemplo, para la recuperación de datos meteorológicos localizados, configure las variables de entorno
OPENWEATHERMAP_API_KEY
y MAPTILER_API_KEY
en consecuencia. Puede obtener las claves API de OpenWeather y MapTiler - Se obtiene información meteorológica adicional (fases lunares, advertencias meteorológicas, etc.) de WeatherAPI; configure la variable de entorno
WEATHERAPI_KEY
para usarla. - Si desea utilizar la API de Openrouteservice para obtener instrucciones de conducción, configure la variable de entorno
OPENROUTESERVICE_API_KEY
de Openrouteservice - Si desea utilizar la verificación de datos complementaria de la API de Perplexity con sus modelos en línea, regístrese en Perplexity.ai, compre algunos créditos de API y configure su clave de API de Perplexity en la variable de entorno:
PERPLEXITY_API_KEY
- Otros ajustes:
- Ajuste su configuración y ajustes editando
config/config.ini
a su gusto
- Correr:
- Ejecute el programa con:
python src/main.py
? Instalación de Dockerizado
Requisitos previos
Docker debe estar instalado en su máquina.
- Si no está instalado, puede descargarlo e instalarlo desde el sitio oficial de Docker.
Clave API de Telegram Bot y clave API OpenAI :
- Necesitará una clave API de Telegram Bot válida. Puedes conseguir uno creando un bot con BotFather.
- También necesitará una clave API de OpenAI. Si no tiene uno, puede generarlo desde la página API de OpenAI.
Paso 1: clonar el repositorio
Primero, clona el repositorio de GitHub:
git clone https://github.com/FlyingFathead/TelegramBot-OpenAI-API.git
cd TelegramBot-OpenAI-API
Paso 2: Ejecute el script de configuración
Este proyecto incluye un script de configuración que lo guiará para ingresar sus claves API y generar un archivo .env
.
Ejecute el script:
Siga las instrucciones proporcionadas por el guión. Le solicitará su clave API de OpenAI y su clave API de Telegram Bot, las validará y creará un archivo .env
con sus credenciales.
Paso 3: cree la imagen de Docker
Una vez que se haya creado su archivo .env
, deberá crear la imagen de Docker.
Puede ejecutar el docker_deploy.sh
destacado para crear la imagen de Docker:
O puedes construirlo manualmente:
sudo docker build -t telegrambot-openai-api .
Esto creará la imagen localmente en función del Dockerfile
en el repositorio.
Paso 4: ejecutar el contenedor Docker
Una vez que la imagen se haya creado correctamente, puede iniciar el bot en un contenedor Docker.
Ejecute el contenedor con el siguiente comando:
sudo docker run --env-file .env --name telegrambot-openai-api -d telegrambot-openai-api
- El indicador
-d
ejecuta el contenedor en modo independiente (en segundo plano). - El indicador
--env-file .env
inyecta sus claves API en el contenedor.
Paso 5: Verifique el contenedor en ejecución
Puede verificar si el contenedor se está ejecutando usando:
Esto enumerará todos los contenedores en ejecución. Si su bot se está ejecutando correctamente, debería aparecer en la lista.
Paso 6: detener el contenedor
Si necesita detener el bot, puede hacerlo ejecutando:
sudo docker stop < container_id >
Reemplace <container_id>
con el ID del contenedor real, que puede obtener de la salida docker ps
.
Pasos adicionales (opcional)
Registros : si necesita ver los registros del bot para solucionar cualquier problema, puede usar:
sudo docker logs < container_id >
Reinicie el contenedor : si detiene el contenedor y desea iniciarlo nuevamente, puede ejecutar el comando docker run
nuevamente o reiniciar el contenedor existente con:
sudo docker start < container_id >
Actualizando el bot
Si el repositorio recibe actualizaciones y deseas aplicarlas, sigue estos pasos:
Obtenga los últimos cambios de GitHub:
Reconstruya la imagen de Docker:
sudo docker build -t telegrambot-openai-api .
Detenga el contenedor actualmente en ejecución:
sudo docker stop < container_id >
Inicie un nuevo contenedor usando la imagen actualizada:
sudo docker run --env-file .env --name telegrambot-openai-api -d telegrambot-openai-api
También se incluye un script docker_deploy.sh
que tiene como objetivo hacer que la reconstrucción y la implementación sean menos complicadas.
Ahora debería tener TelegramBot-OpenAI-API ejecutándose en un contenedor Docker, completamente conectado tanto a Telegram como a OpenAI. ¡Disfruta de tu robot!
Si tiene algún problema, consulte los registros o comuníquese con la página de Problemas del repositorio.
Actualizando su config.ini
Utilice configmerger.py
para actualizar archivos de configuración antiguos a config.ini
de una versión más nueva. Puede hacer esto guardando una copia de su configuración existente, es decir, en un archivo llamado myconfig.txt
e incluyendo en él las líneas que desea conservar para la versión más nueva.
Después de eso, simplemente ejecute, es decir, python src/configmerger.py myconfig.txt
y todas sus líneas de configuración existentes se migrarán a la nueva. Funciona en la mayoría de los casos, pero recuerde tener cuidado y verificar cualquier problema de migración con ie diff
.
(Ejemplo) Cómo fusionar y actualizar su configuración existente:
python3 src/configmerger.py myconfig.txt
Registro de cambios
- v0.75055: correcciones en el desinfectante html (para la API de Telegram; mejor manejo de html con formato incorrecto), usando BeautifulSoup4+lxml para analizar ahora
- v0.75054: pequeñas correcciones y más errores detectados en
calc_module.py
- v0.75053: incluya solo territorios elegibles en consultas del NWS de EE. UU.
- La lista de territorios consultados/elegibles se puede configurar en
config.ini
en la sección NWS
- v0.75052: incluye detalles del Servicio Meteorológico Nacional de EE. UU. sobre alertas
- v0.75051:
config.ini
actualizado para configurar alertas y pronósticos meteorológicos del NWS- El método sugerido es complementar a través del NWS los datos meteorológicos adicionales que necesita.
- Se recomienda encarecidamente dejar activadas las alertas meteorológicas del NWS de EE. UU. en
config.ini
, incluso si tiene otros métodos de recuperación habilitados (es decir, OpenWeatherMap), es mejor prevenir que lamentar.
- v0.7505 - NWS (Servicio Meteorológico Nacional, Weather.gov) de EE. UU. agregado como fuente de datos meteorológicos
- para información adicional; especialmente alertas meteorológicas
- Todos los datos se combinarán de fuentes OpenWeatherMap y NWS de EE. UU. de forma predeterminada.
- v0.7504 - Corregido mapeo de directorios de gráficos y registros de uso
- v0.7503: formato de mensajes mejorado y detección de errores
- v0.7502: se agregó
docker_setup.sh
para facilitar la implementación basada en Docker - v0.7501:
Dockerfile
y mejor detección de errores al recibir 401 Unauthorized
- v0.75 ¿ Refactorización importante (5 de octubre de 2024) ?
- Se ha ordenado todo el proyecto y se han solucionado muchos errores.
-
python src/main.py
para iniciar el bot de aquí en adelante - lista masiva de nuevas características, tales como:
- registro mejorado
- comprobar si hay Elasticsearch al inicio; captura de excepciones de varios pasos
- Se agregó detalle de Elasticsearch para mayor claridad.
- Elasticsearch ahora se puede configurar a través de
config.ini
- registro mejorado (chat + datos de bot en un registro unificado separado)
- Los chatlogs ahora tienen una
source
para ellos cada vez que se les llama a través de llamadas a funciones, de modo que cualquier extracción de datos externos ahora se registra con mayor claridad. - En general, esta actualización hace que el bot sea mucho más fácil de implementar.
- v0.7431: posible manejo de claves API a medida que los archivos de texto se mueven bajo
config/
de forma predeterminada - v0.743 - cambios y optimización de la carga de configuración
- ordenar; todas las configuraciones están ahora en
config/
- importé la nueva lógica para la lectura de tokens de bot desde mi
whisper-transcriber-telegram-bot
-
bot_token.py
cambió y actualizó en consecuencia -
config_paths.py
ahora tiene la configuración de todo el proyecto para las rutas de los archivos de configuración ( config.ini
, etc...) - mueva cualquier
bot_token.txt
existente (si se usa) a config/
- use
configmerger.py
para actualizar con sus configuraciones personalizadas - (más WIP sobre la reestructuración del proyecto)
- v0.742 - Búsqueda por pasos del RAG del día del nombre finlandés
- v0.741: cambiado al modelo de API Perplexity más actual (
llama-3.1-sonar-small-128k-online
) debido a desaprobaciones y actualizaciones en sus modelos. - v0.74: ¡la navegación subagenética con búsquedas en el motor de búsqueda DuckDuckGo ya está aquí!
- Habilitado desde
config.ini
a través de EnableAgenticBrowsing = True
- Permite al ayudante de IA seguir enlaces para obtener más información y devolver resultados relevantes.
- Correcciones de errores adicionales para casos extremos y su análisis de resultados
- v0.7373: pequeñas correcciones en
api_get_duckduckgo_search.py
; enlace agente siguiendo WIP - v0.7372: cambios adicionales en la lógica de análisis (
markdown_to_html
en modules.py
) - v0.7371 - Análisis mejorado para Markdown/html
- v0.737: cambios en la inclusión de la API Perplexity (el modelo principal ahora la incluye en el contexto para una mejor aplicabilidad y coherencia).
- v0.736: módulo de calculadora
calc_module.py
agregado para mayor precisión en las solicitudes de cálculo. - v0.735: navegación en el sitio web de Lynx con listas de permitir/no permitir la visualización de dominios permitidos/no permitidos
- v0.734: ahora alberga más de 100 canales RSS de forma predeterminada (cuando se activa RAG)
- Búsquedas de DuckDuckGo agregadas como una llamada de función
- v0.733 - Lógica de análisis RSS optimizada en el contexto RAG
- v0.7321 - Mejoras en el análisis de RSS
- v0.732: se agregaron llamadas a la función ElasticSearch RAG a los canales RSS
- (para, por ejemplo, fuentes de noticias, etc., consulte
rss_parser.py
)
- v0.73101: llamadas modularizadas de la API Perplexity en un controlador independiente
- (ver:
perplexity_handler.py
)
- v0.731 - añadido Yahoo! Finanzas como llamada de función API para búsquedas de precios de acciones (requiere el paquete pip
yfinance
) - v0.730: se agregó la función API Alpha Vantage que llama para obtener los precios de las acciones en tiempo real (requiere la clave API Alpha Vantage)
- v0.729 - cambiado a
gpt-4o-mini
en configuraciones predeterminadas en lugar de gpt-3.5-turbo
(más nuevo, más barato, mejor) - v0.728: mayor manejo de casos extremos al obtener datos meteorológicos de múltiples API
- v0.727 - Se corrigieron fallas en WeatherAPI y en la API de casos extremos de obtención del clima (devolución de valores impares, etc.)
- v0.726: se cambió a la API OpenAI desde
langdetect
cuando se usa, por ejemplo, la API Perplexity para consultas de información- (función
detect_language
en api_perplexity_search.py
) - esto es para una mayor precisión en entornos multilingües
- => menos respuestas en idioma incorrecto cuando se necesita una ruta de traducción para el usuario final
- mucho más preciso que
langdetect
y se puede aprovechar aún más con la selección del modelo
- v0.7251: pequeñas mejoras de robustez y correcciones en el módulo
api_key.py
- v0.725: llamada adicional a la API de Perplexity + ajustes de traducción
- v0.724: lógica de división para respuestas más largas de la API Perplexity
- v0.723: se agregó jitter y se modificó la lógica de reintento en las solicitudes de traducción de Perplexity API+
- v0.7201: se agregó la configuración del modelo API Perplexity a
config.ini
- v0.72 - captura de errores mejorada + mensajería con la API de Perplexity
- v0.71: menciones de días festivos a través del módulo de
holidays
de Python (se puede ampliar) - v0.708: combinación mejorada de datos astronómicos a través de WeatherAPI
- v0.707: limpieza de código + mejoras en el manejo de la API Perplexity
- v0.706 - más opciones de búsqueda del clima; obtención de datos adicionales basados en países
- v0.705: combinación mejorada de datos meteorológicos; pequeños ajustes
- v0.703: traducciones de idiomas y ajustes en la obtención de datos de WeatherAPI
- v0.70: se agregó soporte para WeatherAPI; para habilitarlo, obtenga una clave API de Weatherapi.com
- v0.61: manejo mejorado de datos meteorológicos y de tiempo/datos a nivel mundial
- v0.60: análisis previo de información de URL y obtención de información adicional para fuentes de medios, es decir, con
yt-dlp
- v0.59: llamada de función personalizada a través de Elasticsearch RAG (si está habilitado)
- v0.58.4 - más correcciones de análisis y formato
- v0.58.3 - ajustes de análisis, formato y fragmentación
- v0.58.2 - formato mejorado en llamadas API pplx
- v0.58.1: análisis de rebajas mejorado en llamadas traducidas a la API Perplexity
- v0.58: fragmentación, análisis y otras pequeñas correcciones
- v0.57.5: cambios realizados en el manejo de la API Perplexity; nuevos modelos de sonar online
- v0.57.1: respaldos mejorados en llamadas API externas como API Perplexity
- v0.57: detección de errores mejorada y respaldos a prueba de fallas
- v0.56: se agregó soporte de Elasticsearch para RAG : use el indicador
ElasticsearchEnabled
en el nuevo config.ini
(establezca en True
o False
para habilitar o deshabilitar) - v0.55.4: seguimiento de llamadas API, tiempos de espera adicionales si es necesario para llamadas API externas
- v0.55.3 - actividad de respuesta, mejor lógica de fragmentación
- v0.55 - mejor manejo de la animación de respuesta
- v0.52: datos meteorológicos más precisos a nivel mundial a través de la API OpenWeatherMap y la API Maptiler
- v0.51: fragmentación "inteligente" de solicitudes externas para mitigar problemas relacionados con el tiempo de espera
- v0.50.3 - correcciones de
langdetect
y manejo - v0.50.2: animación de escritura en las respuestas, ajustes en la lógica de procesamiento
- v0.50.1 -
langdetect
sobre la evaluación automática de los requisitos de traducción - v0.50 - Llamada a función personalizada: verificación de datos de la API Perplexity
- v0.49.1 - Ajustes de modularidad
- v0.48 - Implementación de la API de servicio Openroute
- v0.47: más correcciones de lógica de sondeo y conteo de tokens
- v0.46.2: correcciones en el recuento de tokens y la lógica de sondeo
- v0.46: se reescribió la lógica de sondeo en los restablecimientos diarios del recuento de tokens
- v0.45 - Función
/usagechart
agregada para gráficos de utilización (requiere matplotlib
) - v0.44: llamada a funciones API, búsquedas meteorológicas en la API OpenWeatherMap y búsqueda geográfica en la API MapTiler
- v0.43.2: se corrigió un pequeño error en los límites de tokens diarios
- v0.43.1 - Mejor detección de errores
- v0.43 - Nuevos comandos de administración:
/setsystemmessage <message>
(válido hasta que se reinicie el bot) y /resetsystemmessage
(restablecer desde config.ini
) - v0.42 - Se agregó el comando
/reset
para restablecer el bot. Configure los indicadores ResetCommandEnabled
y AdminOnlyReset
en config.ini
en consecuencia. - v0.41: manejo de mensajes de texto modularizado en
text_message_handler.py
y manejo de mensajes de voz en voice_message_handler.py
- v0.40: gestión del tiempo de espera de la sesión para compactar el historial de chat (consulte
config.ini
=> SessionTimeoutMinutes
, MaxRetainedMessages
) - v0.39.5: pequeñas correcciones en la implementación de la carga útil de la API OpenAI
- v0.39.4 -
log_message
modularizado y rotate_log_file
(manejo de archivos de registro) => modules.py
- v0.39.3 -
check_global_rate_limit
modularizado => modules.py
- v0.39.2: análisis de estilo de texto y preprocesamiento WhisperAPI STT para el modelo mejorado
- v0.39: mejor análisis de bloques de código, html y otras marcas, más modularizado; ver
modules.py
- v0.38: mantenga un mejor registro del uso diario de tokens, optimizado ( nota : deberá borrar su
token_usage.json
existente, la estructura de archivos ha cambiado con respecto a la versión anterior) - v0.37 - mejor aplicación de los límites de mensajes de voz
- v0.36 - correcciones y ajustes del comando bot
- v0.35: comandos de bot modularizados para
bot_commands.py
, versión fija de configmerger.py
- v0.34: se agregó
configmerger.py
para facilitar la actualización del bot (combina indicadores de configuración antiguos con versiones nuevas) - v0.33: más correcciones de rendimiento y funcionalidades asíncronas unificadas+añadidas
- v0.32: sondeo de reinicio del contador de tokens diario y pequeñas correcciones de errores
- v0.31 - Contador de token de memoria contextual ajustado y arreglado para ser más preciso
- v0.30: ajustes finos y pequeñas correcciones en la interacción de Whisper API
- v0.29 - Se agregaron transcripciones de WhisperAPI a través de mensajes de voz
- Los mensajes de voz de WhisperAPI utilizan el mismo token API de OpenAI que la versión normal de chat de texto.
- consulte
config.ini
para activar o desactivar la opción - WIP para funciones de transcripción adicionales
- v0.28 - personalizable
/start
en config.ini
- v0.27: se agregó el comando
/usage
para rastrear el uso del token (solo para el propietario del bot, 0 para deshabilitarlo en config.ini
) - v0.26: se agregó un registro de chat separado y una funcionalidad de limitador global para solicitudes/min (ver
config.ini
) - v0.25: funcionalidad de límite de uso diario de tokens
- Se agregó una funcionalidad para establecer límites de uso diario de tokens (para control de costos de bot), consulte
config.ini
- utilidades adicionales modularizadas (mensaje de inicio, etc.) en
utils.py
- v0.24: corrección de errores y límite de velocidad pre-alfa
- v0.23: se agregó la opción para iniciar sesión en el archivo; consulte las nuevas opciones de registro en
config.ini
- v0.22:
escape_markdown
se movió a un archivo .py
separado, de todos modos no se usó - v0.21 - Refactorización integral e introducción del diseño orientado a objetos
- Implementé principios de programación orientada a objetos encapsulando la funcionalidad del bot dentro de la clase TelegramBot.
- Estructura de código refinada para mejorar la legibilidad, el mantenimiento y la escalabilidad.
- v0.20 - modularización, paso 1 (lectura de claves y tokens:
api_key.py
, bot_token.py
) - v0.19: corrección de errores de tiempo de espera, reintento de manejo; Valor
Timeout
agregado a config.ini
- v0.18: la temperatura del modelo ahora se puede configurar en
config.ini
- v0.17 - estampado de fecha y hora para una mejor conciencia temporal
- v0.16 -
/help
y /about
- v0.15 - memoria contextual del historial de chat (recortada con MAX_TOKENS)
- v0.14 - corrección de errores
- v0.13 - análisis/expresión regular para títulos de URL + rebajas de direcciones
- v0.12: más análisis de expresiones regulares HTML desde la reducción de API
- v0.11 - cambiado al análisis HTML
- v0.10 - Pruebas de MarkdownV2 (los bloques de código + negrita funcionan principalmente )
- v0.09 - usando MarkdownV2
- v0.08 - descuento para las respuestas del bot
- v0.07 - registrar mensajes entrantes y salientes
- v0.06 - Mensaje del sistema API arreglado
- v0.05 - reintento, número máximo de reintentos, retraso de reintento
- v0.04 - recorte del historial de chat
Contribuir
- ¡Se agradecen todas las contribuciones! No dude en publicar también cualquier error y otros problemas en la página "Problemas" del repositorio.
- No olvides darle una estrella si te gusta. :-)
Acerca de
- Escrito por Flying Fathead
- Código fantasma digital de ChaosWhisperer