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

资讯详情

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

EverMemOS框架深度解析:构建企业级AI Agent记忆系统(非常详细),从入门到精通,收藏这一篇就够了!

EverMemOS框架深度解析:构建企业级AI Agent记忆系统(非常详细),从入门到精通,收藏这一篇就够了! 在 AI Agent 时代如何让智能体真正记住用户本文将深度拆解 EverMemOS 的后端架构设计从依赖注入到多租户隔离从记忆提取到多路召回完整呈现一个生产级长期记忆系统的工程实践。一、为什么需要 AI 长期记忆系统当前主流的大语言模型LLM在对话中面临一个根本性问题没有持久记忆。每次对话都是一张白纸模型无法记住用户上周提到的项目进展、三个月前表达的偏好、甚至昨天刚聊过的话题。Context Window 虽然在不断增长但它本质上是一种短期记忆——受限于 Token 上限无法覆盖用户长期的交互历史。更关键的是原始对话记录并不等于记忆真正有价值的是从海量对话中提炼出的结构化认知用户画像、事件时间线、话题摘要、行为预测等。EverMemOS 正是为解决这一问题而设计的企业级长期记忆系统。它不是简单地存储对话历史而是构建了一套完整的记忆提取、存储、检索和管理的技术体系。二、整体架构概览EverMemOS 采用经典的分层架构Layered Architecture同时融合了端口-适配器Hexagonal Architecture的思想。整个系统由六层组成每层职责清晰、边界分明┌──────────────────────────────────────────────────────┐│ API Layer (FastAPI REST) ││ infra_layer/adapters/input/api/ │├──────────────────────────────────────────────────────┤│ Service Layer ││ service/ │├──────────────────────────────────────────────────────┤│ Business Logic Layer ││ biz_layer/ │├──────────────────────────────────────────────────────┤│ Agentic Layer ││ (Memory Manager, Vectorization, Retrieval) ││ agentic_layer/ │├──────────────────────────────────────────────────────┤│ Memory Layer ││ (MemCell, Episode, Profile, Foresight) ││ memory_layer/ │├──────────────────────────────────────────────────────┤│ Core Layer ││ (DI, Middleware, Multi-tenancy, Cache, Events) ││ core/ │├──────────────────────────────────────────────────────┤│ Infrastructure Layer ││ (MongoDB, Milvus, Elasticsearch, Redis) ││ infra_layer/adapters/out/ │└──────────────────────────────────────────────────────┘这种分层设计的核心理念是依赖方向单一向下上层可以依赖下层但下层不能反向依赖上层。这保证了核心业务逻辑Memory Layer不会被基础设施的实现细节所污染。下面我们从底层开始逐层解析每一层的设计思路和核心实现。三、Core Layer框架级基础设施Core Layer 是整个系统的地基它提供了与具体业务无关的通用能力。这一层的设计质量直接决定了整个系统的可维护性和可扩展性。3.1 依赖注入容器DI ContainerEverMemOS 没有使用第三方 DI 框架而是自研了一套轻量级的依赖注入容器。这套 DI 系统借鉴了 Spring 的核心理念但做了面向 Python 生态的简化。核心设计包括装饰器驱动注册通过component、service、repository、controller等装饰器标记 Bean在模块导入时自动注册到全局容器中。包扫描机制ComponentScanner在启动阶段扫描指定路径下的所有 Python 模块触发装饰器执行完成 Bean 的发现和注册。多种作用域支持SINGLETON单例、PROTOTYPE每次新建和FACTORY工厂方法三种作用域。Mock 模式通过mock_impl装饰器注册 Mock 实现在测试时可一键切换为 Mock Bean无需修改业务代码。以下是 DI 装饰器的核心实现def component( name: str None, scope: BeanScope BeanScope.SINGLETON, lazy: bool False, primary: bool False, metadata: Optional[Dict[str, Any]] None,): def decorator(cls: Type[T]) - Type[T]: cls._di_component True cls._di_name name cls._di_scope scope cls._di_lazy lazy cls._di_primary primary if getattr(cls, _di_skip, False): return cls ifnot lazy: container get_container() container.register_bean( bean_typecls, bean_namename, scopescope, is_primaryprimary, metadatametadata, ) return cls return decorator在业务代码中获取 Bean 非常简洁from core.di import get_bean_by_type# 获取某个 Repository 的单例episodic_repo get_bean_by_type(EpisodicMemoryRawRepository)# 获取某类型的所有实现all_controllers get_beans_by_type(BaseController)这套 DI 系统还支持条件注册conditional和依赖声明depends_on使得组件的组装在不同部署环境下可以灵活调整。3.2 生命周期管理Lifespan在一个涉及多种数据库和外部服务的系统中启动和关闭顺序至关重要。EverMemOS 设计了一套基于 Provider 的生命周期管理机制。每个需要参与生命周期的组件都实现LifespanProvider接口声明自己的启动和关闭逻辑以及执行顺序。LifespanFactory在应用启动时自动从 DI 容器中发现所有 Provider按 order 排序后依次执行。asynccontextmanagerasyncdef lifespan(app: FastAPI): lifespan_data {} try: for provider in sorted_providers: result await provider.startup(app) if result isnotNone: lifespan_data[provider.name] result # 所有 Provider 启动完成后触发 AppReady 监听器 listeners get_beans_by_type(AppReadyListener) for listener in listeners: listener.on_app_ready() yield# 应用运行阶段 finally: for provider in reversed(sorted_providers): await provider.shutdown(app)系统内置了多个 Lifespan ProviderProvider职责启动顺序MongoDBLifespanProviderMongoDB 连接池 Beanie ODM 初始化1ElasticsearchLifespanProviderES 客户端 索引初始化2MilvusLifespanProviderMilvus 向量集合初始化3BusinessLifespanProviderTokenizer、Controller 注册、Capability 加载4MetricsLifespanProviderPrometheus 指标服务5这种设计的优势在于每个 Provider 只关心自己的初始化逻辑彼此独立新增一个数据库连接只需实现一个新的 Provider 并注册到 DI 容器即可。3.3 多租户体系Multi-Tenancy作为一个企业级系统多租户支持是 EverMemOS 的核心能力之一。它的多租户实现覆盖了从请求入口到数据存储的全链路。租户上下文传播基于 Python 的ContextVar实现保证在异步环境中每个请求都拥有独立的租户上下文current_tenant_contextvar: ContextVar[Optional[TenantInfo]] ContextVar( current_tenant, defaultNone)def get_current_tenant() - Optional[TenantInfo]: # 1. 先从 ContextVar 获取 tenant_info current_tenant_contextvar.get() if tenant_info isnotNone: return tenant_info # 2. 尝试从配置获取单租户 ID tenant_config get_tenant_config() single_tenant_id tenant_config.single_tenant_id # 3. 通过 DI 获取 TenantInfoService 查询租户信息 if single_tenant_id: service get_container().get_bean_by_type(TenantInfoService) tenant_info service.get_tenant_info(single_tenant_id) set_current_tenant(tenant_info) return tenant_info returnNone在数据层系统通过TenantAware系列类实现了透明的租户数据隔离。以 MongoDB 为例TenantAwareMongoDBClientFactory会根据当前租户动态选择不同的数据库。对 Milvus 和 Elasticsearch 同样如此——Milvus 通过集合名后缀隔离Elasticsearch 通过索引别名隔离。这意味着业务代码完全不需要关心租户隔离的细节只需在请求入口处设置好租户上下文所有下游的数据库操作都会自动路由到正确的租户空间。3.4 事件系统EverMemOS 实现了一套基于发布-订阅模式的应用内事件系统。ApplicationEventPublisher通过 DI 容器自动发现所有EventListener实现构建事件类型到监听器的映射表。事件发布时所有匹配的监听器被并发调用且单个监听器的异常不会影响其他监听器的执行。service(application_event_publisher)class ApplicationEventPublisher: asyncdef publish(self, event: BaseEvent) - None: self._ensure_initialized() listeners self._event_listeners_map.get(type(event), [ ]) asyncdef safe_invoke(listener): try: await listener.on_event(event) except Exception as e: logger.error(fListener exception: {e}) await asyncio.gather(*[safe_invoke(l) for l in listeners])这套事件系统使得跨模块的协作可以通过松耦合的事件驱动方式完成而不是直接的方法调用。3.5 其他核心能力除了上述核心模块Core Layer 还提供了多项生产级能力分布式锁基于 Redis Lua 脚本的可重入分布式锁消息队列50 分区的 Redis 队列 Kafka 消费者支持缓存管理Redis 时间窗口缓存和长度限制缓存限流基于aiolimiter的装饰器式限流可观测性统一日志、Prometheus 指标Counter、Histogram、Gauge、追踪装饰器中间件栈全局异常处理、HMAC 签名验证、性能 Profiling、用户上下文注入四、Memory Layer记忆提取的核心引擎Memory Layer 是 EverMemOS 最核心的一层它定义了什么是记忆以及如何从原始数据中提取记忆。4.1 记忆类型体系EverMemOS 定义了一套层次化的记忆类型体系每种类型对应不同粒度和维度的认知类型说明类比MemCell原子记忆单元一段完整对话的原始数据包人脑的短期工作记忆Episode话题级摘要从 MemCell 中提炼人脑的情景记忆Profile用户画像包含技能、价值观、性格等人脑对他人的认知模型GroupProfile群聊画像群体特征和用户在群中的角色对一个社交群体的整体印象EventLog事件日志结构化的事实记录人脑的事实性记忆Foresight预见性记忆对未来可能发生事件的预测人脑的前瞻性记忆这套体系的设计灵感来源于认知科学对人类记忆系统的分类将记忆按照从原始到抽象的层次组织。4.2 MemCell边界检测与原子切分MemCell 是整个记忆提取流程的起点。在持续的对话流中系统需要判断什么时候一个话题结束了——这就是边界检测。ConvMemCellExtractor负责这个关键任务。它将历史消息和新消息一起送入 LLM由模型判断当前是否构成一个完整的话题边界。如果达到边界就创建一个 MemCell封装这段对话的所有原始数据。class ConvMemCellExtractor(MemCellExtractor): DEFAULT_HARD_TOKEN_LIMIT 8192 DEFAULT_HARD_MESSAGE_LIMIT 50 async def extract_memcell(self, request): # 1. 合并历史消息和新消息 # 2. 检查是否达到硬性限制Token 数 / 消息数 # 3. 调用 LLM 进行边界检测 # 4. 如果判定为边界创建 MemCell 并返回 # 5. 如果未达边界返回 StatusResult 指示继续等待 ...边界检测除了 LLM 判断还有两道硬限制作为兜底当消息数超过 50 条或 Token 数超过 8192 时系统会强制切分。这保证了即使 LLM 判断出现偏差MemCell 的大小也不会失控。4.3 Memory Manager提取流程的总指挥memory_layer.MemoryManager是记忆提取的调度中心。它接收一个 MemCell然后根据记忆类型分发给不同的 Extractorclass MemoryManager: asyncdef extract_memory(self, memcell, memory_type, user_idNone, ...): match memory_type: case MemoryType.EPISODIC_MEMORY: returnawait self._extract_episode(memcell, user_id, group_id) case MemoryType.FORESIGHT: returnawait self._extract_foresight(memcell, ...) case MemoryType.EVENT_LOG: returnawait self._extract_event_log(memcell, ...) case MemoryType.PROFILE: returnawait self._extract_profile(memcell, ...) case MemoryType.GROUP_PROFILE: returnawait self._extract_group_profile(memcell, ...)值得注意的是所有 Extractor 共享同一个LLMProvider实例这不仅避免了重复初始化的开销也使得 LLM 配置的管理更加集中。4.4 Episode 提取从对话到摘要EpisodeMemoryExtractor是使用频率最高的提取器。它从 MemCell 的原始对话数据中提取出包含subject主题、summary摘要和episode详细叙述的结构化记忆。Episode 提取有两种模式群组 Episode不区分用户视角对整段对话进行综合提炼个人 Episode以某个用户的视角提取突出该用户关注的内容在实际处理中系统会为每个参与者分别提取个人 Episode同时提取一个群组 Episode这些提取任务通过asyncio.gather并行执行以提升效率。4.5 Profile 与 Clustering 协同用户画像Profile的提取并不是在每次对话后立即进行的而是基于**聚类Clustering**机制按需触发。ClusterManager会对 MemCell 进行话题聚类——当一个聚类中积累了足够多的 MemCell默认阈值为配置项profile_min_memcells才会触发ProfileManager进行画像提取。这样做的好处是避免了基于单次对话提取画像时的噪声和不稳定性让画像更加准确可靠。画像提取会加载同一聚类下的所有 MemCell 作为上下文结合已有的旧画像进行增量更新。系统支持两种场景的画像提取群聊场景提取用户的工作技能、项目参与、协作风格等助手场景提取用户的生活偏好、价值观、兴趣爱好等4.6 Foresight 与 EventLogForesight前瞻性记忆从对话中提取未来可能发生的事件预测例如用户提到下周要出差上海或项目计划在月底上线。这些预测记忆可以在后续对话中被主动召回帮助 AI 主动关心用户关注的未来事项。EventLog事件日志则提取已经发生的结构化事实包括时间、参与者、事件类型等字段。它为用户构建了一条可追溯的时间线。这两种记忆类型目前主要在助手场景assistantscene中提取在群聊场景中暂未启用体现了系统对不同使用场景的差异化处理。4.7 Prompt 管理所有提示词模板按照语言中文/英文组织在memory_layer/prompts/目录下通过get_prompt_by()函数统一获取。系统通过MEMORY_LANGUAGE环境变量控制语言选择支持在不同部署环境中灵活切换。五、Agentic Layer记忆读取与智能检索如果说 Memory Layer 解决的是如何写入记忆Agentic Layer 解决的则是如何读取记忆。这一层是用户或 AI Agent与记忆系统交互的核心接口。5.1 统一记忆接口agentic_layer.MemoryManager对外提供三个核心方法class MemoryManager: async def memorize(self, request: MemorizeRequest) - int: 写入路径原始数据 - 记忆提取 - 持久化存储 async def fetch_mem(self, request: FetchMemRequest) - FetchMemResponse: 读取路径按 Key 查询支持多种记忆类型 async def retrieve_mem(self, request: RetrieveMemRequest) - RetrieveMemResponse: 检索路径基于 Prompt 的语义检索支持多种检索策略5.2 五种检索策略retrieve_mem方法通过retrieve_method参数支持五种检索策略覆盖从简单到复杂的各种场景match retrieve_method: case RetrieveMethod.KEYWORD: response await self.retrieve_mem_keyword(request) case RetrieveMethod.VECTOR: response await self.retrieve_mem_vector(request) case RetrieveMethod.HYBRID: response await self.retrieve_mem_hybrid(request) case RetrieveMethod.RRF: response await self.retrieve_mem_rrf(request) case RetrieveMethod.AGENTIC: response await self.retrieve_mem_agentic(request)KEYWORD关键词检索使用 jieba 分词 停用词过滤后在 Elasticsearch 上执行 BM25 搜索。适合用户查询中包含明确关键词的场景。VECTOR向量检索将查询文本通过 Embedding 模型转为向量在 Milvus 中执行近似最近邻搜索。适合语义匹配的场景。HYBRID混合检索同时执行关键词和向量检索对结果去重合并后通过 Reranker 模型重排序。兼具精确匹配和语义理解的优势。async def _search_hybrid(self, request, retrieve_method): # 并行执行关键词和向量检索 kw_results, vec_results await asyncio.gather( self.get_keyword_search_results(request, ...), self.get_vector_search_results(request, ...), ) # 去重合并 seen_ids {h.get(id) for h in kw_results} merged kw_results [h for h in vec_results if h.get(id) not in seen_ids] # Reranker 重排序 return await self._rerank(request.query, merged, request.top_k, ...)RRF倒数排名融合同样并行执行两种检索但使用 Reciprocal Rank Fusion 算法融合排名而不是通过 Reranker。RRF 的优势在于不需要额外的模型推理计算成本更低。AGENTIC智能体检索这是系统中最复杂也最强大的检索策略采用 LLM 引导的多轮检索第一轮执行 Hybrid 检索获取初始结果经过 Reranker 重排序充分性判断调用 LLM 评估当前结果是否充分回答了用户查询多查询生成如果不充分LLM 分析缺失信息并生成多个补充查询第二轮并行执行多个补充查询收集更多候选结果最终排序合并两轮结果通过 Reranker 做最终排序async def retrieve_mem_agentic(self, request): # Round 1: Hybrid 检索 round1 await self._search_hybrid(req1, retrieve_methodagentic) reranked await self._rerank(req.query, round1, ...) # LLM 充分性检查 is_sufficient, reasoning, missing_info await check_sufficiency( queryreq.query, resultstopn_pairs, llm_providerllm_provider ) if is_sufficient: returnawait self._to_response(reranked[:top_k], req) # Round 2: 多查询扩展 refined_queries, _ await generate_multi_queries( original_queryreq.query, missing_infomissing_info, ... ) # 并行执行多个补充查询 round2_results await asyncio.gather( *[do_search(q) for q in refined_queries], return_exceptionsTrue ) # 合并 最终 Rerank combined round1 round2_unique final await self._rerank(req.query, combined, top_k, ...) returnawait self._to_response(final[:top_k], req)这种多轮检索策略显著提升了复杂查询的召回率尤其是在用户查询涉及多个方面或需要跨时间段关联信息的场景下。5.3 结果分组与重要性评分检索结果不是简单地按分数排序返回而是按group_id分组每个分组附带重要性评分。重要性评分基于用户在不同群组中的活跃度计算重要性分数 (发言次数 被提及次数) / 总对话轮次这使得来自用户高频互动群组的记忆能够获得更高的排名权重。5.4 向量化与重排序服务VectorizeService封装了 Embedding 模型的调用支持 VLLM 和 DeepInfra 两种后端。RerankService同样支持多种后端为 Hybrid 和 Agentic 检索提供精排能力。这两个服务的设计遵循了策略模式——通过环境变量选择不同的后端实现业务代码通过统一接口调用不感知底层差异。六、Business Layer编排复杂的记忆提取流程Biz Layer 是连接 Agentic Layer 和 Memory Layer 的桥梁负责编排完整的记忆提取和持久化流程。6.1 Memorize 主流程memorize()函数是整个写入链路的入口它编排了从原始消息到持久化记忆的完整流程消息到达 → 预处理读取历史消息→ 边界检测 ├── 未达边界 → 累积消息更新状态 └── 达到边界 → 创建 MemCell → 保存 MemCell → 并行提取Episode Foresight EventLog → 持久化到 MongoDB/ES/Milvus → 触发聚类 → 可能触发 Profile 提取这个流程中有几个值得注意的设计决策消息累积机制新消息不是立即处理的而是先存储到conversation_data表中累积。只有当边界检测判定一个完整话题已结束时才把累积的消息打包成 MemCell 进行处理。这既避免了频繁的 LLM 调用又保证了记忆的完整性。并行提取Episode、Foresight 和 EventLog 的提取是通过asyncio.gather并行执行的大幅缩短了处理延迟。助手场景的特殊处理在助手场景一对一对话中群组 Episode 会被复制到每个参与用户名下Foresight 和 EventLog 同样如此。这保证了在按用户维度检索时能找到所有相关记忆。6.2 三库同步持久化每条记忆的存储涉及三个存储系统的同步写入async def save_memory_docs(doc_payloads): # MongoDB持久化主存储 saved_doc await episodic_repo.append_episodic_memory(doc) # Elasticsearch全文检索索引 es_doc EpisodicMemoryConverter.from_mongo(saved_doc) await episodic_es_repo.create(es_doc) # Milvus向量检索索引 milvus_entity EpisodicMemoryMilvusConverter.from_mongo(saved_doc) if vector and len(vector) 0: await episodic_milvus_repo.insert(milvus_entity, flushFalse)MongoDB 是事实源Source of TruthElasticsearch 和 Milvus 是为检索优化的二级索引。数据流向是单向的MongoDB → ES/Milvus。MemorySyncService提供了批量同步能力确保数据一致性。七、Infrastructure Layer多存储引擎适配Infrastructure Layer 通过适配器模式Adapter Pattern将业务逻辑与具体的存储技术解耦。7.1 存储引擎选型引擎版本用途优势MongoDB 7.0文档存储记忆主存储灵活的文档模型适合半结构化的记忆数据Milvus 2.5向量数据库语义检索高性能近似最近邻搜索支持过滤条件Elasticsearch 8.x搜索引擎关键词检索BM25 全文检索丰富的查询 DSLRedis 7.2缓存/队列缓存、分布式锁、消息队列低延迟丰富的数据结构7.2 Repository 模式数据访问层严格遵循 Repository 模式。以EpisodicMemoryRawRepository为例它通过repository装饰器注册为 DI Bean封装了所有对 MongoDB 中 EpisodicMemory 集合的操作。上层代码只需依赖 Repository 接口不直接操作数据库驱动。Milvus 和 Elasticsearch 各有独立的 Repository 实现如EpisodicMemoryMilvusRepository、EpisodicMemoryEsRepository以及对应的 Converter 负责数据格式转换。7.3 MongoDB 文档模型MongoDB 文档模型基于 Beanie ODM异步 MongoDB ODM每种记忆类型对应一个 Document 类。以 MemCell 文档为例它包含了原始数据、参与者、时间戳、摘要、向量等字段是一个高度自包含的数据单元。系统还包含了完善的数据库迁移机制MigrationManager支持在启动时自动执行迁移脚本也可以通过命令行参数跳过。7.4 向量集合设计Milvus 集合为每种支持向量检索的记忆类型Episodic Memory、Event Log、Foresight分别建立每个集合包含向量字段、标量过滤字段user_id、group_id、timestamp 等和元数据字段。集合支持按时间范围、用户、群组等维度进行过滤检索结合向量相似度实现高效的条件语义搜索。八、API Layer对外服务接口8.1 Controller 设计API 层采用 Controller 模式通过controller装饰器注册。MemoryController是核心控制器提供以下端点方法路径功能POST/api/v1/memories写入单条消息触发记忆提取GET/api/v1/memories按类型/用户/时间查询记忆GET/api/v1/memories/search语义检索记忆支持五种策略DELETE/api/v1/memories软删除记忆GET/POST/PATCH/api/v1/memories/conversation-meta会话元数据管理Controller 的设计遵循了薄控制器原则——仅负责参数解析、DTO 转换和响应封装核心逻辑委托给下层服务。controller(memory_controller, primaryTrue)class MemoryController(BaseController): def __init__(self, conversation_meta_service: ConversationMetaService): super().__init__( prefix/api/v1/memories, tags[Memory Controller], default_authnone, ) self.memory_manager MemoryManager()8.2 中间件栈请求经过的中间件栈从外到内ProfileMiddleware支持通过?profiletrue参数开启请求级性能 ProfilingCORSMiddleware跨域资源共享PrometheusMiddlewareHTTP 请求指标收集请求数、延迟、请求/响应体大小AppLogicMiddleware设置应用上下文app_info执行请求验证GlobalExceptionHandler统一异常捕获返回标准化错误响应九、可观测性与运维9.1 Prometheus 指标系统内建了丰富的业务指标覆盖记忆提取和检索的全链路记忆提取指标memory_extraction_stage_duration各提取阶段boundary detection、episode、foresight、eventlog的耗时memory_extracted_total各类型记忆的提取数量memorize_request_total记忆写入请求的成功/失败/错误计数记忆检索指标retrieve_request_duration各检索策略的端到端耗时retrieve_stage_duration各阶段embedding、milvus_search、keyword_search、rerank、rrf_fusion的耗时retrieve_error_total检索错误按类型分类计数这些指标使得运维团队可以精准定位性能瓶颈和异常模式。9.2 追踪与日志trace_logger装饰器为关键方法自动添加了追踪日志记录操作名称、耗时和上下文信息。日志系统通过LoggerProvider统一管理支持 LRU 缓存避免重复创建 Logger 实例。十、架构设计的取舍与思考10.1 自研 DI vs 第三方框架EverMemOS 选择自研 DI 而非使用dependency-injector或inject等第三方库原因可能在于Python 生态中现有的 DI 框架在 FastAPI 异步场景下的集成度不够好且自研 DI 可以更灵活地支持 Mock 模式、条件注册等定制需求。这增加了维护成本但获得了更高的控制力。10.2 三库同步的一致性MongoDB Milvus Elasticsearch 的三库写入目前是同步顺序执行的没有使用分布式事务。在极端情况下可能出现数据不一致。系统通过MemorySyncService提供了补偿机制但本质上采用的是最终一致性策略。对于记忆系统来说这是一个合理的权衡——短暂的不一致几秒内对用户体验的影响微乎其微。10.3 LLM 调用的成本控制系统在多个环节调用 LLM边界检测、Episode 提取、Foresight 提取、充分性检查、多查询生成LLM 成本是主要的运行开支。为此系统做了几项优化边界检测的硬限制兜底避免 LLM 迟迟不判定边界导致的无限累积消息累积机制不是每条消息都触发 LLM而是累积到一定量级后批量处理Smart Mask当历史消息超过 5 条时启用智能遮蔽减少送入 LLM 的 Token 数Agentic 检索的渐进策略先做 Hybrid 检索只有在不充分时才启动第二轮10.4 异步优先的设计哲学整个系统彻底拥抱了 Python 的 async/await 范式。从数据库操作到 LLM 调用从 HTTP 请求处理到事件发布所有 I/O 操作都是异步的。多个独立的提取任务通过asyncio.gather并行执行最大程度利用了 I/O 等待时间。十一、总结EverMemOS 展示了一个生产级 AI 记忆系统的完整工程实践。它的架构设计有几个值得借鉴的亮点认知科学驱动的记忆模型不是简单地存储和检索文本而是模仿人类记忆系统将记忆分为情景记忆、用户画像、事件日志、前瞻性记忆等多种类型每种类型都有独立的提取和检索机制。分层架构的工程纪律六层架构中每一层都有明确的职责边界Core Layer 提供业务无关的基础设施Memory Layer 定义核心领域模型Biz Layer 编排复杂流程各层通过 DI 容器松耦合组装。渐进式检索策略从简单的关键词检索到复杂的 LLM 引导多轮检索系统提供了五种检索策略让调用方可以根据场景灵活选择在效果和成本之间取得平衡。生产级工程能力多租户隔离、分布式锁、消息队列、可观测性指标、数据库迁移、Mock 测试支持——这些能力使得系统不只是一个原型而是一个可以在企业环境中真正落地的产品。对于正在构建 AI Agent 基础设施的团队来说EverMemOS 提供了一个值得参考的架构蓝图记忆不只是存储更是理解。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表