Supermemory 自托管版如何以非交互方式(Docker/CI)部署并设置 LLM 密钥
2026/9/12 11:35:28 网站建设 项目流程

Supermemory 自托管版如何以非交互方式(Docker/CI)部署并设置 LLM 密钥

【免费下载链接】supermemoryMemory and context engine + app that is extremely fast, scalable, and can be run fully locally. The Memory API for the AI era.项目地址: https://gitcode.com/GitHub_Trending/su/supermemory

Supermemory 自托管版(self-hosted binary)默认在首次启动时通过交互式向导收集唯一的必填输入——一个 LLM provider 密钥。但在 Docker 容器或 CI 流水线这类没有 TTY 的环境里,向导根本不会出现,服务器也不会停下来等你粘贴密钥。因此非交互部署的正确做法是:先用安装器拿到supermemory-server二进制,再通过环境变量提供 LLM 密钥(以及可选的 embedding 配置),最后直接启动服务并用 Memory API 验证。本文基于仓库内apps/docs/self-hosting/的 quickstart、configuration 与 embeddings 文档,给出这条完整的操作路径。

为什么必须用环境变量而不是向导

文档明确说明:

  • 首启向导只在有 TTY 时出现;Docker、CI 或任何非交互部署“没有 TTY 就没有交互式提示”(no interactive prompt without a TTY)。
  • 服务器的唯一必填输入是一个 LLM provider 密钥,可以“通过环境变量设置以支持非交互部署”。
  • embedding 默认使用本地模型,不需要任何密钥;只有在你想用远程 embedding 时才需要通过环境变量切换。

所以下面这条路径的关键就是:把密钥交给环境变量,其余全部走默认。

第一步:安装 supermemory-server 二进制

安装器会检测操作系统与架构、下载对应二进制并校验。支持的平台:macOS(Apple Silicon 与 Intel)、Linux(x64 与 arm64):

# 三选一 curl -fsSL https://supermemory.ai/install | bash npx supermemory local bunx supermemory local

如果需要固定版本(CI 场景下通常更稳妥),可以给安装器传一个明确版本号,而不是latest

curl -fsSL https://supermemory.ai/install | bash -s -- 0.0.3

注意文档的警告:安装器只替换二进制,不升级数据;回滚到旧版本前要先备份数据目录,因为旧版本服务器可能无法理解新版本产生的数据或 schema 变更。

第二步:通过环境变量设置 LLM 密钥(必做)

配置文档给出的 provider 环境变量如下,配置至少一个

变量Provider
OPENAI_API_KEYOpenAI — 或任何 OpenAI 兼容端点(见下)
ANTHROPIC_API_KEYAnthropic
GEMINI_API_KEYGoogle AI Studio(Gemini)
GROQ_API_KEYGroq
WORKERS_AI_API_KEY+CLOUDFLARE_ACCOUNT_IDCloudflare Workers AI
GOOGLE_VERTEX_PROJECT_ID+GOOGLE_VERTEX_LOCATIONGCP Vertex AI

两条使用规则(均来自 configuration.mdx):

  • 同时配置多个 provider 时,使用上面表格中排序靠前的那一个。
  • 图片、视频、高保真 PDF 理解需要 Gemini 或 Vertex AI 密钥;纯文本摄取、记忆抽取和搜索用任意 provider 即可。

OpenAI 兼容端点 / 完全离线

OPENAI_API_KEY+OPENAI_BASE_URL这一组合覆盖任何 OpenAI 兼容端点:Ollama、LM Studio、vLLM、llama.cpp server、Together、Fireworks 等。文档给出的 Ollama 示例(sk-...ollama等位置都需要替换为你自己的值;OPENAI_API_KEY=ollama是文档原样给出的占位写法,本地 runner 不校验它,任意非空字符串即可):

# Ollama 示例 — gpt-oss-20b works great OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_API_KEY=ollama # any non-empty string for local runners OPENAI_MODEL=gpt-oss:20b

相关变量与默认值:

变量用途默认值
OPENAI_BASE_URLOpenAI 兼容端点 URLOpenAI
OPENAI_MODEL发送到该端点的模型 IDgpt-5.1
OPENAI_FAST_MODEL快/轻任务覆盖OPENAI_MODEL
OPENAI_TEXT_MODEL较重文本任务覆盖OPENAI_MODEL

生产级.env的完整示例(来自配置文档,sk-...替换为你的 OpenAI 密钥):

# Persistent data location SUPERMEMORY_DATA_DIR=/var/lib/supermemory # One LLM provider (required for extraction) OPENAI_API_KEY=sk-... # Optional — omit to keep local Xenova/bge-base-en-v1.5 (768d) # SUPERMEMORY_EMBEDDING_PROVIDER=openai # SUPERMEMORY_EMBEDDING_MODEL=text-embedding-3-small # SUPERMEMORY_EMBEDDING_DIMENSIONS=1536

文档说明这份配置已经足够支撑完整的摄取、记忆抽取和混合搜索(配合默认本地 embedding)。

第三步(可选):设置 embedding provider

默认情况下向量由本地模型Xenova/bge-base-en-v1.5(768 维)计算,不需要任何 embedding API 密钥。如果你的容器里想改用远程 embedding,或者默认英文模型不满足需求,通过以下环境变量设置:

变量用途默认值
SUPERMEMORY_EMBEDDING_PROVIDERlocalopenaigemini或 OpenAI 兼容远端local
SUPERMEMORY_EMBEDDING_MODEL所选 provider 的模型 idXenova/bge-base-en-v1.5
SUPERMEMORY_EMBEDDING_DIMENSIONS向量维度;必须与模型及已存数据匹配768
SUPERMEMORY_EMBEDDING_BASE_URLOpenAI 兼容 embedding API 的 base URL未设置

文档给出的 OpenAI embedding 示例:

OPENAI_API_KEY=sk-... SUPERMEMORY_EMBEDDING_PROVIDER=openai SUPERMEMORY_EMBEDDING_MODEL=text-embedding-3-small SUPERMEMORY_EMBEDDING_DIMENSIONS=1536

两条必须记住的限制(来自 embeddings.mdx):

  1. 维度不匹配会拒绝启动:配置的维度与已存储数据不一致时,服务器直接 refuse to boot。provider、model、dimensions 要一起设置,并在大批量回填之前定下来。
  2. 默认本地模型仅支持英文:非英文内容可以摄取成功,但稠密语义召回会很弱;多语言部署应切换到多语言模型(文档示例为SUPERMEMORY_EMBEDDING_MODEL=Xenova/bge-m3SUPERMEMORY_EMBEDDING_DIMENSIONS=1024)。

第四步:启动服务器并取回 API 密钥

在环境变量就绪后直接运行:

supermemory-server

首次启动会自动完成初始化——内嵌的 Supermemory 图引擎、本地 embedding、凭据生成。文档示例的首启输出(示例结果,具体值以你的环境为准):

┌──────────────────────────────────────────────────┐ │ url http://localhost:6767 │ │ database ./.supermemory │ │ api key sm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │ │ org id xxxxxxxxxxxxxxxxxxxxxx │ └──────────────────────────────────────────────────┘

保存这个 API key——它是之后每个请求的 bearer token。默认监听端口是6767(可用PORTSUPERMEMORY_PORT覆盖),全部状态默认存放在./.supermemory/(可用SUPERMEMORY_DATA_DIR重定向到如/var/lib/supermemory的持久化路径)。容器场景下把数据目录指到持久卷即可,这是文档中给出的可备份/迁移的单一状态目录。

另外注意:安装器写入的 API 密钥存放在~/.supermemory/env,并在每次启动时加载。如果在同一台机器上曾用安装器保存过密钥,它们会自动生效。

验证:写入第一条记忆并搜索

quickstart 文档给出的验证路径是用 Bearer 密钥直接打 API(sm_...替换为首启打印的 API key):

curl http://localhost:6767/v3/documents \ -H "Authorization: Bearer sm_..." \ -H "Content-Type: application/json" \ -d '{ "content": "I am Dhravya. I love building dev tools and I am allergic to peanuts.", "containerTag": "user_dhravya" }'

配置文档说明了这里的可预期行为:POST /v3/documents会在毫秒级返回,状态为queued;抽取、向量化、索引在后台队列中按受控节奏执行(默认并发SUPERMEMORY_INGEST_CONCURRENCY= 2)。也就是说“请求返回 queued”本身是正常的,不代表失败。

写入后用它验证检索:

curl http://localhost:6767/v3/search \ -H "Authorization: Bearer sm_..." \ -H "Content-Type: application/json" \ -d '{ "q": "what food should I avoid?", "containerTag": "user_dhravya" }'

两个请求都能用你保存的 API key 正常应答,就证明非交互部署链路(环境变量密钥 → 启动 → 认证 → 摄取/检索)已经打通。整个 Memory API——documents、memories、user profiles、spaces、filtering——对本地服务器与托管平台行为一致。

边界与限制

  • 没有 TTY 就没有向导:如果你发现容器里进程卡在等待输入,基本可以确认环境变量没生效——服务器在无 TTY 环境下不会提示,缺密钥时的表现以启动日志为准。
  • 换 embedding 模型不支持原地进行:不同模型(或不同维度)的向量不可比,必须换新数据目录或全量重新摄取;维度与已存数据不一致时服务器拒绝启动。
  • 平台独有能力不在自托管二进制里:Connectors(Google Drive、Notion、Gmail、OneDrive)、托管 MCP 端点、平台调优的抽取管线仅存在于托管平台;代码库里看到的其他环境变量如果是平台专用的,自托管二进制会直接忽略。
  • 摄取内存上限默认在启动基线之上1 GBSUPERMEMORY_EMBEDDING_RAM_LIMIT),超出后新文档排队等待而非丢弃——CI 中批量导入时若看到吞吐下降,这是文档预期的行为。

完整的环境变量清单、provider 选型表和 embedding 调优项见 Configuration、Providers 与 Embeddings。

【免费下载链接】supermemoryMemory and context engine + app that is extremely fast, scalable, and can be run fully locally. The Memory API for the AI era.项目地址: https://gitcode.com/GitHub_Trending/su/supermemory

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询