本文档面向第一次运行本项目的使用者,说明如何启动 Web 应用、配置模型 API 和 Docker 基础设施。当前可验收的是 Text2Mem 与 ReMe;Mem0、Letta 和 memU 仅保留未启用适配器骨架。
项目目录:
/memory-agents-web/
memory-agents-web/
├── backend/ # FastAPI 后端和五种记忆适配器
├── frontend/ # Next.js Web 前端
├── infra/initdb/ # PostgreSQL 初始化脚本
├── docker-compose.yml # PostgreSQL + pgvector + Redis
├── .env.example # 后端和基础设施配置模板
└── 使用文档.md # 本文档
当前项目是单工作区模式,不需要注册和登录。默认工作区标识为 local-workspace。
基础运行环境:
只运行 Text2Mem 或基础 Web 界面时,Python 3.11 也可以;但按当前默认配置同时运行 ReMe 时,请统一使用 Python 3.13。
检查环境:
docker --version
docker compose version
python3 --version
node --version
npm --version
uv --version
在项目根目录执行:
cd "/memory-agents-web"
cp .env.example .env
后端启动时会读取项目根目录下的 .env。
.env 配置项APP_ENV=development
WORKSPACE_ID=local-workspace
DATA_DIR=./data
DEMO_FALLBACK=true
说明:
WORKSPACE_ID:当前单工作区标识;不要在同一个数据库中随意改动,否则会看不到之前的记忆。DATA_DIR:本地文件型适配器和降级存储的数据目录。DEMO_FALLBACK:保留本地启动能力。真实框架没有安装时不会伪装成已接入,而是显示不可用状态。LLM_BASE_URL=https://api.openai.com/v1
LLM_API_KEY=你的模型API-Key
LLM_MODEL=gpt-4o-mini
EMBEDDING_BASE_URL=https://api.openai.com/v1
EMBEDDING_API_KEY=你的Embedding API-Key
EMBEDDING_MODEL=text-embedding-3-small
EMBEDDING_DIMENSIONS=1536
EMBEDDING_MIN_SCORE=0.35
当前 ReMe 第二阶段推荐使用通义千问 Embedding:
EMBEDDING_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
EMBEDDING_API_KEY=你的DashScope-API-Key
EMBEDDING_MODEL=text-embedding-v4
EMBEDDING_DIMENSIONS=1536
EMBEDDING_MIN_SCORE=0.35
这组配置使用 OpenAI-compatible /embeddings 接口。也可以替换为其他兼容 OpenAI API 的 Embedding 服务。EMBEDDING_MIN_SCORE 控制项目 pgvector 结果进入回答证据的最低余弦相似度;0.35 是当前 text-embedding-v4 测试起点,更换模型后应重新标定。
如果只想先体验 Text2Mem,可以暂时不填写 LLM_API_KEY。此时 Text2Mem 会使用本地模式回答,并仍然记录记忆和审计事件。
项目启动时会把 LLM_* 配置同步给部分依赖 OpenAI 环境变量命名的 SDK。如果某个 SDK 使用特殊配置方式,应以该 SDK 当前版本文档为准。
DATABASE_URL=postgresql://memory:memory@localhost:54329/memory_agents
REDIS_URL=redis://localhost:6379/0
对应的 Docker 服务为:
| 服务 | 地址 | 用途 |
|---|---|---|
| PostgreSQL + pgvector | localhost:54329 |
结构化记忆、向量扩展、审计数据 |
| Redis | localhost:6379 |
缓存和异步任务基础设施 |
LETTA_BASE_URL=http://localhost:8283
LETTA_API_KEY=
LETTA_ENABLED=false
MEM0_ENABLED=false
REME_ENABLED=true
MEMU_ENABLED=false
当前只应保持 REME_ENABLED=true。Mem0、Letta 和 memU 即使安装了 SDK,也仍应保持关闭,直到各自的持久化、删除、重置和验收闭环补齐。
前端使用单独的配置文件:
cd frontend
cp .env.local.example .env.local
默认保持未设置:
# NEXT_PUBLIC_API_URL=https://api.example.com
未设置时,前端会在浏览器运行时使用当前页面的协议和主机名,动态组合 :8000 后端地址。只有后端使用不同主机或端口时才设置 NEXT_PUBLIC_API_URL;不要为局域网访问写死 localhost 或某个局域网 IP。
回到项目根目录:
cd "/memory-agents-web"
docker compose up -d
查看运行状态:
docker compose ps
正常情况下,两个服务都应显示 healthy 或 running。
检查 pgvector:
docker compose exec postgres \
psql -U memory -d memory_agents \
-c "SELECT extname FROM pg_extension WHERE extname = 'vector';"
停止服务但保留数据卷:
docker compose down
停止服务并删除数据库数据:
docker compose down -v
docker compose down -v 会删除本项目的 PostgreSQL 和 Redis 数据,只有在确认不需要历史记忆时使用。
cd "/memory-agents-web/backend"
uv venv --python 3.13 .venv-reme
source .venv-reme/bin/activate
uv pip install -e '.[reme]'
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
后端地址:
如果已经创建过 .venv-reme,后续只需要:
cd backend
source .venv-reme/bin/activate
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
如果将 .env 中 REME_ENABLED=false,可以只安装基础依赖:
cd backend
uv venv --python 3.11 .venv
source .venv/bin/activate
uv pip install -e .
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
不要在一个已经安装大量旧版框架依赖的虚拟环境中强行混用不同 Python 版本要求。
另开一个终端窗口:
cd "/memory-agents-web/frontend"
cp .env.local.example .env.local
npm install
npm run dev
本机打开:http://localhost:3000;局域网设备打开:http://本机局域网IP:3000。前端会在每次请求时根据当前页面动态计算同一主机的 :8000 后端地址;Next.js 开发服务器也会在启动时自动读取本机网卡地址,不需要写死局域网 IP。
前端页面包含:
Text2Mem 是本项目内置的教学型 IR 执行引擎,不需要额外安装 SDK。
在对话中发送类似内容:
记住:我偏好使用 Python + FastAPI,数据库选 PostgreSQL。
系统会记录:
ENC/Encode 写入操作;RET/Retrieve 检索操作;当前还会将陈述分为 semantic、episodic、procedural 和 task-state,对完全重复的内容去重,并使用关键词、记忆类型与可选 Embedding 进行融合检索。“上次部署遇到了什么问题?”这类问句只检索,不会被误存为新记忆。
当前只有试验性 add/search 骨架,右侧记忆投影、单条删除、重置和冲突验收尚未完成。下列命令只用于后续开发,不表示当前已可用。
安装 SDK:
cd backend
source .venv-reme/bin/activate
uv pip install mem0ai
当前在根目录 .env 中保持关闭:
MEM0_ENABLED=false
Mem0 的模型、Embedding 和向量后端会随版本变化。后续补齐闭环时请先核对官方 Python Quickstart:https://docs.mem0.ai/open-source/python-quickstart。
当前尚未完成 Agent ID 持久化、Core / Archival / Recall 投影和删除闭环。下列命令只用于后续开发。
安装客户端:
cd backend
source .venv-reme/bin/activate
uv pip install letta-client
启动目标版本的 Letta 服务端,并确认服务地址。例如:
LETTA_BASE_URL=http://localhost:8283
LETTA_API_KEY=
当前保持 LETTA_ENABLED=false,不会启动或调用 Letta。
Letta 的 Python 客户端文档:https://docs.letta.com/api/python。
注意:Letta 客户端和服务端需要版本匹配。如果服务端 API 变化,Web 端会显示调用错误,不会自动降级成假数据。
当前适配器使用官方 SDK 依赖和 Python 3.13:
cd backend
source .venv-reme/bin/activate
uv pip install -e '.[reme]'
回到项目后启用:
REME_ENABLED=true
ReMe 会通过 auto_memory 将稳定偏好、项目事实、进度变化、可复用故障经验和长期流程规则写入 Markdown,再用 reindex 建立文件索引。ReMe 0.4.1.0 虽支持向量 + BM25/RRF,但本项目当前保持其内部 embedding_store 为空,实际使用查询改写、工程术语扩展和多查询 BM25;配置 Qwen Embedding 后,由项目的 pgvector 索引提供向量召回。两路结果去重后,模型只依据证据回答。官方仓库:https://github.com/agentscope-ai/ReMe。
适配器会使用文件型记忆,并将数据放在项目 DATA_DIR 对应目录下。
需要特别理解两点:
auto_memory;普通问句只检索。reindex,扩展能力需另行接入对应 Job。当前尚未完成后台队列、重试、预算、同意与候选记忆审批闭环。下列命令只用于后续开发。
memU 当前官方仓库要求较新的 Python 版本,建议使用 Python 3.13 虚拟环境。安装:
git clone https://github.com/NevaMind-AI/memU.git /tmp/memU
cd /tmp/memU
git rev-parse HEAD
uv pip install -e .
当前保持关闭:
MEMU_ENABLED=false
memU 官方仓库:https://github.com/NevaMind-AI/memU。
后续实现目标是只生成待审批的候选记忆,默认不向用户主动推送,也不自动执行高风险动作;这些尚不是当前可验收功能。
GET /api/health
GET /api/systems
POST /api/chat
GET /api/memories?system=text2mem
DELETE /api/memories/{memory_id}?system=text2mem
GET /api/audit?system=text2mem
POST /api/reset
聊天请求示例:
curl -X POST http://localhost:8000/api/chat \
-H 'content-type: application/json' \
-d '{
"system": "text2mem",
"message": "记住:项目使用 PostgreSQL 和 FastAPI"
}'
后端:
cd backend
source .venv-reme/bin/activate
uv pip install "pytest>=8.3,<9" "pytest-asyncio>=0.25,<1" "ruff>=0.9,<1"
python -m pytest -q
ruff check app tests
python -m compileall -q app tests
前端:
cd frontend
npm run build
npm audit --omit=dev
确认后端是否运行:
curl http://localhost:8000/api/health
如果无法访问,请先启动 FastAPI。
postgres 之外的存储模式这表示后端连接 PostgreSQL 失败,暂时使用了本地 JSON 降级存储。请检查:
docker compose ps
docker compose logs postgres
并确认 .env 中的 DATABASE_URL 与 Docker 端口一致。
/api/health 会在降级时附带 storage_error。如果更换了 Embedding 向量维度,现有 memory_embeddings 表与新维度不一致也会触发降级;应先迁移或在确认无需历史数据后重建数据卷。
当前项目只启用 Text2Mem 和 ReMe;Mem0、Letta、memU 保持关闭。查看 /api/systems 可以获得具体 setup_hint。
Text2Mem 仍可使用本地证据模式,但不会调用外部模型。若要让模型生成自然语言回答,请填写 LLM_API_KEY 并重启后端;模型服务临时失败时,Text2Mem 也会自动退回本地证据模式,写入和检索仍可继续。
ReMe 一轮写入会依次执行记忆提取、重建索引、可选向量同步、检索和证据回答,通常比 Text2Mem 慢。前端聊天请求允许最长 120 秒,删除和重置允许 60 秒;处理中不要重复发送同一条消息。如果超过时限,检查后端日志和模型服务延迟。
可以在 Web 页面点击“清空记忆”,也可以调用:
curl -X POST http://localhost:8000/api/reset \
-H 'content-type: application/json' \
-d '{"system":"text2mem"}'
如果要清空所有系统:
curl -X POST http://localhost:8000/api/reset \
-H 'content-type: application/json' \
-d '{}'
.env、API Key、真实用户数据提交到 Git;docker compose down -v 会删除本地数据库数据;