Mem0¶
agentscope-extensions-mem0 接入 Mem0 记忆服务,提供基于向量检索 + LLM 抽取的长期记忆能力,支持 Mem0 Platform、自托管以及本地部署三种模式。
何时使用¶
需要给 Agent 加上跨会话的事实记忆,例如用户偏好、历史决策。
想用
agentId / userId / runId三层 metadata 隔离不同租户、不同 session 的记忆。想用自定义 metadata(例如
category=travel)做检索过滤。
添加依赖¶
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-extensions-mem0</artifactId>
<version>${agentscope.version}</version>
</dependency>
快速上手¶
import io.agentscope.core.memory.mem0.Mem0LongTermMemory;
import io.agentscope.core.memory.mem0.Mem0ApiType;
// 1. 构造记忆实例(本地无鉴权部署)
Mem0LongTermMemory memory = Mem0LongTermMemory.builder()
.agentName("Assistant")
.userId("user_123")
.apiBaseUrl("http://localhost:8000")
.apiType(Mem0ApiType.SELF_HOSTED)
.build();
// 2. 挂到 Agent
ReActAgent agent = ReActAgent.builder()
.name("Assistant")
.model(model)
.longTermMemory(memory)
.longTermMemoryMode(LongTermMemoryMode.BOTH)
.build();
// 3. 正常调用,记忆会自动在 record / retrieve 之间往返
agent.call(new UserMessage("我出差喜欢住民宿")).block();
部署模式¶
Mem0ApiType 决定客户端调用的 URL 与鉴权方式:
枚举 |
用途 |
apiBaseUrl 示例 |
apiKey |
|---|---|---|---|
|
直连 Mem0 SaaS |
|
必填 |
|
自托管 Mem0 Server |
|
视部署而定 |
多租户隔离¶
agentName / userId / runName 是 Mem0 用来组织记忆的三层 ID:
Mem0LongTermMemory memory = Mem0LongTermMemory.builder()
.agentName("travel-bot") // 跨用户共享的 Agent 维度记忆
.userId("alice") // 用户维度(租户)
.runName("trip-2026-spring") // 单次会话维度
.apiBaseUrl("http://localhost:8000")
.build();
至少要提供其中之一,全部为空时 build() 抛出 IllegalArgumentException。检索时只会返回 metadata 完全匹配的记忆。
自定义 metadata 过滤¶
metadata(...) 同时影响写入和读取:写入时随记忆持久化,检索时作为 filter 注入。
Map<String, Object> tags = Map.of(
"category", "travel",
"project_id", "proj_001"
);
Mem0LongTermMemory memory = Mem0LongTermMemory.builder()
.agentName("Assistant")
.userId("user_123")
.apiBaseUrl("http://localhost:8000")
.metadata(tags)
.build();
// 之后所有 record() 都带上 tags,retrieve() 也只命中相同 tags 的记忆
适合按项目、按业务线切分知识;如果只是按用户切分,用 userId 就够了。
Builder 配置参数¶
方法 |
是否必填 |
默认 |
说明 |
|---|---|---|---|
|
✅ |
- |
Mem0 服务地址 |
|
视部署 |
- |
API Key;本地无鉴权部署可省略 |
|
❌ |
|
选择 SaaS 或自托管路由 |
|
三选一 |
- |
Agent 维度 ID |
|
三选一 |
- |
用户维度 ID |
|
三选一 |
- |
会话/运行维度 ID |
|
❌ |
|
写入与检索时的额外 filter |
|
❌ |
|
HTTP 请求超时 |
三个 ID(agentName / userId / runName)至少要填一个,否则
build()抛IllegalArgumentException。