【AI Agent入门到智能 】让Agent真正“认识“你!实现官方长期记忆功能,收藏必学!

文章详解如何为AI Agent实现"长期记忆"功能,使其能持久化存储用户信息。通过LangChain的InMemoryStore创建读写工具,实现Agent对用户信息的记忆和个性化服务。文章区分了会话记忆、长期记忆和RAG三种记忆机制,并通过实战代码演示实现过程,让Agent即使程序重启后也能记住用户信息,为后续引入知识库功能奠定基础。


今天,我们将引入LangChain官方推荐的“长期记忆”机制,让Agent拥有一个持久化的、结构化的“记忆库”,能够真正地“认识”并“记住”每一个与它交互的用户。

一、【概念篇】官方“长期记忆” vs. 会话记忆 vs. RAG

在深入代码前,我们必须再次厘清这三个容易混淆的概念:

  1. 会话记忆 (Conversational / Short-Term Memory)
  • 目的:记住单个对话线程中的交互历史。
  • 实现ChatMessageHistory,每次调用时传入Prompt。(v1.0前)
  • 状态易失,随对话结束而清空。
  1. 长期记忆 (Long-Term Memory) - 本期主角
  • 目的:记住关于用户/实体的结构化事实、状态和偏好,并将其持久化
  • 实现:通过专门的工具(Tools),让Agent主动读写一个持久化存储(store)。这个store可以是内存、数据库(Redis, SQL等)。
  • 状态持久(如果使用数据库后端),跨会话甚至跨程序重启。
  1. 知识库 (Knowledge Base / RAG)
  • 目的:让Agent能检索外部的、海量的非结构化知识
  • 实现:将文档向量化存入向量数据库,通过检索工具查询相关片段,增强LLM的回答。
  • 状态持久,知识库内容相对稳定。

**重要提示:RAG(知识库检索)虽然也是一种记忆形式,但在LangChain的这个分类体系下,它通常通过专门的检索工具(Tool)**来实现,我们会在后续章节讲解。

今天,我们聚焦于第二种——官方的长期记忆,让Agent学会“记人”。

二、LangChain 1.0+ 的变动提醒与新概念

在开始实战前,喵喵要再次提醒大家:LangChain自从进入1.0版本后,很多模块(尤其是Agent和Memory相关的)都发生了重大变化,变得更加模块化和显式化

今天,我们将接触到几个新概念,它们是实现官方“长期记忆”的关键:

  • Store:这就是我们的“长期记忆库”本体,它可以是内存 (InMemoryStore),也可以是数据库 (RedisStore等)。
  • Namespace& KeyStore内部组织数据的方式,类似“文件夹”和“文件名”,用于区分不同用户或不同类型的数据。
  • Context:一个数据结构 (通常用dataclass定义),用来告诉Agent当前是谁在对话(比如包含user_id)。因为Agent需要知道要把信息存到哪个用户的“档案”里。
  • ToolRuntime:可以理解为一个“魔法注入器”。它在Agent调用工具时,会自动把我们在AgentExecutor里配置好的store和调用时传入的context,“神奇地”传递给工具函数内部,让工具能访问到正确的“记忆库”和“用户ID”。

别担心!对于这些1.0+的重大变动和最佳实践,喵喵计划在未来推出专门的系列文章,为大家做一次彻底的梳理和教程更新。今天,我们先聚焦于把“长期记忆”跑起来!

三、【实战篇】打造Agent的“客户档案库”

我们将遵循官方文档,通过创建两个新工具,让Agent学会读写一个简单的内存存储。

第一步:环境准备与新模块导入

确保你的langchain相关库是最新的(特别是langgraph用于store)。我们需要一些新面孔:

# -----------------------------------------------------# 喵喵实战室:Agent长期记忆模块 (main_with_ltm.py)# -----------------------------------------------------import osfrom langchain_classic.agents import create_react_agentfrom langchain.agents import create_agentfrom langchain_core.prompts import PromptTemplatefrom langchain_core.tools import Toolfrom langchain.tools import tool, ToolRuntime # <- 导入ToolRuntime from langchain_openai import ChatOpenAI# 导入我们之前创建的工具from agent_tools import (    get_realtime_weather,     get_stock_realtime_price,    read_file,    write_file,    execute_python_code,    write_file_wrapper)# 导入会话记忆相关from langchain_core.messages import HumanMessage, AIMessage# !!!!!!!!!!!!!!!!!!!!# 步骤1:导入“长期记忆”相关的新模块# !!!!!!!!!!!!!!!!!!!!from langgraph.store.memory import InMemoryStore # <- LangGraph的内存存储from dataclasses import dataclass            # <- 用于定义上下文结构from typing_extensions import TypedDict      # <- 用于定义工具的结构化输入from typing import Any# --- 核心设置 (与上期相同) ---# 设置你的API Keys (强烈推荐使用环境变量)# 确保你已经设置了 OPENAI_API_KEY, HEFENG_API_KEY, TUSHARE_TOKENos.environ["OPENAI_API_KEY"] = "你的OpenAI API密钥"os.environ["OPENAI_API_BASE"] = "https://apikfm.com/v1"# 这里使用我们自己的API,开发喵API # ...等等# --- 步骤2:初始化“大脑” (与上期相同) ---print("[1/6] 正在初始化大模型 '大脑'...")# 我们选用gpt-4o,你也可以换成Moonshot或OpenAIllm = ChatOpenAI(    model="gpt-4o",    temperature=0.1,)# --- 步骤3:初始化“长期记忆库” (Store) ---print("[2/6] 正在初始化 '长期记忆库' (使用InMemoryStore)...")# InMemoryStore 将数据存在内存字典里,程序重启会丢失# 在生产环境中,你会换成 RedisStore, PostgresStore 等数据库后端store = InMemoryStore()# 讲解Store的数据组织:Namespace 和 Key# 我们将用户信息存储在 "users" 这个 Namespace 下# Key 就是每个用户的唯一IDprint("   数据将按 Namespace='users', Key=user_id 的方式组织。")# !!!可选:我们可以预先存入一些用户信息,模拟老用户!!!store.put(    ("users",),       # Namespace: 'users'分组    "user_007",       # Key: 用户ID    {"name": "邦德", "preferred_language": "中文"} # Value: 用户信息字典)print("   已预存 user_007 的信息。")# --- 步骤4:定义“上下文”结构 (Context) ---# 这个Context会在每次调用Agent时传入,告诉Agent当前是谁在对话@dataclassclass AgentContext:    user_id: str# --- 步骤5:定义“长期记忆”读写工具 ---print("[3/6] 正在创建 '长期记忆' 读写工具...")# 5.1 定义写入工具的输入结构 (UserInfo)# 使用TypedDict的好处是:为LLM提供了清晰的格式要求,# LLM知道调用此工具时,必须生成包含'name'字段的字典作为Action Input。class UserInfo(TypedDict):    name: str# 5.2 创建写入工具 (save_user_info)@tooldef save_user_info(user_info: UserInfo, runtime: ToolRuntime[AgentContext]) -> str:    """保存当前用户的基本信息,目前只支持保存'name'。"""    print(f"--- [工具被调用:save_user_info] ---")    print(f"--- [工具入参:user_info={user_info}] ---")    # 从runtime中获取store和当前用户的context (由AgentExecutor注入)    current_store: InMemoryStore = runtime.store    current_user_id: str = runtime.context.user_id    # 使用 Namespace="users", Key=current_user_id 存入数据    current_store.put(("users",), current_user_id, user_info)    returnf"成功:已记住当前用户({current_user_id})的名字是 {user_info.get('name')}。"# 5.3 创建读取工具 (get_user_info)@tooldef get_user_info(runtime: ToolRuntime[AgentContext]) -> str:    """查询当前用户的基本信息。"""    print(f"--- [工具被调用:get_user_info] ---")        # 从runtime中获取store和当前用户的context    current_store: InMemoryStore = runtime.store    current_user_id: str = runtime.context.user_id    print(f"--- [查询用户ID:{current_user_id}] ---")        # 使用 Namespace="users", Key=current_user_id 读取数据    user_info_value = current_store.get(("users",), current_user_id)        if user_info_value:        # LangChain InMemoryStore 的值封装在 .value 属性中,所以 user_info_value.value 才是我们存入的字典        stored_value = user_info_value.value        if isinstance(stored_value, str):            # 兼容早期存入 JSON 字符串的情况            try:                stored_value = json.loads(stored_value)            except json.JSONDecodeError:                pass                    user_name = user_info_value.value.get("name", "未知")        result = f"当前用户({current_user_id})的名字是: {user_name}。"    else:        result = f"当前用户({current_user_id})的信息不存在。"    print(f"--- [工具返回值:{result}] ---")    return result# --- 步骤6:将所有工具(包括新工具)加入列表 ---print("[4/6] 正在封装所有工具 '双手'...")tools = [    # (此处省略与上期相同的Web工具和本地工具定义代码)    # !!!!!!!!!!!!!!!!!!!!    # <-- 新增长期记忆工具 -->    # !!!!!!!!!!!!!!!!!!!!    save_user_info,    get_user_info]tool_names = ", ".join([tool.name for tool in tools])# --- 步骤7:升级Prompt模板 ---print("[5/6] 正在加载 ReAct 思考框架...")react_prompt_template_with_memory = """回答以下问题,尽你所能。使用以下格式:Question: 你必须回答的输入问题Thought: 你应该时刻思考该做什么Action: 采取的行动,如果需要使用工具则必须是[{tool_names}]中的一个Action Input: 你的行动输入Observation: 你的行动结果... (这个 Thought/Action/Action Input/Observation 的过程可以重复N次)Thought: 我现在知道最终答案了Final Answer: 原始输入问题的最终答案开始!**重要的是,在你的“Thought”中,要时刻参考之前的聊天记录。**"""# prompt = PromptTemplate.from_template(react_prompt_template_with_memory)# --- 步骤8:!!!组装Agent执行器 (关键变更)!!! ---print("[6/6] 正在组装Agent执行器 (加入长期记忆)...")# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!# 关键:在创建create_agent时,传入store和context_schema# 这样Agent在调用工具时,ToolRuntime才能访问到它们# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!agent_executor = create_agent(    model=llm,    system_prompt=react_prompt_template_with_memory,    tools=tools,    store=store,                 # <- 把我们的内存存储传进去    context_schema=AgentContext  # <- 告诉执行器上下文的结构)# --- 步骤9:对话循环 (需要传入Context) ---current_user = "user_123"# 假设当前用户是 user_123print(f"\n--- 具备长期记忆的Agent 已启动 (当前用户: {current_user}) ---")print("--- (输入 '退出' 来结束对话) ---")whileTrue:    try:        user_input = input("👤 你:")        if user_input.lower() in ["退出", "exit", "quit"]:            print("🤖 Agent: 拜拜!下次再聊!")            break                # !!!!!!!!!!!!!!!!!!!!!!!!!!        # 关键:调用invoke时,传入当前的Context (包含user_id)        # !!!!!!!!!!!!!!!!!!!!!!!!!!        result = agent_executor.invoke(            {"messages": [{"role": "user", "content": user_input}]},            # 将当前用户信息作为上下文传入            context=AgentContext(user_id=current_user)        )        print(f"result: {result}")        ai_output = result["messages"][-1].content        print(f"🤖 Agent: {ai_output}")    except Exception as e:        print(f"\n--- Agent 运行出错 ---")        print(e)        import traceback        traceback.print_exc()

大模型未来如何发展?普通人如何抓住AI大模型的风口?

※领取方式在文末

为什么要学习大模型?——时代浪潮已至

随着AI技术飞速发展,大模型的应用已从理论走向大规模落地,渗透到社会经济的方方面面。

  • 技术能力上:其强大的数据处理与模式识别能力,正在重塑自然语言处理、计算机视觉等领域。
  • 行业应用上:开源人工智能大模型已走出实验室,广泛落地于医疗、金融、制造等众多行业。尤其在金融、企业服务、制造和法律领域,应用占比已超过30%,正在创造实实在在的价值。

请添加图片描述
未来大模型行业竞争格局以及市场规模分析预测:
请添加图片描述

同时,AI大模型技术的爆发,直接催生了产业链上一批高薪新职业,相关岗位需求井喷:
请添加图片描述
AI浪潮已至,对技术人而言,学习大模型不再是选择,而是避免被淘汰的必然。这关乎你的未来,刻不容缓!


那么,我们如何学习AI大模型呢?

在一线互联网企业工作十余年里,我指导过不少同行后辈,经常会收到一些问题,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题,也不是三言两语啊就能讲明白的。

所以呢,这份精心整理的AI大模型学习资料,我整理好了,免费分享!只希望它能用在正道上,帮助真正想提升自己的朋友。让我们一起用技术做点酷事!

ps:微信扫描即可获取
加上后我将逐一发送资料
与志同道合者共勉
真诚无偿分享!!!

在这里插入图片描述


适学人群

我们的课程体系专为以下三类人群精心设计:

  • AI领域起航的应届毕业生:提供系统化的学习路径与丰富的实战项目,助你从零开始,牢牢掌握大模型核心技术,为职业生涯奠定坚实基础。

  • 跨界转型的零基础人群:聚焦于AI应用场景,通过低代码工具让你轻松实现“AI+行业”的融合创新,无需深奥的编程基础也能拥抱AI时代。

  • 寻求突破瓶颈的传统开发者(如Java/前端等):将带你深入Transformer架构与LangChain框架,助你成功转型为备受市场青睐的AI全栈工程师,实现职业价值的跃升。

在这里插入图片描述


※大模型全套学习资料展示

通过与MoPaaS魔泊云的强强联合,我们的课程实现了质的飞跃。我们持续优化课程架构,并新增了多项贴合产业需求的前沿技术实践,确保你能获得更系统、更实战、更落地的大模型工程化能力,从容应对真实业务挑战。
在这里插入图片描述资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

01 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。希望这份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

图片

👇微信扫描下方二维码即可~

在这里插入图片描述
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

02 大模型学习书籍&文档

新手必备的权威大模型学习PDF书单来了!全是一系列由领域内的顶尖专家撰写的大模型技术的书籍和学习文档(电子版),从基础理论到实战应用,硬核到不行!
※(真免费,真有用,错过这次拍大腿!)

请添加图片描述

03 AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

图片

04 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

图片

05 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片
在这里插入图片描述

06 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)

图片


由于篇幅有限
只展示部分资料
并且还在持续更新中…

ps:微信扫描即可获取
加上后我将逐一发送资料
与志同道合者共勉
真诚无偿分享!!!
在这里插入图片描述
最后,祝大家学习顺利,抓住机遇,共创美好未来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值