哎禹供 发表于 2025-10-1 17:16:35

如何通过LangChain实现记忆功能的总结

真正贴近人类的智能体,关键在于拥有 “记忆能力”。就像人与人相处时,我们会记住对方的喜好、过往的交流细节,并以此调整后续的沟通方式;具备记忆的智能体,同样能在与用户的互动中,主动留存对话信息、记录关键需求,甚至沉淀用户偏好,进而在未来的交互中给出更精准、更贴心的响应。
本篇实践指南,就将聚焦如何基于 Langchain 框架,一步步打造出具备记忆能力的智能体。从记忆机制的设计逻辑,到具体的技术实现细节,带你解锁智能体 “记住” 用户的关键能力,让你的 AI 应用真正拥有 “温度”。
一、无记忆的对话

这种无记忆的对话就像一位左耳进右耳出的小傻瓜,你问到“我上一句说的什么”的时候,他就胡乱的回答你。
示例代码:

import os

import dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位幽默、话少的聊天助手,请用简短幽默的语言回答用户提问"),
    ("human", "{query}")
])

llm = ChatOpenAI(model="qwen-max",
               base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
               api_key=os.getenv("TONGYI_KEY"))

chain = prompt | llm

while True:
    query = input("Human: ")
    if query == "q":
      exit(0)
    resp = chain.stream({"query": query})
    print("AI: ", flush=True, end="")
    ai_content = ""
    for r in resp:
      ai_content += r.content
      print(r.content, flush=True, end="")
    print("\n")输出结果:

Human: 你好,我是小黑,是一名全栈程序员,我主要使用的开发语言有C#、python、js。
AI: 你好,小黑!全栈程序员啊,那你肯定是个“多面手”了。C#、Python、JS,这组合听起来就像是编程界的“摇滚乐队”,你就是那个能演奏多种乐器的超级明星!

Human: 我是谁?
AI: 你就是那个在镜子里最好看的人啊!但具体是谁,我这还真的猜不出来。

Human: 上一句我说的什么
AI: 你上一句说的是:“上一句我说的什么?” 我猜你可能是想考考我的记忆力?哈哈,我可是过了科目二的哦!二、利用对话列表增加记忆能力

通过“无记忆的对话”测试,我发现要解决记忆问题是不是可以简单的将原有对话列表拼接后丢给大模型,于是我果断升级代码。
示例代码:

import os

import dotenv
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

chat_list = []

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位幽默、话少的聊天助手,请用简短幽默的语言回答用户提问"),
    MessagesPlaceholder("chat_histories"),
    ("human", "{query}")
])

llm = ChatOpenAI(model="qwen-max",
               base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
               api_key=os.getenv("TONGYI_KEY"))

chain = RunnablePassthrough.assign(
    chat_histories=lambda x: chat_list
) | prompt | llm

while True:
    query = input("Human: ")
    if query == "q":
      exit(0)
    resp = chain.stream({"query": query})
    print("AI: ", flush=True, end="")
    ai_content = ""
    for r in resp:
      ai_content += r.content
      print(r.content, flush=True, end="")
    print("\n")
    chat_list.append(HumanMessage(content=query))
    chat_list.append(AIMessage(content=ai_content))输出结果:

Human: 你好,我是小黑,是一名全栈程序员,我主要使用的开发语言有C#、python、js。AI: 嘿,小黑,程序员界的“全栈大厨”啊!C#、Python、JS,这组合就像是厨房里的刀叉勺,啥菜都能做。下次电脑出问题我直接找你得了,全能选手!Human: 我是谁?AI: 你不是刚刚说你是小黑吗?难道你已经变身成超人了,连自己都不认识了?
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

颜清华 发表于 2025-11-5 11:20:39

这个好,看起来很实用

髭赌 发表于 2025-11-26 03:30:49

感谢发布原创作品,程序园因你更精彩

左优扬 发表于 2025-12-3 14:45:08

鼓励转贴优秀软件安全工具和文档!

窟聿湎 发表于 2025-12-6 23:52:48

新版吗?好像是停更了吧。

但婆 发表于 前天 08:54

用心讨论,共获提升!
页: [1]
查看完整版本: 如何通过LangChain实现记忆功能的总结