ChatGPT Telegram Bot

https://github.com/n3d1117/chatgpt-telegram-bot

A Telegram bot that integrates with OpenAI’s official ChatGPT APIs to provide answers. Ready to use with minimal configuration required.

与 OpenAI 的官方ChatGPT API集成以提供答案的Telegram机器人。只需最少的配置即可使用。

特征

  • 答案中支持降价
  • /reset使用命令重置对话
  • 生成响应时键入指示符
  • 可以通过指定允许的用户列表来限制访问
  • Docker 和代理支持
  • (新!)通过/image命令使用 DALL·E 生成图像
  • (新!)使用 Whisper 转录音频和视频消息(可能需要ffmpeg)
  • (新!)自动对话摘要以避免过度使用令牌(修复#34)
  • (新!)带内联查询的群聊支持
  • 要使用此功能,请通过/setinline 命令在 BotFather 中为您的机器人启用内联查询
  • (新!)跟踪每个用户的令牌使用情况 - @AlexHTW
  • (新!)通过命令获取个人令牌使用统计数据和每天/每月的成本/stats- @AlexHTW
  • (新!)用户预算和访客预算 - @AlexHTW
  • (新!)流支持
  • (新!)GPT-4 支持
  • 如果您有权访问 GPT-4 API,只需将OPENAI_MODEL参数更改为gpt-4

基础要求

  • Python 3.9+
  • Telegram 机器人及其令牌(请参阅教程)
  • 一个OpenAI帐户(参见配置部分)

必须配置

通过复制.env.example并将其重命名为.env来自定义配置,然后根据需要编辑所需的参数:

参数 说明
OPENAI_API_KEY 您的 OpenAI API 密钥,您可以从 此处
TELEGRAM_BOT_TOKEN 您的 Telegram 机器人的令牌,使用 BotFather 获得(参见 教程
ADMIN_USER_IDS 管理员的电报用户 ID。这些用户可以访问特殊的管理命令、信息并且没有预算限制。管理员 ID 不必添加到“ALLOWED_TELEGRAM_USER_IDS”。注意:默认情况下,没有管理员(’-‘)
ALLOWED_TELEGRAM_USER_IDS 允许与机器人交互的 Telegram 用户 ID 的逗号分隔列表(使用 getidsbot 查找您的用户 ID)。注意:默认情况下,允许所有人 (*)

可选配置

以下参数是可选的,可以在.env文件中设置:

参数 说明 默认值
ENABLE_QUOTING 私聊是否开启消息引用 true
ENABLE_IMAGE_GENERATION 是否通过/image 命令启用图像生成 true
ENABLE_TRANSCRIPTION 是否开启音视频信息转录 true
MONTHLY_USER_BUDGETS 以逗号分隔的每个用户的金额列表,来自列表“ALLOWED_TELEGRAM_USER_IDS”,用于为每个用户设置 OpenAI API 成本的自定义使用限制。注意:默认情况下,对任何人都没有限制 (*) *
MONTHLY_GUEST_BUDGET $-金额作为所有来宾用户的使用限制。来宾用户是群聊中不在“ALLOWED_TELEGRAM_USER_IDS”列表中的用户。如果未在用户预算中设置使用限制,则忽略该值 (MONTHLY_USER_BUDGETS=”*”) 100.0
代理 用于 OpenAI 和 Telegram 机器人的代理(例如 http://localhost:8080 -
OPENAI_MODEL 用于生成响应的 OpenAI 模型 gpt-3.5-turbo
ASSISTANT_PROMPT 设置基调并控制助手行为的系统消息 你是一个很有帮助的助手。
SHOW_USAGE 是否在每次响应后显示 OpenAI 令牌使用信息 false
是否流式传输响应。注意:不兼容,如果启用,N_CHOICES 高于 1 true
MAX_TOKENS ChatGPT API 将返回多少令牌的上限 1200
MAX_HISTORY_SIZE 保留在内存中的最大消息数,之后将总结对话以避免过度使用令牌 15
MAX_CONVERSATION_AGE_MINUTES 自上一条消息以来对话应该存在的最大分钟数,之后对话将被重置 180
VOICE_REPLY_WITH_TRANSCRIPT_ONLY 是仅使用文字记录还是使用文字记录的 ChatGPT 响应来回答语音消息 true
N_CHOICES 为每个输入消息生成的答案数。注意:如果启用 STREAM,将其设置为大于 1 的数字将无法正常工作 1
温度 介于 0 和 2 之间的数字。值越高,输出越随机 1.0
PRESENCE_PENALTY -2.0 和 2.0 之间的数字。正值根据到目前为止是否出现在文本中来惩罚新标记 0
FREQUENCY_PENALTY -2.0 和 2.0 之间的数字。到目前为止,正值会根据它们在文本中的现有频率惩罚新标记 0
IMAGE_SIZE DALL·E生成的图像大小。允许值:“256x256”、“512x512”或“1024x1024” “512x512”
GROUP_TRIGGER_KEYWORD 如果设置,群聊中的机器人将只回复以此关键字开头的消息 “”
IGNORE_GROUP_TRANSCRIPTIONS 如果设置为 true,机器人将不会处理群聊中的转录 true
TOKEN_PRICE $-每 1000 个代币的价格,用于计算使用统计中的成本信息 (https://openai.com/pricing) 0.002
IMAGE_PRICES 一个以逗号分隔的列表,包含 3 个不同图像尺寸的价格元素:“256x256”、“512x512”和“1024x1024” “0.016,0.018,0.02”
TRANSCRIPTION_PRICE 一分钟音频转录的美元价格 0.006

查看官方 API 参考 了解更多详情。

安装

克隆存储库并导航到项目目录:

git clone https://github.com/n3d1117/chatgpt-telegram-bot.git
cd chatgpt-telegram-bot
基于源码
  1. 创建虚拟环境:
python -m venv venv
  1. 激活虚拟环境:
# For Linux or macOS:
source venv/bin/activate
# For Windows:
venv\Scripts\activate
  1. 使用requirements.txt文件安装依赖项:
pip install -r requirements.txt
  1. 使用以下命令启动机器人:
python bot/main.py
使用 Docker Compose

运行以下命令来构建和运行 Docker 镜像:

docker compose up
可直接使用的 Docker 镜像

您还可以使用 Docker Hub 中的 Docker 镜像:

docker pull n3d1117/chatgpt-telegram-bot:latest

或使用 GitHub 容器注册表

docker pull ghcr.io/n3d1117/chatgpt-telegram-bot:latest

学分

作者:Jeebiz  创建时间:2023-04-09 22:12
最后编辑:Jeebiz  更新时间:2023-12-28 16:43