藉助 .NET 開源庫 Sdcb.DashScope 調用阿里雲靈積通義千問 API

在昨天的博文中,我們通過 Semantic Kernel 調用了自己部署的通義千問開源大模型,但是自己部署通義千問對服務器的配置要求很高,即使使用搶佔式按量實例,每次使用時啓動服務器,使用完關閉服務器,也比較麻煩,而且越高級的大模型對服務器的配置越高。所以昨天的博文中使用了很低級的 Qwen-7B-Chat 模型,結果回答問題的效果很不理想,連博客園的網站域名都弄錯了。

於是改變路線,嘗試使用阿里雲提供的模型服務靈積(DashScope),但是靈積沒有提供兼容 OpenAI api 的 api,雖然提供了 SDK,但僅支持 Python 與 Java,望 SDK 心嘆的同時準備今天試試自己寫 C# 代碼調用靈積提供的通義千問 api。

在動手寫代碼之前,不抱任何希望地去 nuget 官網碰碰運氣,搜了搜 qwen,竟然驚喜地出現了一個搜索結果

有人在2個月之前就開始開發靈積的非官方 .NET SDK —— Sdcb.DashScope,而且1個月之前發佈了1.0版,真是及時雨,給作者點贊。

通過這 nuget 包的 Source repository 鏈接找到對應的 github 倉庫 https://github.com/sdcb/Sdcb.DashScope ,立即簽出代碼,其中有單元測試代碼,先跑一個測試體驗一下。

先到阿里雲靈積控制檯的“API-KEY管理”中創建 api key,然後在自己的電腦上通過 user-secrets 保存 api key

dotnet user-secrets init
dotnet user-secrets set DashScopeApiKey sk-xxxxxxxxxxx

選擇其中一個測試

[Fact]
public async Task OnlineChatTest()
{
    using DashScopeClient c = new(_apiKey);
    ResponseWrapper<ChatOutput, ChatTokenUsage> result = await c.TextGeneration.Chat("qwen-turbo", [ChatMessage.FromUser("今天長沙天氣如何?")], new ChatParameters
    {
        EnableSearch = true
    });
    _console.WriteLine(result.ToString());
}

跑一下

dotnet test --filter OnlineChatTest

輸出結果如下

ResponseWrapper { RequestId = 89e760f7-dc21-9461-8144-68629fa1ad00, Output = ChatOutput { Text = 今天是2024年2月11日,星期日,長沙的天氣情況爲晴朗。具體來說,溼度爲75%,最低氣溫爲3.0攝氏度,最高氣溫可達18.0攝氏度。風向以東南風爲主,白天氣溫適宜,風力較小,僅爲1級。夜間依然保持晴朗,風向轉爲東南風,風力同樣維持在1級。建議外出時注意保暖,因爲雖然白天陽光明媚,但早晚溫差較大。空氣質量評分爲良,空氣質量指數爲97,相對較好。, FinishReason = stop }, Usage = ChatTokenUsage { OutputTokens = 126, InputTokens = 5 } }

接着,自己寫個 .NET 控制檯程序體驗一下

準備控制檯項目

dotnet new console -n dashscop-sample
cd  dashscop-sample
dotnet add package Sdcb.DashScope
dotnet user-secrets init
dotnet user-secrets set DashScopeApiKey sk-xxxxxxxxxxx

添加 FrameworkReference

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App"></FrameworkReference>
</ItemGroup>

在 Progam.cs 寫實現代碼,使用 qwen-max 通義千問千億級別大規模回答一個簡單的問題博客園是什麼網站,看看效果

using Microsoft.Extensions.Configuration;
using Sdcb.DashScope;
using Sdcb.DashScope.TextGeneration;

IConfiguration config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();

string apiKey = config.GetValue<string>("DashScopeApiKey") ?? "";

using DashScopeClient client = new(apiKey);

var result = await client.TextGeneration.Chat(
    "qwen-max",
    [ChatMessage.FromUser("博客園是什麼網站")]);

Console.WriteLine(result.Output.Text);

public partial class Program
{ }

注:Sdcb.DashScope 貼心地提供了 ChatMessage.FromUser 方法

運行代碼看看千億級通義千問的回答(運行3次)

第1次的回答:

博客園是一個面向軟件開發者的技術寫作與分享平臺,成立於2004年。它主要爲程序員提供一個記錄和分享技術知識、經驗和見解的空間,內容涵蓋編程語言、軟件架構、算法、數據庫、操作系統等多個領域。博客園在中國開發者社區中具有較高的知名度和影響力,吸引了大量IT從業人員和技術愛好者在此交流和學習。

第2次的回答:

博客園(www.cnblogs.com)是一個面向軟件開發者的中文技術社區網站,創建於2004年。該網站主要提供博客空間服務,用戶以軟件開發者、IT從業人員以及對相關技術感興趣的人員爲主,他們在這裏發表、分享和交流編程技術、架構設計、軟件開發心得等各種專業技術文章。博客園在中國IT技術圈內具有較高的知名度和影響力。

第3次的回答:

博客園是一個專注於技術分享的中文博客平臺,創建於2004年。該網站主要面向軟件開發人員、IT專業人士以及對技術和知識分享感興趣的人羣,提供了一個發表和閱讀原創技術文章的空間。用戶可以在博客園上撰寫和發佈有關編程、系統架構、數據庫、人工智能、雲計算等各種IT技術領域的文章和心得,並與其他用戶進行交流和討論。

在博客園,許多知名的技術專家和行業大牛都有自己的博客空間,通過分享高質量的技術內容,博客園在IT技術領域內具有較高的影響力和知名度。

qwen-max 的回答果然比 Qwen-7B-Chat 強很多。

感謝 ZHOU Jie 給 .NET 社區帶來的 Sdcb.DashScope

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章