alibaba/spring-ai-alibaba · warning
Provider不存在
Error message
Provider不存在: {} What it means
convertToModelConfigDO fetches the provider's detail (including credentials) via providerManager.getProviderDetail; when the provider is unknown it logs this warning and returns null instead of a ModelConfigDO. It means the model entity references a provider that is not registered in the provider manager.
Solutions
- Register the provider (add its configuration/credential) so providerManager.getProviderDetail returns non-null
- Correct the ModelEntity.provider value to match an existing registered provider name
- Check provider configuration loading (Nacos/config source) at startup — the provider list may not have been refreshed
- Handle the null return from these bridge methods rather than assuming non-null
Example fix
// before
ProviderConfigInfo detail = providerManager.getProviderDetail(entity.getProvider(), false);
use(detail.getCredential());
// after
ProviderConfigInfo detail = providerManager.getProviderDetail(entity.getProvider(), false);
if (detail == null) { throw new IllegalStateException("Provider not registered: " + entity.getProvider()); } Defensive patterns
Strategy: validation
Validate before calling
ProviderConfigInfo d = providerManager.getProviderDetail(provider, false); if (d == null) { registerProvider(provider); } Try / catch
ModelConfigDO c = bridge.findById(id); if (c == null) { throw new IllegalStateException("Provider missing: " + provider); } Prevention
- Register all providers referenced by model entities
- Audit model entities for orphaned provider names
- Verify provider config sources load at startup
When it happens
Trigger: findById or findByProviderAndModelId resolves a ModelEntity whose getProvider() value has no matching provider detail in providerManager (called with includeCredential=false).
Common situations: Provider was renamed or deleted after models were created under it; typo in provider name; provider plugin/config not loaded (e.g. Nacos config missing for that provider); using a custom provider never registered.
Understand the failure class
Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.
Related errors
- 403
- AgentScope routing flow requires agentScopeModel in config…
- 模型缺少 apiKey
- 序列化 defaultParameters 失败
- 模型配置解析失败:
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/cb5ddcdff8de7e6c.
Report an issue: GitHub.
Appendix: source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ModelConfigBridgeServiceImpl.java:217
} catch (Exception e) {
log.error("根据provider和modelId查找模型配置失败: provider={}, modelId={}", provider, modelId, e);
return null;
}
}
/**
* 将ModelEntity转换为ModelConfigDO
*/
private ModelConfigDO convertToModelConfigDO(ModelEntity modelEntity) {
if (modelEntity == null) {
return null;
}
try {
// 获取Provider的credential(包含apiKey和endpoint)
ProviderConfigInfo providerDetail = providerManager.getProviderDetail(modelEntity.getProvider(), false);
if (providerDetail == null) {
log.warn("Provider不存在: {}", modelEntity.getProvider());
return null;
}
ModelCredential credential = providerDetail.getCredential();
if (credential == null) {
log.warn("Provider的credential不存在: {}", modelEntity.getProvider());
return null;
}
// 解密apiKey
String apiKey = credential.getApiKey();
if (StringUtils.isNotBlank(apiKey)) {
try {
apiKey = RSACryptUtils.decrypt(apiKey);
} catch (Exception e) {
log.warn("解密apiKey失败,使用原始值: {}", e.getMessage());
}
}View on GitHub (pinned to f82da0b50f)