vexor
基于向量嵌入的语义文件搜索引擎,让开发者用自然语言描述找到代码文件
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于向量嵌入的语义文件搜索引擎,让开发者用自然语言描述找到代码文件
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你接手了一个三年的老项目,代码仓库里有三千多个文件。你记得某个目录下有一个「处理配置文件」的模块——但你完全想不起文件名,只记得它大概「长得像 config 相关的工具」。这时候你会怎么办?
传统方案是用 grep -r "config" . 逐个关键词搜索,或者靠记忆在目录树里瞎翻。而 Vexor 告诉你:直接问。「帮我找那个处理配置文件的模块」,语义搜索瞬间定位。
这个项目最近登上了阮一峰的网络日志(第379期),并被收录进 Awesome Claude Skills 精选列表,成为 AI 编程助手生态中少数真正落地的语义搜索工具。
代码搜索是每个开发者的日常高频操作。grep 解决了精确匹配的问题,但它的局限也很明显:你必须知道搜索什么词。
真正的痛点出现在这些场景:
OrderManager 而非 payment向量嵌入(Embedding)技术的成熟让语义搜索成为可能:将文件内容编码为高维向量,用余弦相似度在向量空间中检索语义相近的结果。Vexor 就是这个思想在代码文件级别的工程实现。
Vexor 提供了三套使用入口,覆盖从人类开发者到 AI Agent 的全场景需求:
① CLI 工具(主入口)
pip install vexor
vexor init # 引导式配置 API Key 和 embedding 模型
vexor search "处理配置文件的模块"
核心搜索命令 vexor search 默认自动触发索引(首次运行),输出包含相似度分数、文件路径和内容预览。对于已有索引的目录,再次搜索毫秒级响应。
② Python API(程序化集成)
from vexor import index, search
index(path=".", mode="code")
response = search("config loader", path=".", mode="name")
for hit in response.results:
print(hit.path, hit.score)
支持 mode 参数切换策略:head(只看文件开头)、name(只看文件名)、code(只看代码内容)。这种设计让用户可以根据搜索场景灵活选择索引粒度。
③ 桌面 UI(Electron + Vue 3)
实验性质的图形界面,通过 Electron 调用本地 vexor CLI,包装了一层 Vue 前端。适合不想用命令行的用户,但项目文档明确标注为「实验性质,不活跃维护」。
图1:Vexor 桌面客户端搜索界面(实验性质)
Vexor 的架构分为清晰的三层:
展示层(CLI / API / GUI)
核心层(vexor/ 模块)
api.py:对外暴露的 Python API 接口search.py:搜索结果数据结构定义modes.py:搜索策略(name / head / code)选择逻辑cache.py:索引缓存管理,避免重复计算config.py:全局配置加载与验证output.py:结果格式化输出服务层(services/)
index_service.py:索引构建核心,负责文件遍历 → 内容提取 → 向量化 → 持久化search_service.py:搜索执行,调用 embedding provider 获取查询向量,检索缓存索引,重排序content_extract_service.py:多格式内容提取(代码、PDF、DOCX、PPTX),支持 tree-sitter 解析 JS/TSkeyword_service.py:BM25 关键词辅助索引skill_service.py:AI Agent Skill 安装与管理(Claude Code / Codex)嵌入提供商层(providers/)
openai.py:OpenAI text-embedding-3-small/largegemini.py:Google Gemini Embeddinglocal.py:本地 FastEmbed 模型,支持 CPU/GPU(onnxruntime-gpu)这种分层设计使得添加新的 embedding 提供商只需实现接口,无需改动核心逻辑。
图2:Vexor 项目图标
纯语义搜索在某些场景下精度不足——比如语义相近但用途完全不同的文件可能被错误地排在前面。Vexor 引入了重排序(Re-ranking)机制作为补充:
| 方案 | 原理 | 适用场景 |
|---|---|---|
| BM25 | 经典词项频率算法,轻量快速 | 快速增强,默认推荐 |
| FlashRank | 本地轻量级交叉编码器模型 | 高精度重排序(需额外安装) |
| Remote | 调用远程 API reranker | 有现成 rerank 服务的团队 |
重排序在语义搜索返回 top-k 结果后执行二次排序,候选集大小为 clamp(top * 2, 20, 150),在精度和性能之间取得平衡。对于中文或混合语言内容,建议配置 ms-marco-MultiBERT-L-12 多语言重排序模型。
Vexor 最有价值的特性之一是完整的离线能力。通过 pip install "vexor[local]" 安装 FastEmbed 本地嵌入引擎,配置 vexor local --setup --cuda 使用 GPU 加速:
vexor config --set-provider local
vexor local --setup --cuda # 下载 FastEmbed 模型到 ~/.vexor/
本地模式完全在本地运行,无需任何外部 API 调用,数据永不离开本地机器。这对于处理私有代码库、有数据合规要求的企业场景尤为关键。
这是 Vexor 最具想象力的特性:内置 Claude Code / Codex Agent Skill,让 AI 编程助手在陌生代码库中自主使用 Vexor 语义搜索。
vexor install --skills claude # 为 Claude Code 安装 skill
安装后,Claude Code 在处理陌生项目时可以这样说:
"Use the vexor-cli skill to find where config is loaded."
Skill 定义在 plugins/vexor/skills/vexor-cli/SKILL.md,包含完整的命令接口说明和使用示例,被 Awesome Claude Skills 收录说明社区认可度相当不错。
| 维度 | 评估 |
|---|---|
| CLI 安装 | ⭐ 极简:pip install vexor 或下载 standalone 二进制,无需 Python 环境 |
| 首次配置 | ⭐ 简单:vexor init 向导引导,一路回车即可 |
| API Key | 需要 OpenAI/Gemini/VoyageAI 三选一;完全离线可选 local 模式 |
| 多语言支持 | 良好(中文、CJK 支持 BM25 tokenizer 和 MultiBERT 重排序) |
| 索引性能 | 中等(文件越多索引越慢,但有增量缓存机制) |
| GUI | 标注实验性质,不建议生产使用 |
1. 索引大小与内存 对于超大型代码仓库(>10万文件),索引体积和首次构建时间会显著增长。本地模式下 GPU 显存需求也需要关注。
2. embedding 模型依赖 远程模式依赖 OpenAI/Gemini 等商业 API,成本和延迟是实际约束;本地模式 FastEmbed 精度与商业模型存在差距。
3. GUI 实验性质 项目明确表示桌面端「不活跃维护,可能不稳定」,用户应优先使用 CLI。
Vexor 代表了一个趋势:AI 原生开发工具的上下文感知能力。传统 IDE 的文件搜索是字符串匹配,而 Vexor 将语义理解引入文件发现层,配合 AI Agent Skill 的生态,正在让 AI 编程助手从「执行代码」进化到「理解代码结构」。
该项目已被中文技术社区的重要声音(阮一峰周刊)认可,在 GitHub 上持续活跃(2026年仍有提交),是近期值得关注的 AI 开发工具之一。
项目速览
pip install vexor 或下载 standalone 二进制