记忆与上下文管理(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/6.4-memory-and-context-management
翻译时间:2026-06-09T16:08:53.378Z
翻译模型:deepseek-chat
原文字符数:9528
项目:Open WebUI (open-webui)
---
内存与上下文管理
相关源文件
以下文件为本 wiki 页面的生成提供了上下文:
backend/open_webui/models/memories.pybackend/open_webui/retrieval/loaders/datalab_marker.pybackend/open_webui/retrieval/loaders/main.pybackend/open_webui/retrieval/loaders/mineru.pybackend/open_webui/retrieval/loaders/paddleocr_vl.pybackend/open_webui/retrieval/utils.pybackend/open_webui/routers/memories.pybackend/open_webui/routers/retrieval.pysrc/lib/apis/memories/index.tssrc/lib/apis/retrieval/index.tssrc/lib/components/admin/Settings/Documents.sveltesrc/lib/components/admin/Settings/WebSearch.sveltesrc/lib/components/chat/Controls/Valves.sveltesrc/lib/components/chat/Settings/Personalization.sveltesrc/lib/components/chat/Settings/Personalization/AddMemoryModal.sveltesrc/lib/components/chat/Settings/Personalization/EditMemoryModal.sveltesrc/lib/components/chat/Settings/Personalization/ManageModal.sveltesrc/lib/components/common/Valves.sveltesrc/lib/components/icons/Heart.sveltesrc/lib/components/workspace/common/ManifestModal.sveltesrc/lib/components/workspace/common/ValvesModal.svelte
本文档介绍 Open WebUI 的内存与上下文管理系统,该系统使 AI 模型能够访问用户特定信息、会话状态和对话历史。内存系统提供用户事实的语义存储与检索,而上下文管理则负责将相关信息注入 AI 请求。
关于聊天消息存储和历史树结构,请参见 4.3。关于 RAG 文档检索和知识库上下文,请参见 7。
---
系统概览
Open WebUI 管理多种类型的上下文和内存:
| 类型 | 存储方式 | 作用域 | 用途 |
|---|---|---|---|
| 用户记忆 | 向量数据库(ChromaDB 等) | 每个用户 | 用户事实和偏好的语义记忆 |
| 会话上下文 | JWT 令牌、Redis | 每个会话 | 认证和用户身份 |
| 持久化配置 | SQL 数据库(config 表) | 全局 | 应用级设置和状态 |
| 工具上下文 | 函数参数 / Valves | 每个请求 | 工具执行的运行时上下文 |
| RAG 上下文 | 向量数据库查询 | 每个请求 | 检索到的文档片段 |
---
内存系统架构
内存系统将用户特定事实存储在向量数据库中,支持对个人信息进行语义搜索。此功能通过 ENABLE_MEMORIES 配置项切换。
内存存储流程
下图展示了从自然语言添加记忆到 memories.py 中具体代码实体以及 Memories 模型的桥梁。
标题:记忆创建数据流
graph TB
User["用户提供信息"]
RouterFunc["open_webui.routers.memories:add_memory [routers/memories.py:62]"]
AddMemoryForm["AddMemoryForm [routers/memories.py:54]"]
MemoriesModel["Memories.insert_new_memory [models/memories.py:7]"]
VectorDB["ASYNC_VECTOR_DB_CLIENT.upsert [routers/memories.py:88]"]
Embedding["request.app.state.EMBEDDING_FUNCTION [routers/memories.py:86]"]
User --> RouterFunc
RouterFunc --> AddMemoryForm
AddMemoryForm --> MemoriesModel
MemoriesModel --> Embedding
Embedding --> VectorDB
VectorDB --> MemoryRecord["记忆集合:user-memory-{user.id}"]
来源: backend/open_webui/routers/memories.py:54-100, backend/open_webui/models/memories.py:7-7
内存检索流程
当 AI 需要上下文时,可以查询用户的语义记忆。检索过程通过特定的 user.id 过滤结果以确保数据隔离,并应用相关性阈值。
标题:记忆查询与上下文检索
graph TB
Query["搜索请求"]
QueryRouter["open_webui.routers.memories:query_memory [routers/memories.py:113]"]
QueryMemoryForm["QueryMemoryForm [routers/memories.py:108]"]
VectorSearch["ASYNC_VECTOR_DB_CLIENT.search [routers/memories.py:141]"]
RelevanceCheck["相关性阈值检查 [routers/memories.py:153]"]
Results["过滤后的 SearchResult [routers/memories.py:172]"]
Query --> QueryRouter
QueryRouter --> QueryMemoryForm
QueryMemoryForm --> VectorSearch
VectorSearch --> RelevanceCheck
RelevanceCheck --> Results
来源: backend/open_webui/routers/memories.py:108-179
内存管理 UI
用户可以通过 ManageModal.svelte 组件管理自己的记忆。支持以下操作:
- 查看:通过
getMemoriesAPI 调用列出当前用户的所有记忆src/lib/components/chat/Settings/Personalization/ManageModal.svelte:89-91。 - 删除:按 ID 删除特定记忆,或通过
deleteMemoriesByUserId清除用户的所有记忆src/lib/components/chat/Settings/Personalization/ManageModal.svelte:74-85。 - 重置:并行重新生成所有现有文本记忆的向量嵌入。后端在此过程中有意不持有
AsyncSession,以防止长时间运行的嵌入 API 调用导致连接池耗尽backend/open_webui/routers/memories.py:185-197。
---
上下文注入管道
上下文通过复杂的检索和配置管道注入到 AI 请求中。
检索上下文(RAG)
检索系统支持多种文档提取引擎(例如 Tika、Docling、Mistral OCR)和混合搜索,结合向量相似度与 BM25 关键词匹配 backend/open_webui/retrieval/utils.py:15-19。
- 嵌入生成:由
get_ef管理,支持 SentenceTransformers、OpenAI 和 Ollamabackend/open_webui/routers/retrieval.py:139-159。 - 重排序:通过
get_rf使用 CrossEncoders 或外部重排序 API 的可选重排序步骤backend/open_webui/routers/retrieval.py:162-206。 - 网络搜索:使用 Brave、Google PSE 或 SearXNG 等引擎从网络动态检索上下文
backend/open_webui/routers/retrieval.py:54-83。
来源: backend/open_webui/routers/retrieval.py:54-206, backend/open_webui/retrieval/utils.py:15-19, backend/open_webui/retrieval/loaders/main.py:231-241
---
会话与配置上下文
Open WebUI 使用配置系统来管理应用状态和重启后仍能保持的上下文。
持久化配置与管理员设置
设置通过集中式 API 进行管理,允许管理员配置嵌入引擎、RAG 参数和网络搜索提供商。
- RAG 配置:管理员可以配置块大小、提取引擎(例如 Docling、Tika)和文件限制
src/lib/components/admin/Settings/Documents.svelte:229-250。 - 网络搜索配置:支持多个引擎,包括
ollama_cloud、perplexity_search、searxng和google_psesrc/lib/components/chat/Settings/WebSearch.svelte:16-42。 - 嵌入更新:更改嵌入引擎会通过
updateEmbeddingConfig触发配置更新src/lib/components/admin/Settings/Documents.svelte:113-132。
来源: src/lib/components/admin/Settings/Documents.svelte:113-250, src/lib/components/chat/Settings/WebSearch.svelte:16-42
---
工具执行上下文(Valves)
工具和函数通过 "Valve" 系统接收运行时上下文,支持用户特定和全局配置覆盖。
Valve 系统架构
Valves 是配置点,允许用户向工具执行环境提供特定上下文(如 API 密钥或搜索限制)。
- UI 渲染:
Valves.svelte根据 JSON schema(valvesSpec)动态渲染输入,支持password、select、boolean、color和map等类型src/lib/components/common/Valves.svelte:14-172。 - 用户 vs. 全局:用户可以通过
Controls/Valves.svelte组件为特定工具设置自己的值src/lib/components/chat/Controls/Valves.svelte:7-18。 - 数据流:前端值经过防抖处理后,通过
updateUserValvesById提交到后端src/lib/components/chat/Controls/Valves.svelte:40-49,src/lib/components/chat/Controls/Valves.svelte:73-110。
来源: src/lib/components/common/Valves.svelte:14-172, src/lib/components/chat/Controls/Valves.svelte:7-110