大数跨境

转型 AI 开发——LangChain 实战第六课:原来 AI 也分不同记忆方法?三种策略效果大公开!

转型 AI 开发——LangChain 实战第六课:原来 AI 也分不同记忆方法?三种策略效果大公开! 玩AI的方可乐
2025-09-21
0
导读:手把手教学,10 分钟见结果

 

你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
用AI编程开发过Web应用网站,浏览器插件,

微信小程序,AI智能体,RAG系统。

注公众号&添加微信:ThinkFun666

领取【AI编程资料包】



 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

去年6月份,我做了一个连自己都觉得疯狂的决定:裸辞,All in AI。

现在已经换赛道成功,继续在工作中探索。


 

 

昨天我们聊了为什么智能体要有记忆,今天来讲下langchain中的三种记忆策略。

是的,记忆策略。
有的同学可能就蒙圈了。

记忆不就是讲了什么都记住就好了吗?
搞那么多策略,有必要吗?

说实话,这事儿真有必要。

我们调用大模型,原理是我们把一大堆上下文送过去获取回答。

AI不像人一样,能够迅速抓住重点(当然有些人抓重点的水平可能不如AI,这情况另当别论)。

总之,记忆策略选得不对,AI 要么健忘,要么话痨,这是LLM的本身的机制导致的。

需要我们需要控制记忆范围,让它能够回答对我们最新的问题。

举个现实的例子:
假设你在做一个个人工作助手。下面这些坑点都需要你认真考虑。

  • • 你跟 AI 聊了一周,你想让它帮你出个周报,于是它得帮你写总结。
  • • 如果记忆太短,可能只记得最近聊的几句话,啥工作重点没记住,最后只能胡编。
  • • 如果记忆太长,AI 得翻一堆细节,成本高不说(调api如果塞太多token,费用挺高的,太频繁搞大量的token,禁不住造),不仅返回速度慢,结果还容易啰嗦。
  • • 如果你让它自己生成摘要,有可能漏掉关键项目,重要信息被压缩没了。

不同的记忆策略,决定了 AI 的“工作习惯”。
今天我们就来动手试试 LangChain 里最常见的三种。
老规矩,上代码。


  1. 1. 全量记忆(ConversationBufferMemory)
    特点:聊过的所有内容都记下来。 场景:小范围聊天、短任务,保证不丢信息。

创建文件06_memory_all.py,代码内容如下。


            
            
            
            
             
            
            
            
            import os
from
 langchain_openai import ChatOpenAI
from
 langchain.chains import ConversationChain
from
 langchain.memory import ConversationBufferMemory
from
 dotenv import load_dotenv

load_dotenv()

llm = ChatOpenAI(
    model="deepseek-chat"
    base_url="https://api.deepseek.com/v1",
    api_key=os.getenv("deepseek_api_key")
)

conversation = ConversationChain(
    llm=llm,
    memory=ConversationBufferMemory(),
    verbose=True
)

print
("=== 全量记忆实验 ===")
print
("先介绍你自己,再让我复述。输入 quit 退出。\n")

while
 True:
    user_input = input("你:")
    if
 user_input.lower() in ["quit", "exit", "退出"]:
        break

    ai_reply = conversation.predict(input=user_input)
    print
("AI:", ai_reply)

  1. 2. 窗口记忆(ConversationBufferWindowMemory)
    特点:只保留最近 N 轮,前面的对话直接丢掉。 场景:适合短任务,一问一答,或者几个问题内出结果的场景。

创建文件06_memory_window.py,代码内容如下。


            
            
            
            
             
            
            
            
            import os
from
 langchain_openai import ChatOpenAI
from
 langchain.chains import ConversationChain
from
 langchain.memory import ConversationBufferWindowMemory
from
 dotenv import load_dotenv

load_dotenv()

llm = ChatOpenAI(
    model="deepseek-chat"
    base_url="https://api.deepseek.com/v1",
    api_key=os.getenv("deepseek_api_key")
)

# 使用窗口式记忆,只保留最近的k轮对话

conversation = ConversationChain(
    llm=llm,
    memory=ConversationBufferWindowMemory(k=3),  # 只保留最近3轮对话
    verbose=True
)

print
("=== 窗口式记忆实验 ===")
print
("这个版本只记住最近3轮对话,超出的会被遗忘。先介绍你自己,再让我复述。输入 quit 退出。\n")

while
 True:
    user_input = input("你:")
    if
 user_input.lower() in ["quit", "exit", "退出"]:
        break

    
    try
:
        ai_reply = conversation.predict(input=user_input)
        print
("AI:", ai_reply)
        print
()
    except
 Exception as e:
        print
(f"发生错误: {e}")

  1. 3. 摘要记忆(ConversationSummaryMemory)
    特点:用 LLM 把过去的内容压缩成摘要,再存下来。 场景:写周报、写复盘、写长篇总结。
     ⚠️ 但是要注意:摘要不一定可靠,有可能丢掉重要信息!

创建文件06_memory_summary.py,代码内容如下。


            
            
            
            
             
            
            
            
            import os
from
 langchain_openai import ChatOpenAI
from
 langchain.chains import ConversationChain
from
 langchain.memory import ConversationSummaryMemory
from
 dotenv import load_dotenv

load_dotenv()

llm = ChatOpenAI(
    model="deepseek-chat"
    base_url="https://api.deepseek.com/v1",
    api_key=os.getenv("deepseek_api_key")
)

# 使用总结式记忆,会自动总结历史对话

conversation = ConversationChain(
    llm=llm,
    memory=ConversationSummaryMemory(llm=llm),
    verbose=True
)

print
("=== 总结式记忆实验 ===")
print
("这个版本会自动总结历史对话,节省token。先介绍你自己,再让我复述。输入 quit 退出。\n")

while
 True:
    user_input = input("你:")
    if
 user_input.lower() in ["quit", "exit", "退出"]:
        break

    
    try
:
        ai_reply = conversation.predict(input=user_input)
        print
("AI:", ai_reply)
        print
()
    except
 Exception as e:
        print
(f"发生错误: {e}")

三种记忆策略,都有各自的优势和缺点:

  • • 全量记忆:信息最全,但会越来越臃肿。最后容易导致,又贵又慢结果还不准。
  • • 窗口记忆:节省成本,但容易“健忘”。要搭配合适的场景使用。
  • • 摘要记忆:节省空间,但可能漏信息。需要观察摘要生成的准确性。

我真实的使用下来感受是:记忆没有“最好”,只有“适合场景的”。

根据具体场景选择合适的方案,甚至混合使用,以达到最优的效果。

 


 

 

 

对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。

想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。


接下来100天,我会记录从Java程序员到AI应用开发工程师的完整转型路:每一个困惑、每一次突破、每一个真实瞬间。

当前是24/100。

如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,
那就跟着我的记录,一起探索。


继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666



我的免费AI编程交流群,欢迎加入讨论AI编程玩法(加我微信,说明需求和来意,申请入群)




 


不懂编程的小白,如何入门AI编程和商业化?

如何系统地掌握这些方法?如何找到有价值的商业化方向?如何在遇到瓶颈时获得启发和帮助?

如果你也对AI编程充满热情,渴望用AI创造出属于自己的应用并探索商业化机会;如果你想提升在AI时代的核心竞争力,让AI成为你事业的加速器。

那么,我非常推荐你加入“AI编程复利商业化星球”!




在这个社群,你将获得:

  • 9次价值千元的AI编程死磕实战训练营

  • 超级大佬的实战经验分享,商业化思路,前沿AI工具和技巧

  • 和一群积极的AI编程同行者共舞


让我们一起,用AI编程,不仅创造工具,更创造价值,实现个人和商业上的持续“进化”与“复利”!

 

 

 



推荐阅读:

我就喜欢干这种傻事!为什么转型AI应用开发,我不建议你直接从看书开始学起?

猛然醒悟:原来 AI 编程这件事情,是有门槛的,90%的新手卡在这些地方

30岁转行 AI 应用开发:多久能学会?答案出乎意料

30岁,我放弃写了7年的Java,成功转型AI应用开发

30岁,转型AI应用开发,需要会什么技术?

30岁,空窗期一年,靠什么成功转型AI应用开发?

30岁,没报课,如何从0自学转型AI应用开发?

【声明】内容源于网络
0
0
玩AI的方可乐
1234
内容 502
粉丝 0
玩AI的方可乐 1234
总阅读204
粉丝0
内容502