ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

新手小白 Agent 开发第3课:从一问一答到聊天机器人,搞懂对话历史

新手小白 Agent 开发第3课:从一问一答到聊天机器人,搞懂对话历史 上一课的程序只能问一次就结束体验很割裂。更奇怪的是你告诉它「我叫小明」下一句再问「我叫什么」它会说「我不知道」。这一课我们把这两件事一次性解决。一、先让它能连续对话只需要一个while循环。修改main.pyfrom openai import OpenAI import os client OpenAI( api_keyos.environ[DEEPSEEK_API_KEY], base_urlhttps://api.deepseek.com ) while True: user_input input(你) if user_input.lower() exit: break response client.chat.completions.create( modeldeepseek-chat, messages[ {role: user, content: user_input} ] ) print(AI, response.choices[0].message.content)运行后你你好 AI你好有什么可以帮助你的 你什么是 Transformer AITransformer 是一种…… 你exit恭喜你已经做出了一个最简单的AI Chatbot。一句话概括while True让程序不再「问完就跑」而是持续等待你的输入。二、但它为什么记不住你试着这样对话你我叫小明。 AI好的。 你我叫什么 AI我不知道。别急着怪模型笨。问题出在我们自己身上——每一次请求其实都是全新的、独立的第一次请求 用户 →「我叫小明」→ LLM 第二次请求 用户 →「我叫什么」→ LLM ← 它根本没见过第一句话模型没有记忆它只看得见你这一次发给它的内容。第一次对话的内容在第二次请求时压根没传过去。一句话概括模型不是失忆是我们根本没把历史递给它。三、引入「对话历史」解决办法很简单把每一轮对话都存进一个messages列表每次请求都把整个历史一起发过去。messages [] while True: user_input input(你) if user_input.lower() exit: break # 1. 把你的话加入历史 messages.append({ role: user, content: user_input }) # 2. 把整个历史发给模型 response client.chat.completions.create( modeldeepseek-chat, messagesmessages ) answer response.choices[0].message.content # 3. 把模型的回答也加入历史 messages.append({ role: assistant, content: answer }) print(AI, answer)现在再试你我叫小明 AI你好小明 你我叫什么 AI你叫小明。它记住了。因为每次请求我们都把完整历史打包发给了模型。这里有个关键角色rolemessages里每条消息都有一个role它决定了这句话是谁说的role含义举例user用户说的话「我叫小明」assistant模型说的话「你好小明」system系统设定可选「你是一个专业助手」一句话概括Memory 的第一步就是老老实实把对话历史存下来、每次都带上。四、这就是 Agent 的「记忆」雏形我们刚才做的messages列表其实就是最朴素的 Memory。它不需要数据库一个 Python 列表就够了。随着项目变复杂你会逐步升级它列表 memory → SQLite → PostgreSQL / Redis → 向量数据库 Embedding → RAG但对初学者来说先用最简单的方式跑通比一步到位更重要。一句话概括先有记忆再谈智能能记住上下文才谈得上真正的 Agent。总结这一课我们做了两件事用while循环让它能连续聊天用messages历史让它能记住上下文。到这里你的程序已经是一个像样的聊天机器人了。但它还只会「聊天」——它不能搜索不会计算不能替你做任何实际操作。下一课我们迎来最关键的一次跨越给 AI 装上工具让它学会Tool Calling。下一课预告第4课让 AI 学会用工具——Tool Calling 第一步计算器。
返回列表