第 1 周 Day 4:Python Agent 实战:命令行多轮对话 ChatBot学习主题:实现一个可多轮对话的命令行 ChatBot建议时长:2-3 小时学习目标:用messages保存对话历史,让模型能基于上下文连续回答问题一、为什么学这个本文适合已经完成LLMClient封装的学习者。你需要会运行 Python 脚本,并且已经配置好大模型 API Key。前一篇文章里,我们已经能完成一次模型调用:用户问一句 - 模型答一句 - 程序结束但真实聊天不是这样的。用户经常会追问:什么是 Python Agent? 那它和普通 ChatBot 有什么区别? 能不能给一个代码例子?第二句里的“它”指的是上一轮提到的 Python Agent。如果程序不保存历史,模型就可能不知道“它”是什么。所以本篇要完成第一阶段的核心产出:一个可以连续对话的命令行 ChatBot。二、核心概念1. 什么是多轮对话多轮对话就是模型回答时能看到前面的上下文。单轮对话:用户:它和普通 ChatBot 有什么区别? 模型:不知道“它”指什么。多轮对话:用户:什么是 Python Agent? 模型:Python Agent 是…… 用户:它和普通 ChatBot 有什么区别? 模型:这里的“它”指 Python Agent,区别是……2.messages列表的作用入门阶段可以用一个列表保存历史:messages=[{"role":"user","content":"什么是 Python Agent?"},{"role":"assistant","content":"Python Agent 是用 Python 构建的智能体程序。"},{"role":"user","content":"它和普通 ChatBot 有什么区别?"},]每条消息有两个关键字段:字段含义role谁说的话,例如user或assistantcontent消息内容当我们把整个messages传给模型时,模型就能看到前面的对话。3. 为什么不无限保存历史对话历史会消耗上下文长度和 token。第一阶段可以先全部保存,方便理解;但要知道这不是最终方案。后面学习记忆系统时,会用这些方法优化:只保留最近 N 轮对话把旧对话压缩成摘要把重要内容存入向量数据库本篇先专注完成最小可用版本。三、基础示例1. 改造LLMClient支持 messages在src/llm_client.py中增加chat_with_messages方法:fromopenaiimportOpenAIfromconfigimportSettings DEFAULT_SYSTEM_PROMPT="你是一个耐心的 Python 编程助教,回答要通俗、准确、简洁。"classLLMClient:def__init__(self,settings:Settings):self.model=settings.model client_kwargs={"api_key":settings.api_key}ifsettings.base_url:client_kwargs["base_url"]=settings.base_url self.client=OpenAI(**client_kwargs)defchat(self,user_input:str,system_prompt:str=DEFAULT_SYSTEM_PROMPT)-