1674 字
8 分钟
全能 Telegram AI Bot用 Python 与 NVIDIA 大模型打造的多模态智能助理

🎉 全能 Telegram AI Bot —— 用 Python 与 NVIDIA 大模型打造的多模态智能助理#


前言(开胃菜)#

在过去一年里,大语言模型(LLM)已经从科研实验室走进生产环境。许多企业、社区甚至个人开发者,都想把这些强大的「大脑」嵌入自己的聊天工具中,让机器人不仅能聊八卦,还能 即时搜索、阅读网页、记忆上下文、处理图片 ……

今天,我把 tg_bot.py(核心代码)和 .env(配置文件)结合起来,做了一篇实战分享。本文会:

  1. 概览功能——从身份鉴权到模型切换,一网打尽所有特性;
  2. 技术拆解——关键模块的实现思路与代码亮点;
  3. 部署指南——一步步跑通整个系统;
  4. 扩展思路——后续可以玩儿的高级玩法。

项目链接 https://git.wlens.top/laowang/TeleIntelliChat


1️⃣ 项目结构一览#

TeleIntelliChat
├─ tg_bot.py # 主程序,负责 Telegram Bot 与 LLM 的交互
└─ .env # 环境变量,存放敏感凭证
└─ requirements.txt

⚠️ 注意.env 中的 TELEGRAM_BOT_TOKENNVIDIA_API_KEY 为私密信息,请务必妥善保管,且不要提交到公开仓库。


2️⃣ 功能总览 & 实现细节#

下面用 加粗标题 + - 分点列表 的方式罗列每个功能,并配以简要代码说明,方便快速定位。

🔐 身份鉴权 & 配置加载#

  • 读取 .env
    from dotenv import load_dotenv
    load_dotenv()
    TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
    NVIDIA_API_KEY = os.getenv('NVIDIA_API_KEY')
  • 白名单控制
    ALLOWED_USERS = [int(u.strip()) for u in os.getenv('ALLOWED_USERS', '').split(',') if u.strip()]
    def check_auth(message):
    return not ALLOWED_USERS or message.from_user.id in ALLOWED_USERS

🤖 多模型管理#

  • 模型映射表 (MODEL_MAP):支持十余种主流模型(GPT‑OSS、Qwen、LLaMA、DeepSeek、Kimi 等)。
  • 动态切换:通过 /model 命令并行检测各模型连通性,展示 ✅/❌ 状态按钮,点击即切换。
  • 默认模型openai/gpt-oss-120b(可自行改成更适合的)。

🧠 持久化对话记忆#

  • JSON 文件 user_memory.json 保存每位用户的自定义记忆(如喜好、待办事项)。
  • API execute_manage_memory(chat_id, action, content) 提供 增删查 三大操作,供 Bot 内部 tool 调用。

📜 核心聊天流程#

  1. 获取历史get_chat_history(chat_id) 自动加入系统提示词(包括日期、行为手册)。
  2. 发送请求至 NVIDIA APIchat_with_agent),携带 tools 定义(web_search、web_fetch、image_search、manage_memory)。
  3. 工具调用循环:最多 15 次迭代,依据模型返回的 tool_calls 执行对应函数,随后继续对话直至得到最终文本。
  4. 结果回写:用 bot.edit_message_text 更新占位「思考中」消息,实现 “实时进度” 反馈。

🌐 网络工具#

Tool作用关键实现
web_search快速检索最新网络信息(标题、摘要、链接)使用 ddgs(DuckDuckGo Search)并返回 5 条精炼摘要
web_fetch深度抓取网页正文(去除 JS/CSS)requests+BeautifulSoup,过滤噪声,仅返回前 3500 字
image_search根据关键词返回 Markdown 图片链接同样借助 ddgs.images,返回前三张图片的 Markdown 格式

📸 图片处理(Telegram 专属)#

  • 当收到 photo 消息时,将图片下载为 Base64 并封装进 current_content,后续可交给大模型进行视觉理解。

🚀 其他便利功能#

  • 快捷命令/start/help/reset(清空对话缓存)。
  • 并发检测模型可达性:使用 ThreadPoolExecutor,在 8 s 超时内判断节点健康。
  • 日志打印:大量 print 用于调试,可轻松迁移到正式日志框架。

3️⃣ 部署与运行步骤#

以下步骤假设你已经安装 Python 3.10+,并具备 pip 环境。

Terminal window
# ① 克隆或复制项目到工作目录
git clone https://git.wlens.top/laowang/TeleIntelliChat.git
cd TeleIntelliChat
# ② 创建虚拟环境(WIN推荐)
python -m venv venv
.\venv\Scripts\activate
# ② 创建虚拟环境(Macos Liunx推荐)
python3 -m venv venv
source venv/bin/activate
# ③ 安装依赖
pip install -r requirements.txt # Win
pip3 install -r requirements.txt # Macos Liunx

配置 .env#

E:\AI_Workspace 下新建 .env(注意文件名前有点号):

TELEGRAM_BOT_TOKEN=YOUR_TELEGRAM_BOT_TOKEN_HERE
NVIDIA_API_KEY=YOUR_NVIDIA_API_KEY_HERE
ALLOWED_USERS=12345678,987654321 # 可选,多个 ID 用逗号分隔

Tips:如果想让所有人都可以使用,把 ALLOWED_USERS 留空即可。

启动 Bot#

Terminal window
python tg_bot.py # Win
python3 tg_bot.py # Macos Liunx

启动成功后,终端会出现:

🚀 Bot 开始运行...
✅ Telegram 快捷菜单注册成功!

现在打开 Telegram,搜索你的 Bot 名称,输入 /start 即可看到欢迎信息。尝试以下指令:

  • /model → 检测并切换模型
  • 任意文字,例如 “帮我查询最近的 AI 会议” → Bot 会自动决定是搜索还是深度阅读,并返回答案。
  • 发一张图片并问 “这是什么?” → Bot 将图片转为 Base64 送给大模型进行视觉推理(需要模型支持多模态)。

4️⃣ 高阶扩展方向#

方向示例实现难度
多线程/异步改用 asyncio + aiohttp,提升并发能力
数据库持久化user_memory.json 换成 SQLite 或 MongoDB,便于查询统计
插件体系将 Tools 抽象为独立插件(GitHub 搜索、天气查询等),实现热插拔
容器化部署编写 Dockerfile,配合 docker-compose 实现“一键部署”
监控报警集成 Prometheus/Grafana,监控 API 调用次数、响应 latency

小技巧:如果你想把 Bot 部署到云服务器(如阿里云 ECS),只需要把 E:\AI_Workspace 整体拷贝过去,确保 .env 中的 token 有公网访问权限即可。


📌 在 tg_bot.py 中自定义 API 地址模型列表 的完整说明#

下面这段代码位于 主脚本最顶部(导入‑环境变量‑模型映射),是整个 Bot 能够自由切换不同大模型、接入额外后端服务的关键入口。只要按照几步操作,即可把任意公开或私有的 LLM 接口、甚至自研模型加入到 Bot 中。


当前已有的配置块#

import os
from dotenv import load_dotenv
load_dotenv()
# ────────────────────────────────
# ① 必须的凭证
# ────────────────────────────────
TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
NVIDIA_API_KEY = os.getenv('NVIDIA_API_KEY')
# 如果你想替换为其他厂商的 URL,只需要改下面这一行
NVIDIA_API_URL = "https://integrate.api.nvidia.com/v1/chat/completions"
# 标例替换为DeepSeek厂商
# NVIDIA_API_URL = "https://api.deepseek.com/v1"
try:
ALLOWED_USERS = [int(u.strip()) for u in os.getenv('ALLOWED_USERS', '').split(',') if u.strip()]
except ValueError:
ALLOWED_USERS = []
# ────────────────────────────────
# ③ 已内置的模型映射表
# ────────────────────────────────
MODEL_MAP = {
"gpt-oss-120b": "openai/gpt-oss-120b",
"qwen3-next-80b-a3b-thinking": "qwen/qwen3-next-80b-a3b-thinking",
"qwen3.5-122b-a10b": "qwen/qwen3.5-122b-a10b",
# …(其余略)…
}

MODEL_MAP 中加入新模型#

模型映射表的结构非常直观:

MODEL_MAP = {
"<别名>": "<实际模型标识>",
}
  • 别名(左侧键)是用户在 Telegram 中通过 /model 命令看到的名称,也是后端请求体里 model 字段的值。
  • 实际模型标识(右侧值)是对应云平台(NVIDIA、OpenAI、Claude 等)在 Model Registry 中的唯一 ID。

小结#

  • 本项目演示了 如何用几百行 Python 完整搭建一个支持搜索、网页阅读、图片识别、记忆管理的 Telegram AI 助手
  • 代码结构清晰、模块化程度高,便于二次开发和功能拓展。
  • 利用了 NVIDIA 大模型 API 以及 DuckDuckGo 免费搜索,引入成本低、效果佳。
全能 Telegram AI Bot用 Python 与 NVIDIA 大模型打造的多模态智能助理
https://blog.wlens.top/posts/全能-telegram-ai-bot-用-python-与-nvidia-大模型打造的多模态智能助理/
作者
Lao Wang
发布于
2026-03-14
许可协议
CC BY-NC-SA 4.0