diff --git a/README.zh-CN.md b/README.zh-CN.md index 027c2778..f8c49e48 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,183 +1,61 @@ # ChatGPT 电报机器人 -加入 [电报群](https://t.me/+_01cz9tAkUc1YzZl) 分享您的用户体验或报告错误。 +加入[电报群](https://t.me/+_01cz9tAkUc1YzZl)聊天,分享您的用户体验或报告Bug。 [英语](./README.md) | [简体中文](./README.zh-CN.md) | [繁体中文](./README.zh-TW.md) -## ✨ 特征 +## ✨ 特点 -✅ 支持 ChatGPT 和 GPT4 API +✅ 支持ChatGPT和GPT4 API -✅ 支持使用 duckduckgo 和 Google🔍 进行在线搜索。 duckduckgo 搜索是默认提供的,而 Google 搜索的官方 API 需要用户申请。它可以提供 GPT 以前无法回答的实时信息,例如微博热搜今天,某地今天的天气,以及某人或新闻的进展。 +✅ 支持使用DuckDuckGo和Google进行在线搜索🔍。默认提供DuckDuckGo搜索,用户需申请Google搜索的官方API。可以提供GPT以前无法回答的实时信息,如微博热搜、今天某地的天气和某人或新闻的进展。 -✅ 支持基于嵌入式向量数据库的文档 QA。在搜索中,对于搜索的 PDF,会执行 PDF 文档的自动向量语义搜索,并基于向量数据库提取 pdf 相关内容。支持使用“qa”命令对“sitemap.xml”文件的整个网站进行向量化,并根据向量数据库回答问题,特别适用于某些项目的文档网站和 wiki 网站。 +✅ 支持基于嵌入式向量数据库的文档问答。在搜索中,对于搜索到的PDF,将执行自动向量语义搜索PDF文档,并基于向量数据库提取与PDF相关的内容。支持使用“qa”命令对整个网站进行向量化,使用“sitemap.xml”文件,然后基于向量数据库回答问题,特别适合一些项目的文档网站和维基网站。 -✅ 支持通过聊天窗口中的“info”命令在 GPT3.5、GPT4 和其他模型之间切换 +✅ 通过聊天窗口中的“info”命令支持在GPT3.5、GPT4和其他模型之间切换 ✅ 异步处理消息,多线程回答问题,支持隔离对话,不同用户有不同的对话 -✅ 支持消息的精确 Markdown 渲染,使用我另一个 [项目](https://github.com/yym68686/md2tgmd) +✅ 支持消息的精确Markdown渲染,使用我的另一个[项目](https://github.com/yym68686/md2tgmd) -✅ 支持流输出,实现打字机效果 +✅ 支持流式输出,实现打字机效果 -✅ 支持白名单防止滥用和信息泄露 +✅ 支持白名单,防止滥用和信息泄漏 -✅ 跨平台,在Telegram上随时随地打破知识障碍 +✅ 跨平台,随时随地通过电报打破知识障碍 -✅ 支持一键 Zeabur、Replit 部署,真正的零成本,白痴化部署,并支持 kuma 防睡眠。也支持 Docker、fly.io 部署 +✅ 支持一键Zeabur,Replit部署,真正的零成本,愚蠢的部署,支持kuma反睡眠。还支持Docker,fly.io部署 ## 环境变量 -| 变量名称 | 说明 | -| ------------------------ | ------------------------------------------------------------ | -| **BOT_TOKEN (必需)** | Telegram 机器人令牌。在 [BotFather](https://t.me/BotFather) 上创建机器人以获取 BOT_TOKEN。 | -| **WEB_HOOK (必需)** | 电报机器人每当收到用户消息都会将消息传递给 WEB_HOOK,在那里机器人将会监听并及时处理收到的消息。 | -| **API (必需)** | OpenAI 或第三方 API 密钥。 | -| API_URL(可选) | 如果您使用的是 OpenAI 官方 API,则不需要设置此项。如果您使用的是第三方 API,则需要填写第三方代理网站。默认为: https://api.openai.com/v1/chat/completions | -| GPT_ENGINE(可选) | 设置默认的 QA 模型;默认值为:`gpt-3.5-turbo`。可以使用机器人的“info”命令自由切换此项,原则上不需要设置。 | -| NICK(可选) | 默认为空,NICK 是机器人的名字。仅当用户输入的消息以 NICK 开头时,机器人才会回答,否则机器人将回答任何消息。特别是在群聊中,如果没有 NICK,则机器人将对所有消息进行回答。 | -| PASS_HISTORY(可选) | 默认为 true。机器人会记住对话历史记录,并在下次回答时考虑上下文。如果设置为 false,则机器人将忘记对话历史记录,并且仅考虑当前对话。 | -| GOOGLE_API_KEY(可选) | 如果需要使用 Google 搜索,则需要设置。如果不设置此环境变量,则机器人默认提供 duckduckgo 搜索。在 Google Cloud 的 [API 和服务](https://console.cloud.google.com/apis/api/customsearch.googleapis.com) 中创建凭据,API 密钥将在凭据页面上是 GOOGLE_API_KEY。Google 搜索一天可以查询 100 次,这对于轻度使用完全足够。当使用限制已达到时,机器人将自动关闭 Google 搜索。 | -| GOOGLE_CSE_ID(可选) | 如果需要使用 Google 搜索,则需要与 GOOGLE_API_KEY 一起设置。在 [可编程搜索引擎](https://programmablesearchengine.google.com/) 中创建一个搜索引擎,搜寻引擎 ID 是 GOOGLE_CSE_ID 的值。 | -| whitelist(可选) | 设置哪些用户可以访问机器人,并使用“,”将授权使用机器人的用户 ID 连接起来。默认值为 `None`,这意味着机器人向所有人开放。 | +| 变量名 | 说明 | +| ---------------------- | ------------------------------------------------------------ | +| **BOT_TOKEN (required)** | 电报机器人令牌。在[BotFather](https://t.me/BotFather)上创建机器人以获取BOT_TOKEN。 | +| **WEB_HOOK (required)** | 每当电报机器人收到用户消息,消息将传递到WEB_HOOK,机器人将监听消息并及时处理接收到的消息。 | +| **API (required)** | OpenAI或第三方API密钥。 | +| API_URL(可选) | 如果使用OpenAI官方API,则无需设置。如果使用第三方API,则需要填写第三方代理网站。默认值是:https://api.openai.com/v1/chat/completions | +| GPT_ENGINE(可选) | 设置默认的QA模型;默认是:`gpt-3.5-turbo`。该项目可以使用机器人的“info”命令自由切换,原则上无需设置。 | +| NICK(可选) | 默认为空,NICK是机器人的名称。只有当用户输入以NICK开头的消息时,机器人才会做出响应,否则机器人将对所有消息做出响应。特别是在群聊中,如果没有NICK,机器人将对所有消息作出响应。 | +| PASS_HISTORY(可选) | 默认为true。机器人记住对话历史,并在下次回复时考虑上下文。如果设置为false,机器人将忘记对话历史,只考虑当前对话。 | +| GOOGLE_API_KEY(可选) | 如果需要使用Google搜索,需要设置它。如果不设置这个环境变量,机器人将默认提供DuckDuckGo搜索。在Google Cloud的[APIs & Services](https://console.cloud.google.com/apis/api/customsearch.googleapis.com)中创建凭据,API密钥将是凭据页面上的GOOGLE_API_KEY。Google搜索可以查询100次,对轻度使用完全足够。当使用限额达到时,机器人将自动关闭Google搜索。 | +| GOOGLE_CSE_ID(可选) | 如果需要使用Google搜索,需要与GOOGLE_API_KEY一起设置。在[Programmable Search Engine](https://programmablesearchengine.google.com/)中创建一个搜索引擎,搜索引擎ID是GOOGLE_CSE_ID的值。 | +| 白名单(可选) | 设置哪些用户可以访问机器人,并将授权使用机器人的用户ID与“,”连接起来。默认值为“None”,这意味着机器人对所有人开放。 | ## Zeabur 远程部署(推荐) 一键部署: -[![Deploy on Zeabur](https://zeabur.com/button.svg)](https://zeabur.com/templates/R5JY5O?referralCode=yym68686) +[![在Zeabur上部署](https://zeabur.com/button.svg)](https://zeabur.com/templates/R5JY5O?referralCode=yym68686) -如果您需要后续功能更新,则建议使用以下部署方法: +如果需要后续功能更新,建议使用以下部署方法: -首先 fork 本仓库,然后注册 [Zeabur](https://zeabur.com)。免费配额足够轻度使用。从您自己的 Github 仓库导入,设置域名(必须与 WEB_HOOK 一致)和环境变量,并重新部署。如果您需要后续的功能更新,只需将此存储库同步到您自己的存储库中,并在 Zeabur 重新部署以获得最新的功能即可。 +首先克隆此存储库,然后注册[Zeabur](https://zeabur.com)。免费配额对轻度使用足够。从您自己的Github存储库导入,设置域名(必须与WEB_HOOK一致)和环境变量,然后重新部署。如果需要后续的功能更新,只需在您自己的存储库中同步此存储库,并在Zeabur中重新部署以获得最新功能。 ## Replit 远程部署 -[![Run on Repl.it](https://replit.com/badge/github/yym68686/ChatGPT-Telegram-Bot)](https://replit.com/new/github/yym68686/ChatGPT-Telegram-Bot) +[![在Repl.it上运行](https://replit.com/badge/github/yym68686/ChatGPT-Telegram-Bot)](https://replit.com/new/github/yym68686/ChatGPT-Telegram-Bot) -导入 Github 仓库后,设置运行命令 +导入GitHub存储库后,设置运行命令 ```bash -pip install -r requirements.txt > /dev/null && python3 main.py -``` - -在 Tools 侧边栏中选择 Secrets,添加机器人所需的环境变量,其中: - -- WEB_HOOK:Replit 将自动为您分配一个域名,填写 `https://appname.username.repl.co` -- 记得打开“始终保持活动状态” - -单击屏幕顶部的运行按钮以运行机器人。 - -## fly.io 远程部署 - -官方文档:https://fly.io/docs/ - -使用 Docker 镜像部署 fly.io 应用程序 - -```bash -flyctl launch --image yym68686/chatgpt:1.0 -``` - -提示输入应用程序名称,并选择是否初始化 PostgreSQL 或 Redis。 - -按提示部署。在官方控制面板中提供一个次级域名,可用于访问服务。 - -设置环境变量 - -```bash -flyctl secrets set WEB_HOOK=https://flyio-app-name.fly.dev/ -flyctl secrets set BOT_TOKEN=bottoken -flyctl secrets set API= -# optional -flyctl secrets set NICK=javis -``` - -查看所有环境变量 - -```bash -flyctl secrets list -``` - -移除环境变量 - -```bash -flyctl secrets unset MY_SECRET DATABASE_URL -``` - -ssh 到 fly.io 容器 - -```bash -flyctl ssh issue --agent -# ssh connection -flyctl ssh establish -``` - -检查 webhook URL 是否正确 - -```bash -https://api.telegram.org/bot/getWebhookInfo -``` - -## Docker 本地部署 - -启动容器 - -```bash -docker run -p 80:8080 -dit \ - -e BOT_TOKEN="telegram bot token" \ - -e WEB_HOOK="https://your_host.com/" \ - -e API="" \ - -e API_URL= \ - yym68686/chatgpt:1.0 -``` - -或者如果您想要使用 Docker Compose,这是一个 docker-compose.yml 示例: - -```yaml -version: "3.5" -services: - chatgptbot: - container_name: chatgptbot - image: yym68686/chatgpt:1.0 - environment: - - BOT_TOKEN= - - WEB_HOOK= - - API= - - API_URL= - ports: - - 80:8080 -``` - -在后台运行 Docker Compose 容器 - -```bash -docker-compose up -d -``` - -将 Docker 映像打包到存储库中,并将其上传到 Docker Hub - -```bash -docker build --no-cache -t chatgpt:1.0 -f Dockerfile.build --platform linux/amd64 . -docker tag chatgpt:1.0 yym68686/chatgpt:1.0 -docker push yym68686/chatgpt:1.0 -``` - -## 参考 - -参考项目: - -https://core.telegram.org/bots/api - -https://github.com/acheong08/ChatGPT - -https://github.com/franalgaba/chatgpt-telegram-bot-serverless - -https://github.com/gpchelkin/scdlbot/blob/d64d14f6c6d357ba818e80b8a0a9291c2146d6fe/scdlbot/__main__.py#L8 - -消息的 Markdown 渲染使用了我的另一个 [项目](https://github.com/yym68686/md2tgmd)。 - -## 星标历史 - - - Star History Chart - \ No newline at end of file +pip install -r requirements.txt > \ No newline at end of file diff --git a/README.zh-TW.md b/README.zh-TW.md index f7c26196..983350b7 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -1,183 +1,42 @@ -# ChatGPT Telegram機器人 +# ChatGPT Telegram Bot -加入[Telegram群組](https://t.me/+_01cz9tAkUc1YzZl)聊天以分享您的用戶體驗或報告錯誤。 +加入 [Telegram 群組](https://t.me/+_01cz9tAkUc1YzZl) 討論,分享您的使用體驗或回報錯誤。 -[英語](./README.md) | [簡體中文](./README.zh-CN.md) | [繁體中文](./README.zh-TW.md) +[英文](./README.md) | [簡體中文](./README.zh-CN.md) | [繁體中文](./README.zh-TW.md) ## ✨ 功能 -✅ 支持ChatGPT和GPT4 API +✅ 支援 ChatGPT 和 GPT4 API -✅ 支持使用duckduckgo和Google🔍進行在線搜索。默認情況下提供DuckDuckGo搜索,而使用Google搜索的官方API需要用戶申請。它可以提供GPT無法在過去回答的實時信息,例如今日微博熱門搜索,某個地方的天氣和某個人或新聞的進度等。 +✅ 支援使用 DuckDuckGo 和 Google 進行線上搜尋🔍。默認提供 DuckDuckGo 搜尋,使用者需自行申請 Google 搜尋的官方 API,可以提供 GPT 以前無法回答的即時資訊,如微博熱搜、今天某地天氣、某人或新聞的進展等。 -✅ 基於嵌入式向量數據庫支持文檔QA。在搜索中,對於搜索的PDF,執行PDF文檔的自動向量語義搜索,並基於向量數據庫提取與pdf相關的內容。支持使用“qa”命令使用“sitemap.xml”文件將整個網站向量化,並基於向量數據庫回答問題,尤其適用於一些項目的文檔網站和Wiki網站。 +✅ 支援基於嵌入式向量數據庫的文件問答。在搜索中,針對搜索到的 PDF 文件,執行 PDF 文檔的自動向量語義搜索,並基於向量數據庫提取與 PDF 相關的內容。支援使用 "qa" 命令對整個網站進行向量化,使用 "sitemap.xml" 文件,並基於向量數據庫回答問題,尤其適用於某些專案的文檔網站和 Wiki 網站。 -✅ 支持通過聊天窗口中的“info”命令在GPT3.5,GPT4和其他模型之間切換 +✅ 支援在聊天視窗中通過 "info" 命令切換 GPT3.5、GPT4 和其他模型 -✅ 異步處理消息,多線程回答問題,支持隔離對話,不同的用戶擁有不同的對話 +✅ 異步處理消息,多線程回答問題,支援隔離對話,不同使用者有不同對話 -✅ 支持消息的準確的Markdown渲染,使用我另一個 [project](https://github.com/yym68686/md2tgmd) +✅ 支援精確的消息 Markdown 渲染,使用我的另一個 [專案](https://github.com/yym68686/md2tgmd) -✅ 支持流式輸出,實現打字機效果 +✅ 支援串流輸出,實現打字機效果 -✅ 支持白名單警戒,防止濫用和信息洩露 +✅ 支援白名單,防止濫用和信息洩露 -✅ 跨平臺,隨時隨地在Telegram上突破知識障礙 +✅ 跨平台,隨時隨地通過 Telegram 打破知識障礙 -✅ 支持一鍵Zeabur,Replit部署,真正的零成本易用部署,支持kuma防睡眠。還支持Docker,fly.io部署 +✅ 支援一鍵 Zeabur、Replit 部署,真正零成本,傻瓜部署,支援 Docker、fly.io 部署 -## 環境變量 +## 環境變數 -| 變量名 | 評論 | -| ------------------- | ------------------------------------------------------------ | -| **BOT_TOKEN(必填)** | Telegram機器人令牌。在[BotFather](https://t.me/BotFather)上創建一個機器人,即可獲得BOT_TOKEN。 | -| **WEB_HOOK(必填)** | 當Telegram機器人接收到用戶消息時,消息將被傳遞到WEB_HOOK,機器人將在此處聽取消息並及時處理接收到的消息。| -| **API(必填)** | OpenAI或第三方API密鑰。 | -| API_URL(可選) | 如果您使用的是OpenAI 的官方API,则不需要設置此設置。如果使用第三方API,則需要填寫第三方代理網站。默認值為:https://api.openai.com/v1/chat/completions | -| GPT_ENGINE(可選) | 設置默認的QA模型;默認值為:`gpt-3.5-turbo`。該項目可以通過機器人的“info”命令自由切換,原則上不需要設置。 | -| NICK(可選) | 默認值為空,而NICK是機器人的名字。只有當用戶輸入的消息以NICK開始時,機器人才會響應,否則機器人將響應任何消息。特別是在群聊中,如果沒有NICK,機器人將回復所有消息。 | -| PASS_HISTORY(可選) | 默認值為true。機器人記住對話歷史記錄,並在下次回復時考慮上下文。如果設置為false,機器人將忘記對話歷史記錄,僅考慮當前對話。 | -| GOOGLE_API_KEY(可選)| 如果您需要使用Google搜索,則需要進行設置。如果不設置此環境變量,機器人將默認提供duckduckgo搜索。在Google Cloud的APIs&Services中創建憑據(https://console.cloud.google.com/apis/api/customsearch.googleapis.com),並在凭据页面上点选API密钥。Google搜索每天可以查詢100次,这完全足够轻度使用。当达到使用限制时,机器人将自动关闭Google搜索。 | -| GOOGLE_CSE_ID(可選) | 如果您需要使用Google搜索,則必須與GOOGLE_API_KEY一起設置。在[Programmable Search Engine](https://programmablesearchengine.google.com/)中創建搜索引擎,搜索引擎ID即为GOOGLE_CSE_ID的值。 | -| 白名單(可選) | 設置哪些用戶可以訪問機器人,將被授權使用機器人的用戶ID與“,”相連。默認值為`None`,這意味着所有人都可以使用機器人。 | - -## Zeabur遠程部署(推薦) - -一鍵部署: - -[![Deploy on Zeabur](https://zeabur.com/button.svg)](https://zeabur.com/templates/R5JY5O?referralCode=yym68686) - -如果您需要後續功能更新,建議使用以下部署方法: - -先Fork本存儲庫,然後註冊[Zeabur](https://zeabur.com)。免費配額足以輕度使用。從您自己的Github存儲庫導入,設置域名(必須與WEB_HOOK一致)和環境變量,然後重新部署。如果需要在後續升級時,只需要在自己的存儲庫中同步這個存儲庫,然後重新部署即可獲得最新的功能。 - -## Replit遠程部署 - -[![Run on Repl.it](https://replit.com/badge/github/yym68686/ChatGPT-Telegram-Bot)](https://replit.com/new/github/yym68686/ChatGPT-Telegram-Bot) - -匯入Github存儲庫後,設置運行命令 - -```bash -pip install -r requirements.txt > /dev/null && python3 main.py -``` - -在工具側邊欄中選擇Secrets,添加機器人需要的環境變量,其中: - -- WEB_HOOK:Replit会自动为您分配一个域名,填写“https://appname.username.repl.co” -- 記得開啟“始終開啟” - -單擊屏幕頂部的運行按鈕以運行機器人。 - -## fly.io遠程部署 - -官方文檔: https://fly.io/docs/ - -使用Docker映像部署fly.io應用程序 - -```bash -flyctl launch --image yym68686/chatgpt:1.0 -``` - -輸入應用程序名字,並選擇否初始化Postgresql或Redis。 - -按照提示部署。官方控制面板提供了辅助域名,可用于访问服务。 - -設置環境變量 - -```bash -flyctl secrets set WEB_HOOK=https://flyio-app-name.fly.dev/ -flyctl secrets set BOT_TOKEN=bottoken -flyctl secrets set API= -# optional -flyctl secrets set NICK=javis -``` - -查看所有環境變量 - -```bash -flyctl secrets list -``` - -刪除環境變量 - -```bash -flyctl secrets unset MY_SECRET DATABASE_URL -``` - -ssh到fly.io容器 - -```bash -flyctl ssh issue --agent -# ssh connection -flyctl ssh establish -``` - -檢查webhook URL是否正確 - -```bash -https://api.telegram.org/bot/getWebhookInfo -``` - -## Docker本地部署 - -啟動容器 - -```bash -docker run -p 80:8080 -dit \ - -e BOT_TOKEN="telegram bot token" \ - -e WEB_HOOK="https://your_host.com/" \ - -e API="" \ - -e API_URL= \ - yym68686/chatgpt:1.0 -``` - -或者,如果您想要使用Docker Compose,這是一個docker-compose.yml示例: - -```yaml -version: "3.5" -services: - chatgptbot: - container_name: chatgptbot - image: yym68686/chatgpt:1.0 - environment: - - BOT_TOKEN= - - WEB_HOOK= - - API= - - API_URL= - ports: - - 80:8080 -``` - -在背景中運行Docker Compose容器 - -```bash -docker-compose up -d -``` - -在存储库中打包Docker映像并将其上载到Docker Hub - -```bash -docker build --no-cache -t chatgpt:1.0 -f Dockerfile.build --platform linux/amd64 . -docker tag chatgpt:1.0 yym68686/chatgpt:1.0 -docker push yym68686/chatgpt:1.0 -``` - -## 參考文獻 - -參考項目: - -https://core.telegram.org/bots/api - -https://github.com/acheong08/ChatGPT - -https://github.com/franalgaba/chatgpt-telegram-bot-serverless - -https://github.com/gpchelkin/scdlbot/blob/d64d14f6c6d357ba818e80b8a0a9291c2146d6fe/scdlbot/__main__.py#L8 - -消息的Markdown渲染使用的是我另一個 [project](https://github.com/yym68686/md2tgmd) - -## 星等历史 - - - Star History Chart - \ No newline at end of file +| 變數名稱 | 說明 | +| ---------------------- | ------------------------------------------------------------ | +| **BOT_TOKEN (必需)** | Telegram 機器人令牌。在 [BotFather](https://t.me/BotFather) 上創建機器人以獲得 BOT_TOKEN。 | +| **WEB_HOOK (必需)** | 每當 Telegram 機器人收到用戶消息,消息將被傳遞到 WEB_HOOK,機器人將在及時處理接收到的消息時監聽它。 | +| **API (必需)** | OpenAI 或第三方 API 金鑰。 | +| API_URL (可選) | 如果您使用 OpenAI 的官方 API,您不需要設置這個。如果您使用第三方 API,您需要填寫第三方代理網站。默認值為: https://api.openai.com/v1/chat/completions | +| GPT_ENGINE (可選) | 設置默認的 QA 模型;默認值為:`gpt-3.5-turbo`。這個項目可以使用機器人的 "info" 命令自由切換,原則上不需要設置。 | +| NICK (可選) | 默認為空,NICK 是機器人的名稱。只有在用戶輸入的消息以 NICK 開頭時,機器人才會回應,否則機器人將回應任何消息。特別是在群組聊天中,如果沒有 NICK,機器人將回應所有消息。 | +| PASS_HISTORY (可選) | 默認為 true。機器人會記住對話歷史,並在下次回應時考慮上下文。如果設置為 false,機器人將忘記對話歷史,只考慮當前對話。 | +| GOOGLE_API_KEY (可選) | 如果需要使用 Google 搜尋,您需要設置它。如果不設置這個環境變數,機器人將默認提供 DuckDuckGo 搜尋。在 Google Cloud 的 [APIs & Services](https://console.cloud.google.com/apis/api/customsearch.googleapis.com) 中創建憑證,API 金鑰將在憑證頁面上的 GOOGLE_API_KEY。Google 搜尋可以每天查詢 100 次,對於輕度使用完全足夠。當使用限制已達到時,機器人將自動關閉 Google 搜尋。 | +| GOOGLE_CSE_ID (可選) | 如果需要使用 Google 搜尋,您需要與 GOOGLE_API_KEY 一起設置它。在 [Programmable Search Engine](https://programmablesearchengine.google.com/) 中創建搜索引擎,搜索引擎 ID 就是 GOOGLE_CSE_ID 的值。 | +| 白名單 (可選) | 設定可以訪問機 \ No newline at end of file