乐于分享
好东西不私藏

不用向量数据库的AI搜索来了!这个项目让我重新思考RAG

不用向量数据库的AI搜索来了!这个项目让我重新思考RAG

最近折腾公司知识库的时候,我又被向量数据库折腾了一遍。

数据刚向量化完,第二天业务部门就更新了20份新文档。然后又得重新跑一遍 embedding,再进行索引更新。这套流程走下来,有点麻烦。

直到前几天在 GitHub 上刷到一个叫 Sirchmunk的项目,直接颠覆了我对 RAG 的认知——

它居然完全不用向量数据库,也不用向量模型。

先说说它到底干了啥

Sirchmunk 是 ModelScope 团队搞的一个”自进化搜索引擎”。最骚的操作在于:它直接从原始文件里搜,不搞向量那一套。

你可能会问,那不就是个普通的文件搜索吗?又不是没有 grep、没有 Everything。

关键区别在于——它会把搜索结果喂给大模型,让它自己决定哪些内容有用,还能根据搜索结果自动调整策略

这就有点像你给实习生一堆资料让他查东西。普通搜索是把资料目录给他;Sirchmunk 是实习生自己翻书,翻到哪页觉得有用就仔细看看,看不懂还能回去再翻别的。

它的”蒙特卡洛采样”是什么鬼?

这个技术名词听起来唬人,其实逻辑挺朴素的。

想象你在一份 500 页的技术手册里找答案。你不会从头读到尾对吧?你大概会:

  1. 先快速翻翻——看看目录、关键词,锁定几个可能相关的章节
  2. 再精读那几段——把看起来有用的内容仔细读一遍
  3. 最后整理输出——把找到的内容组织成答案

Sirchmunk 就是这么干的,只不过它用算法把这个过程自动化了:

第一阶段:在文档里随机撒点+模糊匹配,快速定位可能相关的内容块 第二阶段:围绕高分区域做”高斯重要性采样”,像聚光灯一样聚焦精读 第三阶段:把精选的内容喂给 LLM,生成最终答案

这样做的好处是:无论文档是 2 页还是 500 页,处理逻辑是一样的,而且只把最相关的片段传给 LLM,token 消耗能省不少。

“自进化”是怎么进化的?

Sirchmunk 还有个挺有意思的设计叫 Knowledge Cluster(知识聚类)

简单说就是它会记住你问过什么。当你搜新问题时,它会先看看以前有没有回答过类似的——如果语义相近(余弦相似度≥0.85),就直接返回缓存的答案,不用再调用 LLM。

这里要澄清一下:Sirchmunk “不用向量”指的是不对原始文档做向量化,省去了搭建向量数据库的成本。但在查询缓存层,它确实用了轻量级的 384 维向量来判断”这个问题以前是不是问过”。也就是说,文档检索靠关键词,历史查询复用靠向量——各取所长。

更妙的是,这个”记忆”不是死的。同一个知识点被不同方式问过几次后,它的语义向量会慢慢漂移,覆盖到更多相关的问法。

用大白话说:它越用越懂你。

这些数据存在本地的 DuckDB 里,轻量得很,不需要装什么 MySQL、Postgres。

三种搜索模式,按需选择

  • FILENAME_ONLY:就搜文件名,1秒内搞定,零 LLM 调用
  • FAST 模式:2-5秒,调 2 次 LLM,日常查询够用
  • DEEP 模式:10-30秒,蒙特卡洛采样 + ReAct 智能体,复杂问题也能 hold 住

我自己试了下,搜一个中等规模的代码库(大概 500 个文件),FAST 模式确实 3 秒左右出结果,体验挺流畅的。

这玩意儿适合谁用?

说实话,不是所有场景都适用。

适合的场景:

  • 本地文档库、代码库搜索
  • 日志分析、配置文件查找
  • 需要快速接入 Claude Desktop 或 Cursor 的 AI 工作流
  • 不想为 embedding API 持续付费的小团队

不太适合的:

  • 需要语义推荐(比如”猜你喜欢”这种)
  • 超大规模数据检索(TB 级以上)
  • 需要实时向量更新的场景

怎么用?

安装贼简单:

# Create virtual environment (recommended)conda create -n sirchmunk python=3.13 -y && conda activate sirchmunk pip install sirchmunk# Or via UV:uv pip install sirchmunk# Alternatively, install from source:git clone https://github.com/modelscope/sirchmunk.git && cd sirchmunkpip install -e .
初始化的日志
(py312) kalami@192 demo_dir % sirchmunk init============================================================  Sirchmunk Initialization============================================================Work path: /Users/kalami/.sirchmunkCreating directory structure...  ✓ Created work directory and subdirectories  ✓ Generated /Users/kalami/.sirchmunk/.envChecking dependencies...  ✗ ripgrep-all (rga) is not installed    Installing ripgrep-all...Installing rg from BurntSushi/ripgrep...Installing rga from phiresky/ripgrep-all...  ✓ ripgrep-all installed successfully  ✗ ripgrep (rg) is not installed    Please install: https://github.com/BurntSushi/ripgrepChecking environment variables...  ✗ LLM_API_KEY is not set    Set it in /Users/kalami/.sirchmunk/.env  • LLM_MODEL_NAME: gpt-5.2  • LLM_BASE_URL: https://api.openai.com/v1Downloading embedding model...  (This may take a few minutes on first run)2026-05-0311:38:15.029 | DEBUG    | sirchmunk.utils.embedding_util:_download_model:125 - Offline cache miss for sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, trying online download...Downloading Model from https://www.modelscope.cn to directory: /Users/kalami/.sirchmunk/.cache/models/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v22026-05-0311:38:16,129 - modelscope - INFO - Got 13 files, start to download ...Downloading [config.json]: 100%|███████████████████████████████████████████████████████| 645/645 [00:00<00:002.64kB/s]Downloading [modules.json]: 100%|████████████████████████████████████████████████████████| 229/229 [00:00<00:00932B/s]Downloading [sentence_bert_config.json]: 100%|█████████████████████████████████████████| 53.0/53.0 [00:00<00:00213B/s]Downloading [1_Pooling/config.json]: 100%|███████████████████████████████████████████████| 190/190 [00:00<00:00743B/s]Downloading [configuration.json]: 100%|████████████████████████████████████████████████| 77.0/77.0 [00:00<00:00295B/s]Downloading [config_sentence_transformers.json]: 100%|███████████████████████████████████| 122/122 [00:00<00:00465B/s]Downloading [README.md]: 100%|█████████████████████████████████████████████████████| 3.80k/3.80k [00:00<00:0011.3kB/s]Downloading [tokenizer_config.json]: 100%|█████████████████████████████████████████████| 526/526 [00:00<00:002.01kB/s]Downloading [special_tokens_map.json]: 100%|█████████████████████████████████████████████| 239/239 [00:00<00:00770B/s]Downloading [sentencepiece.bpe.model]: 100%|███████████████████████████████████████| 4.83M/4.83M [00:00<00:006.97MB/s]Downloading [tokenizer.json]: 100%|████████████████████████████████████████████████| 8.66M/8.66M [00:01<00:006.35MB/s]Downloading [unigram.json]: 100%|██████████████████████████████████████████████████| 14.1M/14.1M [00:01<00:009.55MB/s]Downloading [model.safetensors]: 100%|███████████████████████████████████████████████| 449M/449M [00:21<00:0022.2MB/s]Processing 13 items: 100%|███████████████████████████████████████████████████████████| 13.0/13.0 [00:21<00:001.63s/it]2026-05-0311:38:37,384 - modelscope - INFO - Finish downloading 13 files for repo 'sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2'ensors]:   3%|█▎                                            | 13.0M/449M [00:01<00:4011.2MB/s]2026-05-0311:38:37.385 | DEBUG    | sirchmunk.utils.embedding_util:_download_model:135 - Model downloaded: /Users/kalami/.sirchmunk/.cache/models/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 449M/449M [00:21<00:0025.1MB/s]  ✓ Embedding model downloaded: /Users/kalami/.sirchmunk/.cache/models/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2  • MCP package not installed (optional)    Install with: pip install sirchmunk[mcp]  ✓ Generated MCP client config: /Users/kalami/.sirchmunk/mcp_config.json============================================================  Initialization complete!============================================================Next steps:1. Edit /Users/kalami/.sirchmunk/.env to configure LLM_API_KEY2. Run 'sirchmunk serve' to start the API server3. Run 'sirchmunk search "your query"' to perform searches4. Run 'sirchmunk web init' to build WebUI (optional, requires Node.js)5. For MCP: copy /Users/kalami/.sirchmunk/mcp_config.json to your MCP client config     - Cursor: ~/.cursor/mcp.json     - Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json

初始化时,会先自动下载一个向量模型;paraphrase-multilingual-MiniLM-L12-v2

配置文件路径:看日志:

/Users/kalami/.sirchmunk/.env

然后配置下环境变量(API Key 啥的),就可以开搜了:

sirchmunk search "用户认证是怎么实现的?" ./src

它也支持 MCP 协议,配到 Claude Desktop 里就能直接对话搜索本地文档,体验挺丝滑的。

同样它也支持网页版,详细可以看官方教程;

最后说两句

Sirchmunk 给我最大的启发是:RAG 不一定非得走向量检索这条路。

向量模型确实强大,但它带来的基础设施成本、延迟问题、信息损失,在某些场景下反而是负担。有时候回归本质——直接搜、智能读、精准答——可能更简单有效。

当然,这个项目还比较新,大文件支持和图像搜索这些还在完善。但对于轻量级、成本敏感的本地搜索场景,它确实提供了一个很有意思的新思路。

项目地址:https://github.com/modelscope/sirchmunk

有兴趣的可以去试试,装起来也就几分钟的事。如果折腾过程中遇到什么问题,欢迎在评论区交流,我也还在摸索中。


对了,看完觉得有用的话,点个在看或者转发给同样在折腾知识库的同事吧。咱们下篇见。