English | 简体中文
An unofficial DashScope SDK maintained by Cnblogs.
Warning: this project is under active development, Breaking Changes may introduced without notice or major version change. Make sure you read the Release Notes before upgrading.
Install Cnblogs.DashScope.AI Package
var client = new DashScopeClient("your-api-key").AsChatClient("qwen-max"); var completion = await client.CompleteAsync("hello"); Console.WriteLine(completion)Install Cnblogs.DashScope.Sdk package.
var client = new DashScopeClient("your-api-key"); var completion = await client.GetQWenCompletionAsync(QWenLlm.QWenMax, prompt); Console.WriteLine(completion.Output.Text);Install the Cnblogs.DashScope.AspNetCore package.
Program.cs
builder.AddDashScopeClient(builder.Configuration);appsettings.json
{ "DashScope": { "ApiKey": "your-api-key" } }Usage
public class YourService(IDashScopeClient client) { public async Task<string> CompletePromptAsync(string prompt) { var completion = await client.GetQWenCompletionAsync(QWenLlm.QWenMax, prompt); return completion.Output.Text; } }- Text Embedding API -
dashScopeClient.GetTextEmbeddingsAsync() - Text Generation API(qwen-turbo, qwen-max, etc.) -
dashScopeClient.GetQwenCompletionAsync()anddashScopeClient.GetQWenCompletionStreamAsync() - BaiChuan Models - Use
dashScopeClient.GetBaiChuanTextCompletionAsync() - LLaMa2 Models -
dashScopeClient.GetLlama2TextCompletionAsync() - Multimodal Generation API(qwen-vl-max, etc.) -
dashScopeClient.GetQWenMultimodalCompletionAsync()anddashScopeClient.GetQWenMultimodalCompletionStreamAsync() - Wanx Models(Image generation, background generation, etc)
- Image Synthesis -
CreateWanxImageSynthesisTaskAsync()andGetWanxImageSynthesisTaskAsync() - Image Generation -
CreateWanxImageGenerationTaskAsync()andGetWanxImageGenerationTaskAsync() - Background Image Generation -
CreateWanxBackgroundGenerationTaskAsync()andGetWanxBackgroundGenerationTaskAsync()
- Image Synthesis -
- File API that used by Qwen-Long -
dashScopeClient.UploadFileAsync()anddashScopeClient.DeleteFileAsync
Visit tests for more usage of each api.
var prompt = "hello" var completion = await client.GetQWenCompletionAsync(QWenLlm.QWenMax, prompt); Console.WriteLine(completion.Output.Text);var history = new List<ChatMessage> { ChatMessage.User("Please remember this number, 42"), ChatMessage.Assistant("I have remembered this number."), ChatMessage.User("What was the number I metioned before?") } var parameters = new TextGenerationParameters() { ResultFormat = ResultFormats.Message }; var completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenMax, history, parameters); Console.WriteLine(completion.Output.Choices[0].Message.Content); // The number is 42Creates a function with parameters
string GetCurrentWeather(GetCurrentWeatherParameters parameters) { // actual implementation should be different. return "Sunny, 14" + parameters.Unit switch { TemperatureUnit.Celsius => "℃", TemperatureUnit.Fahrenheit => "℉" }; } public record GetCurrentWeatherParameters( [property: Required] [property: Description("The city and state, e.g. San Francisco, CA")] string Location, [property: JsonConverter(typeof(EnumStringConverter<TemperatureUnit>))] TemperatureUnit Unit = TemperatureUnit.Celsius); public enum TemperatureUnit { Celsius, Fahrenheit }Append tool information to chat messages.
var tools = new List<ToolDefinition>() { new( ToolTypes.Function, new FunctionDefinition( nameof(GetCurrentWeather), "Get the weather abount given location", new JsonSchemaBuilder().FromType<GetCurrentWeatherParameters>().Build())) }; var history = new List<ChatMessage> { ChatMessage.User("What is the weather today in C.A?") }; var parameters = new TextGenerationParamters() { ResultFormat = ResultFormats.Message, Tools = tools }; // send question with available tools. var completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenMax, history, parameters); history.Add(completion.Output.Choice[0].Message); // model responding with tool calls. Console.WriteLine(completion.Output.Choice[0].Message.ToolCalls[0].Function.Name); // GetCurrentWeather // calling tool that model requests and append result into history. var result = GetCurrentWeather(JsonSerializer.Deserialize<GetCurrentWeatherParameters>(completion.Output.Choice[0].Message.ToolCalls[0].Function.Arguments)); history.Add(ChatMessage.Tool(result, nameof(GetCurrentWeather))); // get back answers. completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenMax, history, parameters); Console.WriteLine(completion.Output.Choice[0].Message.Content);Append the tool calling result with tool role, then model will generate answers based on tool calling result.
Upload file first.
var file = new FileInfo("test.txt"); var uploadedFile = await dashScopeClient.UploadFileAsync(file.OpenRead(), file.Name);Using uploaded file id in messages.
var history = new List<ChatMessage> { ChatMessage.File(uploadedFile.Id), // use array for multiple files, e.g. [file1.Id, file2.Id] ChatMessage.User("Summarize the content of file.") } var parameters = new TextGenerationParameters() { ResultFormat = ResultFormats.Message }; var completion = await client.GetQWenChatCompletionAsync(QWenLlm.QWenLong, history, parameters); Console.WriteLine(completion.Output.Choices[0].Message.Content);Delete file if needed
var deletionResult = await dashScopeClient.DeleteFileAsync(uploadedFile.Id);