Skip to content

nabule/Prism

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

124 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Prism (棱镜) - 个人专属 AI 知识折射库

Prism Logo


🌈 Prism (棱镜):光的折射与思维的绚烂

无论是闪现的灵感、会议的摘要,还是随手拍下的网页,您丢进 Memos 的原始笔记,就像一束朴素、零散的 白光。 当这束光穿过 Prism 时,会被 AI 优雅地折射,化作清晰的层级大纲、精准的分级业务标签、高品质的待办事项与触手可及的 系统化知识。 零碎的想法进去了,出来的是一抹绚丽的知识彩虹。

Prism (棱镜) 是一款专为 Memos 深度定制开发的 个人离线 AI 知识库 Sidecar 伴生系统

  • Memos 负责前端超快捷地收集、记录和保存原始的想法。
  • Prism (Sidecar) 负责在后台进行 AI 结构化整理、标签双层治理、高保真本地附件解析、智能提醒通知、离线 RAG 拼装和一键搬家管理。

💡 为什么需要 Prism?解决哪些核心痛点?

在日常使用零碎备忘(如 Memos、Flomo)记录知识时,个人用户通常会遇到以下四大痛点,而 Prism 正是为此量身定制的解药:

痛点 1:碎片化信息变成“数字坟墓”

  • 现状:随手记录了大量一两句话的笔记、会议纪要或灵感,由于缺少时间整理和规范的标题,几天后便被淹没在信息洪流中,无法重用。
  • Prism 方案 (AI 智能整理):Sidecar 在后台自动异步拦截新笔记,利用大语言模型(如 DeepSeek)生成核心标题、要点摘要、下一步待办 (To-Do List),并自动通过原生 REFERENCE 关系双向锚定,将凌乱想法秒变结构化闪念卡片。

痛点 2:标签野蛮生长与“标签污染”

  • 现状:手动分类时,今天写了 #部署,明天写了 #deployment,后天又写了 #deploy,标签体系彻底混乱。或者放任 AI 乱打标签,导致标签列表瞬间膨胀上百个。
  • Prism 方案 (双层审核治理):独创**“正式标签 (Active)”“候选标签 (Candidate)”**双层治理架构。
    • 只有经过管理员审核通过的标签才会真正应用于笔记归档。
    • AI 提出的新颖标签或用户手写的新标签,将一律扣留在“待审核 (Candidate)”队列中,并支持拼音首字母模糊归一,确保知识树结构始终优雅、干练。

痛点 3:非结构化文件(脑图、流程图)无法被检索

  • 现状:在笔记中上传了 Draw.io 流程图或思维导图 JSON 作为附件。普通的文本搜索工具根本无法读取其内部的文字节点,导致这部分重度知识彻底“失联”。
  • Prism 方案 (100% 本地离线高保真解析)
    • Draw.io 解析:本地使用 zlib 自动解密还原 base64 字节流并解析 XML 树,提取所有图形节点的文本,过滤多余 HTML,秒转干净 Markdown 列表。
    • Mind Elixir 脑图:通过递归遍历 JSON 节点树,在微秒级内转化为带缩进的 Markdown 大纲。
    • 100% 离线隐私:这两种解析不需要向任何第三方大模型上传文件,完全在您的本地沙箱执行,零 Token 成本,彻底阻绝隐私泄露。

痛点 4:隐私安全与大模型开销冲突 ( RAG )

  • 现状:想要将个人几十万字的笔记交给大模型做知识问答,但又极其抗拒将自己所有的日常日记、工作记录和密码资产直接暴露给云端 AI 厂商。
  • Prism 方案 (离线 QA & Prompt 编译器 - 自适应双通道召回)
    • 在 Sidecar 管理页面提供了一个高度隐私的本地 QA 离线问答面板。
    • 自适应双通道:新增**“从向量库里取”一键开关。勾选时,调用嵌入模型完成 Query 向量计算,走本地向量库语义检索(Semantic RAG)并配合严格的后置标签与逻辑关系(AND/OR)过滤器;未勾选或向量服务不可用时,平滑且无感降级为“业务标签 + 正文模糊”双路精准召回**,并融合附件 Artifacts 解析大纲。
    • 后台拼接带有高保真参考上下文的**“超级 Prompt”**,提供“一键复制”动画按钮,把数据隐私控制权 100% 留给您。

🚀 核心功能大观

功能模块 业务表现 解决的痛点 融入日常工作流
🌈 AI 智能整理 自动提取标题、生成结构化摘要、精炼核心要点、提取执行待办。 灵感杂乱无序、缺乏归纳和下一步行动指南。 Memos 中保存随笔,1-2秒内侧栏自动生成 AI 归档卡片并原生双向引用。
🏷️ 双层标签治理 正式/候选标签物理隔离,标签总结支持 临时提示词覆盖 (collapsible details) 渲染生成。 AI 滥发标签,标签分类散乱,总结提示词不便于按需在线实时调整。 新标签进入管理端等待审核;需要根据特定领域偏好生成总结时,一键展开临时提示词卡片直接覆盖。
💻 本地离线解析 100% 本地离线解析 .drawio / .drawio.svgMind Elixir JSON 大纲。 附件图表内容不可读,无法被 AI 引用或索引。 直接将脑图、流程图传到 Memos 附件中,后台零开销秒转纯文本 Markdown 大纲。
🔍 离线 RAG 编译器 向量库语义检索 (Semantic Search)文本/标签精准检索 自适应双通道召回。 担忧云端厂商泄露全部私密知识库,或不想承受昂贵的云端 RAG 托管费。 打开 QA 问答页面,一键勾选“从向量库里取”,输入问题即可复制专属于您的 RAG 上下文 Prompt。
时间智能提醒 识别正文中自然语言,提取到期时间写入 SQLite,Bark (Webhook) 定时通知。 随手记下的待办事项,缺乏通知提醒导致遗忘。 写下 #提醒 明天上午 10:00 提交周报,时间一到,您的手机(iOS Bark)即刻弹出消息推送。
💾 一键跨容器备份 Memos 数据库 + 物理附件 + Sidecar 数据库 + 向量索引 + 配置文件一键全局热备份与恢复。 容器化部署在异地迁移、版本升级或多卷映射下备份极其繁琐。 执行 backup.sh 生成自包含压缩包,在别处解压运行 restore.sh 瞬间秒级异地完美搬家。

🔌 依赖的外部服务

Prism 需要以下外部服务才能正常运行核心 AI 功能。所有 API Key 通过环境变量注入,不写入配置文件或 Git 仓库。

🧠 推理大模型(必需)

AI 整理、标签总结、提醒抽取等核心功能依赖 OpenAI-compatible 推理大模型,默认使用 DeepSeek。支持以下 provider,可在 config/models.yaml 中切换或在管理页面实时修改:

Provider 默认模型 环境变量 Base URL
DeepSeek(默认) deepseek-v4-flash DEEPSEEK_API_KEY https://api.deepseek.com
OpenRouter google/gemma-3-27b-it OPENROUTER_API_KEY https://openrouter.ai/api/v1
OpenAI gpt-4o-mini OPENAI_API_KEY https://api.openai.com/v1

至少配置一个 provider 的 API Key,否则 AI 整理功能无法工作。推荐优先使用 DeepSeek(性价比高)或 OpenAI(准确性高)。

📐 嵌入大模型(默认开启)

向量语义检索功能依赖嵌入模型,默认即开启vector_search.enabled: true)。当未配置嵌入 Key 时,Worker 会跳过向量入库,QA 面板自动降级为「业务标签 + 正文模糊」双路精准召回,不会影响主流程。

Provider 模型 环境变量 Base URL
SiliconFlow BAAI/bge-m3 SILICONFLOW_API_KEY https://api.siliconflow.cn/v1

如需关闭可在 config/app.yaml 或管理页面 /admin/ui#vector-search 中把 vector_search.enabled 设为 false;如需启用 RAG 增强问答只需配置 SILICONFLOW_API_KEY 环境变量。

📄 MinerU 文档解析(Office/PDF 附件)

.doc.docx.xls.xlsx.ppt.pptx.pdf 附件通过 MinerU 服务转为 Markdown 参与 AI 整理:

配置项
环境变量 MINERU_API_TOKEN
Base URL https://mineru.net
模型版本 vlm(可在 config/app.yaml 中修改 document_parser.mineru_model_version

不配置 MINERU_API_TOKEN 时,Office/PDF 附件将无法解析,但不影响纯文本、Draw.io、Mind Elixir 附件的处理。

📦 Docker 容器化一键部署与升级

为了保障在多租户 SaaS 部署、本地家庭网关等生产环境下的极简运维,Prism 现已支持 GitHub Actions 自动编译构建,并配备了完全自包含的一键部署脚本:

一键极速拉起步骤(全新部署 / 迁移)

在任何已安装 Docker 和 Bash 的宿主机(如本地 WSL2、家庭云服务器、公网 VPS)中,您仅需在打算存放数据的空目录下,执行以下一行命令即可:

# 执行自包含一键部署工具
bash <(curl -s -L https://raw.githubusercontent.com/nabule/Prism/master/deploy.sh)

deploy.sh 脚本将在幕后全自动为您完成以下动作

  1. 构建安全拓扑:在当前目录下初始化 config/data/memos/data/sidecar/logs/caddy/docs/ 等挂载文件夹。
  2. 配置文件统一来自仓库:所有默认配置(gateway/Caddyfileconfig/app.yamlconfig/models.yamlconfig/prompts.yamlconfig/taxonomy.yamldocker-compose.release.yml)按需从仓库释放或下载,脚本不再内嵌 heredoc,避免脚本与仓库分歧。可通过 PRISM_REPO_RAW_BASE / PRISM_REF 环境变量覆盖来源分支或镜像。
  3. 强密钥生成:自动调用 OpenSSL 随机算法生成 16 字节超强随机 SIDECAR_ADMIN_TOKEN,直接写入新建的 .env 文件中,默认即为最高防御状态。
  4. 拉取与热启动:执行 docker compose -f docker-compose.release.yml pull 从官方 Container Registry (GHCR) 一秒拉取 prebuilt 生产级镜像并热启动。
  5. 自动创建 Memos 管理员账号与长期 PAT:等待 Memos 起来后,自动 POST /api/v1/users 创建 host 账号,登录后签发不过期的 MEMOS_API_TOKEN(PAT)并写回 .env,随后 docker compose up -d sidecar sidecar-worker 让其用新 PAT 重建(注意:docker compose restart 不会重读 env_file,必须 up -d 才会拿到新 PAT),无需手动登录 Memos 设置页。初始账号与密码会以注释形式记录在 .env 末尾,方便后续登录 Memos 前端。
  6. 写入公开管理入口地址:脚本会探测局域网 IP 与 GATEWAY_PORT,把 PRISM_PUBLIC_BASE_URL=http://<host>:<port> 写入 .env 并重建 sidecar / sidecar-worker。Worker 会用这个地址维护 Memos 里的管理入口 memo,避免链接停留在 localhost 或旧端口。需要公网域名或 HTTPS 反代时,直接以 PRISM_PUBLIC_BASE_URL=https://your.domain bash deploy.sh 覆盖;只想指定 host 时可用 PRISM_PUBLIC_HOST=prism.lan bash deploy.sh

🔐 Memos 初始账号、密码与 PAT 保存位置

deploy.sh 自动创建的是 Memos host 账号(默认用户名 admin),并用该账号登录 Memos 后创建长期 Personal Access Token。脚本会把三类凭据写入部署目录的 .env

# Sidecar 管理后台登录用;访问 /admin/ui 的 Admin Token
SIDECAR_ADMIN_TOKEN=...

# Sidecar / worker 代表 Memos host 账号调用 Memos API 用;不要当登录密码使用
MEMOS_API_TOKEN=memos_pat_...

# Memos 前端登录用;注意这两行是注释,但就是初始登录账号和密码
# MEMOS_HOST_USER=admin
# MEMOS_HOST_PASSWORD=<deploy.sh 随机生成的密码>

需要登录 Memos 前端(例如 http://<host>:${GATEWAY_PORT}/)时,使用 .env 末尾注释里的 MEMOS_HOST_USER / MEMOS_HOST_PASSWORD;需要登录 Sidecar 管理后台(/admin/ui)时,使用 SIDECAR_ADMIN_TOKEN 或 banner 打印的一次性登录链接;MEMOS_API_TOKEN 只给 Sidecar/worker 调 API,不用于人工登录。若忘记 Memos 密码,可在部署目录查看:

grep -E '^# MEMOS_HOST_(USER|PASSWORD)=' .env

🔑 关于 Admin Token:一键登录链接与何时必须粘贴

Important

首选:用 deploy.sh 末尾打印的一次性登录链接。banner 里直接给出形如下面的可点击 URL:

一次性登录链接:  http://localhost:8085/admin/ui#admin_token=<一次性随机token>

在终端 Ctrl+点击(或复制粘贴到浏览器)后,前端会自动#admin_token=... 写入 localStorage["memosima.adminToken"],再用 history.replaceState 把 hash 从地址栏抹掉,避免长期暴露在书签/历史里。Token 走 URL hash 不进入 HTTP 请求,不会出现在 Caddy / Uvicorn 的 access log。从此不再需要手动复制 token 到右上角输入框。

首次进入 http://<host>:${GATEWAY_PORT}/admin/ui 不带任何 token 也能用:提示词、模型 Provider、文档解析、Memos、提醒、向量检索这 6 个只读配置面板会在页面初始化阶段直接拉取并渲染默认值(服务端已对它们去除 require_admin,且响应均经 Pydantic 视图脱敏,不含任何 api_key / token 明文)。这避免了历史版本 "textarea 空白 / Provider 下拉为空" 被误判为 "配置没加载" 的体感坑。

以下场景仍然必须有 SIDECAR_ADMIN_TOKEN(一次性链接已自动落 localStorage;如果你跳过链接直接打开 /admin/ui,需要手动从 .envSIDECAR_ADMIN_TOKEN= 取值粘贴到右上角输入框):

  • 任何写操作:保存提示词 / 切换 Provider / 修改 MinerU Token / 修改 Memos PAT / 触发批量重整理 / 删除全部 memo / 重置数据库 / 上传备份等所有 PUT/POST/DELETE 端点;
  • 任何鉴权读端点:Job 队列、候选标签、提醒列表、业务标签、系统日志,以及 QA / 备份 / 重整理面板的全部交互。

如果只关心默认提示词与 Provider 是否被正确读入,不粘贴 Token 就能看到;执行任何修改时若未粘贴 Token,前端会立即提示 "缺少 Admin Token",请按以下方式取值:

grep ^SIDECAR_ADMIN_TOKEN= .env

服务端配置自检(排除 deploy.sh / 配置文件嫌疑):

# 6 个公开读端点:无需 Token 即可返回完整 JSON
curl http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/prompts
curl http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/models
curl http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/document-parser
curl http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/memos/config
curl http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/reminders/config
curl http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/vector-search/config

# 写端点 / 鉴权读端点:仍需 Bearer Token
TOKEN=$(grep ^SIDECAR_ADMIN_TOKEN= .env | cut -d= -f2)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:${GATEWAY_PORT:-8085}/admin/jobs

升级 / 迁移特别注意deploy.sh.env 不存在时会重新生成 SIDECAR_ADMIN_TOKEN(既有 .env 会被保留),并对应输出新的一次性登录链接。在新目录全新跑 deploy.sh 后,浏览器里残留的旧 Token 与新 Token 不同,最简单的做法是直接点击新 banner 里的链接 —— 一次点击就把 localStorage 里的旧 Token 覆盖为新 Token。继续沿用旧 Token 时所有写端点会返回 401 {"detail":"Invalid admin token"}

提示词级 Provider 字段organize_memo.provider / tag_summary.provider / reminder_extraction.provider)在 config/prompts.yaml 模板中故意留空,UI 下拉框首项 "使用默认 provider" 即代表 fallback 到 config/models.yamldefault_provider(默认 deepseek)。这是预期设计,不需要在 yaml 里手动添加 provider 字段;如需为某个调用点单独指定 Provider,请在 UI 上选择并保存。


⚡ 极速本地实机开发热重载配置

如果您是开发者,想要对源码进行快速二次开发和调试,绝不需要反复进行昂贵的 docker compose build 镜像编译

  • 映射本地源码 ./src 到容器内 /app/src
  • 默认启用了 Uvicorn 自动重载监听(--reload --reload-dir /app/src)。
  • 在 IDE 中直接编辑本地 src/ 中的 Python 源码,容器内部的 Web 进程将在 100 毫秒内热载生效绝不需要频繁打镜像

🔒 多用户与安全隔离警示(多租户 SaaS 部署建议)

Warning

多租户与隐私安全警示Prism 核心定位是个人级离线 AI 知识库系统。 单个 Sidecar 实例仅绑定单一的 MEMOS_API_TOKEN,且所有用户的附件解析大纲、智能标签建议和待处理任务全部共享集中存储于同一个 sidecar.db SQLite 数据库中。 请勿直接让多个独立用户共享使用同一个 Sidecar 实例,否则在离线 QA 问答页面,用户提问的检索可能会发生跨账号的知识内容召回,带来严重的隐私泄露与数据混淆风险

🚀 推荐的物理隔离方案(多租户物理沙箱)

若您需要为多人、家庭成员或团队成员部署,最安全、也是系统原生推荐的方式是为每个账号部署物理隔离的容器栈

  1. 目录隔离:为每个用户在宿主机创建独立的部署工作目录,例如 /data/prism_userA/data/prism_userB,下载相同的 deploy.sh
  2. 配置隔离:在各自的 .env 中确认 MEMOS_API_TOKENdeploy.sh 已自动签发;如需多人共享同一 Memos,可手动改写)、SIDECAR_ADMIN_TOKEN 以及大模型的 API Key。
  3. 端口隔离:通过环境变量或 .env 修改各自网关对外暴露的 GATEWAY_PORT 端口(默认 8085;例如用户 A 设为 8085,用户 B 设为 8086)。
  4. 统一反代(可选):使用宿主机的 Nginx 或 Caddy 将不同子域名(如 user-a.memos.example.comuser-b.memos.example.com)分别反向代理到对应的 GATEWAY_PORT,即刻享受到安全、物理层完全隔离防泄露的 SaaS 级多租户个人 AI 知识库体验。

🛠️ 常用开发指令(Nx 集成管理)

所有底层依赖安装、编译、测试等任务均已深度封装,必须优先通过 npx nx 任务调度执行:

# 1. 运行全部单元测试(覆盖 RAG 拼装、提醒解析、Draw.io XML 离线解压缩)
npx nx test sidecar

# 2. 编译代码,检验 Python 语法及模块合规性
npx nx run sidecar:compile

# 3. 本地打包/重新编译 Docker 镜像
npx nx build sidecar

# 4. 运行 Memos API 状态与 Webhook 注册探针
npx nx run sidecar:probe-memos

🔎 Semble 语义代码检索

本仓库推荐优先使用 Semble 做语义代码检索,用自然语言描述目标行为、模块职责或符号名;只有在需要精确字面量匹配、日志文本、注释文本或穷举确认时再使用 rg

# 自动更新 Semble 后检索代码
scripts/semble_refresh_search.sh search "Memos API client" . 5 code

# 基于某个结果的文件和行号查找相似实现
scripts/semble_refresh_search.sh find-related src/memosima/memos/probe.py 35 . 5 code

脚本默认会执行 uv tool install --upgrade "semble[mcp]" 后再检索;如需跳过更新,设置 SEMBLE_SKIP_UPGRADE=1content 可选 codedocsconfigall,默认 code


⚙️ 配置项完整说明

所有配置通过三类文件管理,优先级:环境变量 > config/.env.local > config/*.yaml

环境变量(.env

部署前复制 .env.example.env 并填写真实值。切勿提交包含密钥的 .env 到 Git。

变量 必需 说明
SIDECAR_ADMIN_TOKEN Sidecar 管理接口 Bearer 令牌,建议 16 字节随机字符串(deploy.sh 会自动生成)
MEMOS_BASE_URL Memos 服务地址(如 http://localhost:5230 或 Docker 内 http://memos:5230
MEMOS_API_TOKEN Memos Personal Access Token,推荐用探针生成长期 PAT
MEMOS_WEBHOOK_URL Memos 回调 Sidecar 的公网 URL(poll 模式下无需配置)
DEEPSEEK_API_KEY ✅① DeepSeek API Key(默认推理 provider)
OPENROUTER_API_KEY OpenRouter API Key(备选推理 provider)
OPENAI_API_KEY OpenAI API Key(备选推理 provider)
MINERU_API_TOKEN MinerU 文档解析 API Token(不配则 Office/PDF 附件跳过解析,纯文本/Draw.io/Mind Elixir 不受影响)
SILICONFLOW_API_KEY SiliconFlow API Key(向量检索默认开启,缺 Key 时自动跳过入库并降级到文本召回)
REMINDER_WEBHOOK_URL 提醒通知出口(Bark 兼容接口,如 https://api.day.app/your-key/
GATEWAY_PORT Caddy 网关对外暴露端口,默认 8085(多租户部署时改为不同端口区分)
PRISM_PUBLIC_BASE_URL 管理入口 memo 和 AI 整理 memo 中管理链接使用的完整公开网关地址;deploy.sh 会自动写入,可手动设为局域网地址或反代域名
PRISM_PUBLIC_HOST 仅供 deploy.sh 拼接公开地址的 host 覆盖值,例如 prism.lanprism.example.com
PRISM_VERSION 拉取 GHCR 镜像的版本标签,默认 latest,可锁定 v0.6.6 等确定版本

① 至少配置一个推理 provider 的 Key,推荐 DEEPSEEK_API_KEY

config/app.yaml — 应用主配置

配置路径 默认值 说明
app.workspace_id default 工作区标识
app.public_base_url http://localhost:8080 Sidecar 对外公开地址;运行时可被 PRISM_PUBLIC_BASE_URL 覆盖
app.timezone Asia/Shanghai Worker 进行提醒抽取、时区换算与日志时间显示使用的默认时区
database.path data/sidecar/sidecar.db SQLite 数据库路径(WAL 模式)
taxonomy.path config/taxonomy.yaml 标签治理体系配置文件路径
prompts.path config/prompts.yaml 提示词模板文件路径
memos.ingestion_mode poll Memo 入口模式:poll(轮询)、webhookboth
memos.poll_page_size 20 每次轮询拉取 memo 数量
memos.request_timeout_seconds 15 Memos API 请求超时
memos.show_candidate_tags false 是否在 Memos Web 中显示待审核标签
memos.admin_entry_enabled true 是否自动维护管理入口 memo
memos.admin_entry_title Memosima 管理入口 管理入口 memo 标题
memos.admin_entry_visibility PRIVATE 管理入口可见性:PRIVATE / PUBLIC
document_parser.provider mineru 文档解析 provider
document_parser.base_url https://mineru.net MinerU API 地址
document_parser.mineru_model_version vlm MinerU 模型版本
document_parser.language ch 解析语言
document_parser.timeout_seconds 60 单次任务超时(秒)
document_parser.poll_interval_seconds 3 轮询 MinerU 批量解析结果间隔(秒)
document_parser.max_polls 60 最多轮询次数,超时则视为失败
document_parser.enable_table true 启用表格识别
document_parser.enable_formula true 启用公式识别
document_parser.is_ocr false 是否启用 OCR
worker.poll_interval_seconds 2 Worker 轮询新任务间隔
worker.max_attempts 3 任务最大重试次数
worker.create_probe_comment false 是否在 Memos 中写入探针注释(仅排障时启用)
reminders.enabled true 是否启用提醒功能
reminders.trigger_tag #提醒 提醒触发标签
reminders.confidence_threshold 0.75 提醒置信度阈值(低于该值会自动转为待澄清)
reminders.request_timeout_seconds 10 调用 Bark/Webhook 通知出口的超时(秒)
vector_search.enabled true 是否启用向量检索(缺 Key 时自动跳过入库并平滑降级)
vector_search.model BAAI/bge-m3 嵌入模型名称
vector_search.base_url https://api.siliconflow.cn/v1 嵌入服务 Base URL
limits.max_attachment_mb 50 附件大小上限 (MB)
limits.max_ai_active_tags 5 AI 单次最多使用正式标签数
limits.max_ai_candidate_tags 2 AI 单次最多提议候选标签数
limits.allowed_parse_extensions .txt / .md / .doc(x) / .xls(x) / .ppt(x) / .pdf / .drawio / .drawio.svg / .json 允许进入附件解析流水线的后缀白名单

config/models.yaml — 大模型 Provider 配置

定义可用的推理大模型 provider,结构如下(以 DeepSeek 为例):

default_provider: deepseek
providers:
  deepseek:
    base_url: https://api.deepseek.com
    api_key_env: DEEPSEEK_API_KEY        # 从环境变量读取 Key
    default_model: deepseek-v4-flash
    temperature: 0.2
    max_tokens: null
    response_format: json_object

可在管理页面 /admin/ui#models 实时切换 provider 和模型,保存后非机密参数写回 config/models.yaml,Key 写入 config/.env.local(不提交 Git)。

config/prompts.yaml — AI 提示词模板

定义 organize_memo(整理 memo)、tag_summary(标签总结)、reminder_extraction(提醒提取)的 system/user 提示词,支持 {active_tags}{content}{tag} 等占位符。可在管理页面 /admin/ui#prompts 在线编辑并保存。

config/taxonomy.yaml — 标签分类体系

定义系统标签、正式业务标签、别名映射和禁用标签。详见 配置参数说明手册


🌐 管理 REST API 速查表

绝大多数 /admin/* 接口都要求请求头 Authorization: Bearer ${SIDECAR_ADMIN_TOKEN}/webhooks/memos/health 以及 6 个公开读端点GET /admin/promptsGET /admin/modelsGET /admin/document-parserGET /admin/memos/configGET /admin/reminders/configGET /admin/vector-search/config,响应均经 Pydantic 视图脱敏,不含任何 api_key / token 明文)允许匿名访问。完整字段、入参 schema、错误码定义请参见 详细设计文档 的「管理 REST API 全量索引」章节。

分类 方法 + 路径 说明
健康 / 入口 GET /health 健康探针,返回版本与 worker 心跳。
健康 / 入口 GET /admin/ui 管理后台 SPA 单页(HTML)。
Webhook POST /webhooks/memos Memos 推送新 memo 时的回调入口(幂等)。
任务 GET /admin/jobs 分页查询 Job 队列状态。
任务 POST /admin/jobs/{job_id}/retry 手动重试单个 Job。
任务 POST /admin/jobs/reprocess-memo 强制重新整理指定 memo。
任务 POST /admin/jobs/batch-reprocess-tag 按标签批量重排整理。
提示词 GET /admin/prompts 读取三类提示词模板。
提示词 PUT /admin/prompts/organize-memo 更新 organize-memo 模板并写回 config/prompts.yaml
提示词 PUT /admin/prompts/tag-summary 更新 tag-summary 模板。
提示词 PUT /admin/prompts/reminder-extraction 更新 reminder-extraction 模板。
大模型 GET /admin/models 列出 provider/模型/连接性。
大模型 PUT /admin/models 切换默认 provider、模型,更新 config/models.yaml,Key 写入 config/.env.local
标签 GET /admin/tag-candidates 列出待审核标签队列。
标签 POST /admin/tag-candidates/{id}/approve 通过候选标签并升级为正式业务标签。
标签 POST /admin/tag-candidates/{id}/reject 拒绝候选标签。
标签 GET /admin/tags/business 列出全部正式业务标签。
标签 POST /admin/tag-summaries 触发按标签生成专题总结(异步 Job)。
提醒 GET /admin/reminders 列出提醒(pending / sent / canceled / failed)。
提醒 POST /admin/reminders/{id}/retry 重新投递失败的提醒。
提醒 POST /admin/reminders/{id}/cancel 取消未发送的提醒。
提醒 GET/PUT /admin/reminders/config 读写提醒触发标签、置信度阈值、Webhook URL。
向量检索 GET/PUT /admin/vector-search/config 读写嵌入服务配置(Provider/Key/模型)。
QA / RAG POST /admin/qa/generate-prompt 生成「超级 Prompt」(可选 use_vector 切换语义检索)。
文档解析 GET/PUT /admin/document-parser 配置 MinerU Token、模型版本、超时等。
Memos 同步 GET/PUT /admin/memos/config 配置 Memos Base URL、PAT、可见性、入口模式。
Memos 同步 POST /admin/memos/delete-all 危险操作:清空 Memos 主站全部 memo(仅排障)。
备份 / 恢复 GET /admin/backups/download 下载 ZIP 全局热备份(数据库 + 配置)。
备份 / 恢复 POST /admin/backups/restore 上传备份 ZIP 恢复。
数据库 POST /admin/database/reset 危险操作:删除并重建 sidecar SQLite。
日志 GET /admin/logs 查询结构化系统日志。
日志 POST /admin/logs/clear 清空系统日志表。

📄 关联项目文档

💻 架构、设计与探针记录

About

Prism (棱镜) 是一款专为 Memos 深度定制开发的 个人离线 AI 知识库 Sidecar 伴生系统。 Memos 负责前端超快捷地收集、记录和保存原始的想法。 Prism (Sidecar) 负责在后台进行 AI 结构化整理、标签双层治理、高保真本地附件解析、智能提醒通知、离线 RAG 拼装和一键搬家管理。

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages