智能体开发实战:构建高效记忆系统,解决LLM上下文遗忘难题
30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度最近在尝试构建一个能处理复杂任务的智能体时发现它经常“健忘”——无法连贯地处理多轮对话或者在执行长链条任务时丢失关键上下文。这让我意识到一个没有良好记忆系统的智能体就像一台内存不足的电脑能力再强也发挥不出来。本文将深入探讨智能体的“大脑”——内存架构从核心概念到主流实现方案为你拆解如何为智能体构建一个高效、持久的记忆系统。无论你是刚接触智能体开发的新手还是希望优化现有智能体性能的开发者都能从本文中找到从理论到实践的完整路径。1. 智能体与内存架构为什么“记忆”如此重要在人工智能领域智能体Agent通常指能够感知环境、进行决策并执行行动以实现目标的自主实体。它不仅仅是调用大语言模型LLM的简单接口而是一个具备规划、工具使用、记忆和反思等核心能力的系统。你可以把它想象成一个数字员工它需要理解任务、制定计划、使用工具如搜索、计算、调用API并从过去的经验中学习。而内存Memory正是这个数字员工的工作笔记和长期经验库。它是智能体实现连贯性、上下文感知和持续学习的基础。一个没有内存的智能体每次交互都是孤立的它无法记住你的名字、之前的对话内容也无法从错误中吸取教训其能力上限将大打折扣。1.1 智能体记忆的核心价值为什么我们需要专门为智能体设计内存架构主要解决以下几个关键问题维持对话连贯性在客服、陪伴型聊天机器人等场景中智能体需要记住用户的历史偏好、之前的提问和回答才能进行自然流畅的多轮对话。支持复杂任务分解与执行对于“帮我分析上季度销售数据并生成报告”这类复杂任务智能体需要将任务分解为多个步骤获取数据、清洗、分析、撰写并在执行过程中记住每个步骤的输入、输出和中间状态。实现持续学习与个性化通过记忆用户的反馈和行为模式智能体可以逐渐调整其策略提供更个性化的服务。例如一个学习助手会记住用户哪些知识点掌握得不好后续进行重点强化。促进反思与优化高级智能体具备“反思”能力它会回顾过去的行动和结果分析成功或失败的原因并将这些经验存入记忆用于优化未来的决策。1.2 常见的内存类型根据信息的生命周期和使用方式智能体的内存通常被分为几种类型对话记忆Conversation Memory存储当前会话的历史消息。这是最基本的内存形式通常以列表或缓冲区的形式存在有长度限制受模型上下文窗口约束。短期记忆/缓冲记忆Buffer Memory类似于对话记忆但更强调对近期关键信息的快速存取用于维持当前任务流的上下文。长期记忆Long-term Memory用于存储需要持久化、超越单次会话的信息。这通常需要外部存储如向量数据库、关系型数据库的支持。实体记忆Entity Memory专门用于记忆对话中出现的实体如人、地点、事件及其相关事实和属性。摘要记忆Summary Memory一种优化策略。当对话历史过长时智能体可以自动生成历史摘要并将摘要而非原始冗长的历史存入记忆以节省上下文空间。理解了“为什么需要”和“有哪些类型”之后我们就可以开始动手看看如何在实际的智能体框架中实现这些记忆能力。2. 环境准备与核心工具在开始构建内存系统之前我们需要搭建一个基础的开发环境。本文将以目前最流行的智能体开发框架之一LangChain及其 Python 版本为例进行讲解因为其设计清晰地体现了内存架构的各个组件。其他框架如LlamaIndex、Semantic Kernel或低代码平台Dify、Coze在理念上相通但实现细节不同。2.1 基础环境配置首先确保你有一个可用的 Python 环境推荐 3.8 及以上版本。创建并激活虚拟环境推荐# 创建虚拟环境 python -m venv venv_agent_memory # 激活虚拟环境 # Windows: venv_agent_memory\Scripts\activate # Linux/Mac: source venv_agent_memory/bin/activate安装核心库 我们将安装langchain及其与 OpenAI 模型交互的库。同时为了演示长期记忆我们还需要一个向量数据库这里选择轻量级的Chroma。pip install langchain langchain-openai langchain-community pip install chromadb # 用于向量存储的长期记忆 pip install tiktoken # 用于计算Token辅助记忆管理配置 API 密钥 本文示例将使用 OpenAI 的模型如 gpt-3.5-turbo。你需要在环境变量中设置你的 API Key。# 在命令行中临时设置或写入系统环境变量 export OPENAI_API_KEYyour-api-key-here # Windows (PowerShell): $env:OPENAI_API_KEYyour-api-key-here在你的 Python 代码中也可以通过os.environ设置。2.2 项目结构示意一个典型的智能体项目可能包含以下结构内存模块是其中的核心组成部分agent_memory_project/ ├── main.py # 主程序入口 ├── memory/ # 内存相关模块 │ ├── __init__.py │ ├── short_term.py # 短期记忆实现 │ ├── long_term.py # 长期记忆向量存储实现 │ └── manager.py # 内存管理器协调不同类型记忆 ├── tools/ # 智能体可用的工具定义 │ └── __init__.py ├── agents/ # 智能体定义 │ └── __init__.py └── config.py # 配置文件API密钥等接下来我们将从最简单的记忆类型开始逐步构建起完整的内存系统。3. 核心内存组件详解与实现LangChain 提供了丰富的内存类我们可以直接使用或基于它们进行定制。理解这些组件的原理是设计高效内存架构的关键。3.1 对话记忆与缓冲记忆维持会话上下文这是最直接的内存。ConversationBufferMemory会原样保存所有的对话历史。# 文件memory/short_term.py from langchain.memory import ConversationBufferMemory # 创建一个简单的对话缓冲记忆 simple_memory ConversationBufferMemory() # memory 对象有 chat_memory 属性它是一个 ChatMessageHistory 对象 # 我们可以添加消息 simple_memory.chat_memory.add_user_message(你好我叫小明。) simple_memory.chat_memory.add_ai_message(你好小明很高兴认识你。) simple_memory.chat_memory.add_user_message(我的爱好是编程。) # 从记忆中加载变量通常是对话历史 # memory_variables 返回需要加载的变量名列表默认是 [“history”] # load_memory_variables 返回一个字典包含变量名和其值 context simple_memory.load_memory_variables({}) print(context[“history”]) # 输出Human: 你好我叫小明。\nAI: 你好小明很高兴认识你。\nHuman: 我的爱好是编程。关键点add_user_message和add_ai_message用于向记忆中添加消息。load_memory_variables是核心方法它被智能体在生成回复前调用用于获取当前的上下文。缺点历史会无限增长最终会超出LLM的上下文长度限制导致无法处理或API调用成本剧增。为了解决长度问题可以使用ConversationBufferWindowMemory它只保留最近 K 轮对话。from langchain.memory import ConversationBufferWindowMemory # 只保留最近2轮对话的记忆 window_memory ConversationBufferWindowMemory(k2) window_memory.save_context({input: 第一轮问题}, {output: 第一轮回答}) window_memory.save_context({input: 第二轮问题}, {output: 第二轮回答}) window_memory.save_context({input: 第三轮问题}, {output: 第三轮回答}) print(window_memory.load_memory_variables({})[“history”]) # 输出Human: 第二轮问题\nAI: 第二轮回答\nHuman: 第三轮问题\nAI: 第三轮回答 # 第一轮对话已经被“遗忘”移出窗口save_context是另一种添加记忆的方式它接收一个输入字典和一个输出字典通常更便于与链Chain集成。3.2 摘要记忆压缩历史突破长度限制当对话非常长时ConversationSummaryMemory是一个优雅的解决方案。它利用LLM的能力定期将历史对话总结成一段精炼的文字。from langchain.memory import ConversationSummaryMemory from langchain_openai import ChatOpenAI llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0) summary_memory ConversationSummaryMemory(llmllm, return_messagesTrue) # 模拟一段较长的对话 for i in range(5): summary_memory.save_context( {input: f用户第{i}次提问内容是关于某个技术话题的讨论。}, {output: fAI给出了第{i}次详细的解答和建议。} ) # 查看当前的记忆此时可能已经触发了一次或多次摘要 current_memory summary_memory.load_memory_variables({}) print(“当前记忆内容:”, current_memory[“history”]) # 输出可能是一段摘要例如“用户和AI进行了五轮关于技术话题的讨论AI提供了多次解答和建议。”工作原理内存对象内部会维护原始对话历史和当前的摘要。当新的对话加入时它会判断当前文本长度。如果长度超过预设阈值它会将“当前摘要 新对话”提交给LLM生成一个新的、更全面的摘要。后续的load_memory_variables返回的就是这个最新的摘要而非全部历史。优点极大地节省了上下文空间使智能体能够处理超长对话。缺点摘要过程会丢失细节信息且每次摘要都需要调用LLM产生额外成本。3.3 实体记忆结构化记住关键信息ConversationEntityMemory尝试从对话中提取实体人物、地点、组织等及相关信息并以结构化的方式存储。from langchain.memory import ConversationEntityMemory from langchain_openai import ChatOpenAI llm ChatOpenAI(temperature0) entity_memory ConversationEntityMemory(llmllm) # 模拟对话提及实体 entity_memory.save_context({input: 张三就职于阿里巴巴是一名工程师。}, {output: 明白了张三在阿里做工程师。}) entity_memory.save_context({input: 李四喜欢在星巴克看书。}, {output: 好的李四常在星巴克阅读。}) entity_memory.save_context({input: 那张三的技术方向是什么}, {output: 根据之前的对话张三是一名工程师但未提及具体技术方向。}) # 加载记忆它会包含历史对话和提取的实体信息 context entity_memory.load_memory_variables({“input”: “张三的技术方向是什么”}) print(“对话历史:”, context[“history”]) print(“\n实体记忆:”, context[“entities”]) # 实体记忆可能输出一个结构化的文本如“张三: 张三就职于阿里巴巴是一名工程师。\n李四: 李四喜欢在星巴克看书。”这种记忆使得智能体能够更精准地回答关于特定实体的问题但它依赖于LLM的实体识别和关系抽取能力精度可能不稳定。4. 构建长期记忆系统向量数据库的集成短期记忆和摘要记忆主要服务于单次会话或有限窗口。要实现真正的“长期”记忆让智能体记住几天前、几周前甚至更早的信息并能在需要时准确回忆我们必须引入外部存储。向量数据库是目前最主流的选择。4.1 为什么是向量数据库LLM 理解文本的语义而非精确的关键词。向量数据库将文本记忆片段转换为高维向量嵌入并存储起来。当需要回忆时将当前问题也转换为向量然后在数据库中搜索与之“语义最相似”的向量所对应的文本。这个过程被称为检索增强生成Retrieval-Augmented Generation, RAG在记忆场景中就是“检索增强记忆”。4.2 使用 Chroma 实现长期记忆我们以Chroma这个轻量级向量数据库为例结合 LangChain 的VectorStoreRetrieverMemory来构建长期记忆。# 文件memory/long_term.py import os from langchain.memory import VectorStoreRetrieverMemory from langchain_chroma import Chroma from langchain_openai import OpenAIEmbeddings from langchain.docstore import InMemoryDocstore from langchain.schema import Document # 1. 初始化嵌入模型和向量库 embeddings_model OpenAIEmbeddings(model“text-embedding-3-small”) # 创建 Chroma 向量库并指定嵌入函数。persist_directory 可将数据持久化到磁盘。 vectorstore Chroma( embedding_functionembeddings_model, collection_name“agent_long_term_memory”, persist_directory“./chroma_db” # 数据保存目录 ) # 2. 创建检索器设置返回的最相似记忆条数 retriever vectorstore.as_retriever(search_kwargs{“k”: 3}) # 返回3条最相关的记忆 # 3. 用检索器创建 VectorStoreRetrieverMemory long_term_memory VectorStoreRetrieverMemory(retrieverretriever) # 4. 保存一些记忆通常由智能体在运行过程中自动完成 # 记忆内容应以清晰、独立的事实或事件为单位 memory_docs [ “2024年5月10日用户表示他最喜欢的编程语言是Python。”, “2024年5月11日用户完成了‘智能体入门’项目使用了LangChain框架。”, “用户养了一只名叫‘豆包’的猫品种是英短。”, “用户的生日是1990年8月15日。”, ] # 将文本转换为 Document 对象并添加到向量库 docs [Document(page_contenttext) for text in memory_docs] vectorstore.add_documents(docs) # 5. 模拟智能体在需要时回忆 # 假设当前用户输入是“我之前跟你提过我的宠物吗” current_input “我之前跟你提过我的宠物吗” # 从长期记忆中检索相关记忆 relevant_memories long_term_memory.load_memory_variables({“prompt”: current_input})[“history”] print(“检索到的相关长期记忆”) print(relevant_memories) # 输出可能包含“用户养了一只名叫‘豆包’的猫品种是英短。”关键解释嵌入EmbeddingOpenAIEmbeddings将文本转换为向量。这是语义搜索的基础。向量库VectorstoreChroma存储这些向量和对应的原始文本。检索器Retriever定义了如何从向量库中搜索如基于余弦相似度。记忆保存智能体在运行中可以将重要的信息如用户确认的事实、任务结果摘要通过save_context或直接向向量库add_documents的方式存入长期记忆。记忆回忆当智能体处理新输入时load_memory_variables方法会利用检索器根据当前输入语义查找最相关的几条历史记忆并将其作为上下文的一部分提供给LLM。5. 综合实战构建一个具备多层记忆的对话智能体现在我们将短期记忆缓冲窗口和长期记忆向量存储组合起来创建一个更强大的智能体。这个智能体能够记住最近几轮对话短期。从“知识库”中回忆相关的长期事实。综合两者信息来生成回复。5.1 设计组合记忆管理器我们将创建一个CombinedMemory类来管理多种记忆源。这里使用 LangChain 提供的CombinedMemory简化操作。# 文件memory/manager.py from langchain.memory import ConversationBufferWindowMemory, VectorStoreRetrieverMemory, CombinedMemory from langchain_chroma import Chroma from langchain_openai import OpenAIEmbeddings def create_combined_memory(vector_store_persist_dir“./chroma_db”, window_size3, k_memories5): “”” 创建一个组合记忆系统。 参数 vector_store_persist_dir: 向量数据库持久化目录 window_size: 对话缓冲窗口大小 k_memories: 从长期记忆中检索的数量 “”” # 1. 初始化嵌入和向量库长期记忆 embeddings OpenAIEmbeddings() vectorstore Chroma( embedding_functionembeddings, persist_directoryvector_store_persist_dir, collection_name“agent_lt_memory” ) retriever vectorstore.as_retriever(search_kwargs{“k”: k_memories}) long_term_memory VectorStoreRetrieverMemory( retrieverretriever, memory_key“long_term_history” # 在上下文中该记忆的变量名 ) # 2. 初始化短期记忆对话窗口 short_term_memory ConversationBufferWindowMemory( kwindow_size, memory_key“short_term_history”, # 在上下文中该记忆的变量名 input_key“human_input” # 指定输入键与链的输入变量匹配 ) # 3. 组合记忆 combined_memory CombinedMemory(memories[short_term_memory, long_term_memory]) return combined_memory, vectorstore # 注意为了将记忆集成到链Chain中我们需要知道所有记忆提供的变量名。 # memory_variables 属性会列出它们。 def get_memory_variables(memory_obj): return memory_obj.memory_variables5.2 创建智能体链并集成记忆我们将使用LLMChain作为智能体的核心推理引擎并将组合记忆注入其中。# 文件main.py import os from langchain.prompts import PromptTemplate from langchain.chains import LLMChain from langchain_openai import ChatOpenAI from memory.manager import create_combined_memory # 设置API密钥 os.environ[“OPENAI_API_KEY”] “your-api-key” def main(): # 1. 初始化LLM llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0.7) # 2. 创建组合记忆 combined_memory, vectorstore create_combined_memory() # 3. 设计提示词模板包含记忆变量占位符 prompt_template “”” 你是一个有帮助的、拥有记忆的AI助手。 以下是相关的背景信息 [长期记忆 - 关于用户的已知事实] {long_term_history} [最近的对话历史] {short_term_history} 基于以上信息请回答人类的最新问题。 人类{human_input} 助手“”” prompt PromptTemplate( input_variables[“long_term_history”, “short_term_history”, “human_input”], templateprompt_template ) # 4. 创建链并绑定记忆 # 记忆的 load_memory_variables 方法会自动填充 long_term_history 和 short_term_history conversation_chain LLMChain( llmllm, promptprompt, memorycombined_memory, verboseTrue # 开启详细日志方便观察记忆的加载 ) # 5. 模拟对话 print(“ 智能体对话开始 输入 ‘quit’ 退出\n”) # 首先可以预加载一些长期记忆到向量库模拟之前已经记住的信息 preload_memories [ “用户最喜欢的颜色是蓝色。”, “用户是一名软件开发者主要使用Python和Java。”, “用户希望学习关于机器学习的内容。” ] from langchain.schema import Document vectorstore.add_documents([Document(page_contentm) for m in preload_memories]) while True: human_input input(“Human: “) if human_input.lower() ‘quit’: print(“对话结束。”) # 可选持久化向量库 vectorstore.persist() break # 运行链获取回复 response conversation_chain.run(human_inputhuman_input) print(f”Assistant: {response}\n”) # 注意LLMChain 的 run 方法会自动调用记忆的 save_context # 将本轮对话的 {human_input} 和 {response} 保存到短期记忆缓冲窗口。 # 如果需要将某些信息存入长期记忆需要额外的逻辑见下文。 if __name__ “__main__”: main()5.3 运行与验证运行main.py开始对话。由于开启了verboseTrue你会在控制台看到类似以下日志清晰地展示了记忆的加载过程 Entering new LLMChain chain... Prompt after formatting: 你是一个有帮助的、拥有记忆的AI助手。 以下是相关的背景信息 [长期记忆 - 关于用户的已知事实] 用户最喜欢的颜色是蓝色。 用户是一名软件开发者主要使用Python和Java。 [最近的对话历史] Human: 你好 AI: 你好有什么可以帮你的吗 基于以上信息请回答人类的最新问题。 人类你能推荐一些学习资源吗 助手 Finished chain. Assistant: 当然可以既然您是一名使用Python和Java的软件开发者并且对机器学习感兴趣我推荐您可以先从Coursera上吴恩达老师的《机器学习》课程开始这门课使用Python和Matlab。另外对于Java开发者可以看看Weka这个机器学习库的相关教程。需要更具体的资源吗从日志中可以看到长期记忆和短期记忆都被成功加载并插入了提示词中智能体的回复结合了这两方面的信息。5.4 实现记忆的主动沉淀上面的例子中长期记忆是预加载的。在实际应用中我们需要智能体在对话过程中自主判断哪些信息值得存入长期记忆。这通常需要一个“记忆沉淀”策略。一个简单的策略是当用户明确陈述关于自身的客观事实或智能体完成一个重要任务时触发沉淀。# 文件memory/manager.py (新增函数) def save_to_long_term_memory(vectorstore, memory_text, metadataNone): “””将一段文本存储到长期记忆向量库中。“”” from langchain.schema import Document doc Document(page_contentmemory_text, metadatametadata or {}) vectorstore.add_documents([doc]) print(f”[长期记忆已更新]{memory_text}”) # 在 main.py 的对话循环中可以添加判断逻辑 # 例如检测用户输入是否包含“记住”、“我的XX是”等模式 import re def should_save_to_long_term(user_input, ai_response): # 这是一个非常简单的启发式规则实际应用需要更复杂的NLP判断或让LLM自己决定 patterns [r”记住(?:我)?(.*)是(.*)”, r”我的(爱好|名字|职业)是(.*)”] for pattern in patterns: if re.search(pattern, user_input): return True # 或者可以调用另一个LLM来判断这句话是否包含值得长期记忆的客观事实 return False # 在对话循环中 response conversation_chain.run(human_inputhuman_input) print(f”Assistant: {response}\n”) if should_save_to_long_term(human_input, response): # 将用户输入或提炼后的信息存入长期记忆 save_to_long_term_memory(vectorstore, f”用户提到{human_input}”)更高级的方案是训练一个分类器或设计提示词让LLM在生成回复的同时也输出一个“是否应存入长期记忆”的判断以及“记忆摘要”。6. 常见问题与排查思路在实现智能体内存架构时你可能会遇到以下典型问题问题现象可能原因排查思路与解决方案智能体“忘记”了刚才的对话1. 记忆对象未正确绑定到链Chain。2. 使用了ConversationBufferWindowMemory且窗口大小k设置过小。3. 记忆的input_key和output_key与链的变量名不匹配。1. 检查创建链时是否传入了memory参数。2. 检查k值或换用ConversationBufferMemory测试。3. 开启verboseTrue查看链的输入确认记忆变量是否被正确加载。长期记忆检索不到相关内容1. 向量数据库中没有数据。2. 检索器返回数量k设置太小。3. 嵌入模型不匹配或文本分块不合理。4. 查询文本与存储文本语义差异太大。1. 确认add_documents操作成功执行。2. 增大search_kwargs{“k”: N}中的 N。3. 确保存储和查询使用相同的嵌入模型。检查文本分块大小过长的文本可能包含太多噪声。4. 尝试用更接近的表述进行查询。提示词报错变量未定义提示词模板中声明的input_variables与记忆提供的memory_variables不一致。1. 打印combined_memory.memory_variables查看记忆提供的变量名列表。2. 确保提示词模板的input_variables包含所有这些变量名。API调用成本过高或响应慢1.ConversationSummaryMemory频繁调用LLM生成摘要。2. 长期记忆检索时向量搜索范围过大或嵌入模型调用昂贵。3. 对话历史过长导致每次请求的Token数剧增。1. 调整摘要记忆的触发阈值或换用窗口记忆。2. 为向量检索设置合理的k值考虑使用本地嵌入模型如sentence-transformers。3. 使用摘要记忆或更小的窗口记忆来限制上下文长度。记忆混淆或给出错误信息1. 长期记忆向量检索到了相似但不相关的信息。2. 不同记忆源的信息发生冲突。1. 改进检索策略如使用MMR(最大边际相关性) 来平衡相关性和多样性或为记忆添加元数据时间戳、来源进行过滤。2. 在提示词中明确优先级例如“以最近对话为准”或“如果长期记忆与短期冲突请询问用户确认”。7. 最佳实践与工程建议设计一个健壮、高效的智能体内存系统远不止调用几个API。以下是一些关键的工程实践记忆的粒度与分块存入长期记忆时不要存入整段冗长的对话。应该将信息提炼成独立的、原子性的事实或事件片段例如“用户于2024-05-20购买了产品A”。使用文本分块Chunking策略确保每个记忆块大小适中如100-500字符包含完整的语义单元。记忆的元数据为每条记忆附加元数据metadata如时间戳timestamp、记忆类型type:fact,preference,event、来源会话IDsession_id、置信度confidence等。这能极大提升记忆检索的精度和灵活性。例如你可以让检索器只查找type为fact且最近一个月内的记忆。记忆的更新与失效记忆不是只增不减的。用户的信息会变“我搬家了”偏好会变“我现在不喜欢蓝色了”。实现记忆的更新机制可以为新记忆分配更高权重或在检索后对冲突信息进行逻辑判断。更复杂的方案是引入记忆版本管理或软删除。分层记忆架构如本文示例采用短期记忆窗口/缓冲 长期记忆向量存储的分层架构是通用且有效的。还可以考虑加入超长期记忆将极其重要或验证过的信息存入更稳定但检索稍慢的数据库如SQLite/PostgreSQL向量库则存放更大量、更动态的记忆。安全性、隐私与伦理敏感信息绝对避免将密码、密钥、个人身份信息PII等原始数据存入记忆。如需存储必须进行脱敏或加密处理。用户授权明确告知用户哪些信息会被记忆并提供“忘记我”或管理记忆的选项。记忆偏差智能体可能从错误的记忆或冲突的信息中推导出错误结论。需要在系统设计中加入不确定性处理和用户确认机制。性能优化缓存对频繁检索的长期记忆结果进行缓存。异步操作记忆的保存尤其是写入向量库可以是异步的不阻塞主对话流程。本地模型在生产环境中考虑使用本地嵌入模型如all-MiniLM-L6-v2以减少API依赖和成本。智能体的内存架构是其智能化的基石。从简单的对话缓冲到复杂的、基于向量数据库的长期语义记忆每一步都让智能体更接近一个真正能理解、能学习、能成长的数字伙伴。本文为你搭建了一个从理论到实践的完整框架但每个具体的应用场景都需要你在此基础上进行精心调优和设计。记住没有“最好”的内存架构只有“最适合”你业务需求的架构。下一步你可以探索更高级的主题如记忆的主动反思与压缩、多智能体间的共享记忆、以及如何利用记忆进行持续的策略学习在线学习这将让你的智能体真正拥有“经验”和“智慧”。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度