《2026 Python零基础入门:用AI主题学编程》第十课:聊天历史 + 多轮对话——带记忆的交互机器人
大家好我是链杯子CSDN链上杯子。失业一年了天天想着怎么翻身。最近调用 API 后发现单次问答虽然爽但模型完全不记得上句话说了什么。把历史消息都塞进 messages 列表里再发给 API模型就能“记住”上下文了。第一次看到它接上上一轮的话题继续聊感觉像真的在和一个有记忆的 AI 助手对话。本课目标学会维护聊天历史用列表存储多条消息在每次调用 API 时把完整历史作为 messages 发送实现带上下文的多轮对话。结合第九课的 API 调用和第八课的文件保存构建一个简单的“有记忆的交互机器人”。核心代码实战1. 基础多轮对话 —— 手动维护 messages 列表import requests # API 配置替换成你的 api_url https://api.deepseek.com/v1/chat/completions api_key 你的 DeepSeek API Key headers { Authorization: fBearer {api_key}, Content-Type: application/json } # 初始化聊天历史system prompt 放最前面 messages [ {role: system, content: 你是一个友好、幽默的聊天伙伴。回复要简洁有趣。} ] print( 多轮聊天开始输入 quit 退出 ) while True: user_input input(你) if user_input.lower() quit: break # 添加用户消息到历史 messages.append({role: user, content: user_input}) # 发送完整历史给 API data { model: deepseek-chat, messages: messages, temperature: 0.8, max_tokens: 500 } try: response requests.post(api_url, headersheaders, jsondata, timeout30) response.raise_for_status() result response.json() ai_reply result[choices][0][message][content].strip() # 添加 AI 回复到历史 messages.append({role: assistant, content: ai_reply}) print(AI, ai_reply) except Exception as e: print(调用失败, str(e)) break print(\n聊天结束。)运行后你可以连续问问题模型会记住前面的内容。例如你我喜欢看科幻小说AI哦那你最爱哪本《三体》还是《基地》你三体吧黑暗森林理论太震撼了AI对啊黑暗森林一出谁还敢随便广播坐标要不要我帮你脑暴一个黑暗森林主题的短故事2. 结合文件保存/加载历史 —— 下次继续聊import json import requests # 加载历史如果文件存在 try: with open(chat_history.json, r, encodingutf-8) as f: messages json.load(f) print(已加载上次聊天历史继续聊吧) except FileNotFoundError: # 第一次运行初始化 messages [{role: system, content: 你是一个知识渊博、风趣的助手。}] print(新聊天开始) # 调用函数封装第九课的 call_llm def call_llm(messages): # 同第九课的请求代码这里简化 data { model: deepseek-chat, messages: messages, temperature: 0.7, max_tokens: 600 } try: response requests.post(api_url, headersheaders, jsondata) response.raise_for_status() return response.json()[choices][0][message][content].strip() except Exception as e: return f错误{str(e)} print( 继续聊天输入 quit 退出或 clear 清空历史 ) while True: user_input input(你) if user_input.lower() quit: break if user_input.lower() clear: messages [{role: system, content: 你是一个知识渊博、风趣的助手。}] print(历史已清空新开始) continue messages.append({role: user, content: user_input}) reply call_llm(messages) print(AI, reply) messages.append({role: assistant, content: reply}) # 退出时保存历史 with open(chat_history.json, w, encodingutf-8) as f: json.dump(messages, f, ensure_asciiFalse, indent2) print(本次聊天已保存到 chat_history.json下次运行可以继续。)运行多次历史会自动加载/保存。清空用 “clear” 命令。3. 限制历史长度防止 token 超限# 在发送前截断历史保留 system 最近 10 条消息 if len(messages) 11: # system 5轮对话10条 messages [messages[0]] messages[-10:]小练习2 道练习1基础复制第1段代码修改 system prompt 为“你是一个专业 Python 导师用鼓励语气回答问题”。连续问 3–5 个 Python 相关问题观察模型是否记住上下文例如先问列表再问怎么遍历。练习2进阶在第2段代码基础上加一个命令 “save”立即保存历史到文件。加一个命令 “load”重新从文件加载历史。加一个 “history” 命令打印当前 messages 列表只打印 role 和 content 前 50 字。 测试多轮对话后用这些命令管理历史。本课小结本课重点维护 messages 列表作为聊天历史每次 API 调用都带上完整或截断历史实现上下文连续的多轮对话。结合文件读写下次运行还能继续上次的话题。现在你的程序已经是一个小型“带记忆的聊天机器人”了。下节预告下一课简单 AI Agent 雏形 —— 判断用户意图 调用不同 prompt / 工具实现更智能的交互。欢迎在评论区贴出练习代码、聊天截图或有趣的对话记录有问题可以留言。