部署自己的Chatgpt Telegram机器人

部署自己的 Chatgpt Telegram 机器人

date: March 24, 2023
slug: 19
status: Published
tags: 技术
type: Post

开源项目地址：链接基于 cloudflare workers 开发的 telegram 对话 bot，实测体验不错，毕竟免费好用谁不爱呢

前期准备

1. 创建 tg 机器人

在 BotFather 处新建 telegram 机器人，获取 Token 并自定义机器人的名称，头像等；

打开 Telegram 并向 BotFather 发送 /start 命令

发送 /newbot 命令，并给你的机器人起一个名字

给你的机器人取一个唯一的用户名

BotFather 会生成一个 Token，复制下来保存好，稍后再 Cloudflare Workers 的设置里将这个 Token 填入 TELEGRAM_TOKEN 变量中

在 Telegram 中找到 BotFather, 发送 /setcommands, 找到自己的机器人，发送 new - 开始新对话

2. 注册 OpenAI 账号并创建 API Key

在 openai.com 里注册账号，点击右上角头像进入个人设置界面，在 API Keys 里创建一个新的 API Key，稍后将它填入 API_KEY

部署

1. 部署 Workers

打开 Cloudfalre Workers 注册账号

点击 Create a Worker

将代码复制到编辑器中，保存

2. 配置环境变量

打开 Setting-Variables-Environment Variables，增加变量：

KEY | 说明 | 默认值 | 特殊说明
API_KEY | OpenAI API Key | null |
TELEGRAM_AVAILABLE_TOKENS | 支持多个 Telegram Bot Token | null | 多个 Token 用，分隔
CHAT_WHITE_LIST | 聊天 ID 白名单 | null | 多个 ID 用，分隔，不知道 ID，和机器人聊一句就能返回
I_AM_A_GENEROUS_PERSON | 关闭白名单，允许所有人访问 | false | 鉴于很多人不想设置白名单，或者不知道怎么获取 ID，所以设置这个选项就能允许所有人访问， 值为 true 时生效
AUTO_TRIM_HISTORY | 自动清理历史记录 | true | 为了避免 4096 字符限制，将消息删减
MAX_HISTORY_LENGTH | 最大历史记录长度 | 20 | AUTO_TRIM_HISTORY 开启后 为了避免 4096 字符限制，将消息删减
CHAT_MODEL | open ai 模型选择 | gpt-3.5-turbo |
SYSTEM_INIT_MESSAGE | 系统初始化信息 | 你是一个得力的助手 | 默认机器人设定
SYSTEM_INIT_MESSAGE_ROLE | 系统初始化信息角色 | system | 默认机器人设定
ENABLE_USAGE_STATISTICS | 开启使用统计 | false | 开启后，每次调用 API 都会记录到 KV，可以通过 /usage 查看
HIDE_COMMAND_BUTTONS | 隐藏指令按钮 | null | 把想要隐藏的按钮写入用逗号分开 /start,/system, 记得带上斜杠，修改之后得重新 init
DEBUG_MODE | 调试模式 | false | 目前可以把最新一条消息保存到 KV 方便调试

3. 绑定 KV 数据

(Settings-Variables-KV Namespace Bindings), 名字设置为 DATABASE

点击右上角的 Create a Namespace

设置名字为 DATABASE

打开 Cloudflare Workers 点击你的 Workers

点击右上角的 Setting -> Variables

在 KV Namespace Bindings 中点击 Edit variables

点击 Add variable

设置名字为 DATABASE 并选择刚刚创建的 KV 数据

4. 运行

访问 https://your_workers_name.your_workers_subdomain.workers.dev/init 绑定 telegram 开始新对话，使用 /new 指令开始，之后每次都会将聊天上下文发送到 ChatGPT

运行之后的用户配置

每个用户的自定义配置，只能通过 Telegram 发送消息来修改，消息格式为/setenv KEY=VALUE

KEY | 说明 | 例子
SYSTEM_INIT_MESSAGE | 系统初始化参数，设定后就算开启新会话还能保持，不用每次都调试 | /setenv SYSTEM_INIT_MESSAGE = 现在开始你是喵娘，每句话以喵结尾
OPENAI_API_EXTRA_PARAMS | OpenAI API 额外参数，设定后每次调用 API 都会带上，可以用来调整温度等参数 | /setenv OPENAI_API_EXTRA_PARAMS={"temperature": 0.5} 每次修改必须为完整 JSON