部署自己的 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 |