本地笔记语义搜索工具

为Obsidian笔记库优化的本地RAG(检索增强生成)工具,支持语义搜索、本地嵌入和笔记编辑,适用于苹果硅GPU加速。

  • by jpalczewski
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 jpalczewski/kajet

使用说明

📓 kajet

专注于日志的黑曜石拱顶RAG,针对Apple Silicon GPU进行了优化。作为带有web仪表板的MCP服务器运行(塞雷娜-灵感)。思考 玫瑰花蕾AI 但要注意你当地的降价笔记。

📋 更新日志 | 🛠️ 工具参考 | 🗺️ 路线图

为什么是“kajet”?

Kajet 是一个古老的/地区性的波兰语单词,表示笔记本(来自法语 笔记本).曾经很常见,现在主要存在于方言或老一辈人中。这个名字来自一次和狗在雪地里散步 /touch-grass 由于天气状况,端点暂时不可用)--短语 “检查笼子” (“在笔记本上查一下”)给我的印象是,对法学硕士说这句话非常恰当。

为什么存在

我用黑曜石做了很多笔记,想要一个真正适合我的RAG管道——本地的、快速的,并根据我使用保险库的方式量身定制。 当地抹布 这是一个有趣的起点,但它只运行JS CPU模型。我想要为macOS和Apple Silicon GPU优化的东西,而不是荣耀的 grep 消耗CPU周期。

此外:男性用Rust编写副项目的冲动太强烈了。没有人谈论30GB target/ 文件夹,但我们到了。

特性

  • 🔍 语义搜索 通过MCP覆盖整个保险库 search 工具(混合矢量+全文)
  • 🧠 本地嵌入 — AllMiniLM-L6-v2 通过 蜡烛,Apple Silicon上的金属GPU,支持定制型号
  • ⚠️ 嵌入迁移路径 --内置的Candle后端可以工作,但仅限于少数型号。为了访问现代嵌入模型(nomic嵌入、BGE-M3、E5 mistral、多语言模型等),kajet现在支持 文本嵌入推理(TEI) 通过 kajet-remote 机箱。TEI可以在同一台机器上本地运行,也可以根据需要指向远程端点。Candle后端仍然可用,但处于维护模式。
  • 🌍 万国码规范化 --处理两种写作方式 ę 在Unicode中:NFC(ę 作为一个字符)vs NFD(e +合并ogonek)。即使您的文件系统和编辑器在编码上存在分歧,搜索“Gdańsk”也会找到“Gdažsk”
  • ⚡ 增量索引 --仅重新嵌入更改的文件(内容哈希)
  • 👀 实时文件监视器 --自动拾取vault更改
  • 📝 注释编辑 --直接通过MCP工具创建、编辑、附加和修改注释(create_note, edit_note)
  • 🌐 Web仪表板 --通过WebSocket搜索游乐场+直播MCP事件流
  • ☁️ 云存储支持 --自动检测云同步保管库(iCloud、OneDrive、Dropbox、Google Drive),并将LanceDB存储在同步文件夹之外。这对性能至关重要:在M4 Mac上本地存储时,在iCloud上索引600个文件需要大约1个文件/秒,而总共需要大约70个文件/秒钟(大约8.5个文件/每秒)
  • 📦 单个二进制 --前端在编译时嵌入,零运行时依赖性

系统要求

测试平台:

  • macOS(Apple Silicon)——Metal GPU加速的主要目标
  • Linux(x86_64)——实验性CPU回退

运行时间要求(粗略估计):

  • 16GB RAM(取决于保险库大小)
  • 约500MB磁盘空间用于嵌入模型
  • LanceDB的额外空间(因保险库大小而异)

从源头构建:

  • Rust的15-40GB可用磁盘空间 target/ 目录和依赖关系
  • 预计5-10分钟的初始构建(LanceDB引入了大型依赖树)

推荐:

  • macOS 12+(蒙特利)或更高版本支持Metal GPU
  • 8GB+RAM,用于存放1000多个文件的保险库

先决条件

macOS

brew install protobuf

Ubuntu/Debian

sudo apt install protobuf-compiler libssl-dev build-essential pkg-config

⚠️ 注: 以上就是AI幻觉。有关可用的Linux版本,请参阅 CI工作流程 --你需要将依赖关系转换为你最喜欢的发行版。

安装

来源

# Clone and build (requires Deno for frontend build)
git clone https://github.com/yourusername/kajet.git
cd kajet
cd frontend && deno install && deno task build && cd ..
cargo build --release

# Binary will be at target/release/kajet

⚠️ 重要警告

kajet包括可以修改和删除笔记的工具。 破坏性编辑会自动备份,但 这是实验软件.LLM代理可能是不可预测的——如果您的代理决定覆盖文件,因为您没有很好地说“早上好”或“谢谢”,那么数据丢失将是一个真正的风险。

此MCP用于处理您备份的数据。 使用git、Time Machine或任何您信任的备份解决方案。不要把它指向你唯一重要的东西。

你已经被警告了。 🙃

用法

作为MCP服务器(克劳德代码/克劳德桌面)

添加到您的 .claude/mcp.json 或Claude桌面配置:

{
  "mcpServers": {
    "kajet": {
      "command": "/path/to/kajet",
      "args": ["--vault", "/path/to/your/obsidian/vault"]
    }
  }
}

仪表板将在 http://localhost:3579 而MCP服务器正在运行。

在Claude中尝试的示例查询:

  • “我对机器学习有什么看法?”
  • “查找我对生产力系统的看法”
  • “给我看同时提到Rust和性能的注释”

与鹅

鹅 有一个GUI,您可以通过单击界面添加MCP服务器。

保护条款: 使用从以下位置生成的二进制文件的路径 target/release/kajet 并通过 --vault /path/to/your/markdown/repo 作为论据。

独立(仅搜索游乐场)

kajet --vault ~/Obsidian/Vault
# Dashboard at http://localhost:3579

建筑

stdin/stdout ←→ [MCP stdio] ←→ Engine ←→ [Axum HTTP :3579] ←→ Browser
                                  ↓
                              LanceDB
                          (.kajet/ in vault or ~/Library/Application Support/kajet/)

堆栈:

  • 主控程序:官方 rmcp SDK与 #[tool] 宏
  • 嵌入: 蜡烛 (AllMiniLM-L6-v2,macOS上的金属GPU,Linux上的CPU回退)
  • 矢量数据库: 兰斯数据库 (嵌入式,Lance柱状格式)
  • 前端:Svelte+Vite,通过二进制嵌入 rust-embed
  • 文件监视: 通知 用于实时重新索引
  • 超文本传输协议: 阿克苏姆 支持WebSocket

工作空间结构:

  • crates/core --域模型, Engine,性状定义
  • crates/parser --Markdown解析、分块、维基链接提取
  • crates/backend --具体实现(嵌入器、向量存储)
  • crates/indexer --增量索引管道和文件观察器
  • crates/mcp --MCP协议处理程序
  • crates/web --Axum HTTP服务器和WebSocket广播器
  • crates/writer --笔记创建和编辑

MCP工具

kajet提供了12个MCP工具,用于语义搜索、笔记管理和金库探索。

看 docs/TOOLS.md 获取包含参数和示例的完整文档。

发展

建造的先决条件

  • 锈 (最新稳定版,2024年版)
  • 迪诺 (用于前端构建)-- deno.land
  • 协议缓冲区 (参见 先决条件)

从源头构建

# 1. Build frontend first
cd frontend
deno install
deno task build
cd ..

# 2. Build Rust workspace
cargo build --release

# Binary at target/release/kajet

运行测试

# Run all tests with cargo-nextest (recommended)
cargo nextest run --workspace

# Run tests for a specific crate
cargo nextest run -p kajet-parser

# Run a single test by name
cargo nextest run -E 'test(test_name)'

# Fallback to standard cargo test if nextest not installed
cargo test --workspace

代码风格

# Format check (runs on pre-commit hook)
cargo fmt --check

# Lint (runs on pre-commit hook)
cargo clippy --workspace -- -D warnings

# Typo check (runs on pre-commit hook)
typos

预提交挂钩通过以下方式管理 左撇子.安装:

lefthook install

使用MCP检查器运行

# Use the included script
./run-inspector.sh /path/to/vault

# Or manually
npx @modelcontextprotocol/inspector cargo run -- --vault /path/to/vault

项目约定

  • 承诺:使用 常规承诺 (feat:, fix:, refactor:, perf:, docs:, test:, chore:, ci:)
  • 国际化:面向用户的字符串通过 t!() 宏(rust-i18n)。区域设置文件: locales/{en,pl}.toml
  • 日志记录级别:
    • INFO =入口点(查询、参数、结果计数)
    • DEBUG =计时和得分统计
    • TRACE =原始数据(嵌入、分数)
    • 使用 #[tracing::instrument] 随着 skip(self) 关于搜索方法

工作区结构

该项目使用具有基于特征的依赖注入的Cargo工作区:

kajet (root binary)
├── kajet-core        # Domain model, Engine, trait definitions
├── kajet-parser      # Markdown parsing, chunking, wikilinks
├── kajet-backend     # Concrete implementations (embedder, vector store)
├── kajet-indexer     # Incremental indexing pipeline + file watcher
├── kajet-mcp         # MCP protocol handler
├── kajet-web         # Axum HTTP server + WebSocket
└── kajet-writer      # Note creation and editing (WIP)

路线图

看 GitHub 问题 对于计划中的功能。

致谢