ChatGPT Telegram 机器人是一个强大的 Telegram 机器人,可以使用多种主流的大语言模型 API,包括 GPT-3.5/4/4 Turbo/4o/o1,DALL·E 3,Claude2.1/3/3.5 API,Gemini 1.5 Pro/Flash,Vertex AI(Claude系列/Gemini系列),Groq Mixtral-8x7b/LLaMA2-70b 和 DuckDuckGo(gpt-4o-mini, claude-3-haiku, Meta-Llama-3.1-70B, Mixtral-8x7B)。它使用户能够在 Telegram 上进行高效的对话和信息搜索。
- 多种AI模型:支持GPT-3.5/4/4 Turbo/4o/o1,DALL·E 3,Claude2.1/3/3.5 API,Gemini 1.5 Pro/Flash,Vertex AI(Claude系列/Gemini系列),Groq Mixtral-8x7b/LLaMA2-70b 和 DuckDuckGo(gpt-4o-mini, claude-3-haiku, Meta-Llama-3.1-70B, Mixtral-8x7B)。还支持 one-api/new-api/uni-api。利用自研 API 请求后端 SDK,不依赖 OpenAI SDK。
- 多模态问答:支持语音、音频、图像和 PDF/TXT/MD/python 文档的问答。用户可以直接在聊天框中上传文件使用。
- 群聊主题模式:支持在群聊中启用主题模式,在主题之间隔离API、对话历史、插件配置和偏好设置。
- 丰富的插件系统:支持网页搜索(DuckDuckGo和Google)、URL 总结、ArXiv 论文总结和代码解释器。
- 用户友好界面:允许在聊天窗口内灵活切换模型,并支持类似打字机效果的流式输出。支持精确的 Markdown 消息渲染,利用了我的另一个项目。
- 高效消息处理:异步处理消息,多线程回答问题,支持隔离对话,并为不同用户提供独特对话。
- 长文本消息处理: 自动合并长文本消息,突破Telegram的单条消息长度限制。当机器人的回复超过Telegram的限制时,它将被拆分成多条消息。
- 多用户对话隔离:支持对话隔离和配置隔离,允许在多用户和单用户模式之间进行选择。
- 问题预测: 自动生成后续问题,预测用户可能会接下来询问的问题。
- 多语言界面:支持简体中文、繁体中文、俄文和英文界面。
- 白名单、黑名单和管理员设置:支持设置白名单、黑名单和管理员。
- 内联模式:允许用户在任何聊天窗口中 @ 机器人以生成答案,而无需在机器人的聊天窗口中提问。
- 方便部署:支持一键部署到 koyeb、Zeabur、Replit,真正零成本和傻瓜式部署流程。还支持 kuma 防休眠,以及 Docker 和 fly.io 部署。
以下是与机器人核心设置相关的环境变量列表:
变量名称 | 描述 | 是否必需? |
---|---|---|
BOT_TOKEN | Telegram 机器人令牌。 在 BotFather 上创建一个机器人以获取 BOT_TOKEN。 | 是 |
API | OpenAI 或第三方 API 密钥。 | 否 |
GPT_ENGINE | 设置默认的QA模型;默认是:gpt-4o 。此项可以使用机器人的“info”命令自由切换,原则上不需要设置。 |
否 |
WEB_HOOK | 每当电报机器人收到用户消息时,消息将被传递到 WEB_HOOK,机器人将在此监听并及时处理收到的消息。 | 否 |
API_URL | 如果您使用的是OpenAI官方API,则无需设置此项。如果您使用的是第三方API,则需要填写第三方代理网站。默认值是:https://api.openai.com/v1/chat/completions | 否 |
GROQ_API_KEY | Groq官方API密钥。 | 否 |
GOOGLE_AI_API_KEY | Google AI 官方 API 密钥。使用此环境变量访问 Gemini 系列模型,包括 Gemini 1.5 pro 和 Gemini 1.5 flash。 | 否 |
VERTEX_PRIVATE_KEY | 描述: Google Cloud Vertex AI 服务账户的私钥。格式: 包含服务账户私钥信息的 JSON 字符串。如何获取: 在 Google Cloud 控制台中创建一个服务账户,生成一个 JSON 密钥文件,并将其内容设置为此环境变量的值。 | 否 |
VERTEX_PROJECT_ID | 描述:您的 Google Cloud 项目 ID。格式:一个字符串,通常由小写字母、数字和连字符组成。如何获取:您可以在 Google Cloud 控制台的项目选择器中找到您的项目 ID。 | 否 |
VERTEX_CLIENT_EMAIL | 描述:Google Cloud Vertex AI 服务账户的电子邮件地址。格式:通常是 "[email protected]" 形式的字符串。获取方式:在创建服务账户时生成,或可以在 Google Cloud 控制台的 "IAM & 管理" 部分的服务账户详细信息中查看。 | 否 |
claude_api_key | Claude 官方 API 密钥。 | 否 |
CLAUDE_API_URL | 如果您使用的是Anthropic官方API,则无需设置此项。如果您使用的是第三方Anthropic API,则需要填写第三方代理网站。默认值是:https://api.anthropic.com/v1/messages | 否 |
NICK | 默认是空的,NICK 是机器人的名字。机器人只会在用户输入的消息以 NICK 开头时才会响应,否则机器人会响应任何消息。特别是在群聊中,如果没有 NICK,机器人会回复所有消息。 | 否 |
GOOGLE_API_KEY | 如果你需要使用谷歌搜索,你需要设置它。如果你不设置这个环境变量,机器人将默认提供duckduckgo搜索。 | No |
GOOGLE_CSE_ID | 如果你需要使用谷歌搜索,你需要和 GOOGLE_API_KEY 一起设置。 | 否 |
whitelist | 设置哪些用户可以访问机器人,并用 ',' 连接被授权使用机器人的用户ID。默认值是 None ,这意味着机器人对所有人开放。 |
否 |
BLACK_LIST | 设置哪些用户禁止访问机器人,并用 ',' 连接被授权使用机器人的用户ID。默认值是 None |
否 |
ADMIN_LIST | 设置管理员列表。只有管理员可以使用 /info 命令配置机器人。 |
否 |
GROUP_LIST | 设置可以使用机器人的群组列表。使用逗号(',')连接群组ID。即使群组成员不在白名单中,只要群组ID在GROUP_LIST中,群组的所有成员都可以使用机器人。 | 否 |
CUSTOM_MODELS | 设置自定义模型名称列表。使用逗号(',')连接模型名称。如果需要删除默认模型,请在默认模型名称前添加连字符(-)。如果要删除所有默认模型,请使用 -all 。 |
否 |
CHAT_MODE | 引入多用户模式,不同用户的配置不共享。当 CHAT_MODE 为 global 时,所有用户共享配置。当 CHAT_MODE 为 multiusers 时,用户配置彼此独立。 |
否 |
temperature | 指定 LLM 的温度。默认值是 0.5 。 |
否 |
GET_MODELS | 指定是否通过 API 获取支持的模型。默认值为 False 。 |
否 |
SYSTEMPROMPT | 指定系统提示,系统提示是字符串,例如:SYSTEMPROMPT=You are ChatGPT, a large language model trained by OpenAI. Respond conversationally 。默认是 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
命令,点击 偏好设置
按钮来设置:
变量名称 | 描述 | 必需的? |
---|---|---|
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
。对应于偏好设置里面的名为 回复消息
的按钮。 | 否 |
以下是与机器人插件设置相关的环境变量列表:
变量名称 | 描述 | 必需的? |
---|---|---|
SEARCH | 是否启用搜索插件。默认值为 True 。 |
否 |
URL | 是否启用URL摘要插件。默认值为 True 。 |
否 |
ARXIV | 是否启用arXiv论文摘要插件。默认值为 False 。 |
否 |
CODE | 是否启用代码解释器插件。默认值为 False 。 |
否 |
IMAGE | 是否启用图像生成插件。默认值为 False 。 |
否 |
DATE | 是否启用日期插件。默认值为 False 。 |
否 |
一键部署:
一键部署:
如果您需要后续功能更新,建议采用以下部署方法:
- 首先 fork 这个仓库,然后注册 Zeabur。目前,Zeabur 不支持免费的 Docker 容器部署。如果你需要使用 Zeabur 来部署这个项目的机器人,你需要升级到 Developer Plan。幸运的是,Zeabur 推出了他们的赞助计划,为这个项目的所有贡献者提供一个月的 Developer Plan。如果你有想要增强的功能,欢迎提交 pull requests 到这个项目。
- 从您自己的Github仓库导入。
- 设置所需的环境变量,并重新部署。
- 如果您需要后续的功能更新,只需在您自己的代码库中同步此代码库,并在 Zeabur 中重新部署以获取最新功能。
导入 Github 仓库后,设置运行命令
pip install -r requirements.txt > /dev/null && python3 bot.py
在工具侧边栏中选择“Secrets”,添加机器人所需的环境变量,其中:
- WEB_HOOK: Replit 会自动为您分配一个域名,填写
https://appname.username.repl.co
- 记得打开“始终开启”
点击屏幕顶部的运行按钮来运行机器人。
官方文档: 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=
# 可选
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 run -p 80:8080 --name chatbot -dit \
-e BOT_TOKEN=your_telegram_bot_token \
-e API= \
-e API_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=
- API_URL=
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= \
-e API_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”容器的日志。
直接从源代码运行机器人而不使用docker,克隆仓库:
git clone --recurse-submodules --depth 1 -b main --quiet https://github.com/yym68686/ChatGPT-Telegram-Bot.git
安装依赖项:
pip install -r requirements.txt
设置环境变量:
export BOT_TOKEN=
export API=
运行:
python bot.py
机器人支持多种插件,包括:DuckDuckGo 和 Google 搜索、URL 摘要、ArXiv 论文摘要、DALLE-3 画图和代码解释器等。您可以通过设置环境变量来启用或禁用这些插件。
- 如何开发插件?
插件相关的代码全部在本仓库git 子模块ModelMerge里面,ModelMerge是我开发的一个独立的仓库,用于处理API请求,对话历史记录管理等功能。当你使用git clone的--recurse-submodules参数克隆本仓库后,ModelMerge会自动下载到本地。插件所有的代码在本仓库中的相对路径为 ModelMerge/src/ModelMerge/plugins
。你可以在这个目录下添加自己的插件代码。插件开发的流程如下:
-
在
ModelMerge/src/ModelMerge/plugins
目录下创建一个新的 Python 文件,例如myplugin.py
。在ModelMerge/src/ModelMerge/plugins/__init__.py
文件中导入你的插件,例如from .myplugin import MyPlugin
。 -
在
ModelMerge/src/ModelMerge/tools/chatgpt.py
里面的function_call_list
变量中添加你的插件OpenAI tool格式详细的请求体。Claude Gemini tool 不需要额外编写,你仅需要填写OpenAI格式的tool请求体,程序在请求Gemini或者Claude API的时候,会自动转换为Claude/Gemini tool格式。function_call_list
是一个字典,键是插件的名称,值是插件的请求体。请保证function_call_list
字典的键名保证唯一性,不能和已有的插件键名重复。 -
在
ModelMerge/src/ModelMerge/plugins/config.py
里面的PLUGINS
字典里面添加键值对,键是插件的名称,值是插件的环境变量及其默认值。这个默认值是插件的开关,如果默认值是True
,那么插件默认是开启的,如果默认值是False
,那么插件默认是关闭的,需要在用户在/info
命令里面手动开启。 -
最后,在
ModelMerge/src/ModelMerge/plugins/config.py
里面的函数get_tools_result_async
和get_tools_result
添加插件调用的代码,当机器人需要调用插件的时候,会调用这个函数。你需要在这个函数里面添加插件的调用代码。
完成上面的步骤,你的插件就可以在机器人中使用了。🎉
- WEB_HOOK 环境变量有什么用?应该如何使用?
WEB_HOOK 是一个 webhook 地址。具体来说,当 Telegram 机器人收到用户消息时,它会将消息发送到 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
}
- 为什么我不能使用谷歌搜索?
默认情况下,提供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 无法使用 tools use,即不能使用本项目所有的插件。如果你确认你使用的是官方 API,仍然无法成功搜索,请联系开发人员。
- 我如何切换模型?
您可以在聊天窗口中使用 "/info" 命令在 GPT3.5/4/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命令来更改机器人的配置。
- 我应该如何设置 API_URL?
API_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 设置为 @botname。这样,当你在群里 @ 机器人时,机器人会检测到消息是以 @botname 开头的,并会回应该消息。
- 历史会保留多少条消息?
所有其他模型使用官方上下文长度设置,例如,gpt-3.5-turbo-16k
的上下文是 16k,gpt-4o
的上下文是 128k,Claude3/3.5
的上下文是 200k。此限制是为了节省用户成本,因为大多数场景不需要高上下文。
- 如何从模型列表中删除默认模型名称?
你可以使用 CUSTOM_MODELS
环境变量来完成它。例如,如果你想添加 gpt-4o 并从模型列表中移除 gpt-3.5 模型,请将 CUSTOM_MODELS
设置为 gpt-4o,-gpt-3.5
。如果你想一次性删除所有默认模型,你可以将 CUSTOM_MODELS
设置为 -all,gpt-4o
。
- 对话隔离具体是如何工作的?
对话总是基于不同的窗口隔离,而不是不同的用户。这意味着在同一个群聊窗口、同一个主题和同一个私聊窗口内,都会被视为同一个对话。CHAT_MODE 只影响配置是否隔离。在多用户模式下,每个用户的插件配置、偏好等都是独立的,互不影响。在单用户模式下,所有用户共享相同的插件配置和偏好。然而,对话历史总是隔离的。对话隔离是为了保护用户隐私,确保用户的对话历史、插件配置、偏好等不被其他用户看到。
- 为什么 Docker 镜像很久没有更新了?
Docker 镜像只存储程序的运行环境。目前,程序的运行环境是稳定的,环境依赖几乎没有变化,所以 Docker 镜像没有更新。每次重新部署 Docker 镜像时,它会拉取最新的代码,因此不需要担心 Docker 镜像更新的问题。
- 为什么容器在启动后报告错误 "http connect error or telegram.error.TimedOut: Timed out"?
此问题可能是由于部署 Docker 的服务器无法连接到 Telegram 服务器或 Telegram 服务器的不稳定性引起的。
- 在大多数情况下,重新启动服务,检查服务器网络环境,或等待 Telegram 服务恢复即可。
- 此外,您可以尝试通过网络钩子与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。
- 机器人令牌可以有多个令牌吗?
不,将来它会支持多个机器人令牌。
- 如何使用机器人命令?
-
/info
: 机器人/info
命令可以查看机器人的配置信息,包括当前使用的模型、API URL、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 URL、API 密钥、系统提示等。
- 如果 Koyeb 部署失败怎么办?
Koyeb 的免费服务可能有点不稳定,所以部署失败是很常见的。你可以尝试重新部署,如果还是不行的话,考虑换到另一个平台。😊
- 为什么我使用 CUSTOM_MODELS 删除默认模型名称后,再使用 /info 命令检查时它又重新出现了?
如果你使用 docker-compose.yml
部署,不要在 CUSTOM_MODELS
的值周围添加引号。错误用法:CUSTOM_MODELS="gpt-4o,-gpt-3.5"
,否则会导致环境变量解析错误,导致默认模型名称再次出现。错误的方式会被解析为删除 gpt-3.5"
模型,这将导致默认模型名称 gpt-3.5
未被删除。正确的写法是:CUSTOM_MODELS=gpt-4o,-gpt-3.5
。
https://core.telegram.org/bots/api
https://github.com/acheong08/ChatGPT
https://github.com/franalgaba/chatgpt-telegram-bot-serverless
消息使用的markdown渲染是我的另一个项目。
duckduckgo AI: https://github.com/mrgick/duck_chat
我们感谢以下赞助商的支持:
-
@fasizhuanqian: 300 USDT
-
@ZETA: $280
-
@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 许可证授权,这意味着您可以自由复制、分发和修改该软件,只要所有修改和衍生作品也以相同的许可证发布。