用Python构建聊天机器人
入门·10 分钟·通过可运行代码讲解「用Python构建聊天机器人」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。
用Python构建聊天机器人
构建聊天机器人不是简单调用一次模型接口。你需要处理输入、上下文、角色设定、异常、日志和输出格式。本文用 Python 梳理一个最小但结构清晰的聊天机器人。
最小架构
一个命令行聊天机器人至少包含:
- 读取用户输入;
- 保存对话历史;
- 调用模型接口;
- 打印模型回答;
- 处理退出和异常。
基础代码结构
messages = [
{'role': 'system', 'content': '你是一个耐心的 Python 和 AI 学习助手'}
]
while True:
user_text = input('你:').strip()
if user_text.lower() in ['exit', 'quit']:
break
if not user_text:
continue
messages.append({'role': 'user', 'content': user_text})
answer = call_model(messages)
print('AI:', answer)
messages.append({'role': 'assistant', 'content': answer})
call_model 可以封装 OpenAI、DeepSeek、智谱等不同模型的 API 调用。
封装模型调用
def call_model(messages):
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
temperature=0.4,
)
return response.choices[0].message.content
把调用封装成函数后,后续加重试、日志、流式输出都更方便。
控制历史长度
聊天越久,messages 越长,成本越高,还可能超过上下文窗口。可以只保留最近几轮:
MAX_MESSAGES = 12
if len(messages) > MAX_MESSAGES:
messages = [messages[0]] + messages[-(MAX_MESSAGES-1):]
第一条 system 消息通常要保留。
增加错误处理
try:
answer = call_model(messages)
except Exception as e:
print('调用失败,请稍后重试:', e)
messages.pop() # 移除刚加入但未成功处理的用户消息
continue
失败时要避免把未完成的状态写进历史。
让机器人更稳定
- system 提示词写清楚角色和边界;
- 对用户输入做长度限制;
- 对敏感任务提示人工核对;
- 保存日志方便排查;
- 对长对话做摘要。
练习任务
把命令行机器人改造成学习助手:用户输入主题,机器人先问水平和目标,再生成学习计划。要求至少支持 3 轮对话。
小结
聊天机器人的难点不在“调用模型”四个字,而在上下文管理、异常处理和产品边界。先写一个结构清晰的命令行版本,再扩展到 Web 或微信机器人会更稳。