
后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载本文围绕 Xberg 的 PHP 绑定中Xberg::clearRerankerBackends()这一静态方法系统讲解 reranker重排后端插件注册表的完整管理方式如何注册、列出、注销并整体清空自定义重排后端以及该方法从 PHP 调用一路下沉到 Rust 全局注册表shutdown_all的实现链路。读完本文你将掌握在 PHP 应用中安全地管理进程内重排后端生命周期的方法并能理解清空操作的 best-effort 语义及其对应用正确性的影响。为什么需要清空 Reranker 后端在 Xberg 的插件体系里reranker 后端是一类由宿主语言如 PHP在进程内注册、由 Rust 核心回调执行的插件对象。它负责对(query, document)对进行联合打分并返回原始 logitlogit 由分发器统一经过 sigmoid 转换为[0, 1]分数后再排序截断是 HTTP 型 LLM 重排RerankerModelType::Llm之外的进程内补充路径。相关说明可参见 Rust 插件模块实现。与 OCR、Embedding 等注册表不同reranker 注册表默认没有任何内置后端——后端全部由宿主语言在运行时提供见 注册表源码注释。这意味着当你的 PHP 进程在测试、演示或热重载场景下注册了多个重排后端后需要一个明确的手段把注册表恢复为空状态这正是clearRerankerBackends()的职责。核心操作PHP 中清空全部 Reranker 后端关联文档给出的用法非常简洁在通过 Composer 引入xberg-io/xberg并require vendor/autoload.php之后直接调用静态方法即可?php declare(strict_types1); require_once __DIR__ . /vendor/autoload.php; use Xberg\Xberg; Xberg::clearRerankerBackends();这段代码来自 PHP 片段文档它的语义是将全局注册表中所有已注册的 reranker 后端全部移除并对每个后端调用shutdown()生命周期钩子。前置条件PHP 8.2PHP 包明确要求见 PHP 包说明通过 Composer 安装并加载 autoloadcomposer require xberg-io/xberg本机具备 Xberg 的 native 扩展PHP 绑定通过XbergApi委托给底层扩展执行。与管理方法配套使用clearRerankerBackends是 reranker 注册表管理 API 中的一个环节完整的生命周期管理方法均定义在 Xberg 门面类 中包括方法作用Xberg::registerRerankerBackend(RerankerBackend $backend)注册一个自定义重排后端按插件名索引见 PHP 接口定义Xberg::unregisterRerankerBackend(string $name)按名字注销单个后端并调用其shutdown()Xberg::listRerankerBackends(): array列出当前所有已注册后端的名字Xberg::clearRerankerBackends(): void清空全部后端逐个调用shutdown()一个典型的注册 → 验证 → 清空 → 验证为空流程可以这样写?php declare(strict_types1); require_once __DIR__ . /vendor/autoload.php; use Xberg\Xberg; use Xberg\RerankerBackend; // 1. 注册一个自定义重排后端实现 RerankerBackend 接口的实例 $backend new class implements RerankerBackend { public function rerank(string $query, mixed $documents): mixed { // 返回与 $documents 等长的原始 logit 数组 $scores []; foreach ($documents as $doc) { $scores[] 1.0; } return $scores; } }; Xberg::registerRerankerBackend($backend); var_dump(Xberg::listRerankerBackends()); // [匿名类名] // 2. 整体清空 Xberg::clearRerankerBackends(); // 3. 验证注册表已空 var_dump(Xberg::listRerankerBackends()); // []清空是安全的空操作如果注册表本身就是空的调用clearRerankerBackends()不会报错——Rust 侧的shutdown_all对空注册表直接返回Ok。对应的单元测试shutdown_all_clears_all_backends与remove_missing_backend_is_noop都覆盖了空表/缺失项不报错的路径见 注册表单元测试。因此你可以放心地在测试 setUp / tearDown 中无条件调用它来重置状态。底层原理从 PHP 到 Rust 的完整调用链第一步PHP 门面委托给 native 扩展Xberg::clearRerankerBackends()本身并不包含业务逻辑而是委托给 native 扩展类public static function clearRerankerBackends(): void { \Xberg\XbergApi::clearRerankerBackends(); // delegate to native extension class }见 Xberg.php 门面实现。同文件中的registerRerankerBackend、unregisterRerankerBackend、listRerankerBackends也采用同样的委托模式最终都汇聚到 Rust 侧同一套注册表 API。第二步Rust 核心获取全局注册表并执行清空Rust 侧的入口是clear_reranker_backends()pub fn clear_reranker_backends() - Result() { use crate::plugins::registry::get_reranker_backend_registry; let registry get_reranker_backend_registry(); let mut registry registry.write(); registry.shutdown_all() }见 plugins/reranker.rs。它通过读写锁获取全局注册表并调用shutdown_all()。第三步best-effort 清空语义RerankerBackendRegistry::shutdown_all()是清空语义的核心值得仔细理解见 注册表实现先快照当前所有后端名字逐个从AHashMap中移除并调用其shutdown()即使某个后端shutdown()返回错误其余后端仍会继续被关闭并从注册表移除——这是 best-effort 行为保证注册表始终一致不会出现半关闭的后端仍被索引的中间状态若多个后端关闭失败只返回第一个错误其余错误以warn级别记录并丢弃全部成功则返回Ok(())。clear()方法则只是shutdown_all()的别名供 alef trait-bridge 代码生成使用见 registry/reranker.rs#L136-L139。关于注册表的并发与线程安全注册表内部存储的是AHashMapString, Arcdyn RerankerBackend所有操作通过全局注册表的读写锁串行化。RerankerBackendtrait 要求实现对象Send Sync static可能被 Xberg 分发器并发调用如果底层模型本身不是线程安全的后端需要自行用MutexInner等内部序列化访问见 trait 文档。此外shutdown()可能与正在进行的rerank()并发执行实现必须容忍这一点见 trait 文档契约。典型使用场景测试隔离E2E 测试在每个用例前后清空注册表避免上一个用例注册的后端污染下一个用例。对应的 PHP 测试在 RerankerBackendManagementTest 中test_clear_reranker_backends直接断言调用不抛异常。运行时热重载重新加载一组重排模型前先清空旧后端再逐个注册新后端。进程收尾应用退出前清空注册表让每个后端获得一次shutdown()机会以释放资源如卸载模型、关闭连接池。测试与契约验证围绕清空操作仓库提供了多层验证PHP E2ERerankerBackendManagementTest.php 中的test_clear_reranker_backends调用XbergApi::clearRerankerBackends()并断言不抛异常同文件还有test_list_reranker_backends验证列出接口。Rust 单元测试registry/reranker.rs 覆盖了remove_backend_clears_entry、remove_missing_backend_is_noop、shutdown_all_clears_all_backends等关键路径。契约 fixtureclear_reranker_backends.json 声明该调用归属于reranker_backend_management类别断言类型为not_error即调用必须成功返回、不抛错并标注了 C 语言例外由于 C API 不暴露宿主语言回调式注册因此没有与之配对的 clear/unregister 调用该 fixture 对 C 语言不生成文档其余语言全部保留。配套 fixture注册侧见 register_reranker_backend_trait_bridge.json演示 trait bridge 注册测试后端列出侧见 list_reranker_backends.json注销侧见 unregister_reranker_backend.json。小结Xberg::clearRerankerBackends()是 PHP 绑定中管理进程内重排后端注册表的关键收口操作一条静态方法即可完成逐个 shutdown 整体清空并且具备对空表安全、对部分关闭失败仍保持注册表一致的 best-effort 语义。结合registerRerankerBackend、unregisterRerankerBackend、listRerankerBackends你可以在 PHP 应用中完整掌控重排后端的生命周期并借助 PHP 插件接口 接入自己的跨编码器模型。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐xberg C 插件管理实战使用 ClearRerankerBackends 清空重排序后端注册表xberg C 插件管理实战使用 ClearRerankerBackends 清空重排序后端注册表 导读 本文聚焦 xberg 在 C 侧提供的重排序Rer后端AI 应用NLPxberg Dart 绑定实战使用 clearRerankerBackends 清理重排器插件注册表xberg Dart 绑定实战使用 clearRerankerBackends 清理重排器插件注册表 xberg 的插件系统允许宿主语言在进程内注册自定义 r后端AI 应用NLP深入解析 xberg 的 Java 插件 API使用 clearRerankerBackends 清理重排序后端注册表深入解析 xberg 的 Java 插件 API使用 clearRerankerBackends 清理重排序后端注册表 xberg 是一个以 Rust 为核心后端AI 应用NLP上一篇3步快速上手 res-downloader:免抓包资源嗅探,把视频号视频存进硬盘下一篇ChatTTS-UI终极指南5分钟实现本地语音合成与API部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考