公司动态

Agent-study项目教程(01):命令行智能聊天机器人

📅 2026/8/14 12:16:07
Agent-study项目教程(01):命令行智能聊天机器人
一、理论部分1. 多轮对话的本质模型无状态历史由客户端维护大语言模型在一次请求结束后不会“自动记住”上一轮对话内容。我们看到的“连续对话”能力本质上来自客户端在每次请求时携带完整的历史消息列表通常命名为messages。模型并不是在记忆而是在“阅读你传入的历史”。常见的消息结构包含三类角色system系统指令定义助手身份、输出风格与约束user用户输入assistant模型输出只要历史消息按顺序被发送模型就能在当前轮生成时参考上下文从而表现为“记得之前聊过什么”。2. Context Window上下文窗口能力边界与工程约束messages会随着轮次增加而变长而模型对单次输入的最大容量是有限的上下文窗口通常以 token 计。当对话持续增长时会出现三类典型问题输入接近/超过上限导致报错或被截断请求变慢、成本上升关键信息被长历史稀释回答质量下降本项目采用最简单的“把所有历史都带上”的方式目的是让你先把多轮对话跑通后续阶段再系统引入滑动窗口、摘要记忆与检索增强等策略。3. Streaming流式输出提升交互体验的关键机制非流式模式下模型需要生成完整文本后一次性返回用户会感受到明显的等待。开启流式输出后服务端会以 chunk增量片段的方式持续返回内容客户端可以边接收边展示实现类似“打字机”的效果。流式输出的工程要点开启streamTrue循环消费 chunk 的增量内容既实时输出也要拼接成完整回复写回历史保证下一轮的上下文完整二、实战部分1. 项目目标实现一个命令行聊天机器人具备多轮对话能在一定范围内记住前文流式输出回答内容逐步输出基础可用性支持退出指令与异常处理2. 运行准备请确保本地已安装依赖并配置好环境变量。依赖安装示例pipinstall-rrequirements.txt环境变量示例DEEPSEEK_API_KEY你的 API KeyDEEPSEEK_BASE_URL兼容 OpenAI 协议的服务地址你可以使用.env文件配合python-dotenv加载项目代码已包含加载逻辑。3. 主要代码核心实现importosfromopenaiimportOpenAIfromdotenvimportload_dotenv load_dotenv()clientOpenAI(api_keyos.getenv(DEEPSEEK_API_KEY),base_urlos.getenv(DEEPSEEK_BASE_URL),)defchat_loop():print(AI 聊天助手已启动输入 exit 或 quit 退出)print(-*50)messages[{role:system,content:你是一个乐于助人的 AI 助手请用简洁的中文回答用户的问题。}]whileTrue:try:user_inputinput(\n你: ).strip()ifuser_input.lower()in[exit,quit]:print(\n再见。)breakifnotuser_input:continuemessages.append({role:user,content:user_input})print(AI: ,end,flushTrue)streamclient.chat.completions.create(modeldeepseek-chat,messagesmessages,streamTrue,temperature0.7,)full_responseforchunkinstream:deltachunk.choices[0].deltaifdeltaanddelta.content:print(delta.content,end,flushTrue)full_responsedelta.contentprint()messages.append({role:assistant,content:full_response})exceptKeyboardInterrupt:print(\n程序已中断。)breakexceptExceptionase:print(f\n发生错误{e})if__name____main__:chat_loop()这段代码对应三件关键事messages作为对话历史容器实现多轮上下文streamTrue 循环 chunk实现流式输出full_response拼接完整回答并写回messages形成“记忆闭环”4. 如何运行在项目根目录执行python stage_01_llm_basics/project_01_chatbot/chatbot.py5. 运行结果示例下面是一段典型的交互示例为了展示多轮效果连续问了两轮AI 聊天助手已启动输入 exit 或 quit 退出 -------------------------------------------------- 你: 我叫小林今天心情一般 AI: 好的小林。我在这里你可以和我说说发生了什么或者我可以帮你做一个简单的情绪梳理。 你: 你还记得我叫什么吗 AI: 你叫小林。 你: exit 再见。6. 项目总结多轮对话并不神秘关键在于客户端维护并回传历史messages流式输出显著提升体验通过持续消费 chunk 实现“边生成边展示”该项目是后续 Agent 能力的基础工具调用、RAG、工作流、多智能体协作本质上都建立在“对话状态管理 可控输出/输入”的工程结构之上