Blog.wlens.top
1674 字
8 分钟
全能 Telegram AI Bot用 Python 与 NVIDIA 大模型打造的多模态智能助理
🎉 全能 Telegram AI Bot —— 用 Python 与 NVIDIA 大模型打造的多模态智能助理
前言(开胃菜)
在过去一年里,大语言模型(LLM)已经从科研实验室走进生产环境。许多企业、社区甚至个人开发者,都想把这些强大的「大脑」嵌入自己的聊天工具中,让机器人不仅能聊八卦,还能 即时搜索、阅读网页、记忆上下文、处理图片 ……
今天,我把 tg_bot.py(核心代码)和 .env(配置文件)结合起来,做了一篇实战分享。本文会:
- 概览功能——从身份鉴权到模型切换,一网打尽所有特性;
- 技术拆解——关键模块的实现思路与代码亮点;
- 部署指南——一步步跑通整个系统;
- 扩展思路——后续可以玩儿的高级玩法。
项目链接 https://git.wlens.top/laowang/TeleIntelliChat
1️⃣ 项目结构一览
TeleIntelliChat│├─ tg_bot.py # 主程序,负责 Telegram Bot 与 LLM 的交互└─ .env # 环境变量,存放敏感凭证└─ requirements.txt⚠️ 注意:
.env中的TELEGRAM_BOT_TOKEN与NVIDIA_API_KEY为私密信息,请务必妥善保管,且不要提交到公开仓库。
2️⃣ 功能总览 & 实现细节
下面用 加粗标题 + - 分点列表 的方式罗列每个功能,并配以简要代码说明,方便快速定位。
🔐 身份鉴权 & 配置加载
- 读取
.envfrom dotenv import load_dotenvload_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 调用。
📜 核心聊天流程
- 获取历史 →
get_chat_history(chat_id)自动加入系统提示词(包括日期、行为手册)。 - 发送请求至 NVIDIA API(
chat_with_agent),携带 tools 定义(web_search、web_fetch、image_search、manage_memory)。 - 工具调用循环:最多 15 次迭代,依据模型返回的
tool_calls执行对应函数,随后继续对话直至得到最终文本。 - 结果回写:用
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环境。
# ① 克隆或复制项目到工作目录git clone https://git.wlens.top/laowang/TeleIntelliChat.gitcd TeleIntelliChat
# ② 创建虚拟环境(WIN推荐)python -m venv venv.\venv\Scripts\activate
# ② 创建虚拟环境(Macos Liunx推荐)python3 -m venv venvsource venv/bin/activate
# ③ 安装依赖pip install -r requirements.txt # Winpip3 install -r requirements.txt # Macos Liunx配置 .env
在 E:\AI_Workspace 下新建 .env(注意文件名前有点号):
TELEGRAM_BOT_TOKEN=YOUR_TELEGRAM_BOT_TOKEN_HERENVIDIA_API_KEY=YOUR_NVIDIA_API_KEY_HEREALLOWED_USERS=12345678,987654321 # 可选,多个 ID 用逗号分隔Tips:如果想让所有人都可以使用,把
ALLOWED_USERS留空即可。
启动 Bot
python tg_bot.py # Winpython3 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 osfrom dotenv import load_dotenvload_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-大模型打造的多模态智能助理/