当前位置: 首页 > news >正文

【LLM应用开发】上下文记忆的解决方案(主流全面)

一、前言

  • 上下文记忆(Contextual Memory)解决方案的作用:
    • 提升 AI(尤其是大语言模型,LLM)的对话连贯性个性化
  • 本文将介绍几个主流的实现方式。

二、🧠 什么是上下文记忆?

  • 在对话系统中,上下文记忆的目标是让模型记住:
    • 你过去说过什么(对话历史
    • 你的一些偏好/背景(长期记忆
    • 你最近的意图(短期记忆

三、✅ 实现方案一:对话历史拼接(最基础)

描述:将所有之前的对话作为 prompt 的一部分,一起传给模型。
示例:
history = [{"role": "user", "content": "我叫小明"},{"role": "assistant", "content": "你好,小明"},{"role": "user", "content": "我喜欢篮球"}
]
new_input = {"role": "user", "content": "我最喜欢的球星是谁?"}messages = history + [new_input]
response = llm.chat(messages=messages)
缺点:token长度易爆;对长时间记忆力弱。

四、✅ 实现方案二:嵌入向量 + 检索记忆(RAG + Memory)

描述:
  • 将用户历史对话或知识用向量化方式存入向量数据库
  • 后续查询时根据当前问题检索“相关记忆”,再加到 prompt 里。
结构:
当前用户输入 → 嵌入查询 → 找相关记忆 → 构造 prompt → LLM回答
示例步骤:
  • 1.用户说:“我住在北京”
  • 2.你将这句话嵌入并存入向量库(如 Weaviate)
  • 3.用户说:“最近北京天气咋样?”
  • 4.向量检索出“我住在北京”这一记忆,构造 prompt:
记忆:你住在北京
问题:最近北京天气咋样?

五、✅ 实现方案三:显式记忆管理框架(如 mem0 / LangChain)

描述:使用专门的“记忆管理器”
  • 自动保存每轮对话为 memory
  • 检索、插入相关 memory
  • 支持短期、长期、多用户等场景
示例:伪代码
memory = Memory()
memory.add(messages, user_id="user1")# 下一轮输入
relevant_memory = memory.search("北京天气")
prompt = format_prompt(relevant_memory, user_input)
response = llm.call(prompt)

六、✅ Demo:简单聊天机器人,带上下文记忆

1,技术栈:Python、OpenAI、Mem0(上下文记忆实现框架)
2.📦 安装依赖(确保你安装了 mem0 和 openai):
pip install mem0 openai
  • (⚠️ 注意:mem0 目前默认支持 OpenAI,你可以手动适配 DashScope 等其他 LLM)
3.📁 文件:mem0_chat_demo.py
from mem0 import Memory
import openai
import os# ✅ 设置 API key
openai.api_key = os.getenv("OPENAI_API_KEY") or "sk-xxx"  # 替换为你的 OpenAI Key# ✅ 初始化 memory 管理器(默认使用 OpenAI Chat 和 Embedding)
memory = Memory()# ✅ 聊天方法:结合历史记忆生成回复
def chat_with_memory(user_input, user_id="user1"):# 1️⃣ 检索相关历史记忆(最近与本轮问题相似的历史记录)relevant = memory.search(user_input, user_id=user_id)memories_str = "\n".join([f"- {r['memory']}" for r in relevant["results"]])# 2️⃣ 构造提示词 prompt:加入历史“记忆”+当前输入system_prompt = f"""
你是一个有记忆的智能助手,请根据以下用户记忆回答问题:
用户记忆:
{memories_str}
"""messages = [{"role": "system", "content": system_prompt.strip()},{"role": "user", "content": user_input}]# 3️⃣ 向 LLM 发起请求response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=messages)answer = response.choices[0].message.content# 4️⃣ 添加对话内容进 memorymessages.append({"role": "assistant", "content": answer})memory.add(messages, user_id=user_id)return answer# ✅ 启动交互
if __name__ == "__main__":print("开始对话(输入 'exit' 退出)")while True:user_input = input("你:")if user_input.lower() == "exit":breakreply = chat_with_memory(user_input)print(f"AI:{reply}")
4.🔍 Demo 解读
  • (1)✳️ 上下文记忆体现在哪?
    • 使用 memory.search(user_input) 从过往对话中检索与当前输入 最相关的内容
    • 使用 memory.add(messages) 保存本轮的对话内容
    • 模型不仅根据当前提问回答,还会利用“过去的你说过的话”,这就是“记忆”
  • (2)🔁 示例对话:
你:我喜欢篮球
AI:好的,我记住了你喜欢篮球。
你:我最喜欢的球星是谁?
AI:你可能最喜欢的球星是篮球相关的,例如科比或詹姆斯。tag: 即使你没说球星是谁,模型可以结合“你喜欢篮球”的历史信息做推理。
  • (3)✳️ 提示词 Prompt 如何构建的?
你是一个有记忆的智能助手,请根据以下用户记忆回答问题:
用户记忆:
- 我喜欢篮球
- 我的城市是北京
  • 这种方式称为:增强提示词(prompt augmentation)
  • 通过把 memory 拼接进 prompt,引导模型在更具上下文的条件下回答问题。
小总结
要素实现方式
记忆存储memory.add(messages)
记忆检索memory.search(user_input)
提示词构建把相关记忆拼接进 system prompt
LLM 响应生成用拼接后的 prompt 交给 OpenAI 的 Chat 模型处理

七、方案选择建议 / 总结

适用场景方案
简单对话拼接历史 messages
长对话、知识 Q&A向量数据库 + RAG
多用户、多记忆管理mem0 / LangChain Memory
  • 上下文记忆实现本质是解决 模型无法长期记忆的问题,常见方法包括:
    • Prompt 拼接
    • 向量数据库检索(RAG)
    • 显式框架(如 mem0, LangChain Memory)

相关文章:

  • redis未授权(CVE-2022-0543)
  • C文件操作1
  • Splunk Validated Architecture (SVA):构建企业级可观测性与安全的基石
  • Cloudflare
  • ArcGIS应用指南:基于网格与OD成本矩阵的交通可达性分析
  • 虚拟化数据恢复—XenServer虚拟机虚拟磁盘文件丢失的数据恢复案例
  • day40打卡
  • 【Netty系列】Reactor 模式 2
  • CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)
  • Golang持续集成与自动化测试和部署
  • Xamarin劝退之踩坑笔记
  • Google car key:安全、便捷的汽车解锁新选择
  • iOS 集成网易云信的音视频呼叫组件
  • 负载均衡群集---Haproxy
  • 历年南京理工大学计算机保研上机真题
  • JavaScript中的命名导出(暴露)
  • 事件驱动架构入门
  • PHP学习笔记(十一)
  • pikachu通关教程-CSRF XSS
  • 工厂方法模式(Factory Method)深度解析:从原理到实战优化
  • 做国外网站独特密码/微商如何引流与推广
  • 搭建网站需要钱吗/抖音seo排名系统
  • 高端医疗网站建设/企业网站seo服务
  • 做家装的网站有什么不同/百度怎么发帖子
  • 运维负责做网站吗/重庆seo什么意思
  • 沈阳营销型网站设计教程/百度搜索推广操作简要流程