第 4 章 MemoryService 初始化与配置 是 memU 自托管版的组合根(Composition Root):配置在这里一次性注入,后续只调 / 。本章讲清每个配置块的作用与推荐组合。 4.1 最小初始化 三个配置块几乎总是需要关心: 配置块 | 作用 | LLM / Embedding / Vision / Transcribe 路由 | 存储后端选择 | 检索策略(rag / llm) 4.2 llmprofiles 详解 memU 用 Profile 机制把不同任务路由到不同模型或 Provider。
MemoryService是 memU 自托管版的组合根(Composition Root):配置在这里一次性注入,后续只调memorize()/retrieve()。本章讲清每个配置块的作用与推荐组合。
from memu import MemoryService service = MemoryService( llm_profiles={ "default": { "api_key": "your_api_key", "chat_model": "gpt-4o-mini", }, }, database_config={ "metadata_store": {"provider": "inmemory"}, }, )
三个配置块几乎总是需要关心:
| 配置块 | 作用 |
|---|---|
llm_profiles |
LLM / Embedding / Vision / Transcribe 路由 |
database_config |
存储后端选择 |
retrieve_config |
检索策略(rag / llm) |
memU 用 Profile 机制把不同任务路由到不同模型或 Provider。
| Profile | 用途 | 若不配置 |
|---|---|---|
default |
对话、提取、摘要、排序 | 必填 |
embedding |
向量化 | 自动从 default 派生 |
vision |
图片 / 视频描述 | 回退到 default |
transcribe |
音频转写 | 回退到 default |
synthesis |
Markdown 记忆树合成 | 回退到 default |
llm_profiles={ "default": { "api_key": "sk-...", "base_url": "https://api.openai.com/v1", # 兼容端点 "chat_model": "gpt-4o-mini", "client_backend": "sdk", # sdk | httpx "provider": "openai", # openai | openrouter | doubao | grok }, "embedding": { "api_key": "sk-...", "embed_model": "text-embedding-3-small", }, }
service = MemoryService( llm_profiles={ "default": { "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "api_key": "your_dashscope_key", "chat_model": "qwen-max", "client_backend": "sdk", }, "embedding": { "base_url": "https://api.voyageai.com/v1", "api_key": "your_voyage_key", "embed_model": "voyage-3.5-lite", }, }, )
Chat 与 Embedding 可以使用不同 Provider——这是生产环境常见做法。
database_config={ "metadata_store": { "provider": "inmemory", # inmemory | sqlite | postgres }, }
| provider | 持久化 | 向量搜索 | 适用 |
|---|---|---|---|
inmemory |
否 | 暴力 cosine | 本地实验、单元测试 |
sqlite |
是 | JSON 存向量 + 暴力搜索 | 单机小规模 |
postgres |
是 | pgvector(可选) | 生产推荐 |
Postgres 配置示例见第 8 章。
在服务初始化时设定,影响所有后续 retrieve() 调用:
# RAG 模式:向量优先,低延迟 service_rag = MemoryService( llm_profiles={...}, database_config={...}, retrieve_config={ "method": "rag", # 可选微调: # "route_intention": True, # "sufficiency_check": True, }, ) # LLM 模式:语义排序,更深 service_llm = MemoryService( llm_profiles={...}, database_config={...}, retrieve_config={"method": "llm"}, )
重要:两种模式可以共用同一存储——初始化两个 Service 实例,共享底层 store 即可(进阶用法见第 6 章)。
控制写入流水线行为(可选):
service = MemoryService( llm_profiles={...}, memorize_config={ # 各步骤可选用不同 llm_profile # 高级场景可在 Pipeline 层替换步骤(第 10 章) }, )
入门阶段保持默认即可。
定义哪些字段参与多租户隔离:
from memu import MemoryService service = MemoryService( llm_profiles={...}, user_config={ "model": { "user_id": str, "agent_id": str, "session_id": str, }, }, )
配置后,user={"user_id": "x"} 与 where={"user_id": "x"} 会在 Resource / Item / Category / Relation 各表生效。
控制是否将结构化记忆导出为 Markdown 树(第 10 章):
service = MemoryService( llm_profiles={...}, memory_files_config={ "enabled": False, # 默认关闭 "output_dir": "./memory_export", "synthesize": False, # True 时用 LLM 合成 MEMORY 正文 }, )
官方 SDK 中存在两个入口类名(随版本演进):
| 类名 | 说明 |
|---|---|
MemoryService |
自托管主入口,功能完整 |
MemUService |
部分文档中的别名 / 简化入口 |
初始化参数结构相同。以你安装版本的官方 README 为准;本教程统一使用 MemoryService。
import asyncio from memu import MemoryService async def app_lifespan(): service = MemoryService(...) # 应用运行期间复用同一实例 await service.memorize(...) await service.retrieve(...) # 可选:导出记忆树 # await service.export_memory_files(user={"user_id": "u1"}) asyncio.run(app_lifespan())
最佳实践:
MemoryService 服务多个请求memorize() 与 retrieve() 均为 async,需在 async 上下文调用MemoryService( llm_profiles={"default": {"api_key": "...", "chat_model": "gpt-4o-mini"}}, database_config={"metadata_store": {"provider": "inmemory"}}, retrieve_config={"method": "rag"}, )
MemoryService( llm_profiles={ "default": {"api_key": "...", "chat_model": "gpt-4o"}, "embedding": {"api_key": "...", "embed_model": "text-embedding-3-small"}, }, database_config={"metadata_store": {"provider": "postgres", "dsn": "..."}}, retrieve_config={"method": "rag", "sufficiency_check": True}, user_config={"model": {"user_id": str, "agent_id": str}}, )
method="llm"sufficiency_check 减少无关召回MemoryService 集中管理 LLM、存储、检索、作用域、导出五类配置。llm_profiles 支持多 Provider;embedding 建议独立 Profile。retrieve_config.method 在初始化时设定,决定 RAG 或 LLM 流水线。user / where 一致传递。inmemory 与 sqlite 初始化,感受持久化差异(重启进程后数据是否还在)。embedding Profile,观察 RAG 模式是否报错或回退。下一章:第 5 章 — memorize 写入流水线原理与实战。
参见:第 3 章返回结构;第 8 章 Postgres 配置。