引言
在Telegram中,机器人(Bot)已成为自动化沟通和娱乐的重要工具。当Telegram机器人遇上ChatGPT,你便拥有一个能自动回答任意问题的24小时在线助手。无论是个人知识库查询、客服响应,还是群聊智能回复,对接ChatGPT都能大幅提升效率。本教程将手把手教你完成整个对接过程,即使你是编程新手也能跟得上。
准备工作:获取Telegram机器人Token与OpenAI API密钥
1. 创建Telegram机器人并获取Token
- 在Telegram中搜索 @BotFather,点击进入并发送
/newbot。 - 根据提示为机器人设置昵称(如MyAIBot)和用户名(需以
bot结尾,如MyAIBot_bot)。 - 创建成功后,BotFather会返回一个HTTP API Token,格式类似
1234567890:AAE...-...-...,请妥善保存。
2. 获取OpenAI API密钥
- 访问 OpenAI官网,注册并登录账户。
- 进入
API Keys页面,点击Create new secret key,生成后复制保存(注意:密钥只显示一次,请立即保存)。
选择开发语言与库:Python最佳实践
推荐使用Python开发,因为其生态成熟且代码简洁。你需要安装两个库:python-telegram-bot(Telegram机器人框架)和 openai(OpenAI官方SDK)。使用pip安装:
pip install python-telegram-bot openai注意:python-telegram-bot 有不同版本,本教程基于 v20.x,请使用以下代码适配最新异步写法。
编写Python代码:实现Telegram与ChatGPT对接
下面提供完整的代码框架,你只需要替换 YOUR_TELEGRAM_TOKEN 和 YOUR_OPENAI_API_KEY 即可运行。
import asyncio
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
import openai
# 配置信息
TELEGRAM_TOKEN = 'YOUR_TELEGRAM_TOKEN'
OPENAI_API_KEY = 'YOUR_OPENAI_API_KEY'
openai.api_key = OPENAI_API_KEY
# 初始化AI回复函数
async def get_chatgpt_reply(user_message: str) -> str:
try:
response = await asyncio.to_thread(
openai.ChatCompletion.create,
model='gpt-3.5-turbo',
messages=[{'role': 'user', 'content': user_message}]
)
return response.choices[0].message.content.strip()
except Exception as e:
return f'抱歉,AI服务暂时不可用:{str(e)}'
# 处理私聊消息
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_text = update.message.text
if not user_text:
return
# 可在此添加用户上下文管理逻辑
reply = await get_chatgpt_reply(user_text)
await update.message.reply_text(reply)
# 处理/start命令
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text('你好!我是ChatGPT机器人,直接发送消息即可与我对话。')
# 主函数
async def main():
app = Application.builder().token(TELEGRAM_TOKEN).build()
app.add_handler(CommandHandler('start', start_command))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
print('机器人运行中...')
await app.run_polling()
if __name__ == '__main__':
asyncio.run(main())代码说明
get_chatgpt_reply使用asyncio.to_thread将耗时的API调用放到线程池,避免阻塞异步事件循环。handle_message捕获用户发给机器人的所有文本消息并自动回复。- 使用
run_polling()以长轮询方式持续获取更新,适合小型机器人。
部署机器人:让机器人7×24小时在线
本地运行机器人后,当你关闭电脑,机器人就会下线。为了让机器人持续服务,你需要将其部署到云服务器或在线平台。
方案一:部署到云服务器
- 购买一台VPS(如阿里云、腾讯云、DigitalOcean),系统选择Ubuntu 20.04+。
- SSH登录服务器,安装Python和pip,然后执行
pip install python-telegram-bot openai。 - 将代码保存为
bot.py,使用nohup python3 bot.py &或systemd服务在后台运行。
方案二:使用Replit等在线平台
- 注册Replit,新建Python项目。
- 把代码粘贴到
main.py,在Secrets中设置环境变量TELEGRAM_TOKEN和OPENAI_API_KEY,避免明文泄露。 - 点击
Run即可运行,但需注意免费版项目在无流量时可能休眠,可使用UptimeRobot等工具定时ping。
常见问题与优化建议
1. API超时或限流
OpenAI API有速率限制,建议在代码中加入错误重试逻辑,并设置合理的等待时间。例如使用 tenacity 库。
2. 上下文连续性
当前代码只处理单条消息,无法记住对话历史。如需要多轮对话,可在全局字典中为每个用户保存消息列表,在调用API时传入前几轮内容。
3. 防止滥用
可以限制每个用户每日请求次数,或只允许特定用户/群组使用,避免API费用激增。
4. 内容安全
建议使用Moderation API过滤不当内容,或设置敏感词列表。
总结
通过以上步骤,你已经成功将Telegram机器人与ChatGPT对接,实现了一个智能对话机器人。你可以根据需求扩展功能:接入更多AI模型、增加图片处理、集成数据库等。希望本教程能激发你的创意,打造出更有价值的Telegram机器人。