Skip to content

Fzhiyu1/wake

Repository files navigation

wake

把整个个人知识库灌进长上下文 LLM,作为"形状记忆"——不存事件,只存形状。回忆是重构,不是检索。

这是什么

传统记忆系统 = 向量检索 + RAG。wake 不是检索,是注入:把你整个 markdown 知识库(几百 KB - 几 MB)一次性塞进 DeepSeek 1M context 的 system prompt,触发 prompt cache,每次提问让模型按"被 KB 塑型过的 substrate"输出联想——不是回答问题,是给出"这个问题在你的 KB 上激活了什么"。

为什么这样做能工作:

  1. DeepSeek 的 1M context + prompt cache 让"全量注入"在经济和延迟上都可行(单次召回 ¥0.001 量级)
  2. 注意力本身就是有损压缩 —— 把整个 KB 都给模型,模型自己决定哪部分浮起来,这比 top-k 余弦检索更接近"人脑想起一件事"
  3. substrate 被塑型 —— 同一个 query 在不同 KB 下激活完全不同的"记忆"。KB 是 substrate,不是数据库

详见 wake 作者的知识库快照:kb-snapshot.txt (这就是 demo;同时也是这套方法论的 dogfood)。

架构

你的 markdown 知识库 (Obsidian / 任何 .md 目录)
    ↓ build_snapshot.sh
kb-snapshot.txt (单个文件,约几百 KB)
    ↓ 注入 system prompt
DeepSeek 1M context (prompt cache 命中)
    ↓ query → recall(query) 返回联想式片段
    ↓
推荐默认路径:
  1. UserPromptSubmit hook ── 用户提交 prompt 时注入一次 (默认推荐)
  2. MCP 工具              ── 模型按需主动调用 (最克制)
  3. lens 代理             ── 可选 Anthropic API 代理 / 实验性请求改写层

快速开始

git clone https://github.com/Fzhiyu1/wake.git
cd wake
python3 -m venv .venv
.venv/bin/pip install openai                    # daemon / mcp / hook 必须
.venv/bin/pip install fastapi uvicorn httpx     # 可选: 如果要用集成 C (lens 代理)
cp .env.example .env
# 填入 DEEPSEEK_API_KEY,从 https://platform.deepseek.com/ 拿

试一次召回:

.venv/bin/python3 daemon.py "怎么判断 AI 在幻觉"

应该看到几行带 [[wikilink]] 的"联想式"输出,而不是百科全书答案。如果输出像答题,检查是否在用 demo 的 kb-snapshot.txt(下方"换成你自己的 KB"一节)。

三种集成方式

A. UserPromptSubmit hook(默认推荐,无 lens 依赖)

推荐默认路径: UserPromptSubmit hook

默认推荐把 wake 作为 Claude Code 的 UserPromptSubmit hook 使用。hook 只在用户提交 prompt 时触发一次,不会在工具调用续跑时重新召回,也不会改写 Anthropic /messages 请求体。

~/.claude/settings.json 里加:

{
  "hooks": {
    "UserPromptSubmit": [{
      "hooks": [{"type": "command", "command": "/path/to/wake/hook.sh"}]
    }]
  }
}

每次发消息时把 wake 召回结果以 [记忆] ... 形式 stdout 注入。Claude Code 把它当 hook 输出。

不要同时启用 lens wake_memory 插件和 UserPromptSubmit hook

两者同时启用会造成双重注入。wake_memory 插件还会在每个 /messages 请求触发,包括工具调用后的续跑请求,可能覆盖上一轮注入的记忆块并影响 prompt cache。

B. 注册成 MCP 工具(模型按需主动调用)

~/.claude.json 里加:

{
  "mcpServers": {
    "wake": {
      "command": "/path/to/wake/.venv/bin/python3",
      "args": ["/path/to/wake/mcp_server.py"],
      "type": "stdio"
    }
  }
}

模型会在判断"用户提到他过去想过的东西"时主动调 memory_recall。代价:模型可能不调,但调用很精准。

C. lens 代理(可选高级/实验路径)

lens 是可选的 Anthropic API 代理

lens/ 可以作为透明 Anthropic API 代理或实验性请求改写层使用。常规 wake 使用不需要 lens。默认不加载任何插件;只有显式设置 LENS_PLUGINS=wake_memory 才会启用请求改写注入。

.venv/bin/pip install fastapi uvicorn httpx     # 一次性
LENS_PLUGINS= .venv/bin/python3 lens/proxy.py

客户端切到代理:

unset HTTP_PROXY HTTPS_PROXY
export ANTHROPIC_BASE_URL=http://localhost:8765
export NO_PROXY=localhost,127.0.0.1
claude  # 或 cursor / 任何用 Anthropic API 的客户端

如果你在中国大陆访问 api.anthropic.com 需要走代理:

LENS_UPSTREAM_PROXY=http://your-proxy:port LENS_PLUGINS= .venv/bin/python3 lens/proxy.py

只有在明确要实验 lens 请求改写注入时才启用 wake_memory 插件。启用后,lens 会拦截每个 /messages 请求 → 调 wake 召回 → 把 [当前相关记忆] 块塞进 system → 转发给 Anthropic。

lens/plugins/examples/ 里有两个 hello-world 插件(echosystem_prefix),可以参考着写自己的。

换成你自己的 KB

仓库里的 kb-snapshot.txt 是个空模板(26 行说明文字),只是占住位置——直接跑 daemon 会按 system-prompt.md 的"无相关记忆"规则全部返回 ——。要看到真正的"联想",必须替换成你自己的知识库。

重要前提

system-prompt.mdkb-snapshot.txt 一样,也是作者的私人配置——它假设 KB 是 Obsidian 风格、用 [[wikilink]] 命名概念。

装 wake 时必须重写 system-prompt.md 来匹配你自己 KB 的风格。不重写的话,daemon 会按作者 KB 的格式输出 [[xxx]],但你的 KB 里根本没这种东西——完全错位。

wake 的核心(daemon.py + lens 这套机制)跟你的 KB 长什么样无关system-prompt.md 只是"针对某一份 KB 的输出风格塑造模板",换 KB 就要换 prompt

替换成你自己的:

# 1. 改 build_snapshot.sh 里的 KB 路径
vi build_snapshot.sh
#   把 KB="/path/to/knowledge-base" 指向你的笔记目录

# 2. 重建快照
./build_snapshot.sh

# 3. (强烈建议) 标 skip-worktree,防止把私人 KB 误推到自己 fork 的公开仓库
git update-index --skip-worktree kb-snapshot.txt
#    本地 kb-snapshot.txt 保留你的真实 KB,git status 永远显示干净。
#    撤销:git update-index --no-skip-worktree kb-snapshot.txt

# 4. 重写 system-prompt.md (必须)
#    现版本是为作者 KB 调的——假设你用 [[wikilink]] 概念命名,
#    示例 query/output 都基于作者的特定 KB。
#    你的 KB 风格不同的话,姿态规则可以保留,但示例和格式约定要全换。

KB 结构推荐(不强制):

your-kb/
├── 1-concepts/        ← 原子概念卡(一卡一念)
├── 2-explorations/    ← 长对话整理
├── 3-projects/        ← 在做的事
├── 4-references/      ← 外部资料笔记
├── INDEX.md           ← 一卡一行 + summary(可选,但能大幅提升召回)
└── CLUSTERS.md        ← 主题聚类(可选)

任何能转成 markdown 的笔记系统都可以(Obsidian、Logseq、纯文件夹)。

环境变量

变量 默认 说明
DEEPSEEK_API_KEY (必填) 从 platform.deepseek.com 申请
WAKE_OWNER (空) KB 归属人名字,影响 MCP 工具描述里的措辞
WAKE_TIMEOUT 15 daemon 调用超时(秒)
LENS_PORT 8765 lens 监听端口
LENS_UPSTREAM https://api.anthropic.com lens 上游 API
LENS_UPSTREAM_PROXY (空) lens 上游代理(中国大陆通常需要)
LENS_PLUGINS (空) 启用的插件,逗号分隔;默认不加载插件。设为 wake_memory 可显式启用 lens 记忆注入

文件说明

路径 角色
daemon.py 召回入口。recall(query) -> str,也能直接命令行调用
system-prompt.md 注入给 DeepSeek 的 system prompt,定义"联想"输出风格
kb-snapshot.txt KB 序列化产物,daemon 启动时一次性载入
build_snapshot.sh 从 markdown 目录重建 kb-snapshot.txt
mcp_server.py 把 daemon 包装成 MCP stdio server
hook.sh Claude Code UserPromptSubmit hook
lens/proxy.py 内置 Anthropic API 代理,可选高级/实验路径(集成 C)
lens/plugins/wake_memory.py lens 可选插件,负责拦截请求 + 注入记忆 + 剥旧累积
lens/plugins/examples/ hello-world 插件示例(echosystem_prefix),写自己插件的起点
docs/demo.html 项目 landing 页,可单独部署到 GitHub Pages 或任何静态托管

是不是 RAG?

不是。RAG 是把 KB 切片 + 向量化 + 检索 top-k + 拼到 prompt 里。 wake 是把 KB 整个塞进 system prompt,不切片、不向量化、不检索——靠模型自己的注意力做"自然有损压缩"。

RAG wake
KB 量级 GB 级、文档级 KB 到几 MB,概念级
召回风格 引用原文 联想浮现(可能不点名出处)
适合 客服、检索、知识查询 个人思考记忆、第二大脑、写作助手
单次成本 ~10K token ~150K-1M token,但 prompt cache 后接近 RAG

如果你的 KB > 几 MB,wake 就不合适了——这是个人 KB 工具,不是企业知识库方案。

灵感来源

  • DeepSeek 1M context + prompt cache 让"全量注入"在 2026 变得可行
  • "记忆 ≠ 检索,是 substrate 对新输入的形状响应"——wake 作者 2026-05-02 的 KB 笔记
  • Madeleine cookie / 双过程理论 / 自由能原理:浮现 vs 主动检索的二元结构

完整方法论在 kb-snapshot.txt 里,搜 多层有损压缩 失败可见性 塑型源的多样性 等概念。

限制

  • 必须有 DeepSeek API key(模型可换,改 daemon.py 里 base_url 即可——但 1M context 是关键依赖)
  • 单次召回 1-3 秒(daemon 冷启动 + DeepSeek 推理),lens 集成时每次对话延迟 +1-3s
  • KB 改了要手动跑 build_snapshot.sh(可以挂 git post-commit hook)
  • 召回质量强依赖 system-prompt.md 的调教,以及 KB 本身的概念结构。空 KB 或纯流水账 KB 出不来"联想"

About

Substrate memory: full-KB injection into long-context LLM. Recall as shape activation, not retrieval. Three integration paths (lens plugin / MCP / hook).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors