Semantic Kernel 1.43.0:注册AzureOpenAI嵌入服务后无法获取指定接口
解决Semantic Kernel 1.43.0中ITextEmbeddingGenerationService未注册的问题
问题根源
你使用的AddAzureOpenAITextEmbeddingGeneration重载包含第一个参数"test-service",这会将嵌入服务以命名(键控)服务的形式注册,而非默认的无名称服务。此时直接调用_kernel.GetRequiredService<ITextEmbeddingGenerationService>()会尝试获取无名称的默认服务实例,自然会提示未注册。
解决方案
根据你的需求选择以下任意一种方式:
方案1:注册无名称的默认服务
如果不需要区分多个嵌入服务,使用不带名称参数的重载注册:
services.AddAzureOpenAITextEmbeddingGeneration("https://test.com", "test-key", "text-embedding-ada-002");
注册完成后,原有的var embeddingService = _kernel.GetRequiredService<ITextEmbeddingGenerationService>()即可正常获取服务。
方案2:获取命名的键控服务
如果确实需要保留命名服务,获取时必须指定对应的服务名称:
// 方式一:通过Kernel获取命名服务 var embeddingService = _kernel.GetService<ITextEmbeddingGenerationService>("test-service") ?? throw new InvalidOperationException("指定名称的嵌入服务未找到"); // 方式二:直接从服务提供者获取键控服务 var embeddingService = _kernel.Services.GetRequiredKeyedService<ITextEmbeddingGenerationService>("test-service");
内容的提问来源于stack exchange,提问作者Rizan Zaky
相关产品推荐
相关产品推荐

