用Python构建聊天机器人

入门·10 分钟·通过可运行代码讲解「用Python构建聊天机器人」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。

用Python构建聊天机器人

构建聊天机器人不是简单调用一次模型接口。你需要处理输入、上下文、角色设定、异常、日志和输出格式。本文用 Python 梳理一个最小但结构清晰的聊天机器人。

最小架构

一个命令行聊天机器人至少包含:

  1. 读取用户输入;
  2. 保存对话历史;
  3. 调用模型接口;
  4. 打印模型回答;
  5. 处理退出和异常。

基础代码结构

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 或微信机器人会更稳。