让AI记着我们聊过什么——对话影象

[复制链接]
发表于 2026-6-24 11:13:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
上回学会了提示词模板、输出剖析器、链式调用和流式输出。现在AI已经能听懂人话、按格式输出了。
但另有一个标题:每次问AI,它都像第一次见你一样,完全不记得之前聊过什么。
你说“我叫小明”,它记着了。你再问“我叫什么”,它说“你没有告诉我”。
这就很尴尬了。
能不能让AI拥有“影象”,记着上下文呢?
对话影象(Memory),就是干这个的。
一、什么是对话影象?

LangChain的Memory模块,用于在多次对话之间存储和转达汗青信息,让模子具备“记着之前聊过什么”的本领。
作用:在对话中保存上下文,让AI的答复更连贯、更自然、更符合对话场景。
简单说就是:让AI从一个“忘记的路人”,酿成一个“有影象的朋侪”。
好比你连续问AI三个标题:
你:“我叫小明。”
AI:“好的,小明。”
你:“我家养了一只猫叫汤姆。”
AI:“汤姆,记着了。”
你:“我叫什么?”
AI:“你没有告诉过我你的名字。”
末了那句就很出戏。前面显着说了名字,但AI转头就忘了。
Memory就是为相识决这个标题:
你:“我叫小明。”
AI:“好的,小明。”
你:“我家养了一只猫叫汤姆。”
AI:“汤姆,记着了。”
你:“我叫什么?”
AI:“你之前说你叫小明。”
固然现在看到很多谈天呆板人都是有影象的,着实是借助了代码的资助,提供了汗青信息作为和LLM对话的上下文。
二、Memory的范例

LangChain提供了多种Memory范例,差别场景用差别的:
Memory范例作用实用场景ConversationBufferMemory把全部对话汗青存下来短对话、简单问答ConversationBufferWindowMemory只记着迩来K轮对话长对话、控制上下文长度ConversationSummaryMemory把对话内容压缩成择要再存超长对话,节流tokenConversationSummaryBufferMemory择要+迩来几轮肴杂折中方案VectorStoreRetrieverMemory用向量数据库存储,按相干性检索海量对话、智能客服新手入门,先用前两个就够了。
三、代码实战:ConversationBufferMemory

这是最简单的影象方式——把全部的对话汗青都存下来。完备存储全部对话汗青,不做任何压缩或筛选。

  • 优点:保存全部细节,得当必要完备上下文的场景。
  • 缺点:Token斲丧随对话线性增长,易超出模子上下文窗口限定。

代码如下:
  1. from langchain.memory import ConversationBufferMemory
  2. from langchain import ConversationChain
  3. from langchain_community.llms import tongyi
  4. # ==================== 配置 ====================
  5. key = "your key"#替换为个人申请的api_key
  6. llm = tongyi.Tongyi(api_key=key)
  7. #创建一个记忆系统
  8. memory = ConversationBufferMemory()
  9. #创建会话链
  10. conversation = ConversationChain(llm=llm,memory=memory,verbose=False)
  11. print(conversation.predict(input="你好,我是一名程序员。"))
  12. print(conversation.predict(input="你叫什么名字?"))
  13. print(conversation.predict(input="我的职业是什么?"))
复制代码
输出大概是如许:
第一轮:“你好!你寻常都用什么软件写代码呢?”
第二轮:“我是通义模子。”
第三轮:“你是一名步调员。”
看到了吗?AI记着了三件事,而且反面两轮的答复都基于第一轮的信息。
四、代码实战:ConversationBufferWindowMemory

ConversationBufferWindowMemory是LangChain提供的一种影象机制,只存储迩来的K条对话纪录(包罗用户输入和模子输出),K是用户指定的窗口巨细,表现保存多少轮对话(每轮对话包罗一条用户消息和一条模子相应)。
当新的对话发生,最旧的对话会被移出窗口,确保内存和Token使用量保持在可控范围内。
特点

  • 滑动窗口机制:只生存迩来K轮对话,新的对话会覆盖最早的对话纪录。
  • 固定内存占用:无论对话举行多久,内存中只存储固定命量的对话纪录,Token斲丧不会随时间线性增长。
  • 可设置性:用户可以设置K参数,控制窗口巨细,调解上下文的深度。
缺点

  • 丢失早期上下文:只保存迩来的K条纪录,早起的信息会被忘记,影响对话的连贯性。
  • 不得当复杂场景:必要完备对话汗青或长期依靠的场景(如法律咨询、长篇故事天生等),结果不如ConversationBufferMemory。
  • 窗口巨细选择困难:设置符合的K必要权衡上下文完备性和资源斲丧,过小大概导致信息不敷,过大失去服从上风。

代码如下:
  1. from langchain.memory import ConversationBufferWindowMemory
  2. from langchain_community.llms import tongyi
  3. from langchain.chains import ConversationChain
  4. # ==================== 配置 ====================
  5. key = "your key"#替换为个人申请的api_key
  6. llm = tongyi.Tongyi(api_key=key)
  7. #创建一个记忆系统
  8. memory = ConversationBufferWindowMemory(k=1)
  9. #创建会话链
  10. conversation = ConversationChain(llm=llm,memory=memory)
  11. conversation.predict(input="你好,我是一名程序员。")
  12. conversation.predict(input="你叫什么名字?")
  13. conversation.predict(input="我的职业是什么?")
  14. #提取记忆
  15. print(memory.buffer)
复制代码
由于k=1只记着迩来1轮,而“我是一名步调员”是第1轮说的,早就被挤出去了,以是AI的答复是:
“你没有告诉过我你的职业。”
这就是窗口影象的特点:只记迩来的,高出K轮的主动忘记。
五、两种Memory对比

对比维度BufferMemory(全量影象)BufferWindowMemory(窗口影象)存什么全部对话汗青只存迩来K轮优点信息完备,不会丢节流token,不会超限缺点对话越长越费钱早期信息会丢失实用场景短对话(5轮以内)长对话(10轮以上)
💡 发起: 刚开始用 k=3 或 k=5,看结果再调解。k太小轻易“失忆”,k太大又费钱
有了影象,AI就不再是“每次见面都像生疏人”了。它开始像一个真正的对话搭档——固然不肯定聪明,但至少不忘记。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表