ChatGPT-Telegram-Bot
ChatGPT-Telegram-Bot 是一款功能强大的 Telegram 机器人,旨在让用户在即时通讯软件中直接体验顶尖人工智能服务。它完美解决了用户无法在移动端便捷访问多模型 AI、处理复杂文件以及进行联网搜索的痛点。无论是普通用户希望随时随地获取资讯、总结文档,还是开发者需要快速搭建私有化 AI 助手,它都能提供流畅的支持。
该工具的核心亮点在于其广泛的兼容性与丰富的功能生态。它不仅支持 OpenAI 格式接口,还能通过集成方案接入 Claude、Gemini、Groq 等全球主流大模型,并具备语音、图片及 PDF 等多模态问答能力。内置的网页搜索、论文摘要和代码解释器插件,让它成为得力的全能助理。此外,ChatGPT-Telegram-Bot 独创了群组话题隔离模式,确保不同对话场景下的配置与历史互不干扰;其异步多线程架构保障了高并发下的响应速度,而自动合并长文本的功能则突破了平台消息长度限制。配合一键式低成本部署方案,即使是技术新手也能轻松拥有个性化的 AI 伙伴。
使用场景
某跨国技术团队的日常运营中,成员需频繁在 Telegram 群组内协作,既要实时查询最新的技术文档和论文,又要处理多语言沟通及代码调试问题。
没有 ChatGPT-Telegram-Bot 时
- 信息获取割裂:成员需跳出聊天窗口,手动打开浏览器搜索新闻或查阅 ArXiv 论文,再复制粘贴回群组,严重打断协作流。
- 多模型切换繁琐:团队想对比不同大模型(如 Claude 与 GPT)的回答,必须分别登录多个网页端账号,无法在同一界面快速切换。
- 文件处理低效:上传 PDF 技术手册或代码截图后,无法直接获得解析结果,只能人工阅读提炼后再打字总结。
- 长文本与上下文混乱:Telegram 原生消息长度限制导致长篇代码或报告被截断,且群聊中不同成员的提问容易混淆,缺乏独立的对话隔离。
使用 ChatGPT-Telegram-Bot 后
- 一站式智能检索:直接在对话框输入指令即可调用 Web Search 或总结 ArXiv 论文,插件自动返回带来源的精炼答案,无需离开 Telegram。
- 模型分组随心换:利用模型分组系统,成员可在聊天窗口内一键切换 GPT、Gemini 或 Groq 等后端,即时对比不同模型的输出效果。
- 多模态直接问答:直接拖入 PDF 文档、语音条或代码截图,ChatGPT-Telegram-Bot 立即解析内容并给出针对性解答或代码修复建议。
- 话题隔离与长文无忧:开启群组话题模式后,不同项目的讨论互不干扰;超长回复自动拆分发送,完美突破字符限制,确保信息完整流畅。
ChatGPT-Telegram-Bot 将分散的 AI 能力无缝融入即时通讯流,把原本碎片化的“搜索 - 复制 - 粘贴”工作流转变为高效的“提问 - 获取”闭环。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
🤖️ 电报聊天机器人
ChatGPT 电报机器人是一款功能强大的电报机器人,支持与 OpenAI 兼容的大语言模型 API。它使用户能够在电报上进行高效的对话和信息检索。对于 Anthropic、Gemini、Vertex AI、Azure、AWS、XAI、Cohere、Groq、Cloudflare、OpenRouter 等其他提供商的模型支持,请使用我的另一个项目 uni-api 来集成它们。这有助于降低维护成本。感谢您的理解。
✨ 功能
- 多种 AI 模型:支持与 OpenAI 格式兼容的 API。对于 Anthropic、Gemini、Vertex AI、Azure、AWS、XAI、Cohere、Groq、Cloudflare、OpenRouter 等其他提供商的模型,请使用 uni-api 进行集成。同时也支持 one-api/new-api。采用自主研发的 API 请求后端 SDK,不依赖于 OpenAI SDK。
- 多模态问答:支持语音、音频、图片以及 PDF/TXT/MD/Python 文档的问答。用户可以直接在聊天框中上传文件以供使用。
- 模型分组系统:将 AI 模型按逻辑分组,便于选择。模型可以按提供商(如 GPT、Claude 等)或按能力分组。未明确分组的模型会自动归入“OTHERS”组。这使得模型选择更加直观,尤其是在可用模型较多时。
- 群聊主题模式:支持在群聊中启用主题模式,实现不同主题之间的 API、对话历史、插件配置及偏好设置的隔离。
- 丰富的插件系统:支持网络搜索(DuckDuckGo 和 Google)、URL 摘要、ArXiv 论文摘要以及代码解释器。
- 用户友好的界面:允许在聊天窗口内灵活切换模型,并支持类似打字机效果的流式输出。支持精确的 Markdown 消息渲染,利用了我的另一个 项目。
- 高效的消息处理:异步处理消息,多线程回答问题,支持对话隔离,为不同用户提供独立的对话记录。
- 长文本消息处理:自动合并长文本消息,突破电报单条消息长度限制。当机器人的回复超过电报限制时,会将其拆分为多条消息。
- 多用户对话隔离:支持对话隔离和配置隔离,允许在多用户模式和单用户模式之间切换。
- 问题预测:自动生成后续问题,预测用户接下来可能提出的问题。
- 多语言界面:支持简体中文、繁体中文、俄语和英语界面。
- 白名单、黑名单和管理员设置:支持设置白名单、黑名单和管理员。
- 内联模式:允许用户在任何聊天窗口中 @ 机器人来生成答案,而无需在机器人的聊天窗口中提问。
- 便捷部署:支持一键 koyeb、Zeabur、Replit 部署,真正零成本且傻瓜式操作。同时支持 kuma 防休眠,以及 Docker 和 fly.io 部署。
🍃 环境变量
以下是与机器人核心设置相关的环境变量列表:
| 变量名 | 描述 | 是否必填 |
|---|---|---|
| BOT_TOKEN | Telegram 机器人令牌。在 BotFather 上创建一个机器人以获取 BOT_TOKEN。 | 是 |
| API_KEY | OpenAI 或第三方 API 密钥。 | 是 |
| MODEL | 设置默认的问答模型;默认值为:gpt-5。此选项可通过机器人的“info”命令自由切换,原则上无需设置。 |
否 |
| WEB_HOOK | 每当 Telegram 机器人接收到用户消息时,消息会被传递到 WEB_HOOK,机器人将在那里监听并及时处理接收到的消息。 | 否 |
| BASE_URL | 如果您使用的是 OpenAI 官方 API,则无需设置此参数。如果您使用的是第三方 API,则需要填写第三方代理网站。默认值为:https://api.openai.com/v1/chat/completions | 否 |
| NICK | 默认为空,NICK 是机器人的名称。只有当用户输入的消息以 NICK 开头时,机器人才会响应;否则,机器人会对任何消息作出回应。尤其是在群聊中,如果没有设置 NICK,机器人会回复所有消息。 | 否 |
| GOOGLE_API_KEY | 如果需要使用 Google 搜索,必须设置此参数。如果不设置该环境变量,机器人将默认提供 DuckDuckGo 搜索服务。 | 否 |
| GOOGLE_CSE_ID | 如果需要使用 Google 搜索,需与 GOOGLE_API_KEY 一起设置。 | 否 |
| whitelist | 设置哪些用户可以访问机器人,并用逗号(,)连接获准使用机器人的用户 ID。默认值为 None,表示机器人对所有人开放。 |
否 |
| BLACK_LIST | 设置哪些用户被禁止访问机器人,并用逗号(,)连接被禁止使用的用户 ID。默认值为 None。 |
否 |
| ADMIN_LIST | 设置管理员列表。只有管理员可以使用 /info 命令来配置机器人。 |
否 |
| GROUP_LIST | 设置可以使用机器人的群组列表。用逗号(,)连接群组 ID。即使群组成员不在白名单中,只要群组 ID 在 GROUP_LIST 中,该群组的所有成员都可以使用机器人。 |
否 |
| CUSTOM_MODELS | 设置自定义模型名称列表。用逗号(,)连接模型名称。如果需要移除某个默认模型,在默认模型名称前加一个连字符(-)。要移除所有默认模型,使用 -all。要创建模型分组,用分号(;)分隔不同分组,用冒号(:)定义分组名称及其包含的模型,例如:CUSTOM_MODELS=-all,command,grok-2;GPT:gpt-5,gpt-3.5-turbo;Claude:claude-3-opus,claude-3-sonnet;OTHERS。未指定分组的模型将自动归入“OTHERS”分组。 |
否 |
| CHAT_MODE | 引入多用户模式,不同用户的配置互不共享。当 CHAT_MODE 为 global 时,所有用户共享同一配置。当 CHAT_MODE 为 multiusers 时,用户的配置彼此独立。 |
否 |
| temperature | 指定大语言模型的温度。默认值为 0.5。 |
否 |
| GET_MODELS | 指定是否通过 API 获取支持的模型。默认值为 False。 |
否 |
| SYSTEMPROMPT | 指定系统提示语,系统提示语是一个字符串,例如:SYSTEMPROMPT=你是 ChatGPT,由 OpenAI 训练的大语言模型。请以对话方式回答问题。。默认值为 None。系统提示语的设置仅在 CHAT_MODE 为 global 时有效。当 CHAT_MODE 为 multiusers 时,无论系统提示语的值如何,该环境变量都不会修改任何用户的系统提示语,因为用户不希望自己的系统提示语被更改为全局系统提示语。 |
否 |
| LANGUAGE | 指定机器人显示的默认语言,包括按钮显示语言和对话语言。默认值为 English。目前仅支持以下四种语言的设置:English、Simplified Chinese、Traditional Chinese、Russian。部署完成后,也可以使用 /info 命令来设置显示语言。 |
否 |
| CONFIG_DIR | 指定存储用户配置文件的文件夹路径。CONFIG_DIR 是用于存储用户配置的文件夹。每次机器人启动时,都会从 CONFIG_DIR 文件夹中读取配置,因此用户每次重启后都不会丢失之前的设置。在本地使用 Docker 部署时,可以通过 -v 参数挂载文件夹来实现配置持久化。默认值为 user_configs。 |
否 |
| RESET_TIME | 指定机器人重置聊天记录的时间间隔。每隔 RESET_TIME 秒,机器人会为除管理员列表以外的所有用户重置聊天记录。每个用户的重置时间不同,根据其上次提问的时间计算下一次重置时间,因此并非所有用户同时重置。默认值为 3600 秒,最小值为 60 秒。 |
否 |
以下是与机器人偏好设置相关的环境变量列表。机器人启动后,也可以通过使用 /info 命令并点击“Preferences”按钮来设置偏好:
| 变量名称 | 描述 | 是否必填 |
|---|---|---|
| PASS_HISTORY | 默认值为 9999。机器人会记住对话历史,并在下一次回复时考虑上下文。如果设置为 0,机器人将忘记对话历史,仅考虑当前对话。PASS_HISTORY 的值必须大于或等于 0。它对应于偏好设置中的“聊天历史”按钮。 |
否 |
| LONG_TEXT | 如果用户输入的消息长度超过 Telegram 的限制,并且在短时间内连续发送多条消息,机器人会将这些消息视为一条消息处理。默认值为 True。对应于偏好设置中的“长文本合并”按钮。 |
否 |
| IMAGEQA | 启用图像问答功能,默认设置为模型可以回答图像内容,即默认值为 True。对应于偏好设置中的“图像问答”按钮。 |
否 |
| LONG_TEXT_SPLIT | 当机器人的回复超过 Telegram 的限制时,会将其拆分为多条消息。默认值为 True。对应于偏好设置中的“长文本拆分”按钮。 |
否 |
| FILE_UPLOAD_MESS | 当文件或图片上传成功且机器人完成处理后,机器人会发送一条消息提示上传成功。默认值为 True。这对应于偏好设置中的“文件上传消息”按钮。 |
否 |
| FOLLOW_UP | 自动为用户生成多个相关问题供其选择。默认值为 False。对应于偏好设置中的“问题建议”按钮。 |
否 |
| TITLE | 是否在机器人回复的开头显示模型名称。默认值为 False。对应于偏好设置中的“模型标题”按钮。 |
否 |
| REPLY | 机器人是否应以“回复”格式回复用户的消息。默认值为 False。对应于偏好设置中的“回复消息”按钮。 |
否 |
以下是与机器人插件设置相关的环境变量列表:
| 变量名称 | 描述 | 是否必填 |
|---|---|---|
| get_search_results | 是否启用搜索插件。默认为 False。 |
否 |
| get_url_content | 是否启用 URL 摘要插件。默认为 False。 |
否 |
| download_read_arxiv_pdf | 是否启用 arXiv 论文摘要插件。默认为 False。 |
否 |
| run_python_script | 是否启用代码解释器插件。默认为 False。 |
否 |
| generate_image | 是否启用图像生成插件。默认为 False。 |
否 |
| get_time | 是否启用日期插件。默认为 False。 |
否 |
Fugue 远程部署
一键部署
点击下方按钮,即可在 Fugue 上使用预构建的 Docker 镜像进行一键部署:
打开部署页面后,在环境编辑器中填写 BOT_TOKEN、API 和 BASE_URL,然后进行部署。WEB_HOOK 是可选的。如果你已经为应用拥有公共域名,则将其设置为 https://your-domain/;否则,可以留空。
Koyeb 远程部署
在 Koyeb 上有两种部署方式:一种是使用 Koyeb 提供的 Docker 镜像进行一键部署,另一种是导入本仓库进行部署。这两种方法都是免费的。第一种方法部署简单,但无法自动更新;而第二种方法稍显复杂,却可以实现自动更新。
一键部署
点击下方按钮,即可使用预构建的 Docker 镜像进行一键自动部署:
在环境变量中,填写 BOT_TOKEN、API 和 BASE_URL,然后点击部署按钮。WEB_HOOK 环境变量可以保持原样,Koyeb 会自动分配一个子域名。
仓库部署
分叉本仓库 点击分叉此仓库
部署时,需选择仓库方式,将
Run command设置为python3 bot.py,并将Exposed ports设置为8080。安装 pull 请求,以便自动同步本仓库。
Zeabur 远程部署
一键部署:
若需要后续功能更新,建议采用以下部署方式:
- 首先分叉本仓库,然后注册 Zeabur。目前,Zeabur 不支持免费的 Docker 容器部署。若需使用 Zeabur 部署该项目的机器人,需升级至 Developer Plan。幸运的是,Zeabur 推出了他们的 赞助计划,为本项目的每一位贡献者提供一个月的 Developer Plan。如果你有想要增强的功能,欢迎向本项目提交 pull 请求。
- 从你自己的 Github 仓库导入。
- 设置所需的环境变量,并重新部署。
- 若后续需要功能更新,只需在你的仓库中同步本仓库,然后在 Zeabur 上重新部署,即可获得最新功能。
Replit 远程部署
导入 Github 仓库后,设置运行命令:
pip install -r requirements.txt > /dev/null && python3 bot.py
在工具栏的 Secrets 中添加机器人所需的环境变量,其中:
- WEB_HOOK:Replit 会自动为你分配一个域名,填写
https://appname.username.repl.co - 请记得开启“Always On”
点击屏幕顶部的运行按钮即可启动机器人。
fly.io 远程部署
官方文档:https://fly.io/docs/
使用 Docker 镜像部署 fly.io 应用程序
flyctl launch --image yym68686/chatgpt:latest
在提示时输入应用程序名称,并选择“否”以不初始化 Postgresql 或 Redis。
按照提示进行部署。官方控制面板中会提供一个二级域名,可用于访问服务。
设置环境变量
flyctl secrets set BOT_TOKEN=bottoken
flyctl secrets set API_KEY=
# 可选
flyctl secrets set WEB_HOOK=https://flyio-app-name.fly.dev/
flyctl secrets set NICK=javis
查看所有环境变量
flyctl secrets list
移除环境变量
flyctl secrets unset MY_SECRET DATABASE_URL
通过 SSH 连接到 fly.io 容器
flyctl ssh issue --agent
# 建立 SSH 连接
flyctl ssh establish
检查 Webhook URL 是否正确
https://api.telegram.org/bot<token>/getWebhookInfo
Docker 本地部署
启动容器
docker run -p 80:8080 --name chatbot -dit \
-e BOT_TOKEN=your_telegram_bot_token \
-e API_KEY= \
-e BASE_URL= \
-v ./user_configs:/home/user_configs \
yym68686/chatgpt:latest
或者,如果您想使用 Docker Compose,以下是 docker-compose.yml 示例:
version: "3.5"
services:
chatgptbot:
container_name: chatgptbot
image: yym68686/chatgpt:latest
environment:
- BOT_TOKEN=
- API_KEY=
- BASE_URL=
- CUSTOM_MODELS=-all;GPT:gpt-5,gpt-3.5-turbo;Claude:claude-3-opus,claude-3-sonnet
volumes:
- ./user_configs:/home/user_configs
ports:
- 80:8080
在后台运行 Docker Compose 容器
docker-compose pull
docker-compose up -d
# uni-api
docker-compose -f docker-compose-uni-api.yml up -d
将 Docker 镜像打包并上传到 Docker Hub
docker build --no-cache -t chatgpt:latest -f Dockerfile.build --platform linux/amd64 .
docker tag chatgpt:latest yym68686/chatgpt:latest
docker push yym68686/chatgpt:latest
一键重启 Docker 镜像
set -eu
docker pull yym68686/chatgpt:latest
docker rm -f chatbot
docker run -p 8080:8080 -dit --name chatbot \
-e BOT_TOKEN= \
-e API_KEY= \
-e BASE_URL= \
-e GOOGLE_API_KEY= \
-e GOOGLE_CSE_ID= \
-e claude_api_key= \
-v ./user_configs:/home/user_configs \
yym68686/chatgpt:latest
docker logs -f chatbot
此脚本用于通过单个命令重启 Docker 镜像。首先,如果存在名为“chatbot”的现有 Docker 容器,则将其删除。然后,运行一个新的名为“chatbot”的 Docker 容器,暴露 8080 端口,并设置各种环境变量。使用的 Docker 镜像是“yym68686/chatgpt:latest”。最后,跟踪“chatbot”容器的日志。
🚀 源代码本地部署
Python >= 3.10
直接从源代码运行机器人,无需使用 Docker。克隆仓库:
git clone --recurse-submodules --depth 1 -b main --quiet https://github.com/yym68686/ChatGPT-Telegram-Bot.git
安装依赖项:
pip install -r requirements.txt
配置环境变量:
./configure_env.sh
运行:
python bot.py
🧩 插件
该项目支持多种插件,包括:DuckDuckGo 和 Google 搜索、URL 摘要、ArXiv 论文摘要、DALLE-3 绘画以及代码解释器等。您可以通过设置环境变量来启用或禁用这些插件。
- 如何开发插件?
所有与插件相关的代码都位于该仓库中的 git 子模块 aient 中。aient 是我独立开发的一个仓库,用于处理 API 请求、对话历史管理等功能。当您使用带有 --recurse-submodules 参数的 git clone 克隆此仓库时,aient 将自动下载到您的本地机器上。此仓库中的所有插件代码都位于相对路径 aient/src/aient/plugins 下。您可以在此目录中添加自己的插件代码。插件开发流程如下:
在
aient/src/aient/plugins目录下创建一个新的 Python 文件,例如myplugin.py。通过在函数上方添加@register_tool()装饰器来注册插件。通过from .registry import register_tool导入register_tool。在 utils/i18n.py 文件中为插件名称添加多种语言的翻译。
完成上述步骤后,您的插件即可使用。🎉
📄 常见问题解答
- WEB_HOOK 环境变量有什么作用?应该如何使用?
WEB_HOOK 是一个 webhook 地址。具体来说,当 Telegram 机器人收到用户消息时,它会将消息发送到 Telegram 服务器,然后由服务器将消息转发到机器人设置的 WEB_HOOK 地址处的服务器。因此,当有消息发送到机器人时,机器人几乎会立即执行处理程序。通过 WEB_HOOK 接收消息比未设置 WEB_HOOK 时响应速度更快。
在使用 Zeabur、Replit 或 Koyeb 等平台部署机器人时,这些平台会为您提供一个域名,您需要将其填写到 WEB_HOOK 中,以便机器人能够接收用户消息。当然,也可以不设置 WEB_HOOK,但机器人的响应时间会稍长一些,尽管差异并不明显,因此通常不需要设置 WEB_HOOK。
在服务器上部署机器人时,您需要使用 nginx 或 caddy 等反向代理工具,将 Telegram 服务器发送的消息转发到您的服务器,以便机器人能够接收用户消息。因此,您需要将 WEB_HOOK 设置为您服务器的域名,并将请求 WEB_HOOK 的流量转发到机器人所在的服务器和相应端口。例如,在 caddy 中,您可以在 caddy 配置文件 /etc/caddy/Caddyfile 中这样配置:
your_webhook_domain.com {
reverse_proxy localhost:8082
}
- 为什么我无法使用 Google 搜索?
默认情况下提供的是 DuckDuckGo 搜索。Google 搜索的官方 API 需要用户自行申请。它可以提供 GPT 之前无法回答的实时信息,例如微博上的今日热点、特定地点的今日天气,以及某个人物或新闻事件的进展。
- 为什么即使我添加了 Google 搜索 API,仍然无法使用搜索功能?
可能有两种原因:
只有支持工具使用的大型语言模型(LLM)API 才能使用搜索功能。目前,此项目仅支持 OpenAI、Claude 和 Gemini 系列模型的 API 使用搜索功能。其他模型提供商的 API 目前在此项目中不支持工具使用。如果您希望适配某个模型提供商,可以联系维护者。
如果您正在使用 OpenAI、Claude 和 Gemini 系列模型的 API,但无法使用搜索功能,可能是因为搜索功能尚未启用。您可以通过
/info命令进入设置界面,检查是否已开启搜索功能。如果您使用的是 OpenAI、Claude 或 Gemini 系列模型的 API,请确保您使用的是官方 API。如果您使用的是第三方中继 API,提供商可能是通过网页爬取的方式为您提供 API。而通过网页爬取提供的 API 无法使用工具功能,这意味着本项目的所有插件都无法使用。如果您确认自己使用的是官方 API 但仍无法成功搜索,请联系开发者。
- 如何切换模型?
您可以在聊天窗口中使用 /info 命令在 GPT-3.5、GPT-4、GPT-4o 等不同模型之间进行切换。
- 能否部署到群组中?
可以。该机器人支持白名单机制,以防止滥用和信息泄露。
- 为什么将机器人添加到群组后无法正常对话?
如果这是您首次将机器人加入群聊,您需要在 BotFather 中将群组隐私设置为“禁用”,然后将机器人从群聊中移除并重新添加,这样机器人就能正常使用了。
另一种方法是将机器人设为管理员,这样它就可以正常工作。然而,如果您想将机器人添加到一个您不是管理员的群聊中,第一种方法更为合适。
另外一种可能性是 GROUP_LIST 设置的并非当前群聊的 ID。请检查是否已正确设置 GROUP_LIST。需要注意的是,GROUP_LIST 是指群组的 ID,而不是群组名称。群组 ID 以负号开头,后跟一串数字。
GROUP_LIST、ADMIN_LIST和白名单的设置如何影响机器人的行为?
如果未设置白名单,所有人都可以使用机器人。若设置了白名单,则只有白名单中的用户才能使用机器人。如果设置了 GROUP_LIST,则只有 GROUP_LIST 中的群组可以使用机器人。如果同时设置了白名单和 GROUP_LIST,那么群组内的所有人都可以使用机器人,但只有白名单中的用户可以与机器人进行私聊。如果设置了 ADMIN_LIST,则只有 ADMIN_LIST 中的用户可以使用 /info 命令来更改机器人的设置。如果没有设置 ADMIN_LIST,则所有人都可以使用 /info 命令来修改机器人的配置。此外,GROUP_LIST 也可以包含频道,频道 ID 同样以负号开头,后接一串数字。
BASE_URL应该如何设置?
BASE_URL 支持所有后缀,包括:https://api.openai.com/v1/chat/completions、https://api.openai.com/v1 和 https://api.openai.com/。机器人会根据不同的用途自动分配不同的端点。
- 是否必须配置
web_hook环境变量?
web_hook 并非必需的环境变量。您只需根据应用功能需求,设置域名(需与 WEB_HOOK 一致)及其他必要的环境变量即可。
- 我使用 Docker Compose 部署了机器人。如果文档存储在服务器本地,应将其挂载到哪个目录才能生效?是否需要额外配置或修改代码?
您可以直接通过聊天框将文档发送给机器人,机器人会自动解析文档内容。要使用文档问答功能,您需要先启用历史对话功能。无需对文档进行额外处理。
- 我仍然无法让机器人正常工作……我想在群组中使用它,已经将
ADMIN_LIST设置为自己,GROUP_LIST设置为该群组,白名单保持为空。然而,只有我可以在该群组中使用机器人,其他成员却提示没有权限,这是怎么回事?
以下是排查步骤:请仔细检查 GROUP_LIST 是否正确。Telegram 群组的 ID 以负号开头,后接一串数字。如果不正确,请使用此机器人 bot 重新获取群组 ID。
- 我上传了文档,但机器人并未根据文档内容作出响应,这是为什么?
要使用文档问答功能,您必须先启用历史记录功能。您可以通过 /info 命令开启历史记录,或者将环境变量 PASS_HISTORY 设置为大于 2 的值,以默认启用历史记录功能。请注意,启用历史记录会产生额外费用,因此本项目默认不启用历史记录功能。这意味着在默认设置下,问答功能无法使用。在使用此功能前,您需要手动开启历史记录功能。
- 设置了
NICK后,当我使用 @ 提及机器人时没有反应,只有当消息以昵称开头时才会回复。如何让机器人既能响应昵称,也能响应 @机器人名呢?
在群聊场景下,如果未设置环境变量 NICK,机器人会接收所有群组消息并作出回应。因此,设置 NICK 是必要的。设置 NICK 后,机器人只会对以 NICK 开头的消息作出响应。所以,如果您希望使用 @ 提及机器人时获得回复,只需将 NICK 设置为 @机器人名即可。这样一来,当您在群组中 @ 机器人时,机器人会检测到消息以 @机器人名开头,并作出相应回复。
- 历史记录会保留多少条消息?
其他所有模型均采用官方设定的上下文长度限制,例如 gpt-3.5-turbo-16k 的上下文长度为 16,000 token,gpt-5 的上下文长度为 128,000 token,而 Claude3/3.5 的上下文长度为 200,000 token。这一限制是为了节省用户的成本,因为大多数场景并不需要过高的上下文长度。
- 如何从模型列表中删除默认的模型名称?
您可以使用 CUSTOM_MODELS 环境变量来实现。例如,如果您想添加 gpt-5 并从模型列表中移除 gpt-3.5,可以将 CUSTOM_MODELS 设置为 gpt-5,-gpt-3.5。如果您想一次性删除所有默认模型,可以将 CUSTOM_MODELS 设置为 -all,gpt-5。
- 如何将模型分组?
您可以使用带有特殊语法的 CUSTOM_MODELS 环境变量:
- 使用分号 (
;) 分隔不同的组; - 使用冒号 (
:) 定义组名及其包含的模型; - 在同一组内,使用逗号 (
,) 分隔各个模型。
例如:
CUSTOM_MODELS=-all;GPT:gpt-5,gpt-4,gpt-3.5-turbo;Claude:claude-3-opus,claude-3-sonnet,claude-3-haiku;Gemini:gemini-1.5-pro,gemini-1.0-pro;command,grok-2
这将创建三个组:“GPT”、“Claude”和“Gemini”,每个组分别包含相应的模型。“command”和“grok-2”没有明确归属的组,因此它们会被自动归入“OTHERS”组。
如果即使没有未分组的模型也想包含一个空的“OTHERS”组,可以在最后添加“OTHERS”:
CUSTOM_MODELS=-all;GPT:gpt-5;Claude:claude-3-opus;OTHERS
- 对话隔离具体是如何工作的?
对话始终是基于不同的窗口而非不同用户进行隔离的。这意味着在同一群聊窗口、同一主题以及同一私聊窗口中,都被视为同一个对话。CHAT_MODE 只影响配置是否被隔离。在多用户模式下,每个用户的插件配置、偏好设置等都是独立的,互不影响。而在单用户模式下,所有用户共享相同的插件配置和偏好设置。然而,对话历史始终是隔离的。对话隔离是为了保护用户隐私,确保用户的对话历史、插件配置、偏好设置等不会被其他用户看到。
- 为什么 Docker 镜像很久没有更新了?
Docker 镜像仅存储程序的运行环境。目前程序的运行环境非常稳定,环境依赖几乎没有变化,因此 Docker 镜像并未更新。每次重新部署 Docker 镜像时,都会拉取最新的代码,所以无需担心 Docker 镜像的更新问题。
- 为什么容器启动后会报错“http connect error 或 telegram.error.TimedOut: Timed out”?
这个问题很可能是由于部署 Docker 的服务器无法连接到 Telegram 服务器,或者 Telegram 服务器本身不稳定导致的。
- 大多数情况下,只需重启服务、检查服务器网络环境,或等待 Telegram 服务恢复即可。
- 此外,您也可以尝试通过 Webhook 与 Telegram 服务器通信,这可能会解决问题。
- 如何让 Docker 容器无限重试而不是一开始就停止?
Docker 中的 --restart unless-stopped 参数用于设置容器的重启策略。具体来说:
unless-stopped:该策略表示容器会在停止时自动重启,除非它是被手动停止的。也就是说,如果容器因错误或系统重启而停止,它会自动重启;但如果您手动停止容器(例如使用
docker stop命令),它将不会自行重启。 这个参数对于需要持续运行的服务非常有用,因为它可以确保服务在意外中断后自动恢复,而无需人工干预。示例:假设您有一个运行 Web 服务器的 Docker 容器,并希望它在崩溃或系统重启时自动重启,但在您手动停止时则不重启。您可以使用以下命令:
docker run -d --name my-web-server -p 80:80 --restart unless-stopped my-web-server-image
在这个例子中,名为 my-web-server 的 Web 服务器容器将在除手动停止以外的情况下自动重启。
- 切换模型时,我需要重新输入提示词吗?
是的,因为切换模型会重置对话历史,所以需要重新输入提示词。
- PASS_HISTORY 的合适值是多少?
PASS_HISTORY 的数值严格等于对话历史中的消息数量。推荐值为 2,因为系统提示词占一条消息。如果设置为 0,PASS_HISTORY 会自动重置为 2,以确保对话正常进行。当 PASS_HISTORY 小于或等于 2 时,机器人只会记住当前的一问一答,下次不会再记住之前的问答内容。PASS_HISTORY 的最大值没有限制,但请注意,对话历史中的消息越多,每次对话的成本就越高。如果没有设置 PASS_HISTORY,其默认值为 9999,表示对话历史中的消息数为 9999 条。
- Bot Token 是否可以有多个?
目前还不支持多个 Bot Token,未来会支持。
- 如何使用机器人指令?
/info:机器人/info指令可以查看机器人的配置信息,包括当前使用的模型、API 地址、API 密钥等。还可以更改机器人的显示语言、偏好设置以及插件配置。/start:机器人/start指令可以查看机器人的使用说明、使用方法和功能介绍。您可以通过/start指令设置 API 密钥。如果您有官方的 OpenAI API 密钥,请使用以下命令:/start your_api_key。如果您使用的是第三方 API 密钥,请使用以下命令:/start https://your_api_url your_api_key。/reset:机器人/reset指令可以清除机器人的对话记录,并强制机器人停止生成回复。如果您想重置系统提示词,请使用以下命令:/reset your_system_prompt。但是,/reset指令不会恢复机器人的显示语言、偏好设置、插件配置、使用的模型、API 地址、API 密钥、系统提示词等。/model:机器人/model指令允许您快速切换 AI 模型,而无需通过/info菜单。只需使用/model model_name即可切换到特定模型。例如:/model gpt-5切换到 GPT-5,或/model claude-3-opus切换到 Claude 3 Opus。此命令为对话过程中快速更换模型提供了更便捷的方式。
- 如果 Koyeb 部署失败怎么办?
Koyeb 的免费服务有时会有些不稳定,因此部署失败的情况比较常见。您可以尝试重新部署,如果仍然不行,可以考虑切换到其他平台。😊
- 为什么我使用 CUSTOM_MODELS 删除某个模型后,再次用 /info 命令查看时,默认模型名称又出现了?
如果您使用 docker-compose.yml 进行部署,请不要在 CUSTOM_MODELS 的值周围添加引号。错误用法:CUSTOM_MODELS="gpt-5,-gpt-3.5",否则会导致环境变量解析错误,从而使得默认模型名称重新出现。错误写法会被解析为删除 gpt-3.5 模型,因此默认的 gpt-3.5 模型并不会被删除。正确的写法是:CUSTOM_MODELS=gpt-5,-gpt-3.5。
同样的规则也适用于模型分组。错误:CUSTOM_MODELS="GPT:gpt-5;Claude:claude-3-opus"。正确:CUSTOM_MODELS=GPT:gpt-5;Claude:claude-3-opus。如果您的分组名称或模型名称包含特殊字符,请注意转义处理。
- 我如何同时使用多个 API 提供商?例如,同时使用 Gemini 和 OpenAI?
该项目一次只能配置一个 API 提供商。例如,如果将 BASE_URL 设置为 Gemini 的 API 端点,则无法同时使用 OpenAI 的 API。若需同时使用多个提供商,必须采用 uni-api 项目。uni-api 可以将不同提供商的各种 API 格式转换为标准的 OpenAI 格式。由于本项目仅支持 OpenAI API 格式,因此通过 uni-api 可以同时使用来自数十家不同提供商的模型。需要注意的是,“OpenAI 格式”并不意味着只能使用 OpenAI 的模型;许多其他提供商(如 Gemini、Groq、Cloudflare 等)也支持通过与 OpenAI 兼容的 API 格式进行调用。
- 为什么你们改变了 API 密钥的整体基础?现在如果不更换 API,我就无法同时使用 Grok 和 Gemini 了?
开发者删除了除 OpenAI 格式之外的其他 API。目前,若要使用其他格式的 API,必须通过开发者的另一个项目 uni-api 将其转换为 OpenAI 格式。借助 uni-api, 您可以同时在 Telegram 机器人中配置并使用数十家不同的提供商。这样做的目的是降低维护成本,因为开发者只需维护 uni-api 即可适配所有最新功能。当然,Gemini 官方也支持 OpenAI 格式的端点,例如:https://generativelanguage.googleapis.com/v1/chat/completions。
参考资料
https://core.telegram.org/bots/api
https://github.com/acheong08/ChatGPT
https://github.com/franalgaba/chatgpt-telegram-bot-serverless
该消息所使用的 Markdown 渲染是我另一个项目 md2tgmd。
DuckDuckGo AI:https://github.com/mrgick/duck_chat
赞助商
我们感谢以下赞助商的支持:
@fasizhuanqian:300 USDT
@ZETA:$380
@yuerbujin:¥1200
@RR5AM:¥300
@IKUNONHK:30 USDT
@miya0v0:30 USDT
@Zeabur:$25
@Bill_ZKE:20 USDT
@wagon_look:¥50
如何赞助我们
如果您希望支持我们的项目,可以通过以下方式赞助:
USDT-TRC20,USDT-TRC20 钱包地址:
TLFbqSv5pDu5he43mVmK1dNx7yBMFeN7d8
感谢您的支持!
星标历史
许可证
本项目采用 GPLv3 许可证,这意味着您可以自由地复制、分发和修改该软件,但前提是所有修改及衍生作品也必须以相同许可证发布。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。
