如何用Telegram Bot和AI API搭建个人AI聊天助手?

来源:C语言教程作者:辉辉头衔:草根站长
导读:本期聚焦于辉辉创作的《如何用Telegram Bot和AI API搭建个人AI聊天助手?》,敬请观看详情。把Telegram的消息通道和大模型的推理能力接在一起,核心链路并不复杂,但真正动手时会遇到三个容易卡住的环节:长轮询与Webhook的取舍、异步回调里如何保持上下文、以及AI接口超时后怎样优雅降级。本文以Python为主要语言,从零搭建一个可运行的Telegram AI机器人,先讲Bot Token和AI API Key的获取与安全存放,再实现消息收发和指令处理,接着接入支持OpenAI兼容格式的对话接口,补齐多轮会话记忆和异常重试。最后给出本地测试与部署到云主机的完整流程,并附上可直接修改使用的代码。整个过程不需要购买企业级服务,个人开发者用免费额度和一台轻量服务器即可跑通。

Telegram 的 Bot API 允许程序通过 HTTPS 收发消息,而当前主流的大模型服务基本都提供兼容 OpenAI 格式的 HTTP 接口。把这两个接口连起来,个人就能拥有一个不需要手动打开网页、在手机聊天窗口里随时问答的 AI 助手。下文使用 Python 实现,从创建机器人、编写消息处理回调,到接入模型、处理多轮上下文,最后讨论部署细节。

如何用Telegram Bot和AI API搭建个人AI聊天助手?

一、创建机器人并准备 Access Token

在 Telegram 中搜索 @BotFather,发送 /newbot 命令,按提示输入机器人名称和用户名。创建成功后,BotFather 会返回一串形如 123456789:AA... 的 token。这串 token 等同于机器人控制权,不能提交到公开仓库。建议放在项目根目录的 .env 文件里,并通过 python-dotenv 读取。

AI API 这边可以去 OpenAI、DeepSeek、Moonshot 等平台申请 Key。如果暂时没有 Key,也可以用本地 Ollama 暴露的兼容接口做测试。无论哪种方式,都需要准备三样信息:API Key、请求地址、模型名称。下面的 .env 文件示例展示了最小配置。

TELEGRAM_BOT_TOKEN=123456789:AAFakeTokenExample
AI_API_KEY=sk-your-api-key-here
AI_BASE_URL=https://api.openai.com/v1
AI_MODEL=gpt-4o-mini

把敏感信息放在环境变量中还有一个好处:在不同机器上部署时,不需要改动主程序,只需调整 .env 文件即可。注意 .env 文件应加入 .gitignore,避免被版本控制工具记录。

二、使用 python-telegram-bot 编写消息处理逻辑

Python 生态里常用的 Telegram Bot 库有两个:aiogram 和 python-telegram-bot。本文选择 python-telegram-bot v21 以上版本。安装命令如下:pip install python-telegram-bot openai python-dotenv。这个库采用异步回调模式,当用户发送消息时,框架会调用我们注册的函数。

下面的代码创建了 Application 实例,注册 /start 命令和普通文本消息处理器。start 函数返回一句欢迎语,handle_message 则把用户输入转发给下一节的 AI 函数,并把模型返回内容发回聊天窗口。

import os
from dotenv import load_dotenv
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters

load_dotenv()

async def start(update: Update, context):
    await update.message.reply_text("你好,我是你的 AI 助手,直接发送问题即可。")

async def handle_message(update: Update, context):
    user_text = update.message.text
    if not user_text:
        return
    reply = await get_ai_reply(str(update.effective_user.id), user_text)
    await update.message.reply_text(reply)

def main():
    app = Application.builder().token(os.getenv("TELEGRAM_BOT_TOKEN")).build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    app.run_polling()

if __name__ == "__main__":
    main()

这里需要说明,filters.TEXT & ~filters.COMMAND 的含义是:只处理普通文本消息,跳过以 / 开头的命令。长轮询方式适合开发和低负载场景,程序会不断询问 Telegram 服务器是否有新消息。如果用户量增加,可以切换到 Webhook 模式,让 Telegram 主动推送消息到你的服务器,延迟更低。

另外,reply_text 默认会保留 Markdown 格式,但 AI 返回的文本可能包含特殊字符,因此我们采用纯文本模式发送,避免解析失败。实际测试时,可以先让机器人重复用户输入,确认消息链路正常,再接入 AI 接口。

三、接入 AI API 并维护多轮对话上下文

大模型接口通常使用聊天补全格式,请求体中包含 messages 数组,每个元素包含 role 和 content。为了让机器人具备连续对话能力,不能只发送当前问题,需要把历史消息一起发送。最简单的方式是在内存中为每个用户维护一个消息列表,每次请求时把列表传给 API,响应返回后再追加 assistant 消息。

下面的 get_ai_reply 函数使用 openai 库的 AsyncOpenAI 客户端。注意 base_url 必须指向正确的兼容路径,例如 OpenAI 官方是 https://api.openai.com/v1,DeepSeek 可能是 https://api.deepseek.com/v1。调用时设置超时时间为 60 秒,避免模型响应过慢导致整个机器人卡住。

import os
from openai import AsyncOpenAI

client = AsyncOpenAI(
    api_key=os.getenv("AI_API_KEY"),
    base_url=os.getenv("AI_BASE_URL"),
)

user_sessions = {}

async def get_ai_reply(user_id: str, user_text: str):
    if user_id not in user_sessions:
        user_sessions[user_id] = [
            {"role": "system", "content": "你是一个乐于助人的个人助手。"}
        ]
    messages = user_sessions[user_id]
    messages.append({"role": "user", "content": user_text})

    try:
        response = await client.chat.completions.create(
            model=os.getenv("AI_MODEL"),
            messages=messages,
            temperature=0.7,
            max_tokens=1024,
        )
        reply = response.choices[0].message.content.strip()
    except Exception as exc:
        reply = f"AI 服务调用失败:{exc}"

    messages.append({"role": "assistant", "content": reply})
    # 控制上下文长度,防止 token 无限增长
    if len(messages) > 21:
        del messages[1:3]
    return reply

代码中的 user_sessions 字典以用户 ID 为键。使用内存存储的缺点是进程重启后会丢失,如果希望长期保存会话,可以替换为 Redis 或 SQLite。上下文截断策略很关键:当消息数量超过一定范围时,只删除最早的几轮对话,同时保留 system 消息。实际场景中更推荐按 token 数量裁剪,而不是直接按条数删除。

还有一个容易忽略的问题:Telegram 用户 ID 是整数,但异步函数参数中我们把它转成字符串,避免字典键类型不一致。异常处理部分虽然简单,但可以防止 AI 接口返回超时或限流时整个程序崩溃。后续可以加入重试机制和指数退避,让服务更稳定。

四、部署与测试:从本地运行到云服务器

本地开发时直接执行 python main.py 即可。机器人上线后,需要保持进程常驻。云服务器上推荐使用 systemd 管理服务。创建 /etc/systemd/system/telegram-ai.service 文件,写入以下内容。

[Unit]
Description=Telegram AI Assistant Bot
After=network.target

[Service]
User=www-data
WorkingDirectory=/opt/telegram-ai
EnvironmentFile=/opt/telegram-ai/.env
ExecStart=/usr/bin/python3 main.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

保存后运行 sudo systemctl enable telegram-ai && sudo systemctl start telegram-ai。使用 journalctl -u telegram-ai -f 查看实时日志。如果出现 token 无效或网络错误,先检查 .env 文件是否放在正确目录,并确认服务器可以访问 Telegram API 和 AI 服务所在域名。部分云服务器访问 OpenAI 接口可能不稳定,可以配置 HTTP 代理环境变量,或在 AI_BASE_URL 中填写中转地址。

测试阶段可以先在 Telegram 里发送 /start,再发送一个简单问题,例如“用一句话解释什么是 Webhook”。如果收到合理回复,说明整条链路已经打通。后续可以增加 /clear 命令清空上下文、限制用户频率、添加群聊支持等。个人助手机器人的扩展方向很多,但上述基础结构足以支撑大多数轻量场景。

Telegram BotAI API聊天机器人修改时间:2026-10-02 01:09:56

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1002/64454.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。