聊天机器人搭建03
【从零搭建聊天机器人】03 对接大语言模型:集成 云端AI赋予机器人智能大脑
写在前面
欢迎回到《从零搭建聊天机器人》系列教学的第三章!在上一章中,我们成功申请了 Telegram 机器人账号,并在本地通过 Python 虚拟环境实现了一个简单的“回声”功能。但如果只能一字不差地重复我们的话,它显然还不够聪明。
本章我们将完全基于课程实验大纲,为机器人接入大语言模型(LLM)API。本教程以云端AI的API为例进行深度集成(大家在实际操作中,也可以举一反三替换为 DeepSeek、OpenAI 等其他主流大模型 API)。我们将通过异步编程,让机器人真正学会“思考”与“对话”。
🎯 学习目标 (Intended Learning Outcomes)
在本章节结束时,你应当能够掌握以下核心技能:
- 成功集成 大语言模型(LLM)到你的聊天机器人系统架构中(Integrate a large language model into your chatbot)。
- 掌握 使用 Python 动态调用外部 RESTful API 的核心方法。
- 理解并应用 异步任务(Async/Await)处理耗时的大模型请求,优化用户交互体验。
- 实践 生产环境中的代码安全规范,彻底杜绝敏感密钥泄露。
01 获取大模型接入凭证 (Get Access Token)
在代码连接大模型之前,我们必须获取一个专属的 API 密钥(API Key),作为机器人与大模型服务器之间通信的身份凭证。
1. 生成 API Key
获取云端AI例如DeepSeek, ChatGPT的API密钥
2. 更新配置文件 config.ini
为了保障安全,我们绝不将密钥直接写在主程序中。请打开你在第二章创建的 config.ini 文件,在原有内容下方追加 [CHATGPT] 节点配置:
[TELEGRAM]
ACCESS_TOKEN = 8281349887:AAGr.............U-N8
[CHATGPT (选择的模型)]
API_KEY = 你的API密钥
BASE_URL = API网址
MODEL = 使用的模型
API_VER = 模型的版本
⚠️ 注意:请将 你的API密钥 替换为你刚刚真实生成的密钥字符串。
02 编写大模型对接模块
为了让代码结构更具模块化,通常会使用一个独立的封装类来处理与大模型底层的 HTTP 通信。在项目中,我们需要确保根目录下存在一个专门的工具文件(例如 ChatGPT_25.py),其中封装了发送请求的 submit(message) 方法。
使用 Python 访问 ChatGPT
现在,我们将更新聊天机器人程序以访问 ChatGPT。请按照以下步骤操作:
1. 打开终端(命令提示符)并激活虚拟环境:
Windows 系统:
cd <项目路径>
venv\Scripts\activate
macOS 系统:
cd <项目路径>
source venv/bin/activate
将 <路径>/ 替换为项目文件夹的实际路径。
2 安装所需的软件包:
python -m pip install requests
3 编写向AI发送请求的程序
import requests
import configparser
# ChatGPT REST API 的简单客户端
class ChatGPT:
def __init__(self, config):
# 从 ini 文件读取 API 配置值
api_key = config['CHATGPT']['API_KEY']
base_url = config['CHATGPT']['BASE_URL']
model = config['CHATGPT']['MODEL']
api_ver = config['CHATGPT']['API_VER']
# 构建聊天自动补全的完整 REST 端点 URL
self.url = f'{base_url}/deployments/{model}/chat/completions?api-version={api_ver}'
# 设置身份验证和 JSON 负载所需的 HTTP 标头
self.headers = {
"accept": "application/json",
"Content-Type": "application/json",
"api-key": api_key,
}
# 定义系统提示词以指导AI的输出风格
self.system_message = (
'You are a helper! Your users are university students. '
'Your replies should be conversational, informative, use simple words, and be straightforward.'
)
def submit(self, user_message: str):
# 构建对话历史:系统消息 + 用户消息
messages = [
{"role": "system", "content": self.system_message},
{"role": "user", "content": user_message},
]
# 使用生成参数准备请求负载
payload = {
"messages": messages,
"temperature": 1, # 输出的随机性(越高越有创意)
"max_tokens": 150, # 回复的最大长度
"top_p": 1, # 核心采样参数
"stream": False # 禁用流式传输,等待完整回复
}
# 向 ChatGPT REST 发送请求API
response = requests.post(self.url, json=payload, headers=self.headers)
# 如果成功,返回AI的回复文本
if response.status_code == 200:
return response.json()['choices'][0]['message']['content']
else:
# 否则返回错误详情
return "Error: " + response.text
if __name__ == '__main__':
# 从 ini 文件加载配置
config = configparser.ConfigParser()
config.read('config.ini')
# 初始化 ChatGPT 客户端
chatGPT = ChatGPT(config)
# 简单的 REPL 循环:读取用户输入,发送到 ChatGPT,打印回复
while True:
print('Input your query: ', end='')
response = chatGPT.submit(input())
print(response)
该模块的核心逻辑是:读取 config.ini 中的配置信息,构造符合标准的 HTTP POST 请求头(包含 api-key)与请求体(包含用户消息和指定的模型版本),并通过网络库发送给云端大模型服务器,最后解析并返回 AI 生成的文本。
4 测试请求和回复
激活虚拟环境
cd <项目路径>
venv\Scripts\activate
(venv) <路径> python ChatGPT_25.py
输出任意内容查看是否成功回复
03 核心业务逻辑升级 (Updating chatbot.py)
现在,我们需要修改主程序 chatbot.py,将原本的“大写回声”逻辑替换为“大模型智能对话”逻辑。同时,为了防止 AI 在思考时由于网络延迟导致用户以为机器人卡死,我们将引入一个 “思考中…” 的中间状态提示。
请打开 chatbot.py,将其中的核心内容修改并升级为以下严谨的代码:
1. 在顶部添加引用和创建全局变量
from ChatGPT import ChatGPT
gpt = None
2. 修改主函数在读取ini文件后初始化gpt客户端
global gpt
gpt = ChatGPT(config)
3. 替换回调函数callback()
异步回调函数:处理接收到的所有纯文本消息
async def callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
# await update.message.reply_text(response)
logging.info("UPDATE: " + str(update))
loading_message = await update.message.reply_text('思考中...')
try:
# 将用户发送的文本投递给大模型客户端进行处理
response = gpt.submit(update.message.text)
# 动态更新:大模型生成完毕后,利用其异步通道编辑并替换原有的 "思考中..." 文本
await loading_message.edit_text(response)
except Exception as e:
# 异常容错处理
logging.error(f"调用大模型发生错误: {e}")
await loading_message.edit_text("大模型调用错误,请检查模型配置是否正确")
4 最终完整代码如下
'''
This program requires the following modules:
- python-telegram-bot==22.5
- urllib3==2.6.2
'''
from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, ContextTypes, filters
# 引入大模型对接模块(确保 ChatGPT_25.py 在同级目录下)
from ChatGPT_25 import ChatGPT
gpt = None
import configparser
import logging
def main():
# 配置底层的日志输出格式与级别
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
# 初始化配置解析器并读取本地的 config.ini 配置文件
config = configparser.ConfigParser()
config.read('config.ini')
# 【核心升级】在配置加载后、注册 Handler 之前,初始化大模型客户端对象
global gpt
gpt = ChatGPT(config)
# 从配置中安全提取 Telegram Token 并构建 Application
token = config['TELEGRAM']['ACCESS_TOKEN']
app = ApplicationBuilder().token(token).build()
# 注册消息处理器:过滤纯文本且排除斜杠命令
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, callback))
# 启动机器人长轮询模式
logging.info('机器人初始化成功!')
app.run_polling()
# 异步回调函数:处理接收到的所有纯文本消息
async def callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
# await update.message.reply_text(response)
logging.info("UPDATE: " + str(update))
loading_message = await update.message.reply_text('思考中...')
try:
# 将用户发送的文本投递给大模型客户端进行处理
response = gpt.submit(update.message.text)
# 动态更新:大模型生成完毕后,利用其异步通道编辑并替换原有的 "思考中..." 文本
await loading_message.edit_text(response)
except Exception as e:
# 异常容错处理
logging.error(f"调用大模型发生错误: {e}")
await loading_message.edit_text("大模型调用错误,请检查模型配置是否正确")
if __name__ == '__main__':
main()
04 运行测试与日志验证
在终端激活虚拟环境的状态下,输入以下命令让机器人跑起来:
python chatbot.py
📸 规范运行日志输出
当你在 Telegram 中向机器人发送诸如“请问什么是云计算?”等问题时,在你的本地终端里应该能流畅地观察到如下所示的调用日志链:
2026-05-22 11:15:22,341 - root - INFO - 初始化成功!
2026-05-22 11:15:40,112 - root - INFO - UPDATE: Update(...... text='什么是云计算'), update_id=xxxx)
2026-05-22 11:15:40,430 - httpx - INFO - HTTP Request: POST https://api.telegram.org/bot.../sendMessage "HTTP/1.1 200 OK"
2026-05-22 11:15:42,895 - httpx - INFO - HTTP Request: POST (你的AI模型API Base_URL...) "HTTP/1.1 200 OK"
2026-05-22 11:15:43,102 - httpx - INFO - HTTP Request: POST https://api.telegram.org/bot.../editMessageText "HTTP/1.1 200 OK"
从日志中可以明显清晰地看到:收到消息 ➔ 发送临时的 sendMessage(思考中…) ➔ 向大模型平台发送 POST 请求获取 AI 回复 ➔ 执行 editMessageText 动态修改消息。
输出结果:

测试完毕,恭喜你拥有智能聊天机器人了!!*
05 注意:不要忘记推送ChatGPT_25.py,以及推送修改后的chatbot.py到远程仓库!!!
06 踩坑实录:我遇到的错误与怎么解决的
在本章大模型集成的调试过程中,我踩了两个非常经典的坑,专门分享出来供大家避雷:
❌ 错误一:前面将虚拟环境删除后未重新下载Telegram模块
ModuleNotFoundError: No module named 'telegram'
- 报错原因:
前面在错误的地方创建虚拟环境,删除虚拟环境后下载的模块都删除了,需要重新下载 - 解决方案
cd <项目路径>
venv\Scripts\activate
python -m pip install -U pip
pip install -r requirements.txt
本文为《从零搭建聊天机器人》系列教程第三章。在下一章中,我们将离开本地开发机,正式迈向云原生:在 AWS 云端创建 EC2 虚拟服务器,并将我们的智能聊天机器人部署到真正的云端,实现 24 小时在线!欢迎持续关注!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)