PEANUT996

搭建ChatGPT Telegram Bot

· Peanuts

写在前面

此教程旨在搭建一个可以与chatgpt对话的teletgram bot,只使用免费的ChatGPT额度,而无需使用付费的API key,支持上下文。同样这种方式带来的风险需要自己承担,如使用IP被封锁的原因导致账号被block ,请仔细考虑后决定是否使用本套搭建方案。

准备

  • Telegram 账号
  • Open AI 账号
  • 服务器 (需要安装 python 3.10+ & Go)

注册Telegram Bot

创建一个Telegram账号

如果你还没有Telegram账号,首先需要在手机上下载Telegram应用并创建一个账号。这个账号将用于管理你的Bot。

与BotFather对话

  1. 打开Telegram应用,在搜索栏中搜索"BotFather"。
  2. 选择"BotFather"账号并开始与它聊天。
  3. 发送命令/newbot以创建一个新的Bot。

设置Bot的名称和用户名

  1. 在创建新Bot的对话中,BotFather会要求你为Bot命名。发送一个你想要的名字,比如"MyAwesomeBot"。
  2. 接下来,BotFather会要求你为Bot设置一个用户名,该用户名必须以"Bot"结尾。例如,你可以选择"AwesomeBot"作为用户名。
  3. 一旦完成,BotFather会发送一条包含你的Bot Token的消息给你。

获取Bot Token

Bot Token是与你的Bot通信的关键凭证。它是一个类似于下面的字符串:

1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi

请务必妥善保管好这个Token,不要分享给其他人,因为拥有该Token的人可以完全控制你的Bot。

运行TelegramBot服务端

  1. 克隆仓库并进入目录:

    git clone https://github.com/peanut996/chatgpt-telegram-bot.git
    
    cd chatgpt-telegram-bot
    
  2. 编辑配置文件:

    vim config.yaml
    

    在这个配置文件中,你需要提供以下信息:

    • Telegram Bot的信息:类型、Token(你的Telegram Bot Token)。
    • chatgpt-engine的信息:端口号和主机地址。

    这个项目的Telegram Bot部分只是一个控制程序,实际的聊天交流还是依赖于chatgpt-engine。因此,在开始之前,请确保你已经运行了chatgpt-engine服务。

    以下是配置文件(config.yaml)的详细说明:

    bot:
      type: telegram
      token: <your tg bot token> # 替换为你的Telegram Bot Token
    engine:
      port: 127.0.0.1 # chatgpt-engine服务的端口号
      host: 5000 # chatgpt-engine服务的主机地址
    
  3. 下载依赖并运行:

    go build .
    
    ./chatgpt-telegram-bot 
    
    # 也可以使用参数'-c'指定配置文件位置
    ./chatgpt-telegram-bot -c <path to your config.yaml>
    

    nohup可以将服务运行在后台,以便session关闭后仍然能继续访问:

    nohup ./chatgpt-telegram-bot & 
    
  4. 测试

找到你创建的telegram机器人,发送 /ping 命令,如果机器人回复 pong 则证明服务端启动成功。可以使用这个来判断服务是否正确启动然后随便发送一句话,会得到回复

Chatgpt engine is not ready, please wait a moment.

😇ChatGPT 引擎还没有准备好,请稍等一下

这是因为chatgpt-engine还没有运行,如果该服务已启动那么则会正确回复。

下面将介绍如何继续启动chatgpt-engine模块

获取Open AI Account AccessToken

你可以通过登录官方网站,然后从浏览器存储的cookie中提取出access token。不过,这种方法存在一定的风险,而且可能会比较繁琐。

为了方便起见,以下链接提供了一种获取token的方法,来自Pandora作者:获取Token链接。在输入你的账号凭证并点击获取按钮后,你将会得到一个以以下内容开头的token:

eyJhbGciOiJSUzI15cCI6IkpXVCIsImtpZCI6Ik1UaEVOVUpHTkVNMVFURTRNMEZCTWpkJodHInwsadgwzsf...

这个token就是open ai accout的Access Token。请注意,该token的有效期为 expires_in: 1209600 秒,意味着在此时间过后需要重新获取,以确保持续使用。

同样在此页面上会同时获得一个 refresh_token 保存这个token就可以自动刷新获取最新的access token, 而无需手动更新配置文件

后端(ChatGPT-Engine)

下载代码&安装依赖

git clone https://github.com/peanut996/chatgpt-engine.git

cd chatgpt-engine/

# 安装依赖
pip install -r requirements.txt

在某些版本的linux发行版上已经不允许直接使用系统的python进行安装依赖,可以使用虚拟环境:

# 创建名为venv虚拟环境
python -m venv venv

# 激活虚拟环境
source venv/bin/activate

编写配置

首先需要准备好配置文件,如下所示:

engine:
  port: 5000 
  debug: false
  host: 127.0.0.1
  chatgpt:
    tokens:
      - "账号:密码:<access token>:<refresh_token>" #这里是以冒号分隔

配置文件详解:

  • port:指定服务要监听的端口号。
  • debug:设置是否启用调试模式。
  • host:指定服务绑定的主机地址。
  • chatgpt:这似乎是一个命名空间,可能包含与ChatGPT集成相关的设置。
  • tokens:这是一个列表,包含用于身份验证的令牌(tokens)。由三部分组成,用冒号分隔:账号、密码、AccessTokenRefreshToken

将上面的配置写入config.yaml 即可

运行

配置文件编写完成后直接使用以下命令即可运行后端:

python main.py

# 也可以使用 '-c' 指定配置文件目录
python main.py -c ./config.yaml

可以如下请求来验证服务是否正确启动:

curl http://localhost:5000/ping

如果响应为pong 则说明服务器启动完毕

nohup可以将服务运行在后台,以便session关闭后仍然能继续访问:

nohup python main.py &

设置代理

因为Open AI对于IP的限制比较严重,所以在无法直接使用的场景下需要设置中转代理

这里推荐使用潘多拉作者的代理:https://ai.fakeopen.com/api/

# 设置环境变量
export CHATGPT_BASE_URL="https://ai.fakeopen.com/api/"
# 启动服务
python main.py

# 或者
CHATGPT_BASE_URL="https://ai.fakeopen.com/api/" python main.py

你可以通过登录官方网站,然后从浏览器存储的cookie中提取出access token。不过,这种方法存在一定的风险,而且可能会比较繁琐。

为了方便起见,以下链接提供了一种获取token的方法,来自Pandora作者:获取Token链接。在输入你的账号凭证并点击获取按钮后,你将会得到一个以以下内容开头的token:

eyJhbGciOiJSUzI15cCI6IkpXVCIsImtpZCI6Ik1UaEVOVUpHTkVNMVFURTRNMEZCTWpkJodHInwsadgwzsf...

这个token就是你接下来所需的Access Token。请注意,该token的有效期为 “expires_in”: 1209600 秒,意味着在此时间过后需要重新获取,以确保持续使用。

🎉 恭喜,一个可以与ChatGPT对话的Telegram Bot就部署完成了!