最简单快捷部署属于自己的ChatGPT Telegram机器人的方法。使用Cloudflare Workers,单文件,直接复制粘贴一把梭,无需任何依赖,无需配置本地开发环境,不用域名,免服务器。 可以自定义系统初始化信息,让你调试好的性格永远不消失。
- 无服务器部署
- 支持多个Telegram机器人
- 支持多个OpenAI密钥
- 支持Azure OpenAI服务
- 支持Cloudflare AI(免费)
- 支持流式输出
- 支持自定义角色
- 支持多平台部署
https://github.com/TBXark/ChatGPT-Telegram-Workers/tree/master
部署流程
手动部署
一. 新建Telegram机器人, 获得Token
- 打开Telegram并向 BotFather 发送
/start
命令 - 发送
/newbot
命令,并给你的机器人起一个名字 - 给你的机器人取一个唯一的用户名以
_bot
结尾 - BotFather 会生成一个 Token,复制下来保存好,这个 Token 是和你的机器人绑定的密钥,不要泄露给他人!
- 稍后再Cloudflare Workers 的设置里 将这个 Token 填入
TELEGRAM_TOKEN
变量中
二. 注册OpenAI账号并创建API Key
- 打开 OpenAI 注册账号
- 点击右上角的头像,进入个人设置页面
- 点击 API Keys,创建一个新的 API Key
- 稍后再Cloudflare Workers 的设置里 将这个 Token 填入
API_KEY
变量中
三. 部署Workers
- 打开 Cloudflare Workers 注册账号
- 点击右上角的
Create a Service
- 进入新建的workers, 选择
Quick Edit
, 将../dist/index.js
代码复制到编辑器中,保存
四. 配置环境变量
- 打开 Cloudflare Workers 点击你的Workers,点击右上角的 Setting -> Variables
API_KEY
:设置成 OpenAI API KeyTELEGRAM_AVAILABLE_TOKENS
:设置成 Telegram Bot TokenCHAT_WHITE_LIST
:设置成允许访问的用户的ID,例如123456789,987654321
,不知道自己ID可以在和你创建的的机器人聊天中使用/new
指令获取I_AM_A_GENEROUS_PERSON
: 如果还是没有弄懂怎么获取ID,可以设置这个值为true
,这样就关闭白名单功能,允许所有人访问。
五. 绑定KV数据
- 在
首页-Workers-KV
, 点击右上角的Create a Namespace
, 名字随便取, 但是绑定的时候必须设定为DATABASE
- 打开 Cloudflare Workers 点击你的Workers
- 点击右上角的 Setting -> Variables
- 在
KV Namespace Bindings
中点击Edit variables
- 点击
Add variable
- 设置名字为
DATABASE
并选择刚刚创建的KV数据
六. 初始化
- 运行
https://workers_name.username.workers.dev/init
自动绑定telegram的webhook和设定所有指令
七. 开始聊天
- 开始新对话,使用
/new
指令开始,之后每次都会将聊天上下文发送到ChatGPT - 使用
/setenv KEY=VALUE
指令修改用户配置,例如SETENV SYSTEM_INIT_MESSAGE=现在开始是喵娘,每句话已喵结尾
- 因为每次对话都会把所有历史记录带上,容易达到4096的token限制,所以没事的时候
/new
一下,清理一下历史记录
自动部署
- 手动部署的一, 二, 三 步骤
mv wrangler-example.toml wrangler.toml
, 然后修改相应配置npm install
npm run deploy
配置
推荐在Workers配置界面填写环境变量, 而不是直接修改js代码中的变量
KV配置
KEY | 特殊说明 |
---|---|
DATABASE | 先新建KV,新建的时候名字随意,然后绑定的时候必须设定为DATABASE |
系统配置
为每个用户通用的配置,通常在workers配置界面填写
KEY | 说明 | 默认值 | 特殊说明 |
---|---|---|---|
AI_PROVIDER | AI提供商 | auto |
AI提供商: auto, azure, openai, workers; auto为自动选择一个有效的配置,判断优先级为 azure > openai > workers |
API_KEY | OpenAI API Key | null |
可以同时使用多个key,使用的时候会随机选择一个 |
CHAT_MODEL | open ai 模型选择 | gpt-3.5-turbo |
|
– | – | – | – |
TELEGRAM_AVAILABLE_TOKENS | 支持多个Telegram Bot Token | null |
多个Token用, 分隔 |
– | – | – | – |
CHAT_WHITE_LIST | 聊天ID白名单 | null |
多个ID用, 分隔,不知道ID,和机器人聊一句就能返回 |
I_AM_A_GENEROUS_PERSON | 关闭白名单,允许所有人访问 | false |
鉴于很多人不想设置白名单,或者不知道怎么获取ID,所以设置这个选项就能允许所有人访问, 值为true 时生效 |
LOCK_USER_CONFIG_KEYS | 锁定自定义用户配置 | [] |
可以锁定某些字段。比如设置为CHAT_MODEL 就可以防止其他用户通过/setenv 指令切换模型,多个字段用, 分隔 |
– | – | – | – |
AUTO_TRIM_HISTORY | 自动清理历史记录 | true |
为了避免4096字符限制,将消息删减 |
MAX_HISTORY_LENGTH | 最大历史记录长度 | 20 |
AUTO_TRIM_HISTORY开启后 为了避免4096字符限制,将消息删减 |
MAX_TOKEN_LENGTH | 最大历史token数量 | 2048 | 过长容易超时建议设定在一个合适的数字 |
GPT3_TOKENS_COUNT | GTP计数模式 | false |
使用更加精准的token计数模式替代单纯判断字符串长度,但是容易超时 |
– | – | – | – |
SYSTEM_INIT_MESSAGE | 系统初始化信息 | 你是一个得力的助手 |
默认机器人设定 |
SYSTEM_INIT_MESSAGE_ROLE | 系统初始化信息角色 | system |
默认机器人设定 |
– | – | – | – |
ENABLE_USAGE_STATISTICS | 开启使用统计 | false |
开启后,每次调用API都会记录到KV,可以通过/usage 查看 |
HIDE_COMMAND_BUTTONS | 隐藏指令按钮 | null |
把想要隐藏的按钮写入用逗号分开/start,/system , 记得带上斜杠,修改之后得重新init |
SHOW_REPLY_BUTTON | 显示快捷回复按钮 | false |
显示快捷回复按钮 |
– | – | – | – |
UPDATE_BRANCH | 分支 | master |
版本检测所在分支 |
– | – | – | – |
DEBUG_MODE | 调试模式 | false |
目前可以把最新一条消息保存到KV方便调试,非常消耗KV写入量,正式环境务必关闭 |
DEV_MODE | 开发模式 | false |
开发测试用 |
STREAM_MODE | 流模式 | true |
得到类似ChatGPT Web一样的打字机输出模式 |
SAFE_MODE | 安全模式 | true |
安全模式,会增加KV写损耗,但是能避免Workers超时导致的Telegram死亡循环重试,减少Token的浪费,不建议关闭。 |
– | – | – | – |
LANGUAGE | 语言 | zh-CN |
zh-CN ,zh-TW 和en |
– | – | – | – |
TELEGRAM_API_DOMAIN | Telegram | https://api.telegram.org |
可以自定义Telegram服务器 |
OPENAI_API_DOMAIN | OpenAI | https://api.openai.com |
可以替换为其他与OpenAI API兼容的其他服务商的域名 |
– | – | – | – |
AZURE_API_KEY | azure api key | null |
支持azure的API,两个密钥随便选一个就可以。如果你要默认使用azure,你可以设置AI_PROVIDER 为azure |
AZURE_COMPLETIONS_API | azure api url | null |
格式https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2023-05-15 |
– | – | – | – |
CLOUDFLARE_ACCOUNT_ID | Cloudflare 的 用户ID | null |
你可以在workers首页的右侧信息栏中找到这个信息。如果你要默认使用workers ai,你可以设置AI_PROVIDER 为workers |
CLOUDFLARE_TOKEN | Cloudflare的Token | null |
你可以在https://dash.cloudflare.com/profile/api-tokens 中使用Workers AI (Beta) 模板创建 |
WORKERS_CHAT_MODEL | 文字生成模型 | @cf/meta/llama-2-7b-chat-fp16 |
具体模型列表可以查看https://developers.cloudflare.com/workers-ai/models/llm/ |
WORKERS_IMAGE_MODEL | 文字生成图片模型 | @cf/stabilityai/stable-diffusion-xl-base-1.0 |
同上 |
– | – | – | – |
DALL_E_MODEL | 生成图像的模型 | dall-e-2 |
支持 dall-e-2 和 dall-e-3 |
DALL_E_IMAGE_SIZE | 生成图像的尺寸 | 512x512 |
生成图像的尺寸。对于 dall-e-2,必须是256×256、512×512或1024×1024之一。对于 dall-e-3 模型,必须是1024×1024、1792×1024或1024×1792之一。 |
DALL_E_IMAGE_QUALITY | 生成图像的质量 | standard |
将要生成的图片质量。hd会创建具有更精细细节和整体一致性的图片。此参数仅支持dall-e-3. |
DALL_E_IMAGE_STYLE | 生成图像的风格 | vivid |
生成图像的风格。必须是 vivid 或 natural 中的一个。vivid使模型倾向于产生超现实和戏剧化的图片。natural使模型产生更自然、不那么超现实外观的图片。此参数仅支持dall-e-3. |
群组配置
可以把机器人加到群组中,然后群组里的所有人都可以和机器人聊天。
BREAKING CHANGE: 重大改动,必须把群ID加到白名单
CHAT_GROUP_WHITE_LIST
才能使用, 否则任何人都可以把你的机器人加到群组中,然后消耗你的配额。
IMPORTANT:受限TG的隐私安全策略,如果你的群组是公开群组或超过2000人,请将机器人设置为
管理员
,否则机器人无法响应@机器人
的聊天消息。
IMPORTANT:必须在botfather中设置
/setprivacy
为Disable
,否则机器人无法响应@机器人
的聊天消息。
KEY | 说明 | 默认值 | 特殊说明 |
---|---|---|---|
GROUP_CHAT_BOT_ENABLE | 开启群组机器人 | true |
开启后,机器人加入群组后,然后群组里的所有人都可以和机器人聊天。 |
TELEGRAM_BOT_NAME | 机器人名字 xxx_bot | null |
顺序必须和TELEGRAM_AVAILABLE_TOKENS 一致, 必须设置否则无法在群聊中使用 |
GROUP_CHAT_BOT_SHARE_MODE | 群组机器人共享历史记录 | false |
开启后,一个群组只有一个会话和配置。关闭的话群组的每个人都有自己的会话上下文。 |
CHAT_GROUP_WHITE_LIST | 群组聊天ID白名单 | null |
多个ID用, 分隔,不知道ID,在群组中和机器人聊一句就能返回 |
用户配置
每个用户的自定义配置,只能通过Telegram发送消息来修改,消息格式为/setenv KEY=VALUE
, 用户配置的优先级比系统配置的更高。如果想删除配置,请使用/delenv KEY
。 批量设置变量请使用/setenvs {"KEY1": "VALUE1", "KEY2": "VALUE2"}
KEY | 说明 |
---|---|
AI_PROVIDER | 配置与ENV相同 |
CHAT_MODEL | 配置与ENV相同 |
OPENAI_API_KEY | 设置该值之后将不会调用系统配置的KEY |
OPENAI_API_EXTRA_PARAMS | OpenAI API额外参数,设定后每次调用API都会带上,可以用来调整温度等参数, /setenv OPENAI_API_EXTRA_PARAMS={"temperature": 0.5} 每次修改必须为完整JSON |
SYSTEM_INIT_MESSAGE | 配置与ENV相同 |
DALL_E_MODEL | 配置与ENV相同 |
DALL_E_IMAGE_SIZE | 配置与ENV相同 |
DALL_E_IMAGE_QUALITY | 配置与ENV相同 |
DALL_E_IMAGE_STYLE | 配置与ENV相同 |
AZURE_API_KEY | 配置与ENV相同 |
AZURE_COMPLETIONS_API | 配置与ENV相同 |
WORKERS_CHAT_MODEL | 配置与ENV相同 |
WORKER_IMAGE_MODEL | 配置与ENV相同 |
支持命令
命令 | 说明 | 示例 |
---|---|---|
/help |
获取命令帮助 | /help |
/new |
发起新的对话 | /new |
/start |
获取你的ID,并发起新的对话 | /start |
/img |
生成一张图片 | /img 图片描述 |
/version |
获取当前版本号,判断是否需要更新 | /version |
/setenv |
设置用户配置, 详情见用户配置 |
/setenv KEY=VALUE |
/setenvs |
批量设置用户配置, 详情见用户配置 |
/setenvs {"KEY1": "VALUE1", "KEY2": "VALUE2"} |
/delenv |
删除用户配置 | /delenv KEY |
/usage |
获取当前机器人的用量统计 | /usage |
/system |
查看当前一些系统信息 | /system |
/role |
设置预设的身份, 配置使用方法同/setenv |
/role |
/redo |
修改上一个提问或者换一个回答 | /redo 修改过的内容 或者 /redo |
/echo |
回显消息,仅开发模式可用 | /echo |
自定义命令
除了上述系统定义的指令,你也可以自定义快捷指令, 可以将某些较长的指令简化为一个单词的指令。
自定义指令使用环境变量设置 CUSTOM_COMMAND_XXX,其中XXX为指令名,比如CUSTOM_COMMAND_azure
,值为指令内容,比如/setenvs {"AI_PROVIDER": "azure"}
。 这样就可以使用/azure
来代替/setenvs {"AI_PROVIDER": "azure"}
实现快速切换AI提供商。
下面是一些自定义指令例子
指令 | 值 |
---|---|
CUSTOM_COMMAND_azure | /setenvs {"AI_PROVIDER": "azure"} |
CUSTOM_COMMAND_workers | /setenvs {"AI_PROVIDER": "workers"} |
CUSTOM_COMMAND_gpt3 | /setenvs {"AI_PROVIDER": "openai", "CHAT_MODEL": "gpt-3.5-turbo"} |
CUSTOM_COMMAND_gpt4 | /setenvs {"AI_PROVIDER": "openai", "CHAT_MODEL": "gpt-4"} |
如果你是用toml进行配置,可以使用下面的方式:
CUSTOM_COMMAND_azure= '/setenvs {"AI_PROVIDER": "azure"}'
CUSTOM_COMMAND_workers = '/setenvs {"AI_PROVIDER": "workers"}'
CUSTOM_COMMAND_gpt3 = '/setenvs {"AI_PROVIDER": "openai", "CHAT_MODEL": "gpt-3.5-turbo"}'
CUSTOM_COMMAND_gpt4 = '/setenvs {"AI_PROVIDER": "openai", "CHAT_MODEL": "gpt-4"}'
Free ChatGPT 免费的ChatGPT镜像站点列表 - 摸鱼时间