【LangChain专栏】LangChain Memory 核心解析

AI Agent 实战:用 LangChain4j 构建能自动干活的智能体 先讲个真实的故事。去年我帮一个电商团队做客服系统。第一版用 LLM + RAG,效果不错——用户问"退换货政策是什么",它能精准回答。老板很高兴,甩过来一个新需求:这就是问题所在。前几篇我们构建的 AI 应用本质上是一个知识问答系统——用户提问,AI 从文档里找答案。但在真实业务中,用户需要的不是"回答",而是"动作"。查订单要调订单系统,查物流要对接快递 API,退款要操作支付网关。这些需要执行,不只是回答。这就是从 ChatBot 到 Agent 的范式跃迁:一句话定义 Agent:LLM 负责理解"用 阅读详情


在大模型应用开发中,多轮对话的上下文感知能力是衡量应用智能性的关键指标。但原生大模型本身并不具备记忆能力,每一次交互都是独立的请求,无法记住用户上一轮说了什么。而LangChain中的Memory组件,正是为解决这一问题而生的核心模块,它能让大模型实现对话历史的存储、管理与利用,构建真正具备上下文理解能力的链式对话系统。

本文将基于LangChain Memory的核心设计与使用逻辑,从基础概念到实际应用,从简单记忆组件到高级混合记忆机制,全方位解析LangChain Memory的使用方法与设计思路,帮助开发者快速掌握让大模型拥有“记忆”的核心技巧。

一、为什么需要Memory?大模型的记忆困境

大多数大模型应用都以会话接口为载体,用户期望与模型的对话能像和人交流一样,具备上下文连贯性。比如当你告诉模型“我叫小明”,后续再问“我是谁”时,期望得到准确的回答,但原生大模型本身不会记忆任何上下文,它只能根据当前的输入生成输出,对过往的对话毫无感知。

要解决这一问题,就需要额外的模块来保存用户与模型的对话历史,并在下一次请求时,将历史信息与当前问题一起输入给模型,让模型基于完整的上下文生成输出。而LangChain中的Memory组件,就是专门承担这一功能的核心模块,为多轮对话的上下文感知提供了底层支撑。

二、LangChain Memory 核心基础认知

2.1 什么是Memory?

Memory是LangChain中用于多轮对话中保存和管理上下文信息(文本、图像、音频等)的组件,它能让应用记住用户之前的交互内容,实现对话的上下文感知,是构建智能链式对话系统的基础。

2.2 Memory的核心设计理念

LangChain Memory的工作流程遵循“读取-构建-处理-写入”的闭环逻辑,与链(Chain)的交互分为两次核心操作:读取历史和写入新内容,具体步骤如下:

  1. 输入问题:用户提交当前的问题请求;
  2. 读取历史消息:从Memory中读取过往的对话历史信息;
  3. 构建提示:将历史消息与当前问题合并,生成新的Prompt;
  4. 模型处理:将构建好的Prompt传递给大模型,生成输出结果;
  5. 解析输出:通过输出解析器处理模型结果,返回给用户可理解的回答;
  6. 写入Memory:将当前的问题与模型的回答一起写入Memory,更新对话历史,为后续对话提供上下文。

简单来说,当链接入Memory模块后,收到用户输入时会先从Memory中查询历史,拼接后传给大模型;返回响应前,会自动将新的问答对写入Memory,完成记忆更新。

2.3 不用Memory模块,如何实现记忆?

在不借助LangChain Memory组件的情况下,也能通过基础的代码逻辑让大模型具备简单的记忆能力:通过变量不断追加历史对话信息到消息列表中,将完整的对话历史作为输入传给大模型。

核心思路是利用HumanMessage(用户消息)和AIMessage(模型消息)类,将每一轮的问答对追加到消息列表,每次调用模型时都传入完整的列表。这种方式是大模型记忆的基础,任何记忆机制的底层都是对聊天交互历史的存储,只是不同的Memory组件会对历史信息做不同的处理与优化。

但这种原生方式的弊端也很明显:需要开发者手动管理消息列表,无法灵活控制历史信息的规模,长对话下会导致输入Token过多,超出大模型的输入限制,同时也会增加Token消耗。而LangChain的各类Memory组件,正是为了解决这些问题而设计的。

import os

from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_openai import ChatOpenAI

"""
代码示例:原生方式实现大模型记忆
"""

# 初始化大模型
llm = ChatOpenAI(model="qwen-plus",
                        api_key=os.getenv("DASHSCOPE_API_KEY"),
                        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
                        )

# 初始化对话消息列表,存储历史问答
chat_messages = [SystemMessage(content="你是一位友好的人工智能小助手")]

def chat_with_llm(question):
    # 添加当前用户问题到消息列表
    chat_messages.append(HumanMessage(content=question))
    # 调用模型,传入完整的历史消息
    response = llm.invoke(chat_messages)
    # 添加模型回答到消息列表,更新历史
    chat_messages.append(AIMessage(content=response.content))
    return response.content

# 多轮对话测试
print(chat_with_llm("你好,我叫小明"))
print(chat_with_llm("我是谁?"))
print(chat_with_llm("帮我介绍一下李白"))
print(chat_with_llm("我刚才让你介绍的是谁?"))

三、LangChain 基础Memory模块使用

LangChain针对不同的对话场景,设计了多层级的Memory解决方案,从最基础的完整历史存储,到按窗口截取最近对话,再到智能摘要、实体提取,形成了一套完整的记忆体系。而基础Memory模块的核心是ChatMessageHistory和ConversationBufferMemory,是所有高级Memory组件的底层基础。

3.1 ChatMessageHistory:记忆的底层存储工具

ChatMessageHistory是LangChain中用于存储和管理对话消息的基础类,也有别名InMemoryChatMessageHistory,它直接操作HumanMessage、AIMessage等消息对象,是其他所有记忆组件的底层存储支撑。

核心特点
  1. 纯粹的消息“存储器”,仅负责消息的添加、存储和读取,与任何记忆策略(如缓冲、窗口、摘要)无关;
  2. 不涉及消息的格式化处理,不会将消息转化为纯文本字符串,保持消息的原始对象格式;
  3. 直接返回List[BaseMessage]类型的消息列表,可直接对接大模型的invoke方法。
典型使用场景

场景1:基础记忆存储

from langchain.memory import ChatMessageHistory

# 实例化对象
history = ChatMessageHistory()
# 添加用户消息和AI消息
history.add_user_message("hi!")
history.add_ai_message("whats up?")
# 读取所有消息
print(history.messages)

场景2:直接对接LLM
将ChatMessageHistory存储的消息列表直接传给大模型,模型会基于完整的历史上下文生成回答:

from langchain.memory import ChatMessageHistory
from langchain_openai import ChatOpenAI

# 实例化并添加历史消息
history = ChatMessageHistory()
history.add_user_message("你好,我叫小明,请介绍一下你自己")
history.add_user_message("我是谁呢?")

# 初始化大模型并调用
llm = ChatOpenAI(model_name='gpt-4o-mini')
response = llm.invoke(history.messages)
print(response.content) # 模型会回答:你好,小明!我是一个人工智能助手...

3.2 ConversationBufferMemory:基础的完整对话记忆

ConversationBufferMemory是最常用的基础记忆组件,专门用于按原始顺序存储完整的对话历史,是对ChatMessageHistory的上层封装,可直接与LangChain的Chain、Model无缝集成,无需开发者手动管理消息列表。

核心特点
  1. 完整存储:按问答顺序保存所有的对话历史,无裁剪、无压缩;
  2. 格式灵活:通过return_messages参数控制输出格式,True返回消息对象列表,False(默认)返回拼接的纯文本字符串;
  3. 键可自定义:默认以history为键返回记忆内容,可通过memory_key参数修改键名,适配不同的Prompt模板;
  4. 无缝集成:直接与LLMChain、ConversationChain等集成,自动完成历史的读取与写入。
典型使用场景

场景1:入门使用,存储与读取对话

from langchain.memory import ConversationBufferMemory

# 实例化对象(默认返回纯文本)
memory = ConversationBufferMemory()
# 保存问答对
memory.save_context(inputs={"input": "你好,我是人类"}, outputs={"output": "你好,我是AI助手"})
memory.save_context(inputs={"input": "很开心认识你"}, outputs={"output": "我也是"})
# 读取记忆
print(memory.load_memory_variables({}))
# 输出:{'history': 'Human: 你好,我是人类\nAI: 你好,我是AI助手\nHuman: 很开心认识你\nAI: 我也是'}

# 实例化对象(返回消息对象列表)
memory_msg = ConversationBufferMemory(return_messages=True)
memory_msg.save_context({"input": "hi"}, {"output": "whats up"})
print(memory_msg.load_memory_variables({}))
# 输出:{'history': [HumanMessage(content='hi'), AIMessage(content='whats up')]}

场景2:与LLMChain结合,实现多轮对话记忆
这是实际开发中最常用的场景,将ConversationBufferMemory与LLMChain集成,让链具备自动的记忆能力,核心是保证Prompt模板的变量名与Memory的键名匹配:

from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains.llm import LLMChain
from langchain_core.prompts import PromptTemplate

# 初始化大模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 定义Prompt模板,包含history和question两个变量
template = """你可以与人类对话。
当前对话: {history}
人类问题: {question}
回复:
"""
prompt = PromptTemplate.from_template(template)
# 初始化Memory
memory = ConversationBufferMemory()
# 初始化LLMChain,集成Memory
chain = LLMChain(llm=llm, prompt=prompt, memory=memory)

# 多轮对话
res1 = chain.invoke({"question": "我的名字叫Tom"})
res2 = chain.invoke({"question": "我的名字是什么?"})
print(res2["text"]) # 输出:你的名字是Tom。

若需要修改Memory的键名,只需通过memory_key参数配置,并同步修改Prompt模板中的变量名即可。

3.3 ConversationChain:Memory与Chain的封装神器

ConversationChain是LangChain对ConversationBufferMemory和LLMChain的高层封装,内置了默认的Prompt模板,无需开发者手动定义模板和初始化Memory,极大简化了具备基础记忆能力的对话链的开发流程。

核心特点
  1. 内置默认Prompt模板,包含history和input两个核心变量,适配基础多轮对话;
  2. 无需手动初始化Memory,底层自动集成ConversationBufferMemory;
  3. 调用时只需传入input键的参数,无需额外处理历史信息。
典型使用场景

场景1:使用内置默认模板

from langchain_openai import ChatOpenAI
from langchain.chains.conversation.base import ConversationChain

# 初始化大模型
llm = ChatOpenAI(model="gpt-4o-mini")
# 初始化ConversationChain,自动集成记忆
conv_chain = ConversationChain(llm=llm)

# 多轮对话
conv_chain.invoke(input="小明有1只猫")
conv_chain.invoke(input="小刚有2只狗")
res = conv_chain.invoke(input="小明和小刚一共有几只宠物?")
print(res["response"]) # 输出:小明有一只猫,小刚有两只狗,所以他们一共有三只宠物。

场景2:自定义Prompt模板
若内置模板无法满足需求,也可自定义Prompt模板,传递给ConversationChain:

from langchain_openai import ChatOpenAI
from langchain.chains.conversation.base import ConversationChain
from langchain_core.prompts import PromptTemplate

llm = ChatOpenAI(model="gpt-4o-mini")
# 自定义模板
template = """以下是人类与AI的友好对话,AI健谈且注重细节。
当前对话: {history}
Human: {input}
AI:"""
prompt = PromptTemplate.from_template(template)
# 初始化对话链,传入自定义模板
chain = ConversationChain(llm=llm, prompt=prompt, verbose=True)
# 调用
chain.invoke({"input": "你好,你的名字叫小智"})
chain.invoke({"input": "你叫什么名字?"}) # 模型会回答:我叫小智。

3.4 ConversationBufferWindowMemory:长对话的窗口记忆策略

ConversationBufferMemory会完整存储所有对话历史,长对话场景下会导致内存占用过大、Token消耗过高,甚至超出大模型的输入Token限制。而ConversationBufferWindowMemory正是为解决这一问题设计的,它会仅保存最近K个交互的问答对,形成一个“记忆窗口”,截断较早的对话历史,避免信息过载。

核心特点
  1. 窗口限制:通过k参数设置记忆窗口大小,仅保留最近k轮对话;
  2. 格式兼容:与ConversationBufferMemory完全兼容,支持return_messages和memory_key参数;
  3. 长对话友好:有效控制输入Token数量,适配大模型的输入限制,降低Token消耗。
典型使用场景

场景1:基础窗口记忆存储

from langchain.memory import ConversationBufferWindowMemory

# 实例化对象,设置窗口k=2,仅保留最近2轮对话
memory = ConversationBufferWindowMemory(k=2)
# 保存3轮对话
memory.save_context({"input": "你好"}, {"output": "怎么了"})
memory.save_context({"input": "你是谁"}, {"output": "我是AI助手"})
memory.save_context({"input": "你的生日是哪天?"}, {"output": "我不清楚"})
# 读取记忆,仅返回后2轮
print(memory.load_memory_variables({}))
# 输出:{'history': 'Human: 你是谁\nAI: 我是AI助手\nHuman: 你的生日是哪天?\nAI: 我不清楚'}

场景2:与Chain结合,长对话记忆控制

from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferWindowMemory
from langchain.chains.llm import LLMChain
from langchain_core.prompts import PromptTemplate

llm = ChatOpenAI(model="gpt-4o-mini")
template = """以下是人类与AI的友好对话,AI会准确回答问题。
当前对话: {history}
Human: {question}
AI:"""
prompt = PromptTemplate.from_template(template)
# 初始化窗口记忆,k=1,仅保留最近1轮
memory = ConversationBufferWindowMemory(k=1)
# 集成到链
chain = LLMChain(llm=llm, prompt=prompt, memory=memory)

# 多轮对话
chain.invoke({"question": "你好,我是孙小空"})
chain.invoke({"question": "我有两个师弟,猪小戒和沙小僧"})
chain.invoke({"question": "我今年考上了一本"})
res = chain.invoke({"question": "我叫什么?"})
print(res["text"]) # 输出:抱歉,我不知道你的名字。(因k=1,仅保留上一轮对话,丢失名字信息)

# 若将k改为3,模型会准确回答:你叫孙小空。

这一特性让开发者可以根据实际场景灵活控制记忆的范围,平衡上下文连贯性和Token消耗。

四、LangChain 高级Memory模块:适配复杂对话场景

基础Memory模块能解决简单的对话记忆问题,但面对超长篇对话、需要保留核心信息、需要结构化存储实体等复杂场景,就需要使用LangChain的高级Memory模块。这些模块在基础记忆的基础上,增加了Token控制、智能摘要、实体提取、知识图谱、向量检索等功能,适配不同的复杂业务场景。

4.1 ConversationTokenBufferMemory:基于Token的精准记忆控制

ConversationTokenBufferMemory是基于Token数量的记忆控制机制,与按轮次控制的窗口记忆不同,它会根据Token数量来截断对话历史:当总Token数超出指定的max_token_limit时,自动移除最早的消息,确保输入的Token数始终在限制范围内,实现更精准的记忆规模控制。

核心特点
  1. Token精准控制:基于大模型的Token计算规则,而非简单的轮次,控制更精准;
  2. 保留原始对话:截断时仅移除最早的消息,剩余消息保持原始格式,不做任何压缩或摘要;
  3. 需绑定LLM:初始化时必须传入大模型实例,用于计算Token数量。
典型使用
from langchain.memory import ConversationTokenBufferMemory
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
# 初始化,设置max_token_limit=50
memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=50)
# 保存对话
memory.save_context({"input": "你好吗?"}, {"output": "我很好,谢谢!"})
memory.save_context({"input": "今天天气如何?"}, {"output": "晴天,25度"})
# 读取记忆,Token未超限,返回完整对话
print(memory.load_memory_variables({}))
# 若将max_token_limit改为10,Token超限,返回空的history

4.2 ConversationSummaryMemory:智能摘要的压缩记忆

无论是窗口记忆还是Token记忆,都是通过截断历史来控制规模,可能会丢失一些关键信息。而ConversationSummaryMemory则采用智能摘要的方式,通过大模型对对话历史进行精简总结,将冗长的原始对话转化为简短的摘要,既减少了Token消耗,又保留了核心上下文信息,是长对话场景的优选方案。

核心特点
  1. 智能摘要:利用大模型生成对话历史的精简摘要,替代原始对话存储;
  2. 动态更新:每新增一轮对话,都会将旧摘要与新对话合并,生成新的摘要,保持摘要的时效性;
  3. 上下文优化:保留核心信息,避免因截断导致的关键信息丢失。
典型使用场景

场景1:无历史消息,直接初始化

from langchain.memory import ConversationSummaryMemory
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
# 初始化摘要记忆
memory = ConversationSummaryMemory(llm=llm)
# 保存多轮对话
memory.save_context({"input": "你好"}, {"output": "怎么了"})
memory.save_context({"input": "你是谁"}, {"output": "我是AI助手小智"})
# 读取记忆,返回对话摘要
print(memory.load_memory_variables({}))
# 输出:{'history': 'The human greets the AI by saying hello, and the AI responds by asking what's wrong. The human then asks who the AI is, and the AI replies that it is AI assistant Xiao Zhi.'}

场景2:已有历史消息,基于历史生成摘要

from langchain.memory import ConversationSummaryMemory, ChatMessageHistory
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
# 已有历史消息
history = ChatMessageHistory()
history.add_user_message("你好,你是谁?")
history.add_ai_message("我是AI助手小智")
# 基于历史消息初始化摘要记忆
memory = ConversationSummaryMemory.from_messages(llm=llm, chat_memory=history)
# 新增对话并更新摘要
memory.save_context({"input": "我的名字叫小明"}, {"output": "很高兴认识你"})
print(memory.load_memory_variables({}))
# 输出包含新对话的完整摘要

4.3 ConversationSummaryBufferMemory:混合记忆的最优解

ConversationSummaryBufferMemory是ConversationBufferMemory和ConversationSummaryMemory的混合体,结合了两者的优点:对最近的对话保留原始格式,确保最新交互的完整上下文;对超出Token限制的较早对话生成摘要,避免信息过载。这种混合机制既保证了对话的连贯性,又有效控制了Token消耗,是大多数复杂长对话场景的最优选择。

核心特点
  1. 混合策略:近对话存原始,远对话存摘要,平衡细节与效率;
  2. Token阈值控制:通过max_token_limit设置Token上限,超出时自动对较早对话生成摘要;
  3. 格式灵活:支持return_messages参数,可返回消息对象列表或纯文本。
典型使用:电商客服场景(实际业务高频场景)
from langchain.memory import ConversationSummaryBufferMemory
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.chains.llm import LLMChain

# 初始化大模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.5)
# 定义电商客服Prompt模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是电商客服助手,用中文友好回复用户问题,保持专业亲切。"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}")
])
# 初始化混合记忆,max_token_limit=400
memory = ConversationSummaryBufferMemory(
    llm=llm,
    max_token_limit=400,
    memory_key="chat_history",
    return_messages=True
)
# 集成到链
chain = LLMChain(llm=llm, prompt=prompt, memory=memory)

# 模拟电商客服多轮对话
dialogues = [
    "你好,我想查询订单12345的状态",
    "这个订单是上周五下的",
    "我现在急着用,能加急处理吗",
    "我记错订单号了,应该是12346",
    "你们的退货政策是怎样的"
]
# 执行对话
for msg in dialogues:
    res = chain.invoke({"input": msg})
    print(f"用户:{msg}\n客服:{res['text']}\n")

# 查看记忆状态:较早的订单查询对话生成摘要,最新的退货政策对话保留原始
print(memory.load_memory_variables({}))

该场景中,用户的多轮对话既有订单查询的寒暄与细节,也有退货政策的核心问题,混合记忆会自动对较早的订单查询生成摘要,保留最新的退货政策对话原始信息,既保证了客服能准确理解用户需求,又控制了Token消耗。

4.4 专业场景记忆模块:实体、知识图谱、向量检索

除了上述常用的高级记忆模块,LangChain还针对需要结构化存储、语义检索、复杂关系分析的专业场景,设计了专属的Memory模块,这类模块虽不常用,但在医疗、金融、智能客服等高端场景中能发挥重要作用。

4.4.1 ConversationEntityMemory:基于实体的结构化记忆

该模块能智能识别对话中的实体信息(人名、地点、产品、症状等),并以结构化字典的形式存储实体及其属性/关系,而非自然语言摘要。核心优势是避免关键信息丢失,可通过代码强制检查实体信息,适合医疗、金融等对关键信息准确性要求极高的场景。

比如医疗场景中,模型能精准提取患者的症状、血压、用药、过敏史等实体信息,结构化存储后,后续推荐药物时可直接通过代码检查过敏史,避免推荐过敏药物,而普通的摘要记忆则可能因模型注意力问题忽略过敏信息。

4.4.2 ConversationKGMemory:基于知识图谱的关系记忆

在实体记忆的基础上,进一步捕捉实体之间的复杂关系,将对话内容转化为**(头实体, 关系, 尾实体)** 的三元组形式,构建结构化的知识网络。比如“山姆是我的朋友”会被转化为(山姆, 是, 我的朋友),“山姆最喜欢的颜色是红色”转化为(山姆, 最喜欢的颜色是, 红色),能实现更复杂的关系推理与上下文理解。

4.4.3 VectorStoreRetrieverMemory:基于向量检索的语义记忆

将对话历史存储在向量数据库中,通过语义相似度检索替代传统的线性记忆读取。每次用户提问时,会将问题向量化,在向量数据库中检索与问题语义最相关的历史对话,仅将相关历史传入模型,适合超长篇对话、长期记忆、需要语义理解的复杂场景,比如智能助手、知识库问答等。

五、LangChain Memory 模块选型指南

LangChain提供了丰富的Memory模块,不同模块适用于不同的场景,开发者在实际开发中需根据对话长度、Token消耗、业务需求、信息准确性要求等因素选择合适的模块,以下是核心选型参考:

记忆模块核心特点适用场景优点缺点
ConversationBufferMemory完整存储原始对话短对话、依赖完整上下文的简单场景简单、无信息丢失长对话Token消耗高、易超限
ConversationBufferWindowMemory保留最近k轮对话中短对话、需控制轮次的场景轻量、控制简单可能丢失关键历史信息
ConversationTokenBufferMemory基于Token精准控制对Token消耗敏感的中短对话Token控制精准、保留原始截断可能丢失关键信息
ConversationSummaryMemory智能摘要压缩历史长对话、无需保留原始细节的场景大幅减少Token、保留核心摘要可能丢失细微信息
ConversationSummaryBufferMemory近对话存原始、远对话存摘要大多数长对话场景(电商客服、智能助手)平衡细节与效率、Token友好略复杂、需绑定LLM
ConversationEntityMemory结构化存储实体信息医疗、金融等关键信息精准要求高的场景信息结构化、可强制检查配置复杂、仅关注实体
ConversationKGMemory知识图谱存储实体关系需复杂关系推理的专业场景关系结构化、推理能力强配置复杂、Token消耗较高
VectorStoreRetrieverMemory向量检索语义记忆超长篇对话、长期记忆、语义问答场景语义检索、长期记忆依赖向量数据库、配置复杂

通用选型建议:

  1. 简单短对话:直接使用ConversationBufferMemory或ConversationChain;
  2. 中长对话常规场景:优先选择ConversationSummaryBufferMemory(混合记忆,最优解);
  3. 对Token消耗极致控制:使用ConversationTokenBufferMemory;
  4. 专业精准场景(医疗/金融):使用ConversationEntityMemory;
  5. 超长篇/语义理解场景:使用VectorStoreRetrieverMemory。

六、总结

LangChain的Memory组件是解决大模型记忆困境的核心方案,它通过一套完整的记忆体系,实现了对话历史的存储、管理、优化与利用,让大模型从“无记忆的单次交互”升级为“有记忆的连续对话”,是构建智能大模型应用的必备模块。

LangChain核心概念,Chain、Agent、Tool、Memory、Retriever一文搞懂 记忆篇结束,我们进入LangChain深度篇。前面三十多篇里,我们手写了记忆系统,手写了工具调用,手写了RAG流程。代码能跑,功能也有,但每写一个新功能都要从零搭一遍。提示词拼来拼去,消息列表手动维护,工具分发自己写if-else。功能越加越多,代码就越乱。这种时候你会想,有没有人把这些常见套路封装好。LangChain就是干这个的。它把AI应用里反复出现的模式抽象成几个核心概念,Chain、Agent、Tool、Memory、Retriever。理解了这五个,LangChain的大部分代码你都能看懂。 阅读详情

相关推荐

大模型应用与实战:专栏概要与内容目录

掌握大模型前沿技术,探索实战应用的无限可能。

羊城迷鹿的博客 1371

【LangChain专栏】LangChain使用之Tools

本文介绍了LangChain的Tools组件,它是大语言模型(LLM)的外部能力扩展接口,使AI能够调用搜索引擎、计算器等外部功能,实现从文本生成到实际操作的跨越。Tools与Agent结合形成"思考+行动"能力,具有增强LLM功能、支持智能决策和模块化设计三大特点。文章详细解析了Tool的核心要素(名称、描述、参数规范等)和两种自定义方式:@tool装饰器(适合新手)和StructuredTool.from_function(适合进阶)。最后以MoveFileTool为例,展示了工具调

发现问题,面对问题,分析问题,解决问题,总结问题 911

agent实战专栏|第11篇:LangChain入门:构建Agent的瑞士军刀

LangChain是一个用于构建基于LLM的应用程序的框架。它提供了一套工具和抽象,使得开发者能够快速构建复杂的AI应用,包括聊天机器人、问答系统、代码生成器等。Prompt是指用户输入给LLM的文本,用于引导LLM生成特定的输出。一个好的Prompt能够让LLM更准确地理解用户意图,生成高质量的响应。Chain是LangChain中最核心的概念之一。它是一系列组件的组合,用于处理输入并生成输出。Chain可以将多个组件串联起来,形成一个完整的处理流程。Tool是Agent与外部世界交互的桥梁。

2201_76125393的博客 20

LangChain核心模块详解:Chain-Memory-Tools实战

本文详解 LangChain 三大核心模块:Chain 借助 LCEL 实现多任务流程编排,Memory 提供多种对话存储方案留存上下文,Tools 搭配 Agent 可调用外部能力;附完整实战代码,演示三模块协同搭建简易智能助手,附上练习任务与常见问题解答,学完可进阶 RAG 开发。

2501_93100691的博客 387

燧原科技云燧ESL64-O超节点:国产AI芯片与OEX光互联架构解析

分布式AI训练通过将计算任务拆分到多个节点并行执行来加速模型训练,其核心原理涉及数据并行和模型并行等策略。在技术价值层面,分布式训练能显著提升大规模深度学习任务的效率,但传统GPU集群常因网络通信瓶颈导致性能受限。OEX光互联架构作为解决通信瓶颈的关键创新,采用硅光技术实现高带宽、低延迟的节点内互联,优化了AI训练中的集合操作。这种硬件级优化特别适用于千亿参数大模型训练和科学计算等场景,能有效降低AI集群的总体拥有成本(TCO)。云燧ESL64-O超节点正是基于国产自研AI芯片与OEX架构的集成方案,为大规

weixin_29071809的博客 371

Keil5芯片包下载后无法识别?手把手排查教程

遇到Keil5芯片包下载后不被识别的问题别慌,常见原因包括安装路径错误或包未正确注册。通过检查Pack Installer状态和手动更新设备支持列表,轻松排查故障,确保开发环境正常运行。

weixin_35459464的博客 878

55-LangChain核心概念-Chain-Agent-Tool-Memory关系

本文用一张Mermaid架构图串讲LangChain的核心抽象——Chain(工作流编排)、Agent(自主决策)、Tool(外部能力)、Memory(上下文持久化)以及它们之间的协作关系。内容深挖Runnable接口与LCEL表达式语言的底层设计,对比"用LangChain"和"自己写"的边界选择,帮你在框架依赖和灵活性之间找到平衡。适合已经用LangChain搭过简单应用、想系统性理解框架设计的开发者

weixin_44081096的博客 253

DeepSeek + 番茄小说:AI辅助小说开发最全指南

DeepSeek与番茄小说合作推出AI辅助小说创作系统,通过DeepSeek的文本生成能力(包括情节构建、角色塑造等)结合番茄小说的市场数据,为作者提供从创意到发布的全流程支持。系统包含智能创意生成器、角色设计、章节自动生成等核心模块,采用数据驱动优化策略,支持128K长文本处理和多风格模仿。开发架构采用Python+FastAPI技术栈,提供分层审核机制确保质量。该系统可帮助作者突破创作瓶颈,提升效率,同时提供订阅制、内容分成等多元变现模式。需注意版权问题和原创性保证。

weixin_41445009的博客 1677

[Ai Agent] 04 一文吃透LangChain:Prompt、LLM、Chain、Memory 全流程实战

本文详细介绍了LangChain框架的六大核心模块(Models、Prompt、Chain、Memory、Agents、RAG),所有配套代码已开源在Github,帮助开发者快速上手LangChain框架。

2401_87328929的博客 1817

FT2232HL JTAG下载器硬件设计指南:从引脚配置到电平转换实战

本文详细解析了FT2232HL JTAG下载器的硬件设计要点,包括引脚配置、电平转换电路设计及EEPROM配置技巧。通过实战案例展示如何利用FT2232HL实现高速JTAG通信,解决电平不匹配等常见问题,提升嵌入式开发效率。特别适合需要灵活JTAG接口的硬件工程师参考。

weixin_29194693的博客 256

正负数据如何归一化_生信干货 | LC-MS代谢组学QI软件下机数据代谢物筛选和归一化如何做?...

上海·2019第一届多层组学前言技术发展华东区客户研讨会倒计时1天LC-MS非靶向代谢组学数据下机啦~~拿到一堆数据怎么办?不会高端代码,也不会自己写脚本,我怎么处理数据?​本期小编带来了LC-MS非靶向代谢组学下机数据处理实用干货,包括:下机定性结果表格的解析、代谢物筛选如何做?以及定量数据如何做归一化?实用干货,赶紧来抢~~话不多说,赶紧来学习吧~~非靶向LC-MS代谢组学的分析流程LC-MS...

weixin_36441329的博客 2983

57-LangChain-Memory机制-Buffer-Summary-Window对比

本文深入拆解LangChain中的Memory记忆系统——解决大模型"每次对话都像第一次见面"的核心组件。内容覆盖三种主流Memory策略的实现与对比(Buffer/Summary/Window),每种策略的Token消耗曲线、记忆精度损失图谱,以及Token预算管理在多轮对话中的实用方案。配以Mermaid时序图展示Memory在多轮对话中的数据流转,适合想让聊天机器人拥有"记性"的开发者。

weixin_44081096的博客 269

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

LangChain框架解析:大语言模型应用开发实战指南

大语言模型(LLM)作为当前AI领域的核心技术,正在推动应用开发范式的变革。LangChain框架通过标准化接口连接LLM、工具链和业务逻辑,显著提升了开发效率。其核心原理在于模块化设计,开发者可以像组装乐高积木一样构建AI应用,无需从零训练模型。该框架特别适用于动态工作流、长期记忆和多工具协作场景,在实际项目中可实现4-7倍的效率提升。从技术实现来看,LangChain包含模型抽象层、提示工程模板、记忆管理系统等六大组件,支持主流模型如GPT系列和Llama 2。通过结合向量数据库和Redis等存储方案,

weixin_33754065的博客 789

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测!

本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。

Ai缝合怪、助力小伙伴高效发论文 329

如何为Langchain Agent添加记忆功能?

在开发复杂的AI应用时,赋予Agent记忆能力是一个关键步骤。这不仅能提高Agent的性能,还能使其在多轮对话中保持上下文连贯性。本文将详细介绍如何在Langchain框架中为Agent添加记忆功能,并深入解析每个步骤的原理和最佳实践。现在我们有了工具和记忆组件,可以初始化我们的Agent了:: 这种Agent类型特别适合使用OpenAI的function calling特性。: 启用详细输出,有助于调试。: 自动处理解析错误,提高Agent的稳定性。: 将我们之前定义的记忆组件传递给Agent。

python123456_的博客 1370

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何高效使用LangChain SQLDatabaseChain:5个实战技巧与深度解析

LangChain SQLDatabaseChain是LangChain项目中一个革命性的自然语言到SQL查询转换工具,它通过结合大型语言模型(LLM)和SQLAlchemy的强大能力,让开发者能够使用自然语言直接与数据库进行交互。本文将深入探讨SQLDatabaseChain的核心架构、实战应用和高级功能,为技术开发者和架构师提供全面的技术指南。 ## 项目概述与技术背景 在当今数据驱动的时

gitblog_00128的博客 457

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Memory 模块详解:构建不会忘事的 Agent 系统架构与长期记忆机制设计

在 Foundation Agent 架构中,Memory 模块不仅是“上下文缓存器”,更是智能体实现身份持续、任务连贯、自我演化的根基。从短期记忆到长期知识,从检索机制到记忆压缩,从 Memory Router 到跨任务记忆迁移,Memory 模块的设计决定了智能体是否具备持续对话能力、是否能记住过去失败、是否能整合外部知识与行为经验。本文将系统拆解 Memory 模块的分类、核心能力、典型结构、开源实现路径,并提供一个可落地的“Agent Memory 架构五步搭建指南”,帮你构建一个真正不会“失忆”的

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1685

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LangChain快速入门

本专栏适合想系统了解LangChain的开发者、准备大模型应用开发岗位面试的同学。内容涵盖LangChain核心知识体系与高频面试题。本篇是LangChain的快速入门知识,快速复习时候可看目录进行自问自答。

weixin_64489160的博客 331

别只会让 AI 写代码!LangChain+LangGraph 才是 AI 应用开发核心能力

当下现状:现在人人都在用 Cursor、Claude Coding 一键生成代码,也就是网上爆火的Vibe Coding(氛围编程),很多小白产生疑问:AI 都能写代码了,我们还有必要学开发框架吗?抛出核心观点:AI 只能做重复、样板代码,企业级复杂 AI 应用、RAG 知识库、自动 AI 代理,必须靠 LangChain/LangGraph 框架;只会 Vibe Coding 会踩大量安全、架构坑,框架思维才是不可替代的核心能力。

zhiwang_528的博客 244

LangChain1.0速通指南(三)——LangChain1.0 create_agent api 高阶功能

本篇内容深入分享了 LangChain 1.0 `create_agent` API 的高阶功能,涵盖 MCP 协议工具集成、结构化输出、记忆管理和中间件机制四大核心能力。通过高德地图 MCP 接入、动态模型选择等实战案例,展示了如何构建具备外部工具调用、记忆保持和流程可控的智能体应用。

weixin_42782643的博客 1448

《AgentX 专栏》01-前言:一个Java开发者的Agent实践之路

本文是AgentX技术专栏的开篇,介绍了一个基于Java构建的企业级AI智能体平台。作者指出当前大多数AI教程只关注简单API调用,而真实业务需要复杂的多步骤处理能力。AgentX专为金融风控等场景设计,具有工具系统、分层记忆、工作流编排等核心特性,能在2核4G服务器上运行。专栏将分享从架构设计到生产部署的全链路实践,特别适合Java开发者学习AI应用落地。作者选择Java而非Python,是为了更好地与企业现有系统集成。专栏包含15+篇文章,涵盖基础搭建、核心功能、进阶场景和生产部署等内容,提供完整可运行

wx5701619的博客 508

LangChain 快速入门:从 Hello World 到第一个 Chain

核心痛点:2023 年以来,大语言模型(LLM)的能力以令人目眩的速度进化——GPT-4、Claude、Gemini 等旗舰模型在推理、代码生成、多模态理解等维度不断刷新上限。调用一次 API 只需 5 行代码,但构建一个可维护、可扩展的 LLM 应用却要面对成百上千行散落的胶水代码。提示词硬编码在字符串里、模型参数散落在各处、输出解析靠正则表达式硬扛——这些"能跑通"的代码在需求变更时脆弱得像纸牌屋。当 LLM 从"玩具"变成"基础设施",我们用什么工程方法来驾驭它?适配人群。

我的博客 382

LangChain 应用开发(七):Tools 工具定义与核心机制

本文深入探讨了LangChain框架中Tool(工具)的核心概念与使用方法。Tool作为大语言模型与现实世界交互的桥梁,能够解决模型在知识时效性、精确计算、私有数据访问等方面的局限。文章详细解析了ToolCalling的工作原理,包括模型如何生成工具调用请求、本地执行流程及消息交互机制。重点介绍了构建Tool的三种方式:通过普通函数自动转换、使用@tool装饰器快速封装,以及使用Pydantic自定义复杂参数Schema。文章强调规范的Docstring和类型注解对工具描述的重要性,并提供了高质量Tool描

cui_ruicheng的博客 303
上一篇: 【LangChain专栏】LangChain模块中Chains 链的使用
下一篇: 【LangChain专栏】LangChain使用之Tools
ZWZhangYu
ZWZhangYu 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 497原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZWZhangYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值