REST API 服务

MemOS 提供了一个使用 FastAPI 编写的 REST API 服务。用户可以通过 REST 接口执行所有操作。

MemOS REST API 服务支持的 API

功能特点

以下是你的英文内容的中文翻译,专有名词保持不变:

  • 注册新用户:使用配置信息和默认的 cube 注册一个新用户。
  • 获取推荐查询:为指定用户获取推荐的查询语句。
  • 获取用户所有记忆:获取某个用户的所有记忆内容。
  • 添加新记忆:为指定用户创建一条新的记忆。
  • 搜索记忆:为指定用户搜索其记忆内容。
  • 与 MemOS 对话:与 MemOS 进行对话,返回 SSE 流式响应。

本地运行

使用 Docker Compose up

开发环境的 Docker Compose up 已预配置了 qdrant、neo4j。 运行服务器需要环境变量 OPENAI_API_KEY

在根目录中创建一个 .env 文件并设置你的环境变量。例如:

# 用户key,用于初始化或默认请求用户
OPENAI_API_KEY=your-openai-api-key  

# OpenAI 接口地址,默认 https://api.openai.com/v1。如走代理或自建兼容服务,改这里。
OPENAI_API_BASE=your-openai-ip

# http_bge(HTTP 服务版 BGE 重排)或 cosine_local(本地余弦)。
MOS_RERANKER_BACKEND=cosine_local

# universal_api:使用 OpenAI 聊天与嵌入 ,
# Ollama:使用本地 Ollama 嵌入
MOS_EMBEDDER_BACKEND=universal_api

# 嵌入模型
MOS_EMBEDDER_MODEL=bge-m3

# 接口地址(OpenAI 为 https://api.openai.com/v1;Azure 为你的 endpoint)
MOS_EMBEDDER_API_BASE=your-openai-ip

# 对应 provider 的 Key
MOS_EMBEDDER_API_KEY=EMPTY

# 向量维度
EMBEDDING_DIMENSION=1024

# 扩展
# MOS_SESSION_ID: 会话 ID(用于 start_api.py 路线)
# MOS_TOP_K: 检索/召回的候选上限(如 30、50)
# MOS_MAX_TOKENS: LLM 生成最大 tokens
# MOS_TOP_P / MOS_TOP_K(生成): 生成采样参数(注意与检索的 top_k 含义不同)
# MOS_CHAT_TEMPERATURE: 生成温度
# MOS_MAX_TURNS_WINDOW: 对话窗口保留轮数
# MOS_EMBEDDER_PROVIDER: openai 或 azure

启动docker客户端

进入docker文件夹

# 当前文件夹下进入docker文件夹
cd docker

安装对应依赖模块


pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt
# 使用阿里云源安装依赖
pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

在docker目录下使用 Docker Compose Up启动容器(保证vpn正常连接):


# 首次运行需要build
docker compose up --build
# 再次运行则不需要
docker compose up

通过 http://localhost:8000/docs 访问 API。

示例流程

(注册用户->查询用户记忆(没有继续往后)->添加用户记忆->查询用户记忆)
注册用户 http://localhost:8000/product/users/register (POST)
# 响应
{
    "code": 200,
    "message": "User registered successfully",
    "data": {
        "user_id": "8736b16e-1d20-4163-980b-a5063c3facdc",
        "mem_cube_id": "b32d0977-435d-4828-a86f-4f47f8b55bca"
    }
}
添加用户记忆 http://localhost:8000/product/add (POST)
# 请求参数
{
  "user_id": "8736b16e-1d20-4163-980b-a5063c3facdc",
  "mem_cube_id": "b32d0977-435d-4828-a86f-4f47f8b55bca",
  "messages": [
    {
      "role": "user",
      "content": "我喜欢草莓"
    }
  ],
  "memory_content": "",
  "doc_path": "",
  "source": "",
  "user_profile": false
}
# 响应
{
    "code": 200,
    "message": "Memory created successfully",
    "data": null
}
查询用户记忆 http://localhost:8000/product/search (POST)
# 请求参数
{
  "query": "我喜欢什么",
  "user_id": "8736b16e-1d20-4163-980b-a5063c3facdc",
  "mem_cube_id": "b32d0977-435d-4828-a86f-4f47f8b55bca"
}
# 响应
{
    "code": 200,
    "message": "Search completed successfully",
    "data": {
        "text_mem": [
          {
            "cube_id": "7231eda8-6c57-4f6e-97ce-98b699eebb98",
            "memories": [
              {
                  "id": "2f40be8f-736c-4a5f-aada-9489037769e0",
                  "memory": "[user观点]用户喜欢草莓。",
                  "metadata": {
                      "user_id": "de8215e3-3beb-4afc-9b64-ae594d62f1ea",
                      "session_id": "root_session",
                      "status": "activated",
                      "type": "fact",
                      "key": "用户对草莓的喜好",
                      "confidence": 0.99,
                      "source": null,
                      "tags": [
                          "喜好",
                          "草莓"
                      ],
                      "visibility": null,
                      "updated_at": "2025-09-18T08:23:44.625479000+00:00",
                      "memory_type": "UserMemory",
                      "sources": [],
                      "embedding": [],
                      "created_at": "2025-09-18T08:23:44.625511000+00:00",
                      "usage": [
                          "{\"time\": \"2025-09-18T08:24:17.759748\", \"info\": {\"user_id\": \"de8215e3-3beb-4afc-9b64-ae594d62f1ea\", \"session_id\": \"root_session\"}}"
                      ],
                      "background": "用户表达了对草莓的喜好,显示出他们在饮食偏好上的倾向。",
                      "relativity": 0.6349761312470591,
                      "vector_sync": "success",
                      "ref_id": "[2f40be8f]",
                      "id": "2f40be8f-736c-4a5f-aada-9489037769e0",
                      "memory": "[user观点]用户喜欢草莓。"
                  },
                  "ref_id": "[2f40be8f]"
              },
              ...
            }
          }
        ],
        "act_mem": [],
        "para_mem": []
    }
}



# 响应失败,原因排查
# src/memos/api/config.py
# 检查get_neo4j_community_config方法中配置的"neo4j_vec_db"和"EMBEDDING_DIMENSION"

对服务器代码或库代码进行修改将自动重新加载服务器。

使用 Docker

在根目录中创建一个 .env 文件并设置你的环境变量。例如:

OPENAI_API_KEY=your-openai-api-key  



# 在docker 配置用于neo4j和qdrant
QDRANT_HOST=host.docker.internal

NEO4J_URI=bolt://host.docker.internal:7687

本地构建 Docker 镜像:

docker build -t memos-api-server .

先在docker中启动 neo4j 和 qdrant

运行 Docker 容器:

docker run --env-file .env -p 8000:8000 memos-api-server

通过 http://localhost:8000/docs 访问 API。

测试用例 (注册用户->添加用户记忆->查询用户记忆) 参考Docker Compose up测试用例

不使用 Docker

在根目录中创建一个 .env 文件并设置你的环境变量。例如:

OPENAI_API_KEY=your-openai-api-key  

OPENAI_API_BASE=your-openai-ip

MOS_RERANKER_BACKEND=cosine_local

MOS_EMBEDDER_BACKEND=universal_api

MOS_EMBEDDER_MODEL=bge-m3

MOS_EMBEDDER_API_BASE=your-openai-ip

MOS_EMBEDDER_API_KEY=EMPTY

EMBEDDING_DIMENSION=1024


# 配置用于neo4j和qdrant
QDRANT_HOST=host.docker.internal

NEO4J_URI=bolt://host.docker.internal:7687

安装 Poetry 用于依赖管理:

curl -sSL https://install.python-poetry.org | python3 -

Poetry 环境变量配置:


#要开始使用,您需要在“PATH”中找到Poetry的bin目录(/Users/jinyunyuan/.local/bin)`环境变量
# 现代 macOS 系统默认的 Shell 是 zsh。你可以通过以下命令确认
1. 确定你使用的 Shell

echo $SHELL
# 如果输出是 /bin/zsh 或 /usr/bin/env zsh,那么你就是 zsh。
# (如果你的系统版本较老,可能还在使用 bash,输出会是 /bin/bash)
2. 打开对应的 Shell 配置文件
# 如果使用的是 zsh (绝大多数情况):
# 使用 nano 编辑器(推荐新手)
nano ~/.zshrc

# 或者使用 vim 编辑器
# vim ~/.zshrc
# 如果使用的是 bash:
nano ~/.bash_profile
# 或者
nano ~/.bashrc

3. 添加 PATH 环境变量

# 在打开的文件的最末尾,新起一行,粘贴安装提示给你的那行命令:
export PATH="/you-path/.local/bin:$PATH"

4. 保存并退出编辑器

# 如果你用的是 nano:
# 按 Ctrl + O 来写入(保存),按 Enter 确认文件名。
# 然后按 Ctrl + X 退出编辑器。

# 如果你用的是 vim:
# 按 i 进入插入模式,粘贴代码后,按 ESC 键退出插入模式。
# 输入 :wq,然后按 Enter 来保存并退出。

5. 使配置立刻生效
# 刚刚修改的配置文件不会自动在当前已打开的终端窗口生效,你需要运行以下命令之一来重新加载它:

# 对于 zsh:
source ~/.zshrc

# 对于 bash:
source ~/.bash_profile

6. 验证安装是否成功
# 现在,你可以执行提示中的测试命令来检查一切是否就绪:
poetry --version
# 成功后将显示版本号 Poetry (version 2.2.0)

安装所有项目依赖和开发工具:

make install

先在docker中启动 neo4j 和 qdrant

启动 FastAPI 服务器(在MomOS目录下):

uvicorn memos.api.product_api:app --host 0.0.0.0 --port 8000 --reload

服务器运行后,您可以使用OpenAPI文档测试API,网址为 http://localhost:8000/docs 或者 http://127.0.0.1:8000/docs

测试用例 (注册用户->添加用户记忆->查询用户记忆) 参考Docker Compose up测试用例

使用 pyCharm 启动

运行 start_api

1、进入MemOS/docker/Dockerfile文件,修改运行配置
# Start the docker
CMD ["uvicorn", "memos.api.start_api:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

2、进入目录MemOS/src/memos/api 直接运行start_api.py

运行 product_api

1、进入MemOS/docker/Dockerfile文件,修改运行配置
# Start the docker
CMD ["uvicorn", "memos.api.product_api:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

2、进入目录MemOS/src/memos/api 直接运行product_api.py