记忆系统
记忆系统
相关源文件
以下文件为本维基页面的生成提供了上下文:
api/apps/restful_apis/memory_api.pyapi/apps/services/memory_api_service.pyapi/db/joint_services/memory_message_service.pyapi/db/joint_services/user_account_service.pyapi/db/services/doc_metadata_service.pyapi/db/services/memory_service.pyapi/utils/memory_utils.pycommon/doc_store/es_conn_base.pycommon/doc_store/infinity_conn_base.pyconf/infinity_mapping.jsonconf/mapping.jsonmemory/services/messages.pymemory/utils/es_conn.pymemory/utils/infinity_conn.pyrag/utils/es_conn.pyrag/utils/infinity_conn.pyrag/utils/opensearch_conn.pytest/testcases/test_web_api/test_memory_app/conftest.pytest/testcases/test_web_api/test_memory_app/test_create_memory.pytest/testcases/test_web_api/test_memory_app/test_list_memory.pytest/testcases/test_web_api/test_memory_app/test_rm_memory.pytest/testcases/test_web_api/test_memory_app/test_update_memory.pytest/unit_test/rag/utils/test_opensearch_doc_meta.py
RAGFlow 中的记忆系统为智能体工作流提供了持久化、可搜索的存储层。与通常临时存在或受上下文窗口大小限制的标准对话历史不同,记忆系统将对话和提取的洞察视为结构化数据。它允许智能体维护长期状态,跨会话回忆过去的交互,并将信息组织到不同的认知类别中(例如,原始对话与语义事实)。
系统总览
记忆子系统通过将对话轮次映射到存储在专用索引中的向量可搜索文档,弥合了大语言模型(LLM)的"自然语言空间"与"代码实体空间"之间的鸿沟。
标题:记忆系统架构
来源: memory/services/messages.py:24-32, api/db/joint_services/memory_message_service.py:38-62, memory/utils/infinity_conn.py:31-33, memory/utils/es_conn.py:36-37
记忆类型与存储
RAGFlow 将记忆分为四种不同的类型,以优化智能体检索信息的方式:
- 原始(Raw):对话的逐字记录
api/db/joint_services/memory_message_service.py:66-67。 - 语义(Semantic):从交互中提取的通用知识和事实
api/db/joint_services/memory_message_service.py:58。 - 情节(Episodic):特定事件和经历的记录
api/db/joint_services/memory_message_service.py:58。 - 程序(Procedural):习得的习惯和流程
api/db/joint_services/memory_message_service.py:58。
当通过 save_to_memory 处理消息时,除非记忆类型严格为 RAW,否则系统会使用大语言模型(LLM)提取内容 api/db/joint_services/memory_message_service.py:38-62。消息存储在文档存储中,使用名为 memory_{uid} 的每用户索引 memory/services/messages.py:24。MessageService 作为这些消息的增删改查(CRUD)操作的主要接口,抽象了底层的 msgStoreConn memory/services/messages.py:27-65。
有关底层存储模式和提取管线的详细信息,请参阅 记忆类型与存储。
来源: api/db/joint_services/memory_message_service.py:38-91, memory/services/messages.py:24-65, memory/utils/es_conn.py:53-78, memory/utils/infinity_conn.py:45-70
记忆管理用户界面与 API
系统提供了 REST API 和基于 React 的前端来管理这些持久化状态。用户可以通过用户界面配置记忆参数,例如遗忘策略和存储类型。
核心管理流程
标题:记忆配置与存储流程
关键管理功能包括:
- 记忆增删改查(CRUD):用于创建、更新、列出和删除记忆的端点
api/apps/restful_apis/memory_api.py:29-144。 - 遗忘策略:通过
forgetting_policy和memory_size等参数支持管理记忆生命周期api/apps/restful_apis/memory_api.py:94-97。 - 消息检查:检索特定记忆的详细消息历史,包括按
agent_id或keywords过滤api/apps/restful_apis/memory_api.py:160-175。 - 高级配置:调整提取的
temperature等参数,并为提取的大语言模型(LLM)定义system_prompt或user_promptapi/db/services/memory_service.py:63-67。 - 权限:精细控制,将记忆访问限制为"团队"或私有使用
api/db/services/memory_service.py:61。
有关 API 端点和前端配置的详细信息,请参阅 记忆管理用户界面与 API。
来源: api/apps/restful_apis/memory_api.py:29-175, api/db/services/memory_service.py:50-74, memory/services/messages.py:66-118
工作流集成
记忆系统被集成到智能体工作流中,以提供长期上下文:
- 自动提取:
extract_by_llm函数使用PromptAssembler生成提示词,指导大语言模型(LLM)从原始对话中识别语义或情节信息api/db/joint_services/memory_message_service.py:144-155。 - 混合检索:智能体使用
search_message检索记忆,该函数通过match_expressions同时支持关键词过滤和向量相似度搜索memory/services/messages.py:150-170。 - 嵌入向量支持:所有提取的记忆在存储前都会使用租户配置的嵌入向量模型进行向量化,以支持语义搜索
api/db/joint_services/memory_message_service.py:173-195。 - 搜索优化:记忆子系统中的
InfinityConnection和ESConnection专门处理消息的字段映射,例如将message_type转换为message_type_kwdmemory/utils/infinity_conn.py:45-59,memory/utils/es_conn.py:38-51。 - 存储抽象:RAGFlow 通过专门的连接包装器处理映射和索引管理,在不同后端(Infinity、Elasticsearch、OpenSearch)之间保持一致性
rag/utils/infinity_conn.py:30-42,rag/utils/es_conn.py:62-74,rag/utils/opensearch_conn.py:65-102。
来源: api/db/joint_services/memory_message_service.py:144-195, memory/services/messages.py:150-170, memory/utils/es_conn.py:75-77, memory/utils/infinity_conn.py:103-117, rag/utils/opensearch_conn.py:129-156