在 Go 中列出 Xberg 已注册的 Embedding 后端:ListEmbeddingBackends 使用与实现解析 后端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 的 Go 语言绑定packages/go讲解如何通过xberg.ListEmbeddingBackends()一键枚举当前进程中所有已注册的嵌入Embedding后端。该能力是 Xberg 插件体系的核心管理入口之一被xberg-cli、REST API/MCP 端点以及各语言绑定共同复用。读完本文你将掌握在 Go 程序中获取后端注册表快照的正确写法、其底层从 Go → C FFI → Rust 注册表的完整调用链以及后端注册/注销/清空/列举的完整生命周期并了解如何通过插件扩展自定义嵌入后端。关联文档与实战场景本文对应的示例文档位于 docs-site/src/snippets-generated/go/registry/list_embedding_backends.md属于 Xberg 文档站中按语言Go与主题分类registry 注册表管理自动生成的代码片段。同目录下还有list_ocr_backends.md、list_post_processors.md、list_renderers.md、list_validators.md等同类片段共同构成运行期注册表可观测性这一主题。ListEmbeddingBackends的典型实战场景包括运行时自检在应用启动后确认内置或插件注册的嵌入后端是否就绪插件管理面板/CLI向用户展示当前可用的后端名称列表后端切换前的探测在调用Embed生成向量前先确认目标后端已注册避免路由到不存在的后端时报错。核心用法一行列出全部后端关联文档给出了可直接运行的完整 Go 程序原样复现如下package main import ( fmt xberg github.com/xberg-io/xberg/packages/go ) func main() { result, err : xberg.ListEmbeddingBackends() if err ! nil { panic(err) } fmt.Printf(%v\n, result) }要点说明导入路径github.com/xberg-io/xberg/packages/go即仓库中 packages/go 目录对应的 Go 包返回值([]string, error)——按注册顺序返回所有已注册后端的名称字符串切片错误处理示例以panic(err)兜底生产代码建议将错误上抛或记录日志输出fmt.Printf(%v\n, result)直接打印切片内容例如[onnx static my-embedder]。该函数没有入参、无副作用side_effect: safe因此可以安全地在任意时机反复调用。底层实现从 Go 绑定到 Rust 核心ListEmbeddingBackends在 Go 包中的定义位于 packages/go/binding.go其实现分三步走锁定 OS 线程runtime.LockOSThread()确保调用期间线程不被调度器迁移保证 C 调用上下文稳定调用 C FFI 导出C.xberg_list_embedding_backends()返回一个 C 字符串指针其中是 JSON 编码的字符串数组反序列化通过json.Unmarshal把 JSON 还原为[]string并借助C.xberg_free_string(ptr)释放 C 侧内存。这一模式与包内其他注册表查询函数如ListDocumentExtractors、ListOcrBackendCapabilities完全一致体现了绑定层的统一约定所有跨语言数据交换均以 JSON 字符串为载体通过 C ABI 传递。在 C ABI 之后真正持有数据的 Rust 核心位于 crates/xberg/src/plugins/embedding.rs/// List the names of all registered embedding backends. /// /// Used by xberg-cli, the api/mcp endpoints, and generated language /// bindings. pub fn list_embedding_backends() - ResultVecString { use crate::plugins::registry::get_embedding_backend_registry; let registry get_embedding_backend_registry(); let registry registry.read(); Ok(registry.list()) }可以看到它从全局注册表get_embedding_backend_registry()获取读锁后直接调用registry.list()。由于列表读取不修改任何状态采用读写锁的读路径天然支持并发安全的只读查询。Rust 侧注释明确说明该函数被 xberg-cli、api/mcp 端点以及生成的语言绑定使用这正解释了为什么ListEmbeddingBackends在绑定层被反复调用。后端注册表从注册到列举的完整生命周期ListEmbeddingBackends只是注册表管理 API 的一角。以 crates/xberg/src/plugins/embedding.rs 为参考完整的生命周期由四个全局函数共同支撑函数行为说明register_embedding_backend(Arcdyn EmbeddingBackend)注册一个后端若同名后端已存在则返回Plugin错误会先调用后端initialize()unregister_embedding_backend(name)按名称注销调用后端shutdown()未注册时是 no-opclear_embedding_backends()清空全部后端逐个调用shutdown()后清空注册表首个 shutdown 错误会中断后续处理list_embedding_backends()列举全部名称只读返回VecString这些函数同样通过 C ABI 导出到 GoGo 侧对应RegisterEmbeddingBackend、UnregisterEmbeddingBackend、ClearEmbeddingBackends、ListEmbeddingBackends等绑定见 packages/go/binding.go。注册表以全局单例存在进程内所有语言绑定、CLI 与 API 端点共享同一份状态这正是列出的是当前进程全部注册后端这一语义的来源。内置后端与自定义插件扩展从源码结构看嵌入后端分为两类内置后端由 crates/xberg/src/embeddings/mod.rs 中的EmbeddingBackend枚举定义当前可见Onnx与Static两种后端类型分别对应 ONNX 运行时推理与静态如固定/测试用途向量生成插件后端实现crate::plugins::{EmbeddingBackend, Plugin}trait 后通过register_embedding_backend(Arc::new(MyEmbedder))注册例如接入自有的 sentence-transformers 服务或微调过的 ONNX 模型。trait 要求实现name()、version()、initialize()、shutdown()、dimensions()与embed(texts)等方法见 crates/xberg/src/plugins/embedding.rs 附近的 trait 定义与文件头部的注册示例注释。因此ListEmbeddingBackends()的输出是内置后端 插件注册后端的并集。若某个后端只在插件路径中注册它同样会出现在 Go 侧列举结果中。测试验证e2e 中的列表断言Xberg 的跨语言端到端测试同样覆盖了这一调用。在 e2e/go/embedding_backend_management_test.go 中func Test_EmbeddingBackendsList(t *testing.T) { // List all registered embedding backends _, err : xberg.ListEmbeddingBackends() if err ! nil { t.Fatalf(call failed: %v, err) } }Test_EmbeddingBackendsList直接调用ListEmbeddingBackends()并断言不产生错误同文件的Test_EmbeddingBackendsClear则先执行ClearEmbeddingBackends()验证清空路径。Rust 侧对应的单测见 crates/xberg/src/plugins/embedding.rs 的register_list_unregister_roundtrip与register_list_clear_list_roundtrip进一步验证了注册 → 列举可见 → 注销/清空后列表为空的完整闭环可作为你自行编写 Go 侧回归测试的行为基准。扩展阅读与相关资源与本文同主题的其他语言片段docs-site/src/snippets-generated/go/registry/目录下的list_ocr_backends.md、list_post_processors.md、list_renderers.md、list_validators.md注册表相关 e2e 断言文件e2e/go/embedding_backend_management_test.go插件体系源码入口crates/xberg/src/plugins/embedding.rs 与 crates/xberg/src/plugins/mod.rs嵌入能力核心实现crates/xberg/src/embeddings/mod.rs。掌握ListEmbeddingBackends之后你便拥有了观察 Xberg 嵌入能力注册状态的第一块拼图接下来可结合list_ocr_backends、list_validators等兄弟接口构建完整的后端可观测面板。赞分享后端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 Dart 绑定使用 listEmbeddingBackends 查询已注册的 Embedding 插件后端xberg Dart 绑定使用 listEmbeddingBackends 查询已注册的 Embedding 插件后端 本文围绕 xberg 项目 Dart/后端AI 应用NLP在 xberg C 绑定中列出 Embedding 后端ListEmbeddingBackends 用法与调用链解析在 xberg C 绑定中列出 Embedding 后端ListEmbeddingBackends 用法与调用链解析 本文以 xbergPolyglot 文后端AI 应用NLP在 Elixir 中列出已注册 Tokenizer 后端xberg 插件注册表管理实战在 Elixir 中列出已注册 Tokenizer 后端xberg 插件注册表管理实战 本篇指南围绕 xberg 的 Elixir 绑定Rustler NI后端AI 应用NLP上一篇NetArchTest常见问题解答解决架构测试中的疑难杂症下一篇从卡顿到秒级分析redis-pyRedisTimeSeries构建实时监控系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考