🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智能体记忆系统 MemTensor/MemOS

DeepSeek Harnessv2.0.21
MemTensor0 天前有提交已提供中文文档扫描:高危

自进化记忆 OS,服务 LLM 与 AI 智能体:超持久记忆、混合检索、跨任务技能复用,省 35.24% token,支持 DeepSeek Harness。

71.3/100
综合分
12,228
GitHub 星标
3,529
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @memtensor/memos-local-plugin
npm 源 · @memtensor/memos-local-plugin 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · search
装得上吗
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 0 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过

安装清单取自 apps/memos-local-plugin/package.json

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@memtensor/memos-local-plugin @ 2.0.21
✓Node 引擎要求 >=22.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 02:34:03

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 117 处,展示前 115 条)
  • 读取密钥环境变量
    dist/core/config/index.js:211
    return process.env.OPENCODE_GO_API_KEY;
  • 读取密钥环境变量
    dist/core/config/index.js:214
    return process.env.OPENCODE_ZEN_API_KEY;
  • 读取本地文件
    dist/core/config/paths.js:33
    const legacyDb = existsSync(join(legacyHome, "data", "memos.db"));
  • 读取本地文件
    dist/core/config/paths.js:34
    const canonicalDb = existsSync(join(installRoot, "data", "memos.db"));
  • 读取本地文件
    dist/core/config/paths.js:58
    const value = JSON.parse(readFileSync(markerFile, "utf8"));
  • 写入本地文件
    dist/core/config/paths.js:72
    mkdirSync(pathResolve(markerFile, ".."), { recursive: true });
  • 写入本地文件
    dist/core/config/paths.js:79
    writeFileSync(tempFile, payload, { encoding: "utf8", mode: 0o600 });
  • 写入本地文件
    dist/core/config/paths.js:80
    renameSync(tempFile, markerFile);
  • 读取本地文件
    dist/core/config/paths.js:83
    if (existsSync(join(root, "config.yaml")) || existsSync(join(root, ".auth.json"))) {
  • 读取本地文件
    dist/core/config/paths.js:87
    return readdirSync(join(root, "skills")).length > 0;
  • 写入本地文件
    dist/core/logger/transports/file-rotating.js:70
    appendFileSync(this.fd, text, "utf8");
  • 写入本地文件
    dist/core/logger/transports/file-rotating.js:82
    mkdirSync(dirname(this.opts.filePath), { recursive: true, mode: 0o700 });
  • 读取本地文件
    dist/core/logger/transports/file-rotating.js:115
    if (!existsSync(this.opts.filePath))
  • 读取本地文件
    dist/core/logger/transports/file-rotating.js:123
    while (existsSync(target) || existsSync(target + ".gz")) {
  • 写入本地文件
    dist/core/logger/transports/file-rotating.js:128
    renameSync(this.opts.filePath, target);
  • 删除本地文件
    dist/core/logger/transports/file-rotating.js:137
    unlinkSync(target);
  • 读取本地文件
    dist/core/logger/transports/file-rotating.js:151
    const entries = readdirSync(dir)
  • 删除本地文件
    dist/core/logger/transports/file-rotating.js:158
    unlinkSync(e.full);
  • 读取本地文件
    dist/core/logger/transports/file-rotating.js:176
    return statSync(p).mtimeMs;
  • 发起网络请求
    dist/core/llm/fetcher.js:43
    const resp = await fetch(opts.url, {
  • 发起网络请求
    dist/core/llm/fetcher.js:168
    const resp = await fetch(opts.url, {
  • 读取本地文件
    dist/core/embedding/providers/local-process.js:19
    if (!existsSync(entry)) {
  • 执行外部命令来自配置/变量
    dist/core/embedding/providers/local-process.js:40
    const child = fork(fileURLToPath(entry), [], options);
  • 发起网络请求
    dist/core/embedding/fetcher.js:39
    const resp = await fetch(opts.url, {
  • 发起网络请求
    dist/core/hub/client.js:472
    const res = await fetch(`${normalizeHubUrl(hubUrl)}${route}`, {
  • 读取本地文件
    adapters/openclaw/index.ts:70
    const packageJsonPath = candidates.find((candidate) => existsSync(candidate));
  • 读取本地文件
    adapters/openclaw/index.ts:72
    const pkg = JSON.parse(readFileSync(packageJsonPath, "utf8")) as {
  • 读取本地文件
    adapters/openclaw/index.ts:114
    existsSync(path.join(candidate, "package.json")),
  • 读取本地文件
    adapters/openclaw/index.ts:132
    return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];
  • 执行外部命令来自配置/变量
    bridge/hermes-process.ts:74
    childProcess.execFileSync(file, [...args], options) as unknown as string;
  • 读取本地文件
    bridge/status.ts:45
    fs.readFileSync(statusFile, "utf8"),
  • 写入本地文件
    bridge/status.ts:147
    fs.mkdirSync(path.dirname(statusFile), { recursive: true });
  • 写入本地文件
    bridge/status.ts:148
    fs.writeFileSync(statusFile, JSON.stringify(next), "utf8");
  • 读取本地文件
    bridge.mts:109
    const raw = fs.readFileSync(pidPath, "utf8").trim();
  • 写入本地文件
    bridge.mts:120
    fs.mkdirSync(path.dirname(pidPath), { recursive: true });
  • 写入本地文件
    bridge.mts:121
    fs.writeFileSync(pidPath, String(process.pid), "utf8");
  • 读取本地文件
    bridge.mts:126
    const content = fs.readFileSync(pidPath, "utf8").trim();
  • 删除本地文件
    bridge.mts:127
    if (content === String(process.pid)) fs.unlinkSync(pidPath);
  • 读取本地文件
    bridge.mts:188
    fs.readFileSync(path.join(rootDir, "package.json"), "utf8"),
  • 读取本地文件
    bridge.mts:543
    if (fs.existsSync(path.join(__dirname, "package.json"))) return __dirname;
  • 读取本地文件
    bridge.mts:545
    if (fs.existsSync(path.join(parent, "package.json"))) return parent;
  • 读取密钥环境变量
    core/config/index.ts:244
    return process.env.OPENCODE_GO_API_KEY;
  • 读取密钥环境变量
    core/config/index.ts:247
    return process.env.OPENCODE_ZEN_API_KEY;
  • 读取本地文件
    core/config/paths.ts:75
    const legacyDb = existsSync(join(legacyHome, "data", "memos.db"));
  • 读取本地文件
    core/config/paths.ts:76
    const canonicalDb = existsSync(join(installRoot, "data", "memos.db"));
  • 读取本地文件
    core/config/paths.ts:101
    const value = JSON.parse(readFileSync(markerFile, "utf8")) as {
  • 写入本地文件
    core/config/paths.ts:123
    mkdirSync(pathResolve(markerFile, ".."), { recursive: true });
  • 写入本地文件
    core/config/paths.ts:130
    writeFileSync(tempFile, payload, { encoding: "utf8", mode: 0o600 });
  • 写入本地文件
    core/config/paths.ts:131
    renameSync(tempFile, markerFile);
  • 读取本地文件
    core/config/paths.ts:135
    if (existsSync(join(root, "config.yaml")) || existsSync(join(root, ".auth.json"))) {
  • 读取本地文件
    core/config/paths.ts:139
    return readdirSync(join(root, "skills")).length > 0;
  • 发起网络请求
    core/embedding/fetcher.ts:70
    const resp = await fetch(opts.url, {
  • 发起网络请求
    core/hub/client.ts:504
    const res = await fetch(`${normalizeHubUrl(hubUrl)}${route}`, {
  • 发起网络请求
    core/llm/fetcher.ts:79
    const resp = await fetch(opts.url, {
  • 发起网络请求
    core/llm/fetcher.ts:242
    const resp = await fetch(opts.url, {
  • 读取本地文件
    core/telemetry/sender.ts:44
    const raw = fs.readFileSync(credPath, "utf-8");
  • 读取本地文件
    core/telemetry/sender.ts:132
    const existing = fs.readFileSync(idFile, "utf-8").trim();
  • 写入本地文件
    core/telemetry/sender.ts:139
    fs.mkdirSync(path.dirname(idFile), { recursive: true });
  • 写入本地文件
    core/telemetry/sender.ts:140
    fs.writeFileSync(idFile, newId, "utf-8");
  • 读取本地文件
    core/telemetry/sender.ts:150
    const raw = fs.readFileSync(filePath, "utf-8").trim();
  • 写入本地文件
    core/telemetry/sender.ts:170
    fs.mkdirSync(path.dirname(filePath), { recursive: true });
  • 写入本地文件
    core/telemetry/sender.ts:171
    fs.writeFileSync(filePath, `${Date.now()}|${id}`, "utf-8");
  • 读取本地文件
    core/telemetry/sender.ts:180
    const existing = fs.readFileSync(filePath, "utf-8").trim();
  • 写入本地文件
    core/telemetry/sender.ts:187
    fs.mkdirSync(path.dirname(filePath), { recursive: true });
  • 写入本地文件
    core/telemetry/sender.ts:188
    fs.writeFileSync(filePath, today, "utf-8");
  • 发起网络请求
    core/telemetry/sender.ts:255
    const resp = await fetch(this.armsEndpoint, {
  • 读取本地文件
    core/telemetry/sender.ts:336
    lastPing = fs.readFileSync(this.dailyPingFile, "utf-8").trim();
  • 执行外部命令来自配置/变量
    dist/bridge/hermes-process.js:56
    const defaultExecFileSync = (file, args, options) => childProcess.execFileSync(file, [...args], options);
  • 读取本地文件
    dist/bridge/status.js:8
    const parsed = JSON.parse(fs.readFileSync(statusFile, "utf8"));
  • 写入本地文件
    dist/bridge/status.js:87
    fs.mkdirSync(path.dirname(statusFile), { recursive: true });
  • 写入本地文件
    dist/bridge/status.js:88
    fs.writeFileSync(statusFile, JSON.stringify(next), "utf8");
  • 读取本地文件
    dist/bridge.cjs:97
    const raw = fs.readFileSync(pidPath, "utf8").trim();
  • 写入本地文件
    dist/bridge.cjs:109
    fs.mkdirSync(path.dirname(pidPath), { recursive: true });
  • 写入本地文件
    dist/bridge.cjs:110
    fs.writeFileSync(pidPath, String(process.pid), "utf8");
  • 读取本地文件
    dist/bridge.cjs:114
    const content = fs.readFileSync(pidPath, "utf8").trim();
  • 删除本地文件
    dist/bridge.cjs:116
    fs.unlinkSync(pidPath);
  • 读取本地文件
    dist/bridge.cjs:186
    const pkgVersion = JSON.parse(fs.readFileSync(path.join(rootDir, "package.json"), "utf8")).version;
  • 读取本地文件
    dist/bridge.cjs:525
    if (fs.existsSync(path.join(__dirname, "package.json")))
  • 读取本地文件
    dist/bridge.cjs:528
    if (fs.existsSync(path.join(parent, "package.json")))
  • 读取本地文件
    dist/bridge.cjs:536
    return pathToEsmUrl(fs.existsSync(distAbs) ? distAbs : sourceAbs);
  • 读取本地文件
    dist/bridge.mjs:90
    const raw = fs.readFileSync(pidPath, "utf8").trim();
  • 写入本地文件
    dist/bridge.mjs:102
    fs.mkdirSync(path.dirname(pidPath), { recursive: true });
  • 写入本地文件
    dist/bridge.mjs:103
    fs.writeFileSync(pidPath, String(process.pid), "utf8");
  • 读取本地文件
    dist/bridge.mjs:107
    const content = fs.readFileSync(pidPath, "utf8").trim();
  • 删除本地文件
    dist/bridge.mjs:109
    fs.unlinkSync(pidPath);
  • 读取本地文件
    dist/bridge.mjs:166
    const pkgVersion = JSON.parse(fs.readFileSync(path.join(rootDir, "package.json"), "utf8")).version;
  • 读取本地文件
    dist/bridge.mjs:456
    if (fs.existsSync(path.join(__dirname, "package.json")))
  • 读取本地文件
    dist/bridge.mjs:459
    if (fs.existsSync(path.join(parent, "package.json")))
  • 读取本地文件
    scripts/normalize-sqlite-lock.cjs:9
    const lock = JSON.parse(fs.readFileSync(file, "utf8"));
  • 写入本地文件
    scripts/normalize-sqlite-lock.cjs:22
    fs.writeFileSync(file, JSON.stringify(lock, null, 2) + "\n");
  • 读取本地文件
    scripts/sync-hermes-version.cjs:19
    if (!fs.existsSync(packageJsonPath)) {
  • 读取本地文件
    scripts/sync-hermes-version.cjs:22
    if (!fs.existsSync(manifestPath)) {
  • 读取本地文件
    scripts/sync-hermes-version.cjs:28
    packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
  • 读取本地文件
    scripts/sync-hermes-version.cjs:39
    const manifest = fs.readFileSync(manifestPath, "utf8");
  • 写入本地文件
    scripts/sync-hermes-version.cjs:55
    fs.writeFileSync(manifestPath, synchronized, "utf8");
  • 读取本地文件
    server/middleware/static.ts:63
    const st = await stat(target);
  • 读取本地文件
    server/middleware/static.ts:77
    const buf = await readFile(target);
  • 读取本地文件
    server/middleware/static.ts:81
    const stream = createReadStream(target);
  • 执行外部命令固定命令
    server/routes/admin.ts:315
    const child = spawn("bash", ["-c", cmd], {
  • 执行外部命令来自配置/变量
    server/routes/admin.ts:346
    const child = spawn(command, [...args], { stdio: "ignore" });
  • 读取本地文件
    server/routes/auth.ts:128
    if (!existsSync(p)) return null;
  • 读取本地文件
    server/routes/auth.ts:130
    const raw = JSON.parse(readFileSync(p, "utf8")) as AuthState;
  • 写入本地文件
    server/routes/auth.ts:142
    mkdirSync(dirname(p), { recursive: true });
  • 写入本地文件
    server/routes/auth.ts:143
    writeFileSync(p, JSON.stringify(state, null, 2), "utf8");
  • 写入本地文件
    server/routes/auth.ts:145
    chmodSync(p, 0o600);
  • 读取本地文件
    server/routes/auth.ts:376
    if (existsSync(p)) {
  • 读取本地文件
    server/routes/import-export.ts:414
    const info = await stat(path);
  • 读取本地文件
    server/routes/import-export.ts:424
    const raw = await readFile(path, "utf8");
  • 读取本地文件
    server/routes/import-export.ts:537
    const agentEntries = await readdir(path, { withFileTypes: true });
  • 读取本地文件
    server/routes/import-export.ts:548
    sessionFiles = (await readdir(sessionsDir))
  • 读取本地文件
    server/routes/import-export.ts:560
    fallbackTs = Math.floor((await stat(filePath)).mtimeMs);
  • 读取本地文件
    server/routes/import-export.ts:566
    raw = await readFile(filePath, "utf8");
  • 读取本地文件
    server/routes/migrate.ts:132
    if (!existsSync(path)) {
  • 读取本地文件
    server/routes/migrate.ts:162
    if (!existsSync(path)) {
  • 发起网络请求
    server/routes/models.ts:399
    const r = await fetch(url, { ...init, signal: ctrl.signal });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 超持久记忆
  • 混合检索
  • 跨任务技能复用
memos-local-plugin-v2.0.212026-10-29
· 更新日志 · 新增 · 本地模型设置:Viewer 设置页现在提供本地嵌入的镜像 URL、模型路径、缓存目录、离线模式和加载超时。 · 改进 · 运行时兼容性:插件现在使用 SQLite 13.0.3 的 Node-API 预构建包,并要求实际宿主进程使用 Node 22 或更高版本。 · 修复 · 记忆恢复与捕获边界:修复脏数据恢复、孤儿 trace 写入和 LLM 空响应重试的稳定性问题。
v2.0.342026-09-23
MemoryOS 2.0.34 release.
原文(未汉化)
memos-local-plugin-v2.0.202026-09-21
· 更新日志 · 修复 · 记忆恢复与捕获边界:修复了脏数据恢复、孤儿 trace 写入和 LLM 空响应重试的稳定性问题。 · 记忆演化与 Hermes 安装改进:提升了记忆演化和 Hermes 安装的可靠性,整体性能更好。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
MemOS 2.0 Stardust(星尘) 让 Agent 拥有持续记忆与成长能力 [!TIP] 新支持:为 DeepSeek Harness(dsh)接入 MemOS 在 DeepSeek Harness 中使用自动召回、后台记忆沉淀、混合检索和本地记忆查看器;它们均由同一套 MemOS 核心驱动,并可复用于不同 Agent 生态。 开始接入 → 👾 MemOS:面向 LLM 与 AI Agent 的记忆操作系统 MemOS 是一个面向 LLM 与 AI Agent 的记忆操作系统,统一了长期记忆的存/取/管,内置 KB、多模态、工具记忆 与 企业级 优化,实现上下文感知与个性化的交互。 核心特性 - 统一记忆 API:用单一 API 完成记忆的增、删、改、查——以图结构组织,可检视、可编辑,不是黑盒向量库。 - 多模态记忆:原生支持文本、图像、工具轨迹与人格,在同一记忆系统中统一检索与推理。 - 多 Cube 知识库管理:将多个知识库组合为可复用的记忆 Cube,实现跨用户、项目与 Agent 的隔离、受控共享与动态组合。 - MemScheduler 异步写入:以异步方式执行记忆操作,毫秒级延迟,保障高并发下的生产稳定性。 - 记忆反馈与修正:通过自然语言反馈精炼记忆——可纠正、补充或替换已有记忆,持续演进。
展开完整文档(README 剩余 1 节)
MemOS 2.0 Stardust(星尘)

让 Agent 拥有持续记忆与成长能力

[!TIP]
新支持:为 DeepSeek Harness(dsh)接入 MemOS

在 DeepSeek Harness 中使用自动召回、后台记忆沉淀、混合检索和本地记忆查看器;它们均由同一套 MemOS 核心驱动,并可复用于不同 Agent 生态。

开始接入 →

👾 MemOS:面向 LLM 与 AI Agent 的记忆操作系统

MemOS 是一个面向 LLM 与 AI Agent 的记忆操作系统,统一了长期记忆的存/取/管,内置 KB、多模态、工具记忆 与 企业级 优化,实现上下文感知与个性化的交互。

核心特性

- 统一记忆 API:用单一 API 完成记忆的增、删、改、查——以图结构组织,可检视、可编辑,不是黑盒向量库。
- 多模态记忆:原生支持文本、图像、工具轨迹与人格,在同一记忆系统中统一检索与推理。
- 多 Cube 知识库管理:将多个知识库组合为可复用的记忆 Cube,实现跨用户、项目与 Agent 的隔离、受控共享与动态组合。
- MemScheduler 异步写入:以异步方式执行记忆操作,毫秒级延迟,保障高并发下的生产稳定性。
- 记忆反馈与修正:通过自然语言反馈精炼记忆——可纠正、补充或替换已有记忆,持续演进。

News

- 2026-08-17 · 🐋 MemOS 完成 DeepSeek Harness 接入 MemOS 现已通过本地插件与云插件,为 DeepSeek Harness 提供长期记忆能力:任务开始前自动召回相关上下文,回合成功结束后持续沉淀新的经验,无需修改 DSH 核心。

- 2026-07-02 · 🏆 MemOS 在 Agent 与用户记忆榜单上全面领先 在 MemOS 的加持下,OpenClaw 在五个 Agent 任务上的平均任务完成率从 36.63% 提升到 50.87%。MemOS 在 LoCoMo 取得 88.83、LongMemEval 取得 89.20,并在 OmniMemEval(覆盖 14 款商业记忆产品、十个数据集的统一评测)中领先。

- 2026-05-09 · 🧠 memos-local-plugin 2.0 Hermes Agent 与 OpenClaw 官方本地记忆插件。单一核心驱动自演化记忆:L1 轨迹、L2 策略、L3 世界模型与结晶化 Skill,本地优先存储 + 反馈驱动检索。

- 2026-04-10 · 👧🏻 MemOS Hermes Agent 本地插件 官方 Hermes Agent 记忆插件发布:混合检索(FTS5 + 向量)、智能去重、分层技能演化、多 Agent 协作。100% 本地,零云依赖。

- 2026-03-08 · 🦞 MemOS OpenClaw 插件——云端与本地 官方 OpenClaw 记忆插件发布。云插件:托管记忆服务,token 用量降低 72%,支持多 Agent 记忆共享(MemOS-Cloud-OpenClaw-Plugin)。本地插件(v1.0.0):100% 端侧记忆,持久化 SQLite,混合检索(FTS5 + 向量),任务摘要与技能演化,多 Agent 协作,配套完整记忆查看器面板。

📊 性能表现

MemOS 在多个评测榜单中处于领先地位——与主流商业记忆产品横向对比,覆盖 5 个用户记忆榜单和 5 个 Agent 记忆任务。

| 榜单 | 分数 |
| LoCoMo | 88.83 |
| LongMemEval | 89.20 |
| PersonaMem v2 | 40.58 |
| HaluMem | 80.91 |
| BEAM-10M | 56.75 |
| GDPVal | 62.07 |
| LiveCodeBench | 64.96 |
| OmniMath | 61.00 |
| SWE-Bench | 38.46 |
| BrowseComp-Plus | 23.85 |

评测框架 OmniMemEval——https://github.com/MemTensor/OmniMemEval。

🎯 MemOS 适用于

MemOS 为 AI agent 提供长期记忆能力,典型场景:

- AI 助手:保持上下文一致的连续对话
- 客服系统:召回历史工单与用户信息,提供针对性帮助
- 个性化 agent:适应用户偏好,持续学习与调整
- 多 agent 协作:共享或隔离的记忆空间

🚀 快速开始

MemOS 提供四种使用方式,按你的场景选择。

| | Cloud API | 本地部署 | MemOS 云插件 | 本地插件 |
| 适合谁 | 自建应用,全托管 | 自建基础设施的团队 | OpenClaw 用户,零运维 | DeepSeek Harness、Hermes 或 OpenClaw,100% 端侧 |
| 启动方式 | 申请 API Key | docker compose up | openclaw plugins install | npm install + 按 Agent 配置 |
| 依赖设施 | 无(托管) | Neo4j + Qdrant | 无(使用 MemOS Cloud) | 无(本地 SQLite) |
| 数据存放 | MemOS Cloud | 你的服务器 | MemOS Cloud | 你的机器 |

☁️ 使用 Cloud API(托管)

想通过全托管服务给应用加记忆——无需自建任何基础设施。

1. 申请 API Key:

- 在 MemOS 控制台 注册。
- 进入 API Keys 复制你的 Key(以 mpg- 开头),请妥善保存在服务端。

2. 写入与检索记忆:

import requests

API_KEY = "mpg-..." # 请保存在服务端
base = "https://memos.memtensor.cn/api/openmem/v1"
headers = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"}

1. 写入一条记忆
requests.post(f"{base}/add/message", headers=headers, json={
"user_id": "alice",
"conversation_id": "conv_001",
"messages": [{"role": "user", "content": "I like strawberry"}],
})

2. 检索记忆
res = requests.post(f"{base}/search/memory", headers=headers, json={
"query": "What do I like?",
"user_id": "alice",
})
print(res.json())

下一步:

- MemOS Cloud 快速开始——几分钟内接入 MemOS Cloud 并启用记忆。
- MemOS Cloud 平台——探索云端控制台、功能与工作流。

🖥️ 本地部署 MemOS 服务

想把 MemOS 作为 REST 服务跑在自己的机器或集群上。

方式 A — Docker(推荐):

git clone https://github.com/MemTensor/MemOS.git
cd MemOS
cp docker/.env.example .env # 在 .env 中填入你的 API key
cd docker
docker compose up # 启动 MemOS API + Neo4j + Qdrant

API 服务地址:http://localhost:8000。

方式 B — 用 uvicorn 启动(不用 Docker):

git clone https://github.com/MemTensor/MemOS.git
cd MemOS
cp docker/.env.example .env # 在 .env 中填入你的 API key
确保 Neo4j 和 Qdrant 已启动,然后:
cd src
uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8000 --workers 1

所有配置项(LLM、embedder、向量库、图库、调度器)见 docker/.env.example。完整部署指南:https://memos-docs.openmem.net/open_source/getting_started/rest_api_server/。

试用 API:

import requests, json

headers = {"Content-Type": "application/json"}
base = "http://localhost:8000/product"

1. 创建记忆 cube
requests.post(f"{base}/create_cube", headers=headers, data=json.dumps({
"cube_name": "Alice's memory",
"owner_id": "alice",
"cube_id": "alice_cube",
}))

2. 写入一条记忆
requests.post(f"{base}/add", headers=headers, data=json.dumps({
"user_id": "alice",
"writable_cube_ids": ["alice_cube"],
"messages": [{"role": "user", "content": "I like strawberry"}],
"async_mode": "sync",
}))

3. 检索记忆
res = requests.post(f"{base}/search", headers=headers, data=json.dumps({
"query": "What do I like?",
"user_id": "alice",
"readable_cube_ids": ["alice_cube"],
}))
print(res.json())

🧠 MemOS 插件:为你的 AI agent 提供持久记忆 ✨

OpenClaw、Hermes 与 DeepSeek Harness 均可接入同一套 MemOS 本地记忆核心;OpenClaw 与 DeepSeek Harness 还可选择托管的 MemOS 云插件 🏃🏻

| 🔌 插件 | 💡 核心特性 | 🧩 资源 |
| 🧠 memos-local-plugin 2.0 | | 🌐 官网 · 📖 文档 · 🐙 GitHub · 📦 NPM |
| ☁️ MemOS 云插件 | | 🖥️ MemOS 控制台 · 📖 完整教程 |

1. MemOS 云插件

使用 OpenClaw 或 DeepSeek Harness,想通过 MemOS Cloud 获得持久记忆——无需自建基础设施。

- 仓库: MemTensor/MemOS · apps/MemOS-Cloud-OpenClaw-Plugin
- NPM: @memtensor/memos-cloud-openclaw-plugin
- 控制台: https://memos-dashboard.openmem.net/
- 教程: https://memos-docs.openmem.net/openclaw/guide

安装:

openclaw plugins install @memtensor/memos-cloud-openclaw-plugin@latest
openclaw gateway restart

插件在每次 agent 运行前从 MemOS Cloud 召回记忆,运行结束后把新消息写回。

DeepSeek Harness

通过 DSH 原生插件机制为 DeepSeek Harness 接入 MemOS Cloud。每次用户请求的第一个模型步骤开始前,插件会自动召回相关云端记忆;当前回合成功结束后,再把新的用户与助手消息写回 MemOS Cloud。

1. 在 MemOS 控制台创建 API Key。
2. 将云插件安装到 DSH 默认的 web profile:

npx @deepseek-ai/dsh plugin --profile web add @memtensor/memos-cloud-dsh-plugin@latest

3. 在 ~/.dsh/.credentials.yaml 中写入 API Key:

MEMOS_API_KEY: mpg-your-key

4. 在 ~/.dsh/settings.yaml 中加入最小配置:

memos-cloud:
apiKeyEnv: MEMOS_API_KEY

5. 重启 DSH Web profile:

npx @deepseek-ai/dsh web

云插件采用 Fail-open 机制:MemOS Cloud 临时不可用时,不会中断当前 DSH 任务。

2. 本地插件(OpenClaw、Hermes 与 DeepSeek Harness)

使用 DeepSeek Harness、Hermes Agent 或 OpenClaw,想要 100% 端侧记忆——数据不离开本机。

- 仓库: MemTensor/MemOS · apps/memos-local-plugin
- NPM: @memtensor/memos-local-plugin
- 文档: https://memos-docs.openmem.net/cn/openclaw/local_plugin
- DeepSeek Harness: 接入说明
- 查看器面板: 见 apps/memos-local-plugin/viewer/

接入 DeepSeek Harness(macOS / Linux):

curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash -s -- --agent dsh --profile web

安装 OpenClaw 或 Hermes(macOS / Linux):

curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash

安装(Windows PowerShell):

irm https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.ps1 -OutFile "$env:TEMP\memos-install.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\memos-install.ps1"

需先安装 Node.js,且已安装 DeepSeek Harness、OpenClaw 或 Hermes。安装器会将 MemOS 部署到所选 Agent 运行时:DeepSeek Harness 以独立 DSH bundle 方式接入;OpenClaw 与 Hermes 则在各自的 Agent 主目录中写入初始 config.yaml。

特性:混合检索(FTS5 + 向量)、智能去重、分层技能演化(L1 轨迹 / L2 策略 / L3 世界模型)、多 agent 协作、本地优先 SQLite 存储。

🤝 社区

- GitHub Issues: https://github.com/MemTensor/MemOS/issues
- GitHub Discussions: https://github.com/MemTensor/MemOS/discussions
- Discord: https://discord.gg/Txbx3gebZR
- 微信: 扫码加入微信群。

📚 引用

如果在研究中使用 MemOS,请引用:

@article{li2025memos_long,
title={MemOS: A Memory OS for AI System},
author={Li, Zhiyu and Song, Shichao and Xi, Chenyang and Wang, Hanyu and Tang, Chen and Niu, Simin and Chen, Ding and Yang, Jiawei and Li, Chunyu and Yu, Qingchen and Zhao, Jihao and Wang, Yezhaohui and Liu, Peng and Lin, Zehao and Wang, Pengyuan and Huo, Jiahao and Chen, Tianyi and Chen, Kai and Li, Kehang and Tao, Zhen and Ren, Junpeng and Lai, Huayi and Wu, Hao and Tang, Bo and Wang, Zhenren and Fan, Zhaoxin and Zhang, Ningyu and Zhang, Linfeng and Yan, Junchi and Yang, Mingchuan and Xu, Tong and Xu, Wei and Chen, Huajun and Wang, Haofeng and Yang, Hongkang and Zhang, Wentao and Xu, Zhi-Qin John and Chen, Siheng and Xiong, Feiyu},
journal={arXiv preprint arXiv:2507.03724},
year={2025},
url={https://arxiv.org/abs/2507.03724}
}

@article{li2025memos_short,
title={MemOS: An Operating System for Memory-Augmented Generation (MAG) in Large Language Models},
author={Li, Zhiyu and Song, Shichao and Wang, Hanyu and Niu, Simin and Chen, Ding and Yang, Jiawei and Xi, Chenyang and Lai, Huayi and Zhao, Jihao and Wang, Yezhaohui and others},
journal={arXiv preprint arXiv:2505.22101},
year={2025},
url={https://arxiv.org/abs/2505.22101}
}

⚖️ 许可证

MemOS 基于 Apache 2.0 许可证 开源。
预览分享卡片长什么样 ↓MemTensor/MemOS
分享 · DeepSeek Harness Hub
MemTensor/MemOS

自进化记忆 OS,服务 LLM 与 AI 智能体:超持久记忆、混合检索、跨任务技能复用,省 35.24% token,支持 DeepSeek Harness。

回到顶部