Semantic Kernel V1.1.1内存组件异常,求最新版SK内存使用方案
最新版Semantic Kernel(SK)内存正确使用方法
关键改动点
- SK 1.x及以上版本中,
Kernel.Memory已废弃,需通过依赖注入获取ISemanticTextMemory接口实例 - 嵌入服务与内存存储的注册方式更新,需使用标准DI扩展方法
SaveInformationAsync和SearchAsync的参数、返回类型有调整,需适配新API
完整可运行代码
using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Memory; using Microsoft.SemanticKernel.Embeddings; var builder = Kernel.CreateBuilder(); // 注册文本嵌入生成服务(以TinyLlama为例,需确保对应NuGet包已安装) builder.Services.AddSingleton<ITextEmbeddingGenerationService>(new TinyLlamaEmbeddingService()); // 注册临时内存存储(重启后数据丢失,生产环境可替换为持久化存储) builder.Services.AddSingleton<IMemoryStore, VolatileMemoryStore>(); // 注册语义文本内存服务 builder.Services.AddSingleton<ISemanticTextMemory>(sp => new DefaultSemanticTextMemory( sp.GetRequiredService<IMemoryStore>(), sp.GetRequiredService<ITextEmbeddingGenerationService>())); var kernel = builder.Build(); var memory = kernel.Services.GetRequiredService<ISemanticTextMemory>(); string collection = "facts"; // 保存信息到内存 await memory.SaveInformationAsync(collection, text: "Cats are mammals.", id: "1"); await memory.SaveInformationAsync(collection, text: "Elephants have large ears.", id: "2"); await memory.SaveInformationAsync(collection, text: "Semantic Kernel enables .NET AI development.", id: "3"); Console.WriteLine("✅ Facts stored in memory.\n"); Console.WriteLine("🔍 Searching for: 'large animals'"); // 搜索相关内容 var results = memory.SearchAsync(collection, query: "large animals", limit: 3, minRelevanceScore: 0.7f); await foreach (var result in results) { Console.WriteLine($"→ {result.Metadata.Text} (Score: {result.Relevance:F2})"); }
注意事项
- NuGet版本:必须安装最新稳定版
Microsoft.SemanticKernel及相关依赖,避免版本冲突 - 嵌入服务替换:若使用Azure OpenAI等云服务嵌入模型,替换为对应扩展方法(如
AddAzureOpenAITextEmbeddingGenerationService),并配置API密钥、Endpoint - 内存存储选型:生产环境可使用Azure Cognitive Search、PostgreSQL等持久化存储,需安装对应SK扩展包并调整注册代码
内容的提问来源于stack exchange,提问作者goshan2011
相关产品推荐
相关产品推荐

