xerj
xerj-org/xerj加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨三点,你正在为一个 50 万行的 Rust 项目添加新功能。问题很明确:需要复用仓库里某个相似模块的实现逻辑。但你不知道它在哪里。
你打开终端,输入 grep -r "euler_to_rotation"。找到了。问题是——grep 只是告诉你"在哪个文件",而这个文件 3000 行,你的模型上下文只有 8K tokens。
这就是过去几年里,所有 AI 编程助手共同面对的困境:grep 告诉模型去哪里读,但读还是要花钱。每一次文件扫描、每一行加载,都在消耗宝贵的上下文窗口。这不是 Bug,这是架构级别的浪费。
XERJ 解决的就是这个问题。
XERJ 起源于一个很实际的需求:团队在用 Claude Code 写 Rust 代码时发现,模型处理陌生仓库时效率极低。每次遇到新问题,都要让模型自己翻文件、做检索,既慢又贵。
他们的思路很简单:让模型学会"查参考书"而不是"从第一页背起"。做法是:克隆最相似的开源项目,用 XERJ 建立索引,模型在动手之前先查一下"别人是怎么解决的"。
这一查,效果出乎意料地好——在对照实验中,使用 XERJ 的 agent 在保持相同正确率的前提下,输出 tokens 减少了 2.7 倍。实际工作中,用户报告的节省幅度更高,约为 5 倍。
这个数字的含金量很足:更少的 tokens 意味着更低的账单、更快的响应,以及——让更小的模型在编程任务上超越更贵的模型成为可能。
XERJ 的定位不是一个普通的全文搜索引擎,它是一个专为 AI 工作流设计的语义 + 结构化检索引擎,背后是 Rust 编写的高性能底层。
这是 XERJ 最核心的使用场景。当你要实现某个功能时,先用 xerj autoindex 对目标仓库建立索引,然后用自然语言搜索:
xerj autoindex ~/my-project
xerj search "fsync the WAL segment on rotation"
# → 精确到 file:line 的结果,带函数签名
模型不再需要逐文件扫描,而是直接获取"最相关的那一段代码 + 它的上下文",tokens 节省由此而来。
xerj autoindex <folder> 能自动识别 25 种文件格式——代码、日志、PDF、CSV、JSON、Markdown——并自动推断字段类型、跳过垃圾文件,最终生成带类型信息的索引数据。518 MB 的真实语料库索引只需 38 秒。
XERJ 支持 50 种查询类型,在底层同时融合了 BM25 关键词精确匹配和 kNN 向量相似度搜索。无需额外部署向量数据库,也不需要在两个系统之间写融合逻辑——一个查询树,一次完成。
通过 /_memory/<namespace> API,AI Agent 可以将对话状态、用户偏好、工作进展等元数据存储在 XERJ 中,并用语义检索召回。不同的 Agent 可以有独立的 namespace,实现多 Agent 场景下的记忆隔离。
XERJ 在端口 9200 实现了与 Elasticsearch 8.x 的 Wire 兼容(1366/1369 个兼容性测试用例通过),意味着 Kibana、所有 ES 客户端库、Logstash 插件都可以直接对接,零代码迁移。
XERJ 是一个用 Rust 编写的单二进制引擎,核心设计哲学是:Elasticsearch 能做的,它做得更小、更快、更安静。
性能对比(在同机器、相同数据量下 vs Elasticsearch 8.13.0):
| 指标 | Elasticsearch | XERJ | 胜者 |
|---|---|---|---|
| 二进制大小 | ~800 MB | ~16 MB | XERJ 50× |
| 冷启动时间 | 6.04 s | 0.40 s | XERJ 15× |
| 内存占用(100k docs + 1k vectors) | 2,527 MB | 86 MB | XERJ 29× |
| 单文档写入延迟 p50 | 6.50 ms | 0.34 ms | XERJ 19× |
| Term 查询延迟 p50 | 0.79 ms | 0.32 ms | XERJ 2.5× |
| kNN 查询延迟 p50 | 1.43 ms | 0.49 ms | XERJ 2.9× |
| GC 暂停 | 20–40 ms | 0 | XERJ |
零 GC 是一个关键特性。对于需要稳定延迟的在线检索场景,JVM 的垃圾回收暂停是一个长期痛点。XERJ 的 Rust 原生实现完全避免了这个问题。
代码仓库按功能拆分为多个 crate:engine/ 是核心引擎,functions/ 包含各语言 SDK,tools/ 包含 CLI 工具,xerj-ux/ 是 Web UI。测试体系包括模糊测试(fuzz/)和标准单元/集成测试。
XERJ 对部署极其友好,三种场景全覆盖:
最简安装(推荐):
curl -fsSL https://xerj.org/get | sh
xerj --insecure --data-dir ./data &
Docker 部署(生产推荐):
cd engine
docker-compose up -d
# 自动暴露 8080(原生 API)、9200(ES 兼容)、8081(gRPC)
Kubernetes 部署:
helm install xerj deploy/helm/xerj/
二进制约 16 MB,运行时最低 512 MB 内存即可,无需 GPU,不依赖外部服务。
XERJ 不是一个没有缺点的项目,以下几点值得关注:
1. 向量搜索性能 vs Elasticsearch 虽然 kNN 查询延迟(0.49 ms)远低于 ES(1.43 ms),但批量导入吞吐量(95k docs/s)仍低于 ES(179k docs/s)约一半。官方已承认这是当前的性能 backlog。
2. ES 兼容性尚非 100%
1366/1369 的覆盖率意味着还有 3 个用例未覆盖。在生产环境迁移 ES 之前,建议仔细阅读 demo/playbooks/ES_COMPATIBILITY.md 中的已知差异。
3. "5 倍节省"数据的来源 用户报告的 ~5× 节省来自社区 field report,尚未经过严格的同行评审对照实验。官方 case study 中有 2.7× 的受控数据,相对更可靠。
4. 生态仍在建设期 作为 2026 年 6 月才创建的项目(距今仅约 3 个月),社区规模较小(1910 stars,236 forks),Issue 活跃度一般,部分文档仍在完善中。
XERJ 的出现反映了 2026 年 AI 编程领域的一个趋势:Token 经济学的工程化。
当上下文窗口越来越贵,当模型调用成本成为产品的主要支出,开发者们开始认真对待"每一次 token 消耗的性价比"。XERJ 正是这一思路的产物——它不改变模型,不改变提示词,它改变的是信息检索的方式。
另一个值得关注的方向是"单二进制替代分布式集群"。XERJ 用 16 MB 替代 ES 的 800 MB + JVM + 复杂配置,这在边缘部署、物联网、本地开发环境中有巨大的成本优势。
最后,XERJ 的 Field Report 机制(用户使用后提交一份简短报告换取社区成员资格)是一个有趣的开源社区运营实验。它的好处是:每一个报告都来自真实使用场景,数据可信度高。