📓 kajet

为什么是“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 protobufUbuntu/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/)堆栈:
- 主控程序:官方
rmcpSDK与#[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 获取包含参数和示例的完整文档。
发展
建造的先决条件
从源头构建
# 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)路线图
看 对于计划中的功能。
致谢
- 受...启发 塞雷娜 用于MCP+仪表板方法
