SearchAnything
本地语义搜索引擎,用 AI 向量化技术实现隐私友好的文件智能检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
本地语义搜索引擎,用 AI 向量化技术实现隐私友好的文件智能检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你的电脑里堆积了几千份文档——PDF 论文、Markdown 笔记、截图、Word 报告。某天你想起"上周看过一篇讲大模型评估的文章,里面提到了 ICML 2024",但你完全想不起文件名,甚至连关键词都说不准。
传统搜索救不了你:Ctrl+F 只能搜文件名,Windows 搜索只能匹配字面词。而 SearchAnything 做的事,就是让 AI 理解你"语义上"在找什么——输入"大模型评估方法比较",它能把 ICML 那篇论文翻出来,哪怕文件名里根本没出现"评估"二字。
这背后的技术原理,就是 Embedding(语义向量化)+ 余弦相似度检索。
SearchAnything 由中科院(CASIA)博士 Kaijie Zhu 发起,联合了来自 STCA、NUS(新加坡国立大学)和微软亚研院(MSRA)的研究者共同开发。项目于 2023 年中开源,GitHub 获得 311 Stars,虽然官方公告项目"不再活跃维护",但其在语义搜索领域的技术思路和工程实践仍有重要参考价值。
这是一个典型的 学术工程化项目——作者们本身是大模型研究领域的活跃研究者(Kaijie Zhu 在 Google Scholar 有 8000+ 引用),SearchAnything 体现了他们将 AI 能力平民化的尝试:用本地运行的轻量模型,让普通用户也能享受语义搜索的便利。
图1:主要作者 Kaijie Zhu(中科院博士),Google Scholar 引用 8000+,研究方向涵盖 LLM 评估、Agent 竞争动态等
SearchAnything 的技术架构非常清晰,核心只有两个环节:
第一步:Embedding(向量化)
对每一份文件(PDF、文本、图片),项目调用预训练的 Transformer 模型,将其内容转换为一段高维向量(embedding)。文本使用 all-mpnet-base-v2 模型,图片使用 clip-ViT-B-32。这些向量本质上是对内容"语义"的数学编码——语义相近的内容,在向量空间中距离也相近。
第二步:余弦相似度检索
当用户输入查询语句时,同样的 Embedding 模型将查询转换为向量,然后在向量数据库中计算它与所有已索引文件的余弦相似度(Cosine Similarity),按相似度降序返回结果。整个过程不需要任何网络请求,所有数据保存在本地 SQLite 数据库中。
SearchAnything 提供了两套交互界面:
命令行界面(CLI)
通过 python anything.py 启动,交互方式模仿传统 CLI:
insert <文件路径>:将文件或目录加入语义索引search <查询>:语义搜索已索引的文件delete:删除已索引文件适合技术用户快速操作。
Streamlit Web UI
通过 streamlit run app.py 启动本地 Web 服务器,提供可视化的搜索界面。用户体验大幅提升:自然语言搜索框、搜索结果按相关性排序展示、支持文件预览和路径跳转。
支持的文件格式
根据 config.py 和代码分析,当前版本支持:
值得注意的是,代码库已声明"不再活跃维护",但 CLIP 图片语义搜索、Word/PPT 解析器等高级功能实际上已在代码中实现,只是 README 未同步更新——这对想深入研究源码的开发者来说是惊喜。
SearchAnything 的代码组织值得称道,采用了清晰的 Parser 模式:
process/
__init__.py # 统一 parser 注册表
parser_base.py # BaseParser 抽象基类
pdfparser.py # PDF → 句子列表
mdparser.py # Markdown → HTML → 纯文本 → 句子
txtparser.py # 纯文本 → 句子
imgparser.py # PIL 读取图片 → CLIP encode
docparser.py # Word 文档解析
pptparser.py # PowerPoint 解析
每种文件类型对应一个 Parser,继承同一个 BaseParser,实现了统一的 parse() 接口。解析结果统一输出为 List[Dict],包含:content(原文)、embedding(向量)、file_path(文件路径)、page(页码)等字段。这种设计的扩展性很好——新增文件类型只需写一个新的 Parser 类,在 process/__init__.py 中注册即可。
工具模块 tools/search4files.py 则负责文件系统遍历,支持监控目录变化、自动索引等功能,体现了作者对"本地文件监控"场景的思考。
SearchAnything 采用传统的 Conda 环境管理,部署步骤:
git clone git@github.com:kaijiezhu11/SearchAnything.git
conda env create -f env.yaml
conda activate anything
streamlit run app.py
部署难度:简单。env.yaml 包含了完整的依赖锁文件(Python 3.8 环境),避免了版本冲突地狱。唯一要求是预装 Conda 和 Git,对 Python 开发者来说门槛不高。
局限性:
隐私保护是项目的重要卖点:所有模型下载到本地运行,数据完全不经过云端,适合处理敏感文档(法律文件、医疗记录、内部代码等)。
优势
不足
代码质量评分:75/100。代码结构良好,注释充分,但缺乏单元测试(test.py 存在但内容单薄),env.yaml 中大量冗余依赖(TensorFlow、PyTorch 同时装),环保意识有待提升。
SearchAnything 代表了 2023 年兴起的一波"本地化 AI 工具"趋势。与云端 AI 服务相比,本地运行的优势在于:
同类项目如 Semantra(GitHub 文档语义搜索)采用了不同的设计思路,而 SearchAnything 通过多模态支持(图片搜索)和 Web UI 走出了差异化路线。
虽然项目已停止维护,但其技术思路——用 sentence-transformers 做 Embedding + SQLite 做向量存储——是 RAG(检索增强生成)系统的简化版本,对学习和实践本地 AI 应用仍有很高参考价值。
本报告由 PIFS AI 项目分析系统自动生成 | 项目:kaijiezhu11/SearchAnything | 分析时间:2026-07-01