来源:技术架构设计-个人AI知识库系统.html

个人 AI 知识库系统技术架构设计

1. 架构原则

  1. 不魔改 Memos,使用 API、Webhook 和资源接口完成旁路增强。
  2. 原始资料与 AI 生成资料分离,避免 AI 覆盖用户原文。
  3. 标签树在 Sidecar 中强管控,Memos 中只承载最终标签文本。
  4. 后台任务异步化,Webhook 接收与 AI 处理解耦。
  5. 默认轻量本地部署,优先 SQLite,预留替换能力。
  6. 所有代码完成标准为真实集成测试通过。

2. 总体架构

┌──────────────────────────┐
│          Memos            │
│  UI / API / Webhook       │
│  SQLite / Attachments     │
└─────────────┬────────────┘
              │ Webhook + API
              ▼
┌──────────────────────────┐
│     AI Sidecar Service    │
│ FastAPI + Background Jobs │
└─────────────┬────────────┘
              │
┌─────────────┼─────────────────────────────────────┐
│             │                                     │
▼             ▼                                     ▼
Memos      LLM Gateway                         Local Storage
Client     LiteLLM/OpenAI-compatible           SQLite + sqlite-vec
│          OpenRouter/Qwen/DeepSeek/Custom      Config + Backups
│
▼
Attachment Parsers
txt/md/docx/xlsx/pdf/drawio/mind-elixir-json

3. 部署架构

当前发布版采用 Docker Compose,部署在 NAS 或 Linux,并由 Caddy 网关提供统一入口。

memosima/
  docker-compose.yml
  .env
  config/
    app.yaml
    taxonomy.yaml
    doc-generation.yaml
    models.yaml
  data/
    memos/
    sidecar/
    backups/
  logs/

推荐服务:

服务 说明
gateway Caddy 统一入口。/admin/*/health/webhooks/* 转发到 Sidecar,其余路径转发到 Memos。
memos Memos 主服务,只在 Compose 网络内暴露 5230
sidecar FastAPI 接收 webhook、管理接口
sidecar-worker 后台任务、附件解析、AI 调用、索引、文档生成

默认只暴露 Caddy 网关宿主机端口;开发 Compose 默认为 ${GATEWAY_PORT:-8080}:80,生产 release Compose 默认为 ${GATEWAY_PORT:-8085}:80。用户通过统一网关进入 Memos 与 Sidecar 管理页面,Memos 的 5230 和 Sidecar 容器内部 8080 默认不直接暴露到宿主机。Memos 管理入口 memo 的链接由 PRISM_PUBLIC_BASE_URL(优先)或 app.public_base_url 生成,deploy.sh 会把探测到的公开网关地址写入 .env

4. 模块设计

4.1 API 模块

职责:

建议接口:

POST /webhooks/memos
GET  /health
GET  /admin/tag-candidates
POST /admin/tag-candidates/{id}/approve
POST /admin/tag-candidates/{id}/reject
POST /admin/documents/generate
POST /admin/backups
GET  /admin/backups
POST /admin/backups/{id}/verify

4.2 Memos Client

职责:

需要用集成测试校验 Memos 当前版本接口,避免依赖过期路径。

4.3 任务系统

Webhook 不直接执行 AI 处理,只创建任务。

任务类型:

process_memo
parse_attachment
review_tag_candidate
generate_document
index_memo
answer_question
backup_create
backup_verify
backup_restore

MVP 可用 SQLite 任务表加轮询 worker。后续可替换为 Redis Queue、Celery 或 Dramatiq。

4.4 LLM 网关

使用 OpenAI-compatible 抽象,支持:

配置示例:

providers:
  openrouter:
    base_url: https://openrouter.ai/api/v1
    api_key_env: OPENROUTER_API_KEY
    default_model: openrouter/auto
  qwen:
    base_url: https://dashscope.aliyuncs.com/compatible-mode/v1
    api_key_env: DASHSCOPE_API_KEY
    default_model: qwen-plus
  deepseek:
    base_url: https://api.deepseek.com
    api_key_env: DEEPSEEK_API_KEY
    default_model: deepseek-chat
  custom:
    base_url: ${CUSTOM_LLM_BASE_URL}
    api_key_env: CUSTOM_LLM_API_KEY
    default_model: ${CUSTOM_LLM_MODEL}

每次 AI 调用必须记录:

当前实现状态:

4.5 标签树模块

Sidecar 持有正式标签树、候选标签、别名和禁用词。Memos 中的标签只作为展示与检索入口。

核心能力:

标签状态:

active
candidate
rejected
disabled
merged

4.6 附件解析模块

解析策略:

格式 实现建议
txt 直接读取
md 保留 Markdown
docx MarkItDown 或 python-docx
xlsx MarkItDown 或 openpyxl
pdf MarkItDown / pdfplumber 提取文本层,暂不 OCR
drawio 解析 XML,提取图名、节点文本、连接关系
Mind Elixir JSON 解析节点树,转 Markdown 大纲

安全限制:

4.7 文档生成模块

文档生成配置:

defaults:
  keep_versions: 5
  output_tag: "#系统/AI文档"
rules:
  - name: project_daily_summary
    scope: "#项目"
    depth: 2
    trigger:
      type: schedule
      cron: "0 2 * * *"
    template: project_summary
  - name: approved_tag_document
    trigger:
      type: tag_approved
    template: tag_document

生成流程:

确定范围
-> 查询 memo 与 AI 整理结果
-> 排除旧版 AI 文档或按策略引用
-> 组织上下文
-> 调用 LLM 生成文档
-> 新建 AI 文档 memo
-> 建立来源关联
-> 清理超过 N 个版本的旧文档
-> 写入索引

4.8 RAG 与问答模块

用户体验上不暴露传统 chunk。内部使用语义单元。

语义单元类型:

检索策略:

  1. 向量相似度检索。
  2. 标签同层级和子树召回。
  3. 来源 memo 关系扩展。
  4. 去重与排序。
  5. 生成带来源的回答。

第一版问答入口建议:

用户创建 #系统/问答 memo
-> Sidecar 识别问题
-> 检索
-> 新建 AI 回答 memo
-> 关联问题 memo 与来源 memo

4.9 备份恢复模块

本地备份目录结构:

backups/
  2026-05-18_210000/
    manifest.json
    memos.db
    memos-resources.tar.gz
    sidecar.db
    vector.db
    config.tar.gz
    taxonomy.yaml
    checksums.sha256
    restore.md

manifest.json 记录:

恢复策略:

  1. 停止服务。
  2. 校验备份包。
  3. 备份当前数据为恢复前快照。
  4. 覆盖数据文件。
  5. 启动服务。
  6. 执行健康检查与索引校验。

5. 数据库设计

5.1 workspaces

预留多人和多空间。

字段 说明
id 主键
name 工作区名称
created_at 创建时间
updated_at 更新时间

5.2 memos

记录 Sidecar 已处理的 memo 映射。

字段 说明
id 主键
workspace_id 工作区
memos_uid Memos memo UID
type original / ai_summary / ai_document / qa
source_memo_uid 来源 memo
content_hash 内容哈希
status 状态
created_at 创建时间
updated_at 更新时间

5.3 jobs

字段 说明
id 主键
workspace_id 工作区
type 任务类型
status pending / running / succeeded / failed / waiting_user
payload_json 任务输入
result_json 任务结果
error 错误
retry_count 重试次数
created_at 创建时间
updated_at 更新时间

5.4 tag_nodes

字段 说明
id 主键
workspace_id 工作区
path 标签路径
parent_path 父标签
status active / candidate / rejected / disabled / merged
source human / ai
reason AI 创建理由或人工说明
confidence AI 置信度
merged_to 合并目标
created_at 创建时间
updated_at 更新时间

5.5 tag_aliases

字段 说明
id 主键
workspace_id 工作区
alias 别名
target_path 正式标签

5.6 artifacts

字段 说明
id 主键
memo_uid 关联 memo
resource_uid 附件资源
kind attachment_text / ai_summary / ai_document
content_markdown 解析或生成内容
metadata_json 页码、表名、节点路径等
created_at 创建时间

5.7 vector_units

字段 说明
id 主键
workspace_id 工作区
memo_uid 来源 memo
artifact_id 来源 artifact
unit_type memo / paragraph / table / document_section / mind_node / drawio_node
text 检索文本
tags_json 标签
metadata_json 来源信息
embedding_hash embedding 输入哈希
created_at 创建时间

向量本体存入 sqlite-vec 虚拟表,通过 vector_units.id 关联。

5.8 document_versions

字段 说明
id 主键
workspace_id 工作区
doc_key 文档唯一键
scope_path 生成范围
memo_uid Memos 中的文档 memo
version 版本号
created_by_trigger schedule / manual / tag_approved
created_at 创建时间

5.9 llm_calls

字段 说明
id 主键
job_id 任务
provider 供应商
model 模型
prompt_version Prompt 版本
input_tokens 输入 token
output_tokens 输出 token
latency_ms 耗时
status 状态
error 错误
created_at 创建时间

6. 配置设计

6.1 app.yaml

app:
  workspace_id: default
  public_base_url: http://localhost:8080
  timezone: Asia/Shanghai
security:
  admin_token_env: SIDECAR_ADMIN_TOKEN
limits:
  max_attachment_mb: 50
  allowed_parse_extensions:
    - .txt
    - .md
    - .docx
    - .xlsx
    - .pdf
    - .drawio
    - .drawio.svg
    - .json

6.2 taxonomy.yaml

system_tags:
  original: "#系统/原始记录"
  ai_summary: "#系统/AI整理"
  ai_document: "#系统/AI文档"
  pending_clarification: "#系统/待澄清"
  tag_candidate: "#系统/标签待审核"
  qa: "#系统/问答"
business_tags:
  - path: "#项目/个人AI知识库"
    status: active
aliases:
  - alias: "#AI知识库"
    target: "#项目/个人AI知识库"
disabled:
  - "#杂项"

6.3 models.yaml

见 LLM 网关配置。

6.4 doc-generation.yaml

见文档生成配置。

7. 测试策略

7.1 单元测试

7.2 集成测试

7.3 验收测试

所有核心流程必须基于真实服务完成,不以 mock 作为完成标准。

8. 技术风险与处理

风险 处理
Memos API 版本变化 固定镜像版本,启动时检查版本,集成测试覆盖
Memos 标签不是强约束实体 Sidecar 管理标签树,Memos 只展示最终标签
AI 输出不稳定 使用结构化 JSON schema、重试、人工审核
附件解析失败 保留原附件,记录错误,不阻断主流程
NAS 性能有限 后台任务限流,文档生成定时低峰执行
模型供应商差异 OpenAI-compatible 适配层,配置化 provider
备份恢复损坏 checksum、manifest、恢复前快照

9. P0-P1 实现状态(2026-05-19)

当前仓库已完成 P0-P1 技术基座:

当前 Linux 环境缺少 Docker,真实 Memos 容器联调尚未完成,详见 docs/API探针记录.htmldocs/P0-P1验收记录.html