Kreuzberg v4.0.0-RC.8 已可用
发布: (2025年12月15日 GMT+8 21:06)
7 min read
原文: Dev.to
Source: Dev.to
公告
Kreuzberg v4.0.0‑rc.8 已在所有渠道上线。正式的 v4.0.0 发行计划在明年年初(几周内)发布。
Kreuzberg 是什么?
Kreuzberg 是一套文档智能工具包,能够从 56+ 种文件格式中提取文本、元数据、表格、图像和结构化数据。
- v1‑v3:纯 Python 实现。
- v4:使用 Rust(2024 版)全新重写,并提供多语言原生绑定,实现零成本抽象、内存安全和原生性能。
语言绑定
| 语言 / 运行时 | 绑定类型 |
|---|---|
| Rust | 原生库 |
| Python | PyO3 原生绑定 |
| TypeScript (Node.js) | NAPI‑RS 原生绑定 |
| TypeScript (Deno / 浏览器 / Edge) | WebAssembly |
| Ruby | Magnus FFI |
| Java 25+ | Panama 外部函数与内存 API |
| C# | P/Invoke |
| Go | cgo 绑定 |
即将推出的绑定
- PHP
- Elixir(通过 Rustler,支持 Erlang 与 Gleam 互操作)
安装方式
- CLI – 通过
cargo或 Homebrew 安装。 - HTTP REST API 服务器(Axum)。
- 模型上下文协议(MCP)服务器,用于 Claude Desktop / Continue.dev。
- Docker 镜像(公开可用)。
架构改进
- 使用 Rust 所有权模型实现零拷贝操作。
- 基于 Tokio 运行时的真正异步并发(无 GIL)。
- 流式解析器,实现多 GB 文件的常量内存处理。
- SIMD 加速的文本处理,用于 token 缩减和字符串操作。
- 所有语言绑定的内存安全 FFI 边界。
- 基于 Trait 的插件系统,便于扩展。
v3 → v4 对比
| 功能 | v3(Python) | v4(Rust) |
|---|---|---|
| 核心语言 | 纯 Python | Rust(2024 版) |
| 支持的格式 | 30‑40 (via Pandoc) | 56+(原生解析器) |
| 语言绑定 | 仅 Python | 7 种语言(Rust、Python、TS、Ruby、Java、Go、C#) |
| 依赖 | 需要 Pandoc(系统二进制) | 零系统依赖 |
| 嵌入向量 | 不支持 | FastEmbed + ONNX(3 种预设 + 自定义) |
| 语义分块 | 外部库 | 内置(文本 + Markdown 感知) |
| Token 缩减 | 基于 TF‑IDF | 3 种可配置模式 |
| 语言检测 | 可选(fast‑langdetect) | 内置(68 种语言) |
| 关键词提取 | 可选(KeyBERT) | 内置(YAKE + RAKE) |
| OCR 后端 | Tesseract/EasyOCR/PaddleOCR | 同上 + 更紧密集成 |
| 插件系统 | 有限的提取器注册表 | 完整的基于 Trait 系统(4 种插件类型) |
| 页码追踪 | 基于字符的索引 | 基于字节的索引,支持 O(1) 查询 |
| 服务器 | REST API(Litestar) | HTTP(Axum)+ MCP + MCP‑SSE |
| 安装体积 | ~100 MB 基础 | 16‑31 MB 完整 |
| 内存模型 | Python 堆 | RAII + 流式处理 |
| 并发 | asyncio(受 GIL 限制) | Tokio 工作窃取 |
从 Pandoc 到原生解析器
v3 的局限(Pandoc):
- 系统级依赖和安装开销。
- 每个文档都要启动子进程。
- 不支持流式处理。
- 元数据提取受限。
- ~500 MB 的安装占用。
v4 的优势(原生 Rust 解析器):
- 零外部依赖。
- 直接解析,全面控制提取过程。
- 元数据更丰富(如 DOCX 属性、章节结构、样式)。
- 支持大文件流式处理(已在多 GB XML 上测试)。
- 示例:PPTX 提取器现在可以以常量内存使用流式处理千兆级演示文稿。
扩展的格式支持
新支持的旧版格式:
.doc(Word 97‑2003).ppt(PowerPoint 97‑2003).xls(Excel 97‑2003).eml(电子邮件).msg(Outlook)
学术/技术格式:
- LaTeX(
.tex) - BibTeX(
.bib) - Typst(
.typ) - JATS XML(学术文章)
- DocBook XML
- FictionBook(
.fb2) - OPML(
.opml)
改进的 Office 支持:
- Excel 二进制/宏文件(
.xlsb、.xlsm) - 更丰富的 DOCX/PPTX/XLSX 元数据提取
- 完整的表格提取(包括演示文稿)
- 图像提取并去重
RAG 与 LLM 工作流的新特性
嵌入向量(FastEmbed)
- ONNX Runtime 加速。
- 预设:fast(384 d)、balanced(512 d)、quality(768 d/1024 d)。
- 支持自定义 ONNX 模型。
- 本地生成(无需外部 API 调用,无速率限制)。
- 自动模型下载与缓存。
示例(Python)
from kreuzberg import ExtractionConfig, EmbeddingConfig, EmbeddingModelType
config = ExtractionConfig(
embeddings=EmbeddingConfig(
model=EmbeddingModelType.preset("balanced"),
normalize=True
)
)
result = kreuzberg.extract_bytes(pdf_bytes, config=config)
# result.embeddings contains a vector for each chunk
语义文本分块(内置)
- 基于结构的分块,遵循文档语义。
- 两种策略:
- 通用 – 空格/标点感知。
- Markdown – 保留标题、列表、代码块、表格。
- 可配置块大小与重叠。
- Unicode 安全(支持中日韩、表情符号)。
- 自动将块映射到页面,提供字节精确的偏移。
字节精确页码追踪(破坏性变更)
- v3: 基于字符的索引(对 UTF‑8 多字节字符不准确)。
- v4: 基于字节的索引(
byte_start/byte_end),对所有字符串操作均正确。 - O(1) 查询:“字节偏移 X 位于哪一页?”
- 支持按页提取内容并插入页标记(如
--- Page 5 ---)。
增强的 Token 缩减
三种可配置模式,用于降低 LLM 上下文大小:
| 模式 | 约减比例 |
|---|---|
| Light | ~15 % |
| Moderate | ~30 % |
| Aggressive | ~50 % |
实现基于 TF‑IDF 句子打分、位置感知权重、语言特定停用词过滤以及 SIMD 加速。
语言检测(内置)
- 支持 68 种语言并返回置信度。
- 能处理混合语言文档。
- 提供 ISO 639‑1 与 ISO 639‑3 编码。
- 可配置置信度阈值。
关键词提取(内置)
- YAKE – 无监督、语言无关。
- RAKE – 快速统计方法。
- 可配置 n‑gram(1‑3 词)。
- 使用语言特定停用词进行相关性打分。
插件系统
四种可扩展插件类型:
- DocumentExtractor – 自定义文件格式处理器。
- OcrBackend – 集成自定义 OCR 引擎(包括 Python 模型)。
- PostProcessor – 数据转换与增强。
- Validator – 提取前的验证。
插件在 Rust 中定义,跨所有语言绑定可用;Python/TypeScript 可提供线程安全的回调进入 Rust 核心。
生产级服务器
- HTTP REST API – 基于 Axum 的服务器,附带 OpenAPI 文档。
- MCP 服务器 – 直接集成 Claude Desktop、Continue.dev 等 MCP 客户端。
- MCP‑SSE 传输(RC.8) – 为无 WebSocket 环境提供服务器发送事件。
所有服务器模式共享同一功能集:提取、批处理和缓存。
欲了解更多细节,请参阅官方 Kreuzberg 文档和发行说明。