25. AI 总是 “失忆“?3 行代码让它记住你!

发布时间:2026/7/25 2:53:28

25. AI 总是 “失忆“?3 行代码让它记住你! 25. AI 总是 “失忆“3 行代码让它记住你你是否曾与 AI 聊天时发现它总是忘记你刚才说过的话比如你告诉它“我喜欢吃披萨”结果下一轮它又问“你今天想吃什么”——这种“失忆”现象其实是对话式 AI 的一个常见痛点。今天我们就用 Python 编程从零到一教会 AI 如何记住你的信息。只需 3 行核心代码你就能打造一个“有记忆”的 AI 助手—## 1. 理解 AI 的“失忆”问题状态 vs 无状态AI 的“失忆”根源在于传统的 API 调用是无状态的。每次你发送请求AI 模型如 GPT只会基于当前输入生成回复它不会自动记住之前的对话历史。举个例子假设你问 AI “我的名字是张三”然后问“我叫什么名字”——如果 AI 没有保存上下文它会回答“我不知道你的名字”。这就像每次对话都是第一次见面。核心概念要让 AI 记住你我们需要手动管理对话上下文Context也就是把历史消息一起发送给 AI。—## 2. 基础实现用列表存储对话历史最简单的办法是使用一个 Python 列表来存储所有消息。每条消息是一个字典包含角色如“user”或“assistant”和内容。### 代码示例 1无记忆 vs 有记忆对比python# 模拟一个简单的 AI 回复函数演示用def ai_respond(messages): 模拟 AI 回复基于最后一条用户消息生成回复 # 实际项目中这里会调用 OpenAI API last_user_msg [m[content] for m in messages if m[role] user][-1] return f你好你说了{last_user_msg}# ---------- 无记忆模式 ----------print( 无记忆模式 )msg1 [{role: user, content: 我的名字是张三}]print(AI:, ai_respond(msg1))msg2 [{role: user, content: 我叫什么名字}]print(AI:, ai_respond(msg2)) # 输出你说了我叫什么名字 → 忘记名字了# ---------- 有记忆模式 ----------print(\n 有记忆模式 )conversation_history [] # 存储所有对话历史# 第一轮对话conversation_history.append({role: user, content: 我的名字是张三})print(AI:, ai_respond(conversation_history))# 第二轮对话注意我们将历史一并发送conversation_history.append({role: user, content: 我叫什么名字})print(AI:, ai_respond(conversation_history)) # 输出你说了我叫什么名字 → 但结合历史AI 应能推理# 改进让 AI 真正利用历史def smart_ai_respond(messages): 智能回复检查历史中是否有名字信息 for msg in messages: if 名字 in msg[content] and 是 in msg[content]: name msg[content].split(是)[-1].strip() return f我记得你你的名字是 {name} return 我没有找到你的名字信息。# 用新函数测试print(\n 智能记忆版 )conversation_history [ {role: user, content: 我的名字是张三}, {role: user, content: 我叫什么名字}]print(AI:, smart_ai_respond(conversation_history)) # 输出我记得你你的名字是张三代码解析- 第 8 行无记忆模式下每次只发送单条消息AI 无法回顾历史。- 第 12-13 行有记忆模式通过conversation_history列表累积消息。- 第 23 行smart_ai_respond函数遍历所有历史消息找到名字信息。—## 3. 进阶技巧3 行代码实现状态管理上面的例子中我们手动解析历史消息。但在实际 AI 应用中如使用 OpenAI API只需将整个历史列表作为参数传入即可。以下是真正的“3 行核心代码”### 代码示例 2用 OpenAI 风格 API 实现记忆模拟版pythonimport json# 模拟 OpenAI 的 Chat APIdef openai_chat_completion(messages): 模拟 GPT 回复基于完整历史生成回复 # 实际中response openai.ChatCompletion.create(modelgpt-3.5-turbo, messagesmessages) return {choices: [{message: {content: f基于历史我回复最近一条是{messages[-1][content]}}}]}# ---------- 3 行核心代码 ----------conversation_history [] # 第 1 行创建历史列表conversation_history.append({role: user, content: 我的名字是李四}) # 第 2 行添加用户消息response openai_chat_completion(conversation_history) # 第 3 行发送完整历史print(AI:, response[choices][0][message][content])# 继续对话只需重复第 2 和 3 行conversation_history.append({role: user, content: 我叫什么名字})response openai_chat_completion(conversation_history)print(AI:, response[choices][0][message][content]) # 输出基于历史我回复最近一条是我叫什么名字# 但实际 GPT 会理解上下文这里为了演示我们写一个真正能解析名字的版本def real_gpt_style(messages): 模拟真正 GPT 的行为结合所有历史生成回复 user_contents [m[content] for m in messages if m[role] user] if len(user_contents) 2 and 名字 in user_contents[0] and 名字 in user_contents[1]: name user_contents[0].split(是)[-1].strip() return f你的名字是 {name}你刚才问过我 return f你说了{user_contents[-1]}# 测试print(\n 真正的记忆 AI )conversation_history [ {role: user, content: 我的名字是王五}, {role: user, content: 我叫什么名字}]print(AI:, real_gpt_style(conversation_history)) # 输出你的名字是 王五你刚才问过我关键点- 第 6-10 行模拟了真实 API 的调用方式。- 第 13-15 行正是那“3 行代码”——创建列表、添加消息、发送请求。- 实际开发中只需将openai_chat_completion换成真正的 OpenAI 调用即可。—## 4. 高级用法持久化记忆与上下文窗口管理基础记忆只存在于程序运行时。如果重启程序AI 又会“失忆”。高级用法包括-持久化存储将历史保存到文件或数据库如 SQLite、Redis。-上下文窗口当对话过长时需要截断旧消息只保留最近 N 条例如 GPT-3.5 最多 16k tokens。### 代码示例 3带文件存储的记忆系统pythonimport jsonfrom datetime import datetimeclass MemoryAI: def __init__(self, memory_filechat_history.json): self.memory_file memory_file self.conversation self.load_memory() # 从文件加载历史 def load_memory(self): 从文件加载记忆 try: with open(self.memory_file, r, encodingutf-8) as f: return json.load(f) except FileNotFoundError: return [] def save_memory(self): 保存记忆到文件 with open(self.memory_file, w, encodingutf-8) as f: json.dump(self.conversation, f, ensure_asciiFalse, indent2) def add_message(self, role, content): 添加消息并自动保存 self.conversation.append({ role: role, content: content, timestamp: datetime.now().isoformat() }) self.save_memory() # 每次添加都保存 def get_recent_context(self, max_messages10): 获取最近 N 条消息作为上下文 return self.conversation[-max_messages:] # 只保留最近 10 条# 使用示例print(\n 持久化记忆系统 )ai MemoryAI()ai.add_message(user, 我的名字是赵六)ai.add_message(assistant, 你好赵六)ai.add_message(user, 我叫什么名字)# 查看最近上下文包含历史context ai.get_recent_context(5)print(当前上下文)for msg in context: print(f [{msg[role]}] {msg[content]})# 输出会显示完整的对话历史包括名字信息高级特性- 第 14-17 行load_memory从 JSON 文件恢复历史。- 第 24-29 行add_message自动保存确保程序重启后记忆不丢失。- 第 31-34 行get_recent_context实现上下文窗口防止 token 溢出。—## 5. 总结从“失忆”到“过目不忘”通过本文我们学到了1.无状态 vs 有状态AI 默认不记忆需要手动管理上下文。2.基础实现用列表存储消息历史每次请求都发送完整列表。3.3 行核心代码创建列表 → 添加消息 → 发送请求这就是记忆的骨架。4.进阶技巧持久化到文件、上下文窗口管理让记忆跨越会话和长对话。记住AI 的“记忆力”本质是数据的传递——你给它的历史越多它就越“聪明”。下次遇到 AI 失忆不妨检查一下你是否把历史消息传给了它只需 3 行代码你就能让 AI 永远记住你

相关新闻