提供方¶
ModelProviderHandle 将模型管理操作限定到一个 Workspace 和一种能力类型。它不会创建 Provider;它提供 Backend 列表、Backend 创建、地址探测和 Router 入口。
选择 Provider 类型¶
llm = workspace.llm_provider()
embedding = workspace.embedding_provider()
parser = workspace.parser_provider()
print(llm.kind) # llm
llm := workspace.LLMProvider()
embedding := workspace.EmbeddingProvider()
parser := workspace.ParserProvider()
fmt.Println(llm.Kind()) // llm
三种入口返回相同类型的 Handle,但支持的配置并不完全相同:
能力 |
Backend 的主要配置 |
地址探测 |
|---|---|---|
LLM |
模型列表、地址、API Key、超时、Provider 类型、推理控制协议 |
支持 |
Embedding |
模型列表、地址、API Key、超时、Provider 类型 |
支持 |
Parser |
支持的 MIME 类型、地址、API Key、超时、Provider 类型 |
|
表中只列出 SDK 已公开的选项。具体协议值、模型名和 MIME 类型应来自目标服务或当前产品界面,SDK 不负责推断。
查看和绑定 Backend¶
backends() / Backends() 返回该 Provider 类型下的完整 Backend 列表。列表结果中的 ID 是后续更新、Endpoint 管理和删除操作的可靠输入。
result = llm.backends()
for backend in result.backends:
print(backend.id, backend.name, list(backend.models))
# 绑定一个已由列表、创建结果或用户输入确认的 ID
backend = llm.backend(str(result.backends[0].id))
current = backend.info()
result, err := llm.Backends(ctx)
if err != nil {
return err
}
for _, backend := range result.GetBackends() {
fmt.Println(backend.GetId(), backend.GetName(), backend.GetModels())
}
backend, err := llm.Backend(strconv.FormatInt(result.GetBackends()[0].GetId(), 10))
if err != nil {
return err
}
current, err := backend.Info(ctx)
backend(id) / Backend(id) 只构造 Handle,不会验证资源存在。不要编造 ID,也不要把列表下标当成 Backend ID。
创建前探测地址¶
LLM 和 Embedding Provider 可以在创建 Backend 前探测远端服务公开的模型列表。API Key 属于敏感信息,应从密钥管理系统或环境变量读取,不要写进日志、示例输出或仓库。
import os
import moi_product_sdk as sdk
models = llm.probe_address(
model_endpoint,
sdk.with_provider_backend_api_key(os.environ["MODEL_API_KEY"]),
)
print(list(models.models))
models, err := llm.ProbeAddress(
ctx,
modelEndpoint,
sdk.WithProviderBackendAPIKey(os.Getenv("MODEL_API_KEY")),
)
if err != nil {
return err
}
fmt.Println(models.GetModels())
探测只证明远端地址在当时返回了模型列表,不会创建资源,也不能替代创建后的读取和可用性检查。Parser Provider 调用该方法会返回不支持操作的错误。
创建 Backend¶
创建方法返回 ProviderBackendHandle 和创建后的 ProviderBackend。LLM 与 Embedding 创建时必须传模型列表;Parser 使用支持的 MIME 类型。
backend, created = llm.create_backend(
backend_name,
sdk.with_provider_backend_address(model_endpoint),
sdk.with_provider_backend_api_key(os.environ["MODEL_API_KEY"]),
sdk.with_provider_backend_models(*selected_models),
sdk.with_provider_backend_timeout_seconds(60),
)
print(backend.id, created.name)
backend, created, err := llm.CreateBackend(
ctx,
backendName,
sdk.WithProviderBackendAddress(modelEndpoint),
sdk.WithProviderBackendAPIKey(os.Getenv("MODEL_API_KEY")),
sdk.WithProviderBackendModels(selectedModels...),
sdk.WithProviderBackendTimeoutSeconds(60),
)
if err != nil {
return err
}
fmt.Println(backend.ID(), created.GetName())
Python 和 Go 还提供 Workspace 级的 setup_llm_backend / SetupLLMBackend,要求同时给出名称、地址和模型列表,并返回 后端 的组合结果。需要逐步控制创建过程时,使用 Provider Handle 更容易检查每一步。
错误和权限¶
空名称、空 ID、空地址或缺少必需模型列表会在 SDK 或服务端被拒绝。
地址探测和 Backend 探测会访问外部模型服务;应设置调用超时,并避免无界重试。
创建、修改和删除属于 Workspace 模型操作,调用者必须具备对应权限。
service()/Service()是与路由对齐的底层入口。常规代码优先使用 Handle;只有已确认 Product SDK 没有覆盖某项操作时才使用底层服务。