尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
大模型应用开发教程04 | 多轮对话原理与实现(Chatbot)
理论部分很多人第一次写多轮对话会误以为“模型记住了刚才聊过的内容”。但从 API 的角度看多轮对话的本质其实是每一轮请求都把历史消息一起发给模型。也就是说模型没有“长期记忆”默认情况下不会跨请求自动保存我们看到的“记住上下文”来自我们在每次调用时携带的messages所谓“对话状态”就是我们在本地维护的一份messages列表在常见的对话接口里输入是一个消息列表messages每条消息包含role消息角色常见为system/user/assistantcontent消息内容多轮对话要跑起来有一个关键点每轮把用户输入 append 进 messages拿到模型输出后也要把 assistant 输出 append 进 messages。否则模型下一轮就“忘了自己刚刚说了什么”。实践部分本案例做什么实现一个命令行聊天机器人支持我们在终端连续输入多轮消息初始化messages用system设定角色循环读取用户输入追加到messages调用模型生成回答并将回答追加到messages支持输入exit/quit/退出结束对话支持Ctrl C强制退出主要代码本篇直接使用项目脚本src/1.3_chatbot.pyimportosfromdotenvimportload_dotenvfromopenaiimportOpenAI# 加载配置load_dotenv()clientOpenAI(api_keyos.getenv(ZHIPUAI_API_KEY),base_urlos.getenv(ZHIPUAI_BASE_URL))defmain():# 1. 初始化对话历史# system: 设置模型的“人设”messages[{role:system,content:你是一个暴躁的四川厨师说话带口音。}]print( 智能聊天机器人 (输入 exit 或 quit 退出) )whileTrue:# 2. 获取用户输入try:user_inputinput(\n 你: )exceptKeyboardInterrupt:# 处理 CtrlC 强制退出print(\n 再见)breakifuser_input.lower()in[exit,quit,退出]:print( 聊得很开心下次见)breakifnotuser_input.strip():print(⚠️ 请输入内容...)continue# 3. 将用户输入加入历史messages.append({role:user,content:user_input})try:# 4. 调用 API# print(Thinking..., end, flushTrue) # 简单的等待提示responseclient.chat.completions.create(modelglm-4-flash,messagesmessages,temperature0.9,streamFalse)# 5. 获取回答并展示assistant_contentresponse.choices[0].message.contentprint(f\n AI:{assistant_content})# 6. 【关键】将 AI 的回答也加入历史# 如果不加这一步模型下一轮就会忘记它刚才说了什么messages.append({role:assistant,content:assistant_content})exceptExceptionase:print(f\n❌ 发生错误:{e})# 发生错误时建议把刚才导致错误的用户输入移除防止卡死messages.pop()if__name____main__:main()运行方式在项目根目录执行python3 src/1.3_chatbot.py运行结果示例运行后会看到类似交互回答内容每次会不同 智能聊天机器人 (输入 exit 或 quit 退出) 你: 我想学做番茄炒蛋 AI: ... 你: 那第一步应该做什么 AI: ... 你: exit 聊得很开心下次见如果出现报错提示缺少ZHIPUAI_API_KEY先确认第 2 篇的.env配置是否正确依赖缺失例如 openai/dotenv确认已安装依赖并激活虚拟环境网络相关错误确认网络/代理配置与ZHIPUAI_BASE_URL可访问总结这一篇我们完成了一个最小可用的多轮对话机器人并理解了多轮对话的核心对话状态由我们维护每轮请求都要携带历史消息。
RELATED

相关推荐

《波比的游戏时间》原型体1006:恐怖游戏终极Boss设计与叙事解析

《波比的游戏时间》原型体1006:恐怖游戏终极Boss设计与叙事解析

最近,游戏圈里有个名字反复被提起: 波比 。如果你关注过《波比的游戏时间》系列,或者被那些“玩具工厂惊魂”的短视频刷过屏,那你一定知道,这个看似可爱的蓝色毛绒玩具,背后藏着的是让无数玩家手心冒汗的…

📅 2026/9/8 4:56:29
Java开发者Docker实战指南:从容器化原理到微服务部署

Java开发者Docker实战指南:从容器化原理到微服务部署

1. 项目概述:为什么开发者需要拥抱Docker? 如果你是一名Java开发者,还在为“在我本地是好的”这句经典甩锅名言而头疼,或者被不同环境下的依赖冲突、配置差异折磨得焦头烂额,那么Docker就是你当下最应该投入时间去掌握…

📅 2026/9/5 23:50:07
ModelScope创空间:AI模型开发与部署实战指南

ModelScope创空间:AI模型开发与部署实战指南

1. 初识ModelScope创空间:AI开发者的新大陆 第一次接触ModelScope创空间时,我正在为一个图像识别项目寻找合适的预训练模型。这个由阿里云推出的AI模型共享平台,彻底改变了我过去在GitHub和论文附录里"淘金"的工作方式。创空间本质…

📅 2026/10/7 3:20:38
MORE NEWS

更多资讯

📰

避免形式化代码评审:open-code-review开放评审机制实践

open-code-review 这个词第一次引起我警觉,是在一次上线事故的复盘会上。代码评审(Code Review)在我的工作流里一直是个流程必选项:发起合并请求,等够两个 Approve,然后合入。可那次事故偏偏就出在大家一致…

📰

Agent技能层设计实战:从工具、工作流到可复用技能库的落地指南

做Agent应用落地到现在,我最深的体会是:模型本身越来越聪明,但业务方真正关心的从来不是“它聪不聪明”,而是“让它办一件具体的事,能不能每次都办得同样好”。这个“同样好”跟提示词有关系,但关系没那么大…

📰

Vite工程化实战:环境变量、代码规范与性能优化全解析

如果你觉得 Vite 工程化配置就是往vite.config.ts里塞几个参数,那大概率会在项目跑到中途的时候被各种诡异问题干懵。我最近把一个跑了大半年的模拟项目X——一个典型的中后台管理系统——从配置到构建链路完整梳理了一遍,重点覆盖环境变量、代码规范、性…

📰

QT 5.15.0 在线安装卡住?镜像仓库与本地仓库绕行方案

简介:这份PDF文档面向需要在Windows平台搭建Qt开发环境的程序员与嵌入式开发者,针对Qt 5.15.0之后官方改为在线安装、直连官网速度极慢且安装程序频繁崩溃的痛点,给出了一套可落地的完整解决思路。文档围绕Fiddler 4代理配合国内镜像站点展开…

📰

gstack:Linux进程堆栈快照诊断核心工具

1. gstack不是工具名,而是Linux系统级诊断的“堆栈快照术”很多人第一次在终端里敲下gstack,会下意识以为这是某个新出的CLI工具、开源项目或者Node.js生态里的某个包——毕竟现在满屏都是npm install gstack、bun add gstack、claude code suggest gsta…

📰

Java泛型本质:类型擦除与通配符原理实战解析

1. 这份笔记不是“抄书”&#xff0c;而是把泛型从“语法糖”掰开揉碎讲透的实战手记你翻过《Java编程思想》里泛型那一章吗&#xff1f;密密麻麻的<T>、<? extends E>、<? super E>&#xff0c;配上“类型擦除”四个字&#xff0c;像一堵墙横在面前。我当…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬