尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Langchain之让LLM拥有记忆

Langchain之让LLM拥有记忆
📅 发布时间:2026/6/18 2:28:44

langchain的Memory

如果AI有记忆,我们就不需要手动维护一个储存消息历史的列表

让LLM拥有记忆的方法有很多,我更喜欢使用的方法是以下方案,其优点是灵活度比较高

from langchain.memory import ConversationBufferMemory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
from langchain_core._api.deprecation import LangChainDeprecationWarning
import os
import dotenv
import warningswarnings.filterwarnings('ignore', category=LangChainDeprecationWarning)dotenv.load_dotenv()
api_key = os.environ.get('API_KEY')llm = ChatOpenAI(model='deepseek-chat',base_url='https://api.deepseek.com/',openai_api_key=api_key
)memory = ConversationBufferMemory(memory_key='history' ,return_messages=True)
prompts = ChatPromptTemplate.from_messages([('system','你是一个ai旅伴,现在需要你回答用户的问题,请不要输出无关的内容'),MessagesPlaceholder(variable_name='history'),('human','{text}')]
)
chain = (RunnablePassthrough.assign(history = lambda x : memory.load_memory_variables({})['history'])| prompts| llm| StrOutputParser()
)flag = Truewhile flag:msg = input('请输入:')d_end = ['再见', '结束', 'end', 'bye', 'quit', 'Bye']for i in d_end:if i in msg:flag = Falseres = chain.invoke({'text':msg})print(res)memory.save_context({'input':msg}, {'output':res})

看起来比较晦涩难懂,不过没关系,我们只需要将最重要的步骤拆机出来:

  • 定义记忆

memory = ConversationBufferMemory(memory_key='history' ,return_messages=True) #注意此处的使用方法已经被新版本遗弃,需要忽略掉这个警告
  • 定义提示词

prompts = ChatPromptTemplate.from_messages([('system','你是一个ai旅伴,现在需要你回答用户的问题,请不要输出无关的内容'),MessagesPlaceholder(variable_name='history'),('human','{text}')]
)
  • 定义链

chain = (RunnablePassthrough.assign(history = lambda x : memory.load_memory_variables({})['history'])| prompts| llm| StrOutputParser()
)
  • 保存对话

memory.save_context({'input':msg}, {'output':res})

对于输出的地方,我们要想达到流式输出的效果只需要将管道中的StrOutputParser()去掉,循环遍历res,输出遍历后的chunk.content,然后把print()中的flush参数设置为True

while True:msg = input('请输入:')if '再见'in msg or 'quit'in msg or 'Bye'in msg or 'bye' in msg:print('再见啦,希望我们的下次见面')break# print(mchat(msg=msg))res = chain.stream({'text':msg})full_str = ''for chunk in res:print(chunk.content, end='', flush=True)full_str += chunk.contentprint('\n')memory.save_context({'input':msg},{'output':full_str})

相关新闻

  • numpy中的shape属性
  • mac 查看fat32磁盘
  • Python数据分析零基础完整课程大纲(详细版)【202509第1版】 - 指南

最新新闻

  • 2026 安徽哪所学校护理升学强?5大高升学率中职招生名单 - 小途xt
  • NXP DPAA硬件加速实战:报文头操作与CAAM加密引擎配置详解
  • 2026年论文写作AI工具怎么用?豆包等工具详细使用教程 - 掌桥科研-AI论文写作
  • 2026滁州家长注意!离南京这么近,孩子学建筑去这所公办中职,比在南京打工强 - 我叫小周
  • 50行Python实现人脸检测:OpenCV+Haar级联原理与实战
  • 2026重庆高端珠宝首饰回收排行 权威鉴定实测靠谱商家榜单 - 名奢变现站

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号