Openclaw接入MemMachine流程

MemMachine官方教程不清楚,我踩了一些坑。特此帮助后来人
我使用Docker镜像部署,用的飞牛系统
镜像使用memmachine/memmachine

建立一个目录用来放docker-compose文件,有以下文件,大多来自官方仓库

名称 官方仓库位置
-rw-r–r– .env /sample_configs/env.dockercompose
-rw-r–r– configuration.yml /sample_configs/episodic_memory_config.cpu.sample
-rw-r–r– docker-compose.yml /docker-compose.yml
drwxr-xr-x docs/ /docs
-rwxr-xr-x memmachine-compose.sh 适合用来配置configuration.yml
drwxr-xr-x sample_configs/ /sample_configs

docker-compose.yml示例

不用把所有端口都暴露出来,把openclaw一起放到一个网络里,用飞书控制都不用往外映射端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
services:
# 一起启动openclaw
openclaw:
image: alpine/openclaw:latest
container_name: openclaw
volumes:
- /vol1/1000/mSATA-SSD/Docker/openclaw/app:/app
- /vol1/1000/mSATA-SSD/Docker/openclaw/.openclaw:/home/node/.openclaw
networks:
- memmachine-network
# PostgreSQL with pgvector extension for profile memory storage
postgres:
image: pgvector/pgvector:pg16
container_name: memmachine-postgres
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-memmachine}
POSTGRES_USER: ${POSTGRES_USER:-memmachine}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-memmachine_password}
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-memmachine} -d ${POSTGRES_DB:-memmachine}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- memmachine-network

# Neo4j database for graph storage
neo4j:
image: neo4j:5.23-community
container_name: memmachine-neo4j
restart: unless-stopped
environment:
NEO4J_EDITION: community
NEO4J_AUTH: ${NEO4J_USER:-neo4j}/${NEO4J_PASSWORD:-neo4j_password}
NEO4J_server_bolt_thread__pool__max__size: 2000
NEO4J_server_memory_heap_initial__size: 512m
NEO4J_server_memory_heap_max__size: 1G
NEO4J_server_default__listen__address: 0.0.0.0
NEO4J_server_bolt_listen__address: 0.0.0.0:7687
NEO4J_server_http_listen__address: 0.0.0.0:7474
NEO4J_server_https_listen__address: 0.0.0.0:7473
NEO4J_PLUGINS: '["apoc", "graph-data-science"]'
volumes:
- neo4j_data:/data
- neo4j_logs:/logs
- neo4j_import:/var/lib/neo4j/import
- neo4j_plugins:/plugins
healthcheck:
test: ["CMD", "cypher-shell", "-u", "${NEO4J_USER:-neo4j}", "-p", "${NEO4J_PASSWORD:-neo4j_password}", "RETURN 1"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
networks:
- memmachine-network

# MemMachine application
memmachine:
image: ${MEMMACHINE_IMAGE:-memmachine/memmachine}
pull_policy: ${PULL_POLICY:-always}
container_name: memmachine-app
restart: unless-stopped
ports:
- "${MEMORY_SERVER_PORT:-8080}:8080"
# 所做的修改就是删除了其他镜像的端口映射,这个也能删。反正openclaw在一个网络里拉起来,互访没问题
environment:
# Database configuration
POSTGRES_HOST: ${POSTGRES_HOST:-postgres}
POSTGRES_PORT: ${POSTGRES_PORT:-5432}
POSTGRES_USER: ${POSTGRES_USER:-memmachine}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-memmachine_password}
POSTGRES_DB: ${POSTGRES_DB:-memmachine}

# Neo4j configuration
NEO4J_HOST: ${NEO4J_HOST:-neo4j}
NEO4J_PORT: ${NEO4J_PORT:-7687}
NEO4J_USER: ${NEO4J_USER:-neo4j}
NEO4J_PASSWORD: ${NEO4J_PASSWORD:-neo4j_password}

# Application configuration
MEMORY_CONFIG: ${MEMORY_CONFIG:-/app/configuration.yml}
MCP_BASE_URL: ${MCP_BASE_URL:-http://memmachine:8080}
GATEWAY_URL: ${GATEWAY_URL:-http://localhost:8080}
FAST_MCP_LOG_LEVEL: ${FAST_MCP_LOG_LEVEL:-INFO}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
MEMMACHINE_WORKERS: ${MEMMACHINE_WORKERS:-1}
MEMMACHINE_CONFIG_API: ${MEMMACHINE_CONFIG_API:-}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
HOST: 0.0.0.0
volumes:
- ./configuration.yml:/app/configuration.yml:rw,Z
- memmachine_logs:/tmp/memory_logs
depends_on:
postgres:
condition: service_healthy
neo4j:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "--fail", "--silent", "http://localhost:8080/api/v2/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
- memmachine-network
extra_hosts:
- "host.docker.internal:host-gateway"

docs:
build:
context: docs/
dockerfile: Dockerfile
ports:
- "${DOCS_PORT:-3000}:3000"
# 所做的修改就是删除了其他镜像的端口映射,这个也能删。反正openclaw在一个网络里拉起来,互访没问题
volumes:
- ./docs:/docs:ro,Z

volumes:
postgres_data:
driver: local
neo4j_data:
driver: local
neo4j_logs:
driver: local
neo4j_import:
driver: local
neo4j_plugins:
driver: local
memmachine_logs:
driver: local

networks:
memmachine-network:
driver: bridge
name: memmachine-network

configuration.yml示例

并不需要手动配置,可以删除configuration.yml,memmachine-compose.sh执行后会自动从/sample_configs/episodic_memory_config.cpu.sample生成,记得如果用的是BAAI/bge-m3,dimensions只能是1024

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
……
embedders:
openai_compatible_embedder:
provider: openai
config:
max_input_length: 2048
model: "BAAI/bge-m3"
api_key: API隐藏API隐藏API隐藏API隐藏API隐藏API隐藏
base_url: "https://api.siliconflow.cn/v1"
# 如果用的是BAAI/bge-m3,dimensions只能是1024
dimensions: 1024
# 可以删除configuration.yml,memmachine-compose.sh执行后会自动从/sample_configs/episodic_memory_config.cpu.sample生成
language_models:
openai_compatible_model:
provider: openai-chat-completions
config:
model: "deepseek-ai/DeepSeek-V3.2"
api_key: API隐藏API隐藏API隐藏API隐藏API隐藏API隐藏
base_url: "https://api.siliconflow.cn/v1"
……

OpenClaw - MemMachine Documentation这里说的Local Deployment的配置,写在.openclaw.json里。
官方:

1
2
3
4
5
6
7
8
9
10
"openclaw-memmachine": {
"enabled": true,
"config": {
"baseUrl": "http://host:port/api/v2",
"autoCapture": true,
"autoRecall": true,
"orgId": "openclaw",
"projectId": "openclaw"
}
}

实际(链接改成了对应容器名字):

1
2
3
4
5
6
7
8
9
10
 "openclaw-memmachine": {
"enabled": true,
"config": {
"baseUrl": "http://memmachine-app:8080/api/v2",
"autoCapture": true,
"autoRecall": true,
"orgId": "openclaw",
"projectId": "openclaw"
}
}

参考的.openclaw.json(新增slots项)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
{
"meta": {
"lastTouchedVersion": "2026.3.13",
"lastTouchedAt": "2026-03-19T06:45:04.014Z"
},
"wizard": {
"lastRunAt": "2026-03-19T06:45:03.823Z",
"lastRunVersion": "2026.3.13",
"lastRunCommand": "configure",
"lastRunMode": "local"
},
"models": {
"mode": "merge",
"providers": {
"ollama": {
"baseUrl": "http://192.168.1.48:11434/v1",
"api": "openai-completions",
"models": [
{
"id": "qwen3:8b",
"name": "qwen3:8b (Custom Provider)",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 16000,
"maxTokens": 4096
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "ollama/qwen3:8b"
},
"models": {
"ollama/qwen3:8b": {
"alias": "ollama"
},
"longcat/LongCat-Flash-Lite": {
"alias": "longcat"
}
},
"workspace": "/home/node/.openclaw/workspace"
}
},
"tools": {
"profile": "coding",
"web": {
"search": {
"enabled": false
},
"fetch": {
"enabled": true
}
}
},
"commands": {
"native": "auto",
"nativeSkills": "auto",
"restart": true,
"ownerDisplay": "raw"
},
"session": {
"dmScope": "per-channel-peer"
},
"hooks": {
"internal": {
"enabled": true,
"entries": {
"session-memory": {
"enabled": true
}
}
}
},
"channels": {
"feishu": {
"enabled": true,
"appId": "cli_a93c756960b89bd2",
"appSecret": "D2FhsP6JptBiaKforcjVggso42rhby3Z",
"connectionMode": "websocket",
"domain": "feishu",
"groupPolicy": "open"
}
},
"gateway": {
"port": 18789,
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "几里哇啦咕哩呱啦"
},
"tailscale": {
"mode": "off",
"resetOnExit": false
},
"nodes": {
"denyCommands": [
"camera.snap",
"camera.clip",
"screen.record",
"contacts.add",
"calendar.add",
"reminders.add",
"sms.send"
]
}
},
"plugins": {
"load": {
"paths": [
"/app/extensions/feishu"
]
},
"slots": {
"memory": "openclaw-memmachine"
},
"entries": {
"feishu": {
"enabled": true
},
"openclaw-memmachine": {
"enabled": true,
"config": {
"baseUrl": "http://memmachine-app:8080/api/v2",
"autoCapture": true,
"autoRecall": true,
"orgId": "openclaw",
"projectId": "openclaw"
}
}
}
}
}

为MemMachine新增openclaw

打开openclaw容器终端,使用REST API - MemMachine Documentation创建project

新建project(这个我忘了,仅供参考)

1
2
3
4
5
6
curl -X POST "http://memmachine-app:8080/api/v2/projects" \
-H "Content-Type: application/json" \
-d '{
"org_id": "openclaw",
"project_id": "openclaw",
}'

之后就不用操作了,其他增删改查参考Welcome - MemMachine Documentation

查看project

1
2
3
curl -X POST "http://memmachine-app:8080/api/v2/projects/list" \
-H "Content-Type: application/json" \
-d '{}'

Openclaw接入MemMachine流程
https://blog.zhaosn.top/OpenclawMemMachine/
作者
Zhao SN
发布于
2026年3月19日
更新于
2026年3月19日
许可协议