Make DashScope work with Semantic Kernel and Kernel Memory.
Add the NuGet package to your project.
dotnet add package Cnblogs.SemanticKernel.Connectors.DashScope
using Microsoft.SemanticKernel; var builder = Kernel.CreateBuilder(); builder.Services.AddDashScopeChatCompletion("your-api-key", "qwen-max"); var kernel = builder.Build(); var prompt = "<message role=\"user\">Tell me about the Cnblogs</message>"; var response = await kernel.InvokePromptAsync(prompt); Console.WriteLine(response);
Install Nuget package Cnblogs.KernelMemory.AI.DashScope
Install Nuget package Microsoft.KernelMemory.Core
Install Nuget package Microsoft.KernelMemory.SemanticKernelPlugin
appsettings.json
{
"dashScope": {
"apiKey": "your-key",
"chatCompletionModelId": "qwen-max",
"textEmbeddingModelId": "text-embedding-v3"
}
}Program.cs
// Kernel Memory stuff var memory = new KernelMemoryBuilder(builder.Services).WithDashScope(builder.Configuration).Build(); builder.Services.AddSingleton(memory); // SK stuff builder.Services.AddDashScopeChatCompletion(builder.Configuration); builder.Services.AddSingleton( sp => { var plugins = new KernelPluginCollection(); plugins.AddFromObject( new MemoryPlugin(sp.GetRequiredService<IKernelMemory>(), waitForIngestionToComplete: true), "memory"); return new Kernel(sp, plugins); });
Services
public class YourService(Kernel kernel, IKernelMemory memory) { public async Task<string> GetCompletionAsync(string prompt) { var chatResult = await kernel.InvokePromptAsync(prompt); return chatResult.ToString(); } public async Task ImportDocumentAsync(string filePath, string documentId) { await memory.ImportDocumentAsync(filePath, documentId); } public async Task<string> AskMemoryAsync(string question) { // use memory.ask to query kernel memory var skPrompt = """ Question to Kernel Memory: {{$input}} Kernel Memory Answer: {{memory.ask $input}} If the answer is empty say 'I don't know' otherwise reply with a preview of the answer, truncated to 15 words. """; // you can bundle created functions into a singleton service to reuse them var myFunction = kernel.CreateFunctionFromPrompt(skPrompt); var result = await myFunction.InvokeAsync(question); return result.ToString(); } }