尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

构建具备记忆与进化能力的AI Agent:MemOS系统设计与工程实践

构建具备记忆与进化能力的AI Agent:MemOS系统设计与工程实践 1. 项目概述当AI助手拥有了“记忆”与“进化”能力最近在折腾一个挺有意思的项目我把它叫做“给WorkBuddy装上记忆操作系统”。简单来说就是让这个原本需要你一步步手把手教它做事的AI助手变得能记住过去的对话、任务和结果并且能基于这些“记忆”自己分析、总结甚至主动去编写新的“Skill”技能来优化自己的工作流程。这听起来有点像科幻片里的情节但用现有的技术栈拼凑一下还真能跑起来。WorkBuddy本身是一个基于大语言模型LLM的AI Agent框架你可以把它理解成一个数字员工。它很聪明能理解你的指令调用各种工具比如查天气、发邮件、分析数据来完成你交代的任务。但它的“聪明”是瞬时的、无状态的。每次对话都像初次见面它不记得上次你让它怎么处理Excel报表的更不会主动说“老板我发现你每周五都要生成销售周报我写了个自动脚本下次一键就能搞定。” 这就是传统AI Agent的局限缺乏持续的学习和进化能力。而“记忆操作系统”MemOS就是为了解决这个问题。它不是某个具体的软件而是一套设计理念和实现模式的组合。核心是赋予AI Agent一个结构化的、可查询的、能推理的长期记忆库。当WorkBuddy拥有了MemOS它就不再是一个单纯的指令执行者而是一个能积累经验、自我优化的智能体。它会开始“自己写Skill”——也就是当它发现某个重复性任务模式时能自动生成或建议生成一段可复用的代码或工作流它会“自己进化”——基于历史成功和失败的案例调整自己的决策逻辑和工具调用策略。这个项目的价值对于任何想深度应用AI自动化的人来说都是巨大的。无论是想打造一个7x24小时在线的智能客服、一个能自主分析数据并给出洞察的商业分析师还是一个能管理你整个项目进度的虚拟PM一个拥有记忆和进化能力的Agent才是真正能解放你双手、甚至替你思考的伙伴。它让自动化从“执行预设脚本”升级到了“理解业务并持续优化”的层面。2. 核心思路拆解MemOS如何让AI Agent“活”起来要实现“记忆”和“进化”我们不能简单地把所有聊天记录存进数据库。那只是日志不是记忆。记忆需要被结构化、索引化并且能被AI有效地检索和利用来进行推理。我的设计思路主要围绕以下几个核心模块展开。2.1 记忆的层次化存储与向量化检索记忆不能是“一锅粥”。我参考了人类记忆的一些特点将MemOS的记忆分为几个层次情景记忆Episodic Memory这是最基础的记录每一次交互的原始信息。包括用户查询、Agent的思考过程Chain-of-Thought、执行的动作调用了哪个Skill、传入了什么参数、执行结果成功/失败、输出内容。这部分以结构化的JSON格式存储包含时间戳、会话ID等元数据。语义记忆Semantic Memory这是从情景记忆中提炼出的“知识”。例如从多次“帮我总结上周销售数据”的任务中提取出“用户‘我’经常需要‘销售数据’的‘周报’格式偏好是‘PPT摘要’”。这些知识被转换成简短的文本描述称为“记忆片段”并进行向量化嵌入Embedding存入向量数据库如Chroma、Pinecone或本地运行的Qdrant。程序性记忆Procedural Memory这是记忆系统的“皇冠”也是“自己写Skill”的基础。它存储的是被验证有效的任务执行模式或Skill模板。当Agent发现某个任务序列一系列工具调用和逻辑判断被频繁使用且成功率高它就可以将这个模式抽象、固化下来形成一个可复用的新Skill的蓝图。向量化检索是关键。当新的用户任务到来时WorkBuddy不仅理解当前指令还会将指令转换为向量去语义记忆库中搜索相关的历史记忆片段。比如用户说“看看我们上个月的业绩怎么样”系统可能会检索出“用户曾要求生成‘月度销售报告’并附有‘图表分析’”的记忆。这些相关的记忆会作为上下文与当前指令一起喂给LLM让LLM做出更精准、更个性化的响应。这就好比一个老员工能基于过去的经验立刻理解老板的潜台词。2.2 Skill的自动化生成与演化机制这是“进化”的核心体现。Skill在WorkBuddy中通常是一段代码Python函数或一个配置化的工作流描述它封装了一个特定的能力。MemOS驱动Skill自动化生成主要基于两种触发机制模式识别触发MemOS持续分析情景记忆通过一个轻量级的模式分析模块可以基于规则或另一个小模型来识别高频、高成功率的任务序列。例如连续三天用户都在上午9点发出“获取A产品昨日销售额并与前日对比结果发我邮箱”的指令且Agent都成功完成了。系统就会标记这个任务序列为一个候选模式。用户反馈触发用户可以直接说“这个操作以后经常用保存成一个快捷技能吧”或者在对Agent的结果表示高度满意时通过点赞或正面评价系统也会触发Skill生成流程。一旦触发流程如下抽象与描述LLM会分析这个任务序列为其生成一个清晰、通用的功能描述、输入参数定义和预期输出。例如将上述序列抽象为技能“对比指定产品相邻两日的销售额并通过邮件发送对比结果”。代码/配置生成LLM根据框架的Skill模板和已有的类似Skill示例尝试生成实现该功能的新Skill代码或工作流配置。这里非常依赖高质量的提示工程Prompt Engineering需要详细定义Skill的接口规范、可用的工具库、错误处理逻辑等。安全沙盒验证生成的Skill代码不会直接投入使用。它会被放入一个安全的沙盒环境如Docker容器或受限的Python环境中用历史数据或模拟数据进行试运行。验证其功能性、安全性有无危险操作和稳定性。审核与入库验证通过的Skill可以设置为“自动启用”或提交给用户开发者进行最终审核。审核后新的Skill被正式注册到WorkBuddy的技能库中后续可以被直接调用甚至被其他Skill组合使用。演化则体现在Skill的版本迭代上。MemOS会记录每个Skill被调用时的性能数据成功率、耗时、用户满意度。当某个Skill的失败率上升或出现了更优的执行模式由另一个Agent探索发现系统可以提示甚至自动生成该Skill的优化版本进入新一轮的验证和更新流程。2.3 与LLM的协同工作流设计MemOS并非取代LLM而是赋能LLM。整个系统的工作流可以概括为“感知-记忆-推理-行动-学习”的循环感知用户输入任务。记忆检索任务文本被向量化从语义记忆库中检索出N条最相关的历史记忆片段。同时查询程序性记忆库看是否有现成的Skill可以直接或修改后使用。增强推理将用户任务、检索到的相关记忆、以及可用的Skill列表作为上下文一同提交给LLM。此时的LLM扮演“决策大脑”的角色它的提示词Prompt大概是“这是当前任务。这是过去相关的经验。这是你现有的技能。请规划你的行动步骤考虑是否要复用、修改旧技能或创建新技能。”行动与记录LLM给出行动计划包括调用哪个Skill、传入什么参数或者生成新Skill的草案。WorkBuddy执行该计划并将完整的“情景”任务、思考、行动、结果记录到情景记忆库。学习与提炼异步地记忆处理模块会分析新增的情景记忆判断是否需要提炼新的语义记忆片段或触发Skill生成/优化流程。这个循环使得Agent的能力像滚雪球一样增长。最初它可能只会几个基础技能但随着交互的深入它的技能库会越来越丰富处理问题的能力也越来越精准和高效。注意让AI自己写代码并执行安全是头等大事。必须实施严格的沙盒环境对生成的Skill代码进行静态安全检查禁止导入危险模块、访问敏感路径等和动态行为监控。同时重要的Skill生成或修改操作强烈建议保留“人工审核”环节尤其是在生产环境中。3. 关键技术选型与核心模块实现纸上谈兵终觉浅我们来聊聊具体怎么搭。下面是我在原型实现中采用的技术栈和关键模块的构建思路你可以根据自己的环境调整。3.1 记忆存储层的技术选型记忆存储需要同时满足结构化存储情景记忆、高性能向量检索语义记忆和快速键值查询程序性记忆索引的需求。单一数据库很难完美胜任我采用了混合存储方案。情景记忆库选用PostgreSQL。原因在于其强大的JSONB字段支持可以灵活地存储每次交互的复杂嵌套结构同时支持丰富的查询和聚合分析便于后续的模式挖掘。表结构大致如下CREATE TABLE episodic_memories ( id BIGSERIAL PRIMARY KEY, session_id VARCHAR(255), user_query TEXT, agent_thought TEXT, -- LLM的思考链 action_taken JSONB, -- 调用的技能和参数 result TEXT, success BOOLEAN, user_feedback INT, -- 用户反馈分数 timestamp TIMESTAMPTZ DEFAULT NOW(), metadata JSONB -- 其他自定义标签 );使用JSONB字段存储action_taken和metadata既能保持结构又便于扩展。语义记忆向量库选用ChromaDB。它轻量、易用可以本地部署并且与LangChain等AI应用开发框架集成良好。我们将从情景记忆中提炼出的“记忆片段”文本通过嵌入模型如text-embedding-3-small转换为向量存入Chroma。每个向量记录关联回原始情景记忆的ID。实操心得记忆片段的提炼质量至关重要。直接存储整段对话效果很差。我用的提示词是“请将以下对话和操作提炼成一条简洁的、可用于未来参考的经验知识突出用户的核心意图、使用到的关键工具和成功的关键点。只输出提炼后的文本。” 例如将一段关于生成销售周报的对话提炼成“用户需要每周五的销售数据周报偏好包含环比柱状图和TOP5商品列表输出格式为Markdown。”程序性记忆与Skill元数据这部分使用PostgreSQL的另一张表来管理因为需要频繁的精确查询和版本管理。CREATE TABLE skills ( id VARCHAR(50) PRIMARY KEY, -- 技能ID如generate_sales_report name VARCHAR(100), description TEXT, -- 功能描述 code_hash VARCHAR(64), -- 代码内容的哈希值用于快速判断变更 version INT DEFAULT 1, is_auto_generated BOOLEAN DEFAULT FALSE, performance_metrics JSONB, -- 平均耗时、成功率等 created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() );实际的Skill代码文件则存储在文件系统或Git仓库中通过id和version来关联。3.2 记忆处理与检索链的构建这是MemOS的“大脑”部分我使用LangChain来编排整个流程因为它提供了丰富的链Chain和智能体Agent组件。记忆检索器Memory Retriever这是一个自定义的LangChain Retriever。当新查询到来时它执行以下操作将查询文本向量化。查询ChromaDB获取前k个最相关的语义记忆片段。根据这些片段关联的episodic_memories.id从PostgreSQL中取出完整的情景记忆作为“详述”。同时在skills表中查询技能描述与当前查询相关的技能可通过简单的文本相似度或关键词匹配。将检索到的“语义记忆片段”、“相关情景记忆详述”和“相关技能列表”打包成一个格式化的上下文字符串。增强型Agent执行器在标准的WorkBuddy Agent执行循环前插入记忆检索步骤。伪代码逻辑如下from langchain.agents import AgentExecutor from langchain.memory import ConversationBufferMemory class MemOSEnhancedAgentExecutor: def __init__(self, agent, tools, memory_retriever, llm): self.agent_executor AgentExecutor.from_agent_and_tools(...) self.memory_retriever memory_retriever self.llm llm self.conversation_memory ConversationBufferMemory() # 用于短期会话记忆 def run(self, user_input): # 1. 检索长期记忆 relevant_memories self.memory_retriever.get_relevant_documents(user_input) # 2. 构建增强提示 enhanced_prompt f 你是一个有经验的AI助手。以下是你过去的相关经验 {relevant_memories} 当前对话历史 {self.conversation_memory.load_memory_variables({})} 当前用户请求{user_input} 请根据你的经验和现有技能思考如何最好地完成请求。 # 3. 将增强提示传给Agent执行 result self.agent_executor.run(enhanced_prompt) # 4. 记录本次交互到情景记忆库 self._save_to_episodic_memory(user_input, enhanced_prompt, result) # 5. 更新会话记忆 self.conversation_memory.save_context(...) return result3.3 Skill自动化生成模块的实现这个模块相对独立以后台任务或异步队列的形式运行。模式分析器定期扫描episodic_memories表。我的简化版实现是寻找在特定时间窗口内user_query经过向量化后相似度高于阈值、且successTrue的任务序列。更复杂的可以用时间序列分析或简单的聚类算法。Skill生成链当识别到候选模式后调用一个专用的LLM链我称之为SkillForgeChain来生成Skill。这个链的提示词非常详细包含了Skill的代码规范、输入输出示例、安全要求等。skill_generation_prompt 你是一个资深的AI技能开发专家。请根据以下成功的历史任务记录创建一个可复用的技能(Skill)。 任务模式描述{task_pattern_description} 成功执行示例JSON格式 {successful_examples} 请遵循以下规范 1. 技能名称使用蛇形命名法如 generate_weekly_report。 2. 功能描述一句话说明技能用途。 3. 输入参数明确的参数名、类型和说明。 4. 输出说明返回的数据类型和内容。 5. 代码实现使用Python编写只能使用预导入的安全工具库列表{allowed_libraries}。绝对禁止执行外部命令、访问网络或文件系统除非通过提供的安全工具。 6. 错误处理包含基本的异常捕获。 请直接输出JSON格式包含name, description, code三个字段。 沙盒验证生成代码后使用docker run --rm -v /tmp/code.py:/app/code.py python:3.9-slim python /app/code.py --test的方式在隔离容器中运行测试。测试数据来源于历史成功案例的输入参数。检查运行结果、是否有异常输出、是否有违规的系统调用可以通过Seccomp等Docker安全配置来限制。审核与集成验证通过的Skill其元数据存入skills表代码文件存入版本控制的技能目录。同时向WorkBuddy的技能发现系统发送一个刷新信号或者直接将新技能注册到工具列表中。4. 实战部署与核心配置详解理论和技术模块讲完了我们来点实际的。假设你已经有一个基础的WorkBuddy在运行下面是如何将MemOS集成进去的步骤和核心配置。4.1 环境准备与依赖安装首先确保你的基础环境。我用的是一台Ubuntu 22.04的云服务器但Docker化后基本与系统无关。# 1. 安装 Docker 和 Docker Compose # 2. 克隆你的WorkBuddy项目假设它是基于Python的 git clone your-workbuddy-repo cd workbuddy # 3. 创建并激活Python虚拟环境 python -m venv venv source venv/bin/activate # 4. 安装核心依赖。除了WorkBuddy原有依赖还需要 pip install langchain langchain-community langchain-openai # LLM应用框架 pip install chromadb pypgvector # 向量数据库和PostgreSQL向量扩展客户端 pip install psycopg2-binary # PostgreSQL驱动 pip install sentence-transformers # 用于本地嵌入模型可选如果不用OpenAI的Embedding API pip install docker # 用于Skill沙盒验证4.2 数据库与向量库初始化使用Docker Compose来一键启动PostgreSQL和ChromaDB服务。docker-compose.yml文件示例version: 3.8 services: postgres: image: pgvector/pgvector:pg16 container_name: memos-postgres environment: POSTGRES_USER: memos POSTGRES_PASSWORD: your_secure_password POSTGRES_DB: memos_db ports: - 5432:5432 volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化表结构 healthcheck: test: [CMD-SHELL, pg_isready -U memos] interval: 10s timeout: 5s retries: 5 chromadb: image: chromadb/chroma:latest container_name: memos-chroma ports: - 8000:8000 environment: - IS_PERSISTENTTRUE - PERSIST_DIRECTORY/chroma/data volumes: - chroma_data:/chroma/data depends_on: postgres: condition: service_healthy volumes: postgres_data: chroma_data:init.sql文件内容即前面提到的创建episodic_memories和skills表的SQL语句。启动服务docker-compose up -d4.3 MemOS核心服务集成在你的WorkBuddy主应用比如app/main.py中初始化MemOS组件并集成到Agent流程里。# app/memos/core.py import os from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_chroma import Chroma from langchain_postgres import PGVector from langchain.schema import Document from .memory_retriever import HybridMemoryRetriever # 假设我们实现了这个类 class MemOSCore: def __init__(self): # 初始化LLM和Embedding模型 self.llm ChatOpenAI(modelgpt-4-turbo-preview, temperature0.1, api_keyos.getenv(OPENAI_API_KEY)) self.embeddings OpenAIEmbeddings(modeltext-embedding-3-small, api_keyos.getenv(OPENAI_API_KEY)) # 连接Chroma语义记忆 self.vector_store Chroma( collection_namesemantic_memories, embedding_functionself.embeddings, persist_directory./chroma_db # 或者连接上面Docker服务的地址 ) # 连接PostgreSQL用于复杂查询和情景记忆 self.conn_string postgresql://memos:your_secure_passwordlocalhost:5432/memos_db # 初始化检索器 self.retriever HybridMemoryRetriever( vector_storeself.vector_store, conn_stringself.conn_string, embeddingsself.embeddings ) def retrieve_memories(self, query: str, k: int 5): 检索相关记忆 return self.retriever.get_relevant_documents(query, kk) def save_episodic_memory(self, session_data: dict): 保存一次交互的情景记忆 # 1. 存入PostgreSQL # ... 使用asyncpg或SQLAlchemy执行INSERT episodic_id insert_to_pg(session_data) # 2. 提炼并保存语义记忆 if session_data[success]: # 通常只从成功经验中提炼 summary self._summarize_memory(session_data) doc Document(page_contentsummary, metadata{episodic_id: episodic_id, timestamp: ...}) self.vector_store.add_documents([doc]) def _summarize_memory(self, data: dict) - str: 调用LLM提炼记忆片段 prompt f提炼以下任务经验用户说{data[user_query]}。你执行了{data[action]}。结果{data[result][:200]}...。请输出核心经验点。 response self.llm.invoke(prompt) return response.content然后在你的主Agent循环中调用它# app/main.py 的简化示例 from app.memos.core import MemOSCore memos MemOSCore() def handle_user_request(user_input, session_id): # 1. 检索长期记忆 relevant_memories memos.retrieve_memories(user_input) # 2. 构建增强的Agent输入 enhanced_input build_enhanced_prompt(user_input, relevant_memories) # 3. 调用原有的WorkBuddy Agent执行器 agent_response workbuddy_agent_executor.run(enhanced_input) # 4. 保存本次交互记忆 memos.save_episodic_memory({ session_id: session_id, user_query: user_input, action: agent_response.get(action_taken), result: agent_response.get(result), success: agent_response.get(success, True) }) return agent_response4.4 后台Skill生成服务的搭建这是一个独立的服务可以是用Celery、RQ实现的异步任务或者一个简单的定时脚本cron job。skill_forge_service.py示例import schedule import time from app.memos.core import MemOSCore from app.memos.skill_generator import SkillGenerator from app.memos.sandbox import SandboxValidator def job_detect_and_forge_skill(): print(开始检测任务模式并生成Skill...) # 1. 查询数据库检测高频成功模式 candidate_patterns detect_patterns_from_db() for pattern in candidate_patterns: # 2. 调用Skill生成链 generator SkillGenerator(llmmemos.llm) new_skill_draft generator.generate_skill(pattern) # 3. 沙盒验证 validator SandboxValidator() validation_result validator.validate_in_docker(new_skill_draft[code]) if validation_result[passed]: # 4. 保存Skill可先标记为“待审核” save_skill_to_db(new_skill_draft, statuspending_review) print(f新技能 {new_skill_draft[name]} 已生成并等待审核。) else: print(f技能 {new_skill_draft[name]} 验证失败: {validation_result[error]}) # 每6小时运行一次 schedule.every(6).hours.do(job_detect_and_forge_skill) if __name__ __main__: while True: schedule.run_pending() time.sleep(60)5. 避坑指南与性能调优实录在实际搭建和运行过程中我踩了不少坑也总结出一些让系统更稳定、更高效的经验。5.1 记忆泛滥与检索噪音控制最初版本运行几天后Agent的反应速度明显变慢而且回复开始变得“古怪”经常引用一些不相关的旧记忆。这就是“记忆泛滥”和“检索噪音”问题。问题所有成功的交互都被提炼成语义记忆导致向量库膨胀。检索时一些无关但向量相似度略高的记忆也被召回干扰了LLM的判断。解决方案记忆重要性评分不是所有记忆都平等。我为每条记忆引入了一个“重要性”权重因子。权重基于用户显式反馈点赞/点踩、任务执行的复杂度调用工具的数量和深度、任务结果的独特性是否首次成功解决某类问题。只有重要性高于阈值的记忆才会被提炼存储。记忆摘要与去重在提炼语义记忆时LLM的提示词要求它判断这条经验是否“具有普适性参考价值”。同时定期对向量库进行聚类合并内容高度相似的记忆片段只保留最具代表性的一条。检索结果重排序Rerank在向量检索返回Top-K个结果后引入一个轻量级的交叉编码器Cross-Encoder模型或基于规则的过滤器对结果进行二次重排序过滤掉相关性低的记忆。例如可以检查记忆片段中的关键实体如产品名、项目代号是否在当前查询中出现。设置记忆有效期TTL对于一些时效性很强的记忆如“昨天的服务器状态”可以设置一个过期时间到期后自动归档或降低其检索优先级。5.2 Skill生成的质量与安全问题让AI写代码最怕两件事一是生成没用的“垃圾”技能二是生成有安全隐患的“危险”技能。问题1生成无意义或脆弱的Skill。LLM有时会过度泛化或生成依赖特定上下文、无法独立运行的代码。解决提供高质量示例在Skill生成链的提示词中提供3-5个精心编写的Skill示例作为参考明确展示良好的代码结构、错误处理和文档字符串。强化测试沙盒验证不能只用一组数据。我构建了一个小型的“测试用例生成器”针对新Skill的功能描述自动生成3-5组边界测试用例如空输入、异常值一并验证。迭代生成采用“生成-评审-修正”的多轮模式。第一轮生成后让另一个LLM或同一LLM换角色以评审员身份检查代码的逻辑、健壮性和安全性提出修改意见再让生成器进行修正。通常一轮迭代就能大幅提升质量。问题2安全漏洞。生成的代码可能尝试执行os.system(rm -rf /)或访问内部网络资源。解决白名单机制在沙盒环境中严格限制可导入的Python模块。只允许使用一个预先审核过的安全工具库列表如datetime,json,math以及你自定义的安全工具包。系统级隔离Docker容器使用--read-only根文件系统禁用网络--network none并设置严格的Seccomp和AppArmor配置文件禁止危险的系统调用。静态代码分析在运行前用ast抽象语法树模块解析生成的代码检查是否有禁止的导入语句、函数调用或语法结构。人工审核网关对于所有自动生成的、或修改核心逻辑的Skill强制进入“待审核”状态必须由开发者在管理后台点击“批准”后才能激活。这是最重要的安全底线。5.3 系统性能与成本优化随着记忆量增长向量检索和LLM调用可能成为性能和成本的瓶颈。向量检索优化索引选择Chroma默认使用HNSW索引对于千万级以下的数据量表现不错。确保在创建集合时根据数据量调整hnsw:space距离度量和hnsw:construction_ef等参数。分层记忆将记忆分为“热记忆”近期高频访问和“冷记忆”早期低频记忆。热记忆使用向量快速检索冷记忆可以先通过关键词或元数据过滤缩小范围再进行向量检索。缓存对常见的用户查询及其检索结果进行缓存有效期可以设短一些如5分钟能显著减少向量数据库和LLM的调用。LLM调用成本优化记忆压缩在将记忆上下文喂给LLM前进行压缩。可以使用LLM本身来总结多条相关记忆或者使用更简单的提取式摘要方法只保留最关键的信息片段。小模型协同并非所有步骤都需要GPT-4。记忆提炼、初步的模式检测、甚至一些简单Skill的生成可以尝试用更小的开源模型如Qwen1.5-7B-Chat的本地部署来处理。只有核心的、复杂的推理和生成任务才交给大模型。设置Token上限严格限制每次请求中记忆上下文所占的Token数量防止因记忆过多导致请求过长、成本激增。5.4 一个典型问题排查案例Agent陷入“死循环”有一次Agent在处理“安排与张三的会议”时不断重复“检索记忆-找到类似记录-建议使用‘安排会议’技能-执行失败因为张三邮箱不对-保存失败记忆”的循环。排查过程检查日志发现每次检索到的都是同一条失败的记忆“曾尝试用‘安排会议’技能联系张三但因邮箱地址错误失败”。分析原因MemOS检索到了这条记忆并将其作为上下文提供给了LLM。LLM看到了过去的失败但它没有“失败原因”的明确概念只是知道这个任务和这条记忆相关于是依然建议调用“安排会议”技能而代码里没有处理邮箱验证的逻辑导致再次失败。失败的记忆又被保存且由于是近期发生检索排名更靠前形成了负向强化循环。解决方案在记忆中标记失败原因修改记忆保存逻辑不仅记录successFalse还要用LLM简要分析失败原因并作为元数据存入。例如failure_reason: 收件人邮箱地址格式无效。增强Agent的反思能力在Agent执行动作前增加一个“反思”步骤。如果检索到的记忆主要是失败经验LLM会被提示“请注意历史记录显示类似任务曾因[具体原因]失败。请在你的计划中考虑如何避免此问题或向用户请求更多信息如确认邮箱地址。”引入记忆衰减机制对于连续的失败记忆提高其“重要性”衰减速度使其在检索中的排名逐渐下降避免长期主导决策。这个案例让我意识到记忆系统不能只做简单的“回忆”还需要具备一定的“元认知”能力能对记忆的质量和适用性进行判断并引导Agent进行更智慧的决策。这可能是MemOS下一个迭代方向。
返回列表