用途:修改或诊断 Xberg 核心提取编排,包括缓存语义、提取器回退、后处理、并发默认值与格式级质量。
主要能力与流程:格式检测(扩展名经 EXT_TO_MIME,或字节经 detect_mime_type_from_bytes,并按 SUPPORTED_MIME_TYPES 校验)→ 路由(注册表返回该 MIME 下 priority() 最高的提取器)→ 提取(产出 InternalDocument)→ 后处理(core::pipeline::run_pipeline 异步或 run_pipeline_sync 用于 WASM,执行校验、质量处理、分块与钩子,返回 ExtractedDocument)。所有提取路径都经过后处理。
代码布局:crates/xberg/src/core/pipeline/ 为编排;core/mime.rs、core/formats.rs 为检测与 FORMATS 注册表;extractors/ 每格式一个模块,实现 InternalDocumentExtractor;extraction/ 为共享解析渲染辅助;core/config/ 与 core/config_validation/ 均为目录。
回退策略:受密码保护的 PDF 先试配置密码再试备用列表,失败时在元数据标记 is_encrypted 而非报错;无可提取文本的 PDF 页路由到 OCR,可用 config.force_ocr 与 config.force_ocr_pages 强制;嵌套归档递归并受 SecurityLimits 深度限制;损坏输入返回已解析内容并附错误位置,不 panic。跨提取器回退链仅对 UnsupportedFormat 与 Plugin 错误生效(由 is_extractor_fallback_eligible 定义),解析、IO、OCR、校验错误会中止该链;成功回退会记录 extractor-fallback 处理警告。
缓存与并发:缓存键为 <cache_version_tag>-<content_hash>-<config_hash>,不基于路径;标签哈希 CARGO_PKG_VERSION、CACHE_SCHEMA_VERSION、env!("XBERG_BUILD_ID") 与 debug/release 位。XBERG_BUILD_ID 为提交 SHA 加未提交 diff 哈希,即构建指纹。无法获取 git 元数据时 XBERG_BUILD_ID 为空(crates.io/docs.rs 压缩包或 Docker 构建),此时若行为可能变化需提升 CACHE_SCHEMA_VERSION。A/B 或回滚检查应禁用缓存或为各分支导出不同 XBERG_BUILD_ID。影响输出的配置须纳入配置哈希,提取前先查缓存。默认批并发取主机 CPU 数,并受 Linux cgroup 配额限制(resolve_thread_budget)。core/io.rs::read_file_async 目前用 tokio::fs::read 读整个文件,无 AsyncRead 提取接口,流式处理为未实现缺口;存在缓存命中/未命中 OTel 计数器,但未计算或强制命中率目标。
插件:crates/xberg/src/plugins/,按 priority() 选择,最高者胜,非注册顺序;注册高于 50 可覆盖内置。
特性:全部在 crates/xberg/Cargo.toml,无 FEATURE_MATRIX.md;分组含 OCR、格式、AI/ML、服务器与聚合特性;绑定为独立 crate;唯一互斥对为 ort-bundled / ort-dynamic;WASM 不含 ORT 嵌入但含 ocr-wasm、keywords 与 static-embeddings。
关键规则:先检测再路由,不可仅凭调用方扩展名分发;后处理强制;按优先级而非注册顺序选择;不得声称支持流式;对用户内容应用 SecurityLimits(归档大小、压缩比、文件数、嵌套深度);优雅失败。验证:测试变更的格式类别及成功与失败路径,无强制覆盖率契约;格式头条测试为强制计数,需与 FORMATS 同步更新常量与文案;性能或质量声明使用 benchmark-workflow,测试语料使用 test-corpus。相关技能:mime-detection-routing、plugin-architecture-patterns、format-specific-extraction、chunking-embeddings。